The MCP registry specification has evolved significantly since the last SDK release (v0.2.0). This update brings the SDK in line with the latest API specification as of December 2025, including support for the new stable v0.1 API version, updated server.json schema (2025-12-11), and several breaking changes introduced by the registry.
Goal: Update the SDK to be fully compatible with the latest MCP registry specification while maintaining backward compatibility where practical, ensuring users have access to all new features and endpoints.
I want to use the stable /v0.1/ API endpoints so I can rely on consistent behavior in production.
I want my existing getServerByName() calls to continue working (with deprecation warning) so I don't have to immediately refactor my code.
I want to be able to specify optional version field for OCI and MCPB packages, as the new schema allows.
I want to use URL template variables in remote transport definitions so I can support multi-tenant deployments.
1.1 The client MUST support both /v0/ (development) and /v0.1/ (stable) API versions
1.2 The client MUST default to /v0/ for backward compatibility
1.3 The client constructor MUST accept an optional apiVersion parameter ('v0' | 'v0.1')
1.4 All namespace classes (Auth, Server, Publish, Admin, Health, Ping) MUST use the configured API version
2.1 Update getServerByName() to call /versions/latest endpoint internally
2.2 Add a new method getServerVersion(serverName: string, version: string) that calls /versions/{version} endpoint
2.3 Add a new method listServerVersions(serverName: string) that calls /versions endpoint
2.4 Add deprecation warning to getServerByName() indicating users should use explicit version methods
2.5 All endpoint URLs MUST use URL encoding for server names and versions
3.1 The version field in PackageSchema MUST be made optional (not required)
3.2 The Package type MUST reflect that version is optional
3.3 Update Zod schema to allow version to be omitted
4.1 Add variables property to RemoteSchema (object with string keys and Argument values)
4.2 The variables property MUST be optional
4.3 Add description for URL template variable substitution pattern ({curly_braces})
5.1 Create StdioTransportSchema with required type: 'stdio'
5.2 Create StreamableHttpTransportSchema with required type and url, optional headers
5.3 Create SseTransportSchema with required type and url, optional headers
5.4 Export these as new Zod schemas and TypeScript types
5.5 Update TransportSchema to be a discriminated union of the three transport types
6.1 ✅ Create IconSchema with required src field, optional mimeType, sizes, theme
6.2 ✅ Add validation for mimeType to only allow specific values (image/png, image/jpeg, image/jpg, image/svg+xml, image/webp)
6.3 ✅ Export as Zod schema and TypeScript type
6.4 ✅ Add to ServerDetailSchema as optional icons array
7.1 Create ResponseMetaSchema for API response-level metadata
7.2 Create ServerMetaSchema for server metadata in list responses
7.3 Create ServerJSONSchema for ServerDetail alias (input format)
7.4 Create ServerListResponseSchema for list operations
7.5 Create TransportSchema as discriminated union of Stdio, StreamableHttp, SSE
7.6 Create VersionBodySchema for version endpoint responses
7.7 Create SignatureTokenExchangeInputSchema for auth (DNS/HTTP signature exchange)
7.8 Create OIDCTokenExchangeInputBodySchema for Google OIDC (admin-only)
7.9 Create GitHubTokenExchangeInputBodySchema for GitHub auth
7.10 Create GitHubOIDCTokenExchangeInputBodySchema for GitHub OIDC auth
7.11 Create MetadataSchema for pagination metadata
7.12 Export all new schemas as Zod schemas and TypeScript types
7.1 Add PUT /servers/{serverName}/versions/{version} endpoint in Admin namespace for updates
7.2 Add DELETE /servers/{serverName}/versions/{version} endpoint documentation (optional)
7.3 Ensure these endpoints use the configured API version (v0 or v0.1)
8.1 Update README to document the new apiVersion constructor option
8.2 Update all code examples to show both v0 and v0.1 usage
8.3 Add migration guide section for deprecated getServerByName() method
8.4 Update $schema examples to use 2025-12-11 version URL
8.5 Document the new transport types and Icon schema
8.6 Document URL template variables feature for remote servers
9.1 Update package.json version from 0.2.0 to 0.3.0 (MAJOR version bump) 9.2 Create CHANGELOG.md entry documenting breaking changes 9.3 Include migration notes for users
/v0/ support - keep both versions availableconsole.warn() for deprecation notices/v0/ to avoid breaking existing consumersThis release includes several breaking changes:
getServerByName() implicit "latest" behaviorencodeURIComponent() for all server names and versions in URLsRegistryError class continues to be usedtests/ directory pass without modification/metrics for Prometheus-compatible metricsio.modelcontextprotocol.registry/publisher-provided metadata is preserved (4KB limit), other keys droppedrepository.source and repository.url fields, which are currently required in RepositorySchemapackage.version should be optionalThe official schema has complete type definitions for:
StdioTransport (type: 'stdio'), StreamableHttpTransport (with url + optional headers), SseTransport (with url + optional headers)PositionalArgument (with valueHint, type: 'positional'), NamedArgument (with name, type: 'named'), KeyValueInput (environment variable or header)variables object for URL templatingsrc (HTTPS URL, max 255 chars), optional mimeType (enum), sizes (WxH or 'any'), optional theme ('light' | 'dark')Required Changes:
npm install mcp-registry-spec-sdk@0.3.0getServerByName() with explicit version methods:
// Old (deprecated)
const server = await client.server.getServerByName("my-server");
// New
const latest = await client.server.getServerVersion("my-server", "latest");
const specific = await client.server.getServerVersion("my-server", "1.0.0");
$schema URLs in your server.json files to 2025-12-11 versionOptional Changes:
No Action Needed: