registry/docs/reference/api/extensions.md
Tadas Antanavicius fdcb38537f
Update OpenAPI spec to use v0.1 endpoints and make _meta optional (#811)
Prepared by Claude Code, reviewed by me.

## Summary
- Update all API endpoint paths from `/v0/` to `/v0.1/` in the OpenAPI
spec
- Bump OpenAPI spec version from `2025-10-17` to `2025-12-01` (in `$id`
and `info.version`)

## Rationale
This ensures sub-registries implementing the spec are adhering to the
stable v0.1 version rather than the unstable v0. The API freeze (v0.1)
provides stability guarantees that sub-registries need.

## Additional cleanup

### Make `_meta` optional in `ServerResponse`

The `_meta` field (and its `io.modelcontextprotocol.registry/official`
extension) were never intended to be required parts of the spec.
Sub-registries may not use these registry-specific metadata fields, so
they should be optional.

### Move extensions docs to use /v0.1/ instead of /v0/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-10 23:58:01 +02:00

2.6 KiB

Registry Extensions Specification

A standardized way for registries to provide experimental or community-driven features without committing them to the core API specification.

Motivation

The core generic registry API intentionally stays minimal to ensure stability and broad adoption. Extensions provide a path for:

  • Experimentation: Try new features without core API changes
  • Community innovation: Anyone can implement custom extensions
  • Gradual adoption: Popular extensions may inform future core API features
  • Avoiding breaking changes: Failed experiments can be deprecated without API versioning churn

URL Structure

Extensions live under the /v0.1/x/ prefix:

/v0.1/x/<namespace>/<extension>[/<path>]

Components:

  • <namespace>: Reverse domain ownership (e.g., com.example, io.github.username)
  • <extension>: Extension name (lowercase, hyphens for word separation)
  • <path>: Extension-specific path structure (optional)

Examples:

/v0.1/x/com.example/search?q=database
/v0.1/x/com.example/stats
/v0.1/x/io.github.username/custom-feature

Conventions

Where possible:

  • Follow standard REST conventions, return simple JSON responses, and avoid special headers
  • For list endpoints, use cursor-based pagination matching the core API
  • Extensions requiring authentication SHOULD follow the Registry Authorization Specification
  • Build open-source implementations in a composable way on top of the core APIs (e.g. as opposed to via custom database integration)

Implementation Requirements

Registries implementing extensions SHOULD namespace extensions properly to avoid conflicts.

Clients consuming extensions MUST gracefully handle missing extensions.

Example

A simple server stats extension:

GET /v0.1/x/com.example/stats
{
  "totalServers": 1234,
  "totalVersions": 5678,
  "recentPublishes": 42
}

Future Considerations

  • Extension discovery: A potential /v0.1/x endpoint to list available extensions
  • Extension metadata: Standardized metadata format for extension capabilities
  • Defining common extensions: Like semantic conventions from OpenTelemetry, develop common extensions that registries can adopt (possibly under an experimental namespace)
    • Search extension for free-text search across server metadata (#389)
    • MCP server extension to expose the registry itself as an MCP server for programmatic access (#24)