The MCP Registry: what it is, who reads it, and how to list a server

The MCP Registry stores MCP server metadata, while aggregators read it and publishers add ownership proofs, server.json, and a public package or endpoint.

The official Model Context Protocol (MCP) Registry is a preview metadata repository for publicly accessible MCP servers. It stores server.json records that point to public packages or remote endpoints, not package code or binaries. Its main downstream readers are aggregators and marketplaces, which expose curated or extended data to MCP host applications. To list a server, publish the underlying package or public endpoint, add its ownership marker, create and validate server.json, authenticate its namespace, and run mcp-publisher publish.

Key facts about the MCP Registry

  • On 2025-09-08, the MCP project launched the official registry in preview at registry.modelcontextprotocol.io.
  • On 2025-10-24, the Registry API entered an API freeze at v0.1.
  • On 2026-10-06, GET https://registry.modelcontextprotocol.io/v0.1/version returned service version 1.8.1. The v0.1 part is the API path; 1.8.1 is the version in the live response.
  • On 2026-10-06, the official publishing guide still marked the registry as preview and warned that breaking changes or data resets could occur before general availability.
  • The server.json examples use the schema at https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json.
  • The public registry does not support private servers. The package or remote installation method must be publicly available.

What the MCP Registry stores

The MCP Registry is a metaregistry. npm, PyPI, Docker and other package registries host code or binaries. The MCP Registry stores metadata that points to those packages. A server can also publish a public remote endpoint in the remotes array.

The metadata format records a server name, version, repository, package or remote location, and execution details. A minimal package entry looks like this:

{
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "name": "io.github.example/weather",
  "version": "1.0.0",
  "packages": [
    {
      "registryType": "npm",
      "identifier": "@example/weather-server",
      "version": "1.0.0",
      "transport": { "type": "stdio" }
    }
  ]
}

The official registry preserves publisher metadata only under _meta["io.modelcontextprotocol.registry/publisher-provided"], with a 4KB limit. The API response has a separate registry-managed _meta object for lifecycle fields such as status, publishedAt, updatedAt, and isLatest. Publishers cannot set those lifecycle fields.

Who reads the MCP Registry

The official documentation says downstream aggregators are the primary consumers. The public API is unauthenticated and read-only for this use. Aggregators fetch it on a regular but infrequent schedule, persist their own copy, and add curation, ratings, download counts, or security results. The official registry does not provide uptime or data durability guarantees.

Host applications are not intended to consume the official registry directly. They can consume downstream registries that implement the official OpenAPI interface. That gives a host application one API shape while letting each marketplace choose its own curation and security checks.

The live API uses cursor pagination. On 2026-10-06, this query returned two records and a cursor for the next page:

curl -sS "https://registry.modelcontextprotocol.io/v0.1/servers?limit=2" | jq '{count: .metadata.count, nextCursor: .metadata.nextCursor}'
{
  "count": 2,
  "nextCursor": "ac.inference.sh/mcp:1.0.1"
}

An aggregator can pass that value as cursor for the next page or use updated_since with an RFC 3339 timestamp for incremental updates.

How to list a server in the MCP Registry

1. Publish the package or endpoint and prove ownership

The official registry accepts public package registries and public MCPB releases. It checks an ownership marker before accepting a listing. The marker must name the same server as server.json.

Package type

Ownership proof

npm

mcpName in package.json

PyPI or NuGet

mcp-name: <server-name> in the package README

Cargo

Visible Markdown containing mcp-name: <server-name>

Docker or OCI

io.modelcontextprotocol.server.name label or annotation

MCPB

A package URL containing mcp and a fileSha256 value

Cargo needs visible Markdown because crates.io strips HTML comments before the registry checks the rendered README. A hidden <!-- mcp-name: ... --> marker therefore fails for Cargo.

2. Create and validate server.json

Install the mcp-publisher CLI, then run:

mcp-publisher init
mcp-publisher validate

init creates a template. Edit the server name, version, package or remote details, and transport. validate checks the document without publishing it.

3. Authenticate the namespace

GitHub authentication uses names such as io.github.username/server-name. Publishing under io.github.orgname/* requires the GitHub organization Owner role. The CLI flow is:

mcp-publisher login github

Domain authentication uses a reverse-DNS prefix tied to a verified domain, such as com.example/server. Ownership can be proved with a signed DNS TXT record at the domain apex, example.com, or with https://example.com/.well-known/mcp-registry-auth. A selector record such as _mcp-auth.example.com is not the required location.

4. Publish the metadata

From the directory containing server.json, run:

mcp-publisher publish

GitHub Actions can use OIDC instead of a stored registry token:

- name: Authenticate to MCP Registry
  run: ./mcp-publisher login github-oidc
- name: Publish server to MCP Registry
  run: ./mcp-publisher publish

Remote entries should use Streamable HTTP. SSE is deprecated and remains only for compatibility with existing clients. The remote URL must be publicly accessible.

Sources

Last verified: 2026-10-06.

Spotted an outdated or wrong claim? Agents can report it with evidence throughPOST /api/feedback; an editor checks every report. See llms.txt for the agent API.