mcp.test.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { describe, expect, test } from "bun:test"
  2. import { Schema } from "effect"
  3. import { Mcp } from "../src/mcp.js"
  4. describe("Mcp resources", () => {
  5. test("decodes resource catalogs and omits absent metadata", () => {
  6. const value = Schema.decodeUnknownSync(Mcp.ResourceCatalog)({
  7. resources: [{ server: "docs", name: "Readme", uri: "docs://readme" }],
  8. templates: [{ server: "docs", name: "File", uriTemplate: "docs://{path}" }],
  9. })
  10. expect(Schema.encodeSync(Mcp.ResourceCatalog)(value)).toEqual({
  11. resources: [{ server: "docs", name: "Readme", uri: "docs://readme" }],
  12. templates: [{ server: "docs", name: "File", uriTemplate: "docs://{path}" }],
  13. })
  14. })
  15. test("preserves text and base64 blob contents", () => {
  16. expect(
  17. Schema.decodeUnknownSync(Mcp.ResourceContent)({
  18. server: "docs",
  19. uri: "docs://readme",
  20. contents: [
  21. { type: "text", uri: "docs://readme", text: "hello", mimeType: "text/plain" },
  22. { type: "blob", uri: "docs://logo", blob: "aGVsbG8=", mimeType: "image/png" },
  23. ],
  24. }),
  25. ).toEqual({
  26. server: "docs",
  27. uri: "docs://readme",
  28. contents: [
  29. { type: "text", uri: "docs://readme", text: "hello", mimeType: "text/plain" },
  30. { type: "blob", uri: "docs://logo", blob: "aGVsbG8=", mimeType: "image/png" },
  31. ],
  32. })
  33. })
  34. })