{"_id":"mcp-registry-spec-sdk","_rev":"7-ecc10debd4b84887cb703cd1f2a5a815","name":"mcp-registry-spec-sdk","dist-tags":{"latest":"0.5.0"},"versions":{"0.1.0":{"name":"mcp-registry-spec-sdk","version":"0.1.0","keywords":["mcp","modelcontextprotocol","registry","sdk","ai","anthropic"],"author":{"name":"Cameron Pak","email":"cam@faith.tools"},"license":"MIT","_id":"mcp-registry-spec-sdk@0.1.0","maintainers":[{"name":"cameronapak","email":"cameronandrewpak@gmail.com"}],"homepage":"https://www.val.town/x/cameronpak/mcp-registry-sdk","dist":{"shasum":"2c6e74b4dfb9d4eb5e7c73e8967fb860e592b5c3","tarball":"https://registry.npmjs.org/mcp-registry-spec-sdk/-/mcp-registry-spec-sdk-0.1.0.tgz","fileCount":6,"integrity":"sha512-JyP50JZP8R/wVwcS565wOetRpqkSAEovKuwIBANhLGHO25j145E2TkINnK09dGTygLYMfpUy43Irrgay2CQa0Q==","signatures":[{"sig":"MEYCIQC/ihMr8gOCS7JbkfHUZEf28BJe2QrYaUXi8Sk7wqCTqAIhANKDr9DH5v0ZN05IaSbrjr+xoe6EZQORhS02V6F9EZ/Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":241234},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsup index.ts --dts --format esm --sourcemap --clean --tsconfig tsconfig.json","clean":"rm -rf dist","prepare":"npm run build"},"_npmUser":{"name":"cameronapak","email":"cameronandrewpak@gmail.com"},"repository":{"url":"https://www.val.town/x/cameronpak/mcp-registry-sdk","type":"git"},"_npmVersion":"10.9.3","description":"A minimal, typed client for the official Model Context Protocol (MCP) Registry API.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.23.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry-spec-sdk_0.1.0_1759234600936_0.27606605630367964","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"mcp-registry-spec-sdk","version":"0.1.1","keywords":["mcp","modelcontextprotocol","registry","sdk","ai","anthropic"],"author":{"name":"Cameron Pak","email":"cam@faith.tools"},"license":"MIT","_id":"mcp-registry-spec-sdk@0.1.1","maintainers":[{"name":"cameronapak","email":"cameronandrewpak@gmail.com"}],"homepage":"https://www.val.town/x/cameronpak/mcp-registry-spec-sdk","dist":{"shasum":"49a518054b30e437afcab30225e9def1ea9a1508","tarball":"https://registry.npmjs.org/mcp-registry-spec-sdk/-/mcp-registry-spec-sdk-0.1.1.tgz","fileCount":6,"integrity":"sha512-lctcRXP7YwaBnwoJkhH/G+Zc7WrnfSOIBrakM6HaSGn533uCuIB1oISbrEjZtqZoGkAPCKDQNQTfir/z+xYSUA==","signatures":[{"sig":"MEYCIQCzzVpXATk0lz9KKCLwG/BJ/RqR6wIvi9MBFvqxiQQGRAIhALBJKTxi1XP07l+a8AfPA7tI9/Ola4XXcRqHpKOMyvv8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":241244},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsup index.ts --dts --format esm --sourcemap --clean --tsconfig tsconfig.json","clean":"rm -rf dist","prepare":"npm run build"},"_npmUser":{"name":"cameronapak","email":"cameronandrewpak@gmail.com"},"repository":{"url":"https://www.val.town/x/cameronpak/mcp-registry-spec-sdk","type":"git"},"_npmVersion":"10.9.3","description":"A minimal, typed client for the official Model Context Protocol (MCP) Registry API.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.23.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry-spec-sdk_0.1.1_1759234752748_0.5589994315018496","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"mcp-registry-spec-sdk","version":"0.1.2","keywords":["mcp","modelcontextprotocol","registry","sdk","ai","anthropic"],"author":{"name":"Cameron Pak","email":"cam@faith.tools"},"license":"MIT","_id":"mcp-registry-spec-sdk@0.1.2","maintainers":[{"name":"cameronapak","email":"cameronandrewpak@gmail.com"}],"homepage":"https://www.val.town/x/cameronpak/mcp-registry-spec-sdk","dist":{"shasum":"862948e5812d6e17ab6ddcbdf23d65b1f9478507","tarball":"https://registry.npmjs.org/mcp-registry-spec-sdk/-/mcp-registry-spec-sdk-0.1.2.tgz","fileCount":6,"integrity":"sha512-liTb7RMsRAKfBxpEhajJvouf1ih8GbJZSur07xaP2Tg6rgcVWPj2UULyxdHrZbpN0vpWwcNvoQpRToAX0fgu+Q==","signatures":[{"sig":"MEQCIBWYQc3vQu48WhMSumz08z9DremCHImKeIXxaYOgTgf9AiA8VTmYlk3K6TGnvIx2MowP5b0hoTYbjdKpEugH+mDHtw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":271754},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsup index.ts --dts --format esm --sourcemap --clean --tsconfig tsconfig.json","clean":"rm -rf dist","prepare":"npm run build"},"_npmUser":{"name":"cameronapak","email":"cameronandrewpak@gmail.com"},"repository":{"url":"https://www.val.town/x/cameronpak/mcp-registry-spec-sdk","type":"git"},"_npmVersion":"10.9.3","description":"A minimal, typed client for the official Model Context Protocol (MCP) Registry API.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.23.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry-spec-sdk_0.1.2_1759543677794_0.9107576100382075","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"mcp-registry-spec-sdk","version":"0.2.0","keywords":["mcp","modelcontextprotocol","registry","sdk","ai","anthropic"],"author":{"name":"Cameron Pak","email":"cam@faith.tools"},"license":"MIT","_id":"mcp-registry-spec-sdk@0.2.0","maintainers":[{"name":"cameronapak","email":"cameronandrewpak@gmail.com"}],"homepage":"https://www.val.town/x/cameronpak/mcp-registry-spec-sdk","dist":{"shasum":"85b4bbd496f3b93843d3c4e94cc3978c949899f4","tarball":"https://registry.npmjs.org/mcp-registry-spec-sdk/-/mcp-registry-spec-sdk-0.2.0.tgz","fileCount":6,"integrity":"sha512-VNYn7B9Gg0un3YNWXJvcVbc2YGF9Hxvx90G5VhU24yVFFGKDec2xrTRIFeyog7y77xHJLRUZxszxa2V/QyU5gw==","signatures":[{"sig":"MEUCIQDV3Y4aHWRNEVILnZ5VRiIMEQBRZC+Z97JiwVbybbWjxAIgO5/MbRmLffDXiLA/gmmD+MKgKEgrMi1306JbK6gKyK4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":308549},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"a83c37d58029d4885b8558e190813fd0b1517718","scripts":{"build":"tsup index.ts --dts --format esm --sourcemap --clean --tsconfig tsconfig.json","clean":"rm -rf dist","prepare":"npm run build"},"_npmUser":{"name":"cameronapak","email":"cameronandrewpak@gmail.com"},"repository":{"url":"https://www.val.town/x/cameronpak/mcp-registry-spec-sdk","type":"git"},"_npmVersion":"10.9.3","description":"A minimal, typed client for the official Model Context Protocol (MCP) Registry API.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.23.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry-spec-sdk_0.2.0_1759586233247_0.9785361131848218","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"mcp-registry-spec-sdk","version":"0.3.0","keywords":["mcp","modelcontextprotocol","registry","sdk","ai","anthropic"],"author":{"name":"Cameron Pak","email":"cam@faith.tools"},"license":"MIT","_id":"mcp-registry-spec-sdk@0.3.0","maintainers":[{"name":"cameronapak","email":"cameronandrewpak@gmail.com"}],"homepage":"https://www.val.town/x/cameronpak/mcp-registry-spec-sdk","dist":{"shasum":"9cd27d56331bcb255c74b202d060b98bd4ffcc72","tarball":"https://registry.npmjs.org/mcp-registry-spec-sdk/-/mcp-registry-spec-sdk-0.3.0.tgz","fileCount":6,"integrity":"sha512-++TFHPZOe85MvUOA3LFq4uSdAvkx5iWJrX57SpvXsaxcDqgRA+atnneBIhvL6O4yzUeBw9EFlOHUDPp72md3dQ==","signatures":[{"sig":"MEUCIH0NwoIN1OYpv6FMHh9tYn77OgWJq8Syrk47UgJJkU5WAiEArLOrcDgZr81hEyER8PlCJb/oAtZe/a5dqQXceANSgoY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":504503},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"adb548da389db754966cf70ee78e29e1a7d64f24","scripts":{"build":"tsup index.ts --dts --format esm --sourcemap --clean --tsconfig tsconfig.json","clean":"rm -rf dist","prepare":"npm run build"},"_npmUser":{"name":"cameronapak","email":"cameronandrewpak@gmail.com"},"repository":{"url":"https://www.val.town/x/cameronpak/mcp-registry-spec-sdk","type":"git"},"_npmVersion":"11.5.1","description":"A minimal, typed client for the official Model Context Protocol (MCP) Registry API.","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"zod":"^3.23.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry-spec-sdk_0.3.0_1767382638067_0.5686273717344461","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"mcp-registry-spec-sdk","version":"0.4.0","keywords":["mcp","modelcontextprotocol","registry","sdk","ai","anthropic"],"author":{"name":"Cameron Pak","email":"cam@faith.tools"},"license":"MIT","_id":"mcp-registry-spec-sdk@0.4.0","maintainers":[{"name":"cameronapak","email":"cameronandrewpak@gmail.com"}],"homepage":"https://github.com/cameronapak/mcp-registry-sdk","bugs":{"url":"https://github.com/cameronapak/mcp-registry-sdk/issues"},"dist":{"shasum":"a0e72e8c72ebfdbf5d1f2b3457e42a063f50afbb","tarball":"https://registry.npmjs.org/mcp-registry-spec-sdk/-/mcp-registry-spec-sdk-0.4.0.tgz","fileCount":6,"integrity":"sha512-wEJDxDci8Ke8+E3I5yGw4V87xVuZO/Y9Ia7M2uFjcX0KH4yaSw5077Qag3sn8NTtghtwzGajHQBGvBEe+vKb/Q==","signatures":[{"sig":"MEYCIQC3AOmNR+1P9pDlHnTyQlxzIRu1KD1rpAPS2gSVZKUWXQIhAL/VxE3TGy46zIjAKZq2ntzfzZUv5aIurwdLUVpp2Iaz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":782525},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"10c2dc8e70625e4f206b37b1d33e15913fe80464","scripts":{"build":"tsup index.ts --dts --format esm --sourcemap --clean --tsconfig tsconfig.json","clean":"rm -rf dist","prepare":"npm run build"},"_npmUser":{"name":"cameronapak","email":"cameronandrewpak@gmail.com"},"repository":{"url":"git+https://github.com/cameronapak/mcp-registry-sdk.git","type":"git"},"_npmVersion":"10.9.3","description":"A minimal, typed client for the official Model Context Protocol (MCP) Registry API.","directories":{},"sideEffects":false,"_nodeVersion":"22.20.0","dependencies":{"zod":"^3.23.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","typescript":"^5.6.3"},"_npmOperationalInternal":{"tmp":"tmp/mcp-registry-spec-sdk_0.4.0_1778141465849_0.6609419936423013","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"_id":"mcp-registry-spec-sdk@0.5.0","bugs":{"url":"https://github.com/cameronapak/mcp-registry-sdk/issues"},"dist":{"shasum":"73b8d6663c8c2ebce454fc9af9ac0e2409d986ac","tarball":"https://registry.npmjs.org/mcp-registry-spec-sdk/-/mcp-registry-spec-sdk-0.5.0.tgz","fileCount":6,"integrity":"sha512-P6uHUgPrpmFdRUu268e/IfwJSXtBT01qpzjSZkIEm85y8DRo6cNqPEyI3EK2EUsgLv7hFxwC7tSNSo/E5M0PGg==","signatures":[{"sig":"MEYCIQDffYrDB/x0idBaBxgRz4x53xAV66POtjshSYXsGW8n3QIhAM0deRx5ShSNO3EGSiMuxQ7QJz5Kn4KHUdw4sMMnpISk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHuxH9lnK+YQLo2J/vH8cT0ccSoSmjMGpvNDzV9UBNauAiEA53ldhjtqOuT9yy51fJUgFruZyzMfylmDG2s5QX26lmc="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/mcp-registry-spec-sdk@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":402528},"main":"./dist/index.js","name":"mcp-registry-spec-sdk","type":"module","types":"./dist/index.d.ts","author":{"name":"Cameron Pak","email":"cam@faith.tools"},"module":"./dist/index.js","engines":{"bun":">=1.3.10","node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"cb27856f32a2b60a1859cbe7b5669b53d2b078a4","license":"MIT","scripts":{"test":"bun test tests/","build":"tsup index.ts --dts --format esm --sourcemap --clean --tsconfig tsconfig.json","check":"bun run test && bunx tsc --noEmit && bun run build && bun audit","clean":"rm -rf dist","prepare":"bun run build","changeset":"changeset","test:schemas":"bun test tests/test_schemas.test.ts","test:registry":"bun test tests/server_list.test.ts","changeset:version":"changeset version"},"version":"0.5.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ddc91f80-3b7a-40c4-930d-79d9adf9d656"}},"homepage":"https://github.com/cameronapak/mcp-registry-sdk","keywords":["mcp","modelcontextprotocol","registry","sdk","ai","anthropic"],"overrides":{"glob":"10.5.0","rollup":"4.59.0","esbuild":"0.28.1","minimatch":"9.0.9","picomatch":"4.0.4","brace-expansion":"5.0.12"},"repository":{"url":"git+https://github.com/cameronapak/mcp-registry-sdk.git","type":"git"},"_npmVersion":"11.19.0","description":"A minimal, typed client for the official Model Context Protocol (MCP) Registry API.","directories":{},"maintainers":[{"name":"cameronapak","email":"cameronandrewpak@gmail.com"}],"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"zod":"^4.6.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.10","devDependencies":{"tsup":"^8.5.1","typescript":"^5.9.3","@changesets/cli":"3.0.3"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-registry-spec-sdk_0.5.0_1790430202467_0.2959078756773421"}}},"time":{"created":"2025-09-30T12:16:40.774Z","modified":"2026-09-26T13:43:22.859Z","0.1.0":"2025-09-30T12:16:41.113Z","0.1.1":"2025-09-30T12:19:12.954Z","0.1.2":"2025-10-04T02:07:57.978Z","0.2.0":"2025-10-04T13:57:13.422Z","0.3.0":"2026-01-02T19:37:18.218Z","0.4.0":"2026-05-07T08:11:06.024Z","0.5.0":"2026-09-26T13:43:22.548Z"},"bugs":{"url":"https://github.com/cameronapak/mcp-registry-sdk/issues"},"author":{"name":"Cameron Pak","email":"cam@faith.tools"},"license":"MIT","homepage":"https://github.com/cameronapak/mcp-registry-sdk","keywords":["mcp","modelcontextprotocol","registry","sdk","ai","anthropic"],"repository":{"url":"git+https://github.com/cameronapak/mcp-registry-sdk.git","type":"git"},"description":"A minimal, typed client for the official Model Context Protocol (MCP) Registry API.","maintainers":[{"name":"cameronapak","email":"cameronandrewpak@gmail.com"}],"readme":"# MCP Registry SDK (TypeScript)\n\nA minimal, typed client for the official Model Context Protocol (MCP) Registry API.\n\n## Install\n\n- bun: `bun add mcp-registry-spec-sdk`\n- npm: `npm install mcp-registry-spec-sdk`\n- pnpm: `pnpm add mcp-registry-spec-sdk`\n- yarn: `yarn add mcp-registry-spec-sdk`\n\nRequires Bun 1.3.10+ for development. Published package supports maintained Node.js releases starting with Node.js 22.\n\n## Development\n\n```sh\nbun install\nbun run test\nbun run build\n```\n\n## Quick start\n\n```ts\nimport { MCPRegistryClient } from \"mcp-registry-spec-sdk\";\n\n// Default: v0.1 (stable) API\nconst client = new MCPRegistryClient();\n\n// Optionally set a default Bearer token for publish/admin\nclient.setAuthToken(process.env.MCP_REGISTRY_TOKEN);\n\n// Ping\nconst ping = await client.ping.ping();\nconsole.log(\"ping:\", ping);\n\n// Health\nconst health = await client.health.getHealth();\nconsole.log(\"health:\", health);\n\n// List servers (with optional filters)\nconst list = await client.server.listServers({\n  search: \"openai\",\n  limit: 10,\n  updatedSince: \"2024-01-01T00:00:00Z\",\n});\nconsole.log(\"servers:\", list.servers?.length ?? 0, \"next:\", list.metadata.nextCursor);\n\n// Get a specific server version\nconst server = await client.server.getServerVersion(\"org/server-name\", \"latest\");\nconsole.log(\"server:\", server.server.name);\n```\n\n**API Versions:**\n- `v0.1` (default): Stable version, only additive backward-compatible changes\n- `v0`: Development version, may evolve with breaking changes\n\n```ts\n// Explicit v0 if needed\nconst devClient = new MCPRegistryClient(undefined, \"v0\");\n```\n\n## API surface\n\nThe client is namespaced by feature:\n- `auth` — Token exchange helpers\n- `health` — Health check\n- `ping` — Connectivity check\n- `server` — List/get servers (+ version endpoints)\n- `publish` — Publish a server\n- `admin` — Admin-only edit and status operations\n\n### Client\n\n```ts\nimport { MCPRegistryClient } from \"mcp-registry-spec-sdk\";\n\nconst client = new MCPRegistryClient(); // default: official registry, v0.1\n\n// Custom base URL\nconst custom = new MCPRegistryClient(\"https://my-registry.example.com\");\n\n// Set or clear a default token used by publish/admin\nclient.setAuthToken(\"YOUR_REGISTRY_JWT\"); // omit or pass undefined to clear\n```\n\n### Servers\n\nList servers with optional pagination and filters:\n\n```ts\nconst response = await client.server.listServers({\n  cursor: \"opaque-cursor\",   // optional\n  limit: 20,                 // optional\n  search: \"my query\",        // optional\n  updatedSince: \"2024-01-01T00:00:00Z\", // optional (ISO-8601)\n  version: \"1.0.0\",          // optional\n  includeDeleted: true,      // optional — include deleted servers\n});\n// response.servers: ServerResponse[] | null\n// response.metadata: { count: number, nextCursor?: string }\n```\n\nWhen `updatedSince` is present, the Registry always includes deleted records. Passing `includeDeleted: false` with `updatedSince` is invalid and the SDK rejects it before sending a request. Limits must be integers from 1 through 100.\n\nGet a specific server version:\n\n```ts\nconst latest = await client.server.getServerVersion(\"org/server-name\", \"latest\");\nconst specific = await client.server.getServerVersion(\"org/server-name\", \"1.2.3\");\n\n// With include_deleted\nconst deleted = await client.server.getServerVersion(\"org/server-name\", \"1.0.0\", {\n  includeDeleted: true,\n});\n```\n\nList all versions for a server:\n\n```ts\nconst versions = await client.server.listServerVersions(\"org/server-name\");\n// Also supports { includeDeleted: true }\n```\n\n### Publish\n\nPublish or update a server entry. Requires a registry token (JWT).\n\n```ts\nimport type { ServerJSON } from \"mcp-registry-spec-sdk\";\n\nconst serverPayload: ServerJSON = {\n  $schema: \"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json\",\n  name: \"org/my-server\",\n  description: \"My MCP server\",\n  version: \"1.0.0\",\n};\n\n// Uses default token set via client.setAuthToken()\nconst published = await client.publish.publishServer(serverPayload);\n\n// Or pass token per call\nconst published2 = await client.publish.publishServer(serverPayload, \"my-jwt-token\");\n```\n\n### Admin\n\nEdit and update the status of server versions. All require a registry token. The optional generic-registry DELETE endpoint is not exposed because the official Registry does not implement it.\n\n```ts\n// Edit a server version\nconst edited = await client.admin.editServerVersion(\n  \"org/server-name\", \"1.0.0\",\n  {\n    $schema: \"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json\",\n    name: \"org/server-name\",\n    description: \"Updated\",\n    version: \"1.0.0\",\n  },\n);\n\n// Update status of a single version\nconst updated = await client.admin.updateVersionStatus(\n  \"org/server-name\", \"1.0.0\",\n  { status: \"deprecated\", statusMessage: \"Use v2 instead\" },\n);\n\n// Update status of ALL versions\nconst allUpdated = await client.admin.updateAllVersionsStatus(\n  \"org/server-name\",\n  { status: \"deprecated\", statusMessage: \"Project archived\" },\n);\n// allUpdated: { updatedCount: number, servers: ServerResponse[] }\n```\n\n### Auth (token exchange)\n\nExchange third-party tokens/signatures for a registry JWT.\n\n```ts\n// GitHub OAuth access token -> Registry JWT\nconst jwt1 = await client.auth.exchangeGitHubOAuthAccessTokenForRegistryJWT({\n  github_token: \"gho_xxx\",\n});\n\n// GitHub OIDC token -> Registry JWT\nconst jwt2 = await client.auth.exchangeGitHubOIDCTokenForRegistryJWT({\n  oidc_token: \"gh-oidc-xxx\",\n});\n\n// Configured OIDC provider -> Registry JWT. This endpoint is deployment-dependent\n// and is primarily used for official Registry administration.\nconst jwt3 = await client.auth.exchangeOIDCIDTokenForRegistryJWT({\n  oidc_token: \"oidc-xxx\",\n});\n\n// HTTP signature -> Registry JWT\nconst jwt4 = await client.auth.exchangeHTTPSignatureForRegistryJWT({\n  domain: \"yourdomain.com\",\n  signed_timestamp: \"abcdef1234567890\", // hex-encoded signature\n  timestamp: new Date().toISOString(),\n});\n\n// DNS signature -> Registry JWT\nconst jwt5 = await client.auth.exchangeDNSSignatureForRegistryJWT({\n  domain: \"yourdomain.com\",\n  signed_timestamp: \"abcdef1234567890\", // hex-encoded signature\n  timestamp: new Date().toISOString(),\n});\n```\n\nDNS and HTTP proofs support Ed25519 and ECDSA P-384 keys. The timestamp must be RFC3339 and within 15 seconds of the exchange request. IP addresses, single-label domains, and `github.io` domains are rejected.\n\nGitHub Actions must request an OIDC token whose audience is the Registry base URL, such as `https://registry.modelcontextprotocol.io`. GitHub organization namespaces require an active organization Owner. Classic PATs need `read:org`; fine-grained PATs need organization Members read access.\n\n## Types\n\nAll request/response shapes are exported as TypeScript types and Zod schemas.\n\n```ts\nimport type {\n  ServerJSON,\n  ServerResponse,\n  ServerListResponse,\n  ListServersOptions,\n  TokenResponse,\n  ErrorModel,\n  StatusUpdateRequest,\n  AllVersionsStatusResponse,\n  // Transports\n  StdioTransport,\n  StreamableHttpTransport,\n  SseTransport,\n  // Arguments (discriminated union)\n  Argument,\n  PositionalArgument,\n  NamedArgument,\n  KeyValueInput,\n  Input,\n  InputWithVariables,\n  // Other\n  Icon,\n  Repository,\n  Package,\n} from \"mcp-registry-spec-sdk\";\n```\n\n### Zod Schemas\n\nEvery type has a corresponding Zod schema exported for runtime validation:\n\n```ts\nimport {\n  ServerJSONSchema,\n  ServerResponseSchema,\n  ArgumentSchema,\n  StatusUpdateRequestSchema,\n} from \"mcp-registry-spec-sdk\";\n\nconst parsed = ServerJSONSchema.safeParse(myData);\nif (!parsed.success) console.error(parsed.error);\n```\n\n`ServerJSONSchema` models official Registry publish requirements. `GenericServerJSONSchema` models the portable released server.json contract, where `$schema` is optional and custom `_meta` namespaces are preserved. Response schemas use separate compatibility shapes for legacy package and repository records.\n\n### Argument Types\n\nArguments use a discriminated union on the `type` field:\n\n```ts\nimport type { PositionalArgument, NamedArgument, KeyValueInput } from \"mcp-registry-spec-sdk\";\n\nconst positional: PositionalArgument = {\n  type: \"positional\",\n  valueHint: \"FILE\",\n  description: \"Input file path\",\n  format: \"filepath\",\n};\n\nconst named: NamedArgument = {\n  type: \"named\",\n  name: \"--port\",\n  description: \"Port number\",\n  format: \"number\",\n  default: \"3000\",\n};\n\n// Environment variables and headers use KeyValueInput (requires name)\nconst envVar: KeyValueInput = {\n  name: \"API_KEY\",\n  description: \"Your API key\",\n  isRequired: true,\n  isSecret: true,\n};\n```\n\n### Transport Types\n\nServers can use three transport types:\n\n```ts\nimport type { StdioTransport, StreamableHttpTransport, SseTransport } from \"mcp-registry-spec-sdk\";\n\nconst stdio: StdioTransport = { type: \"stdio\" };\n\nconst http: StreamableHttpTransport = {\n  type: \"streamable-http\",\n  url: \"https://api.example.com/mcp\",\n  headers: [{ name: \"Authorization\", value: \"Bearer {token}\" }],\n};\n\nconst sse: SseTransport = {\n  type: \"sse\",\n  url: \"https://api.example.com/mcp\",\n};\n```\n\n### URL Template Variables\n\nRemote transports support URL template variables:\n\n```ts\nimport type { Remote } from \"mcp-registry-spec-sdk\";\n\nconst remote: Remote = {\n  type: \"sse\",\n  url: \"https://api.{tenant_id}.example.com/mcp\",\n  variables: {\n    tenant_id: {\n      description: \"Tenant identifier\",\n      isRequired: true,\n      placeholder: \"your-tenant-id\",\n    },\n  },\n};\n```\n\n### Icon Schema\n\n```ts\nimport type { Icon } from \"mcp-registry-spec-sdk\";\n\nconst icon: Icon = {\n  src: \"https://example.com/icon.png\", // HTTPS URL, max 255 chars\n  mimeType: \"image/png\",\n  sizes: [\"32x32\", \"64x64\"],\n  theme: \"light\",\n};\n```\n\n## Browser usage\n\nModern browsers already provide `fetch`, so no polyfill is normally needed. Browser requests still depend on the target registry's CORS policy.\n\n## Spec alignment\n\nThe SDK targets the current MCP Registry API spec (`2025-12-01`), the official Registry runtime API, and the latest released Server JSON schema (`2025-12-11`).\n\n- Default client API version: `v0.1` (stable)\n- Development API version: `v0`\n- Server JSON schema: `https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json`\n- Official publishing adds package allowlists, HTTPS and repository checks, metadata limits, and semantic validation beyond the portable schema.\n- Draft-only leading transport URL templates such as `{baseUrl}/mcp` are rejected until released upstream.\n\n## Migrating to v0.5.0\n\n### Breaking Changes\n\n1. Node.js 22 is now the minimum supported Node release.\n2. Zod 4 replaces Zod 3.\n3. Official schemas are strict and reject unknown properties instead of silently removing them.\n4. `Package` is a registry-specific union. npm, PyPI, NuGet, and Cargo require a concrete version; OCI embeds its tag or digest in `identifier`; MCPB requires `fileSha256`.\n5. Publish repositories require `url` and `source`. Use `ResponseRepository` for legacy API records.\n6. Positional arguments require `value` or `valueHint`.\n7. `ServerListResponse.servers` and `AllVersionsStatusResponse.servers` can be `null`, matching the generated official OpenAPI.\n8. `ServerResponse._meta` is required, while its official metadata member is optional.\n9. `admin.deleteServerVersion()` was removed because the official Registry does not implement DELETE.\n\n### New Features\n\n- Official package support for Cargo, Quay, and the current registry allowlists\n- `GenericServerJSONSchema`, `GenericPackageSchema`, and generic metadata passthrough\n- Separate response repository and package schemas for legacy records\n- Request and response validation in client methods\n- RFC3339, list-limit, metadata-size, template-variable, and auth-proof validation\n\n### Bug Fixes\n\n- Incremental sync options can no longer generate a known HTTP 400\n- Server and package version ranges are rejected\n- Publisher metadata inside `server._meta` is retained in response types\n\n## Additional Resources\n\n- [API Changelog](https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/api/CHANGELOG.md)\n- [Server JSON Changelog](https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/CHANGELOG.md)\n- [Generic OpenAPI Spec](https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/api/openapi.yaml)\n- [Official Registry OpenAPI Spec](https://registry.modelcontextprotocol.io/openapi.yaml)\n- [Server JSON Schema](https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json)\n\n## License\n\nMIT © Cameron Pak - [cam@faith.tools](mailto:cam@faith.tools)\n","readmeFilename":"README.md"}