Warning
The registry is under active development. The registry API spec is unstable and the official MCP registry database may be wiped at any time.
π API Documentation | π Technical Docs
The registry will provide MCP clients with a list of MCP servers. Like an app store for MCP servers. (In future it might do more, like also hosting a list of clients.)
There are two parts to the registry project:
- π¦ The MCP registry spec: An API specification that allows anyone to implement a registry.
- π₯ The Official MCP registry: A hosted registry following the MCP registry spec at
registry.modelcontextprotocol.io
. This serves as the authoritative repository for publicly-available MCP servers. Server creators publish once, and all consumers (MCP clients, aggregators, marketplaces) reference the same canonical data. This is owned by the MCP open-source community, backed by major trusted contributors to the MCP ecosystem such as Anthropic, GitHub, PulseMCP and Microsoft.
The registry is built around the server.json
format - a standardized way to describe MCP servers that works across discovery, initialization, and packaging scenarios.
In time, we expect the ecosystem to look a bit like this:
Note that MCP registries are metaregistries. They host metadata about packages, but not the package code or binaries. Instead, they reference other package registries (like NPM, PyPi or Docker) for this.
Additionally, we expect clients pull from subregistries. These subregistries add value to the registry ecosystem by providing curation, or extending it with additional metadata. The Official MCP registry expects a lot of API requests from ETL jobs from these subregistries.
2025-08-26 update: We're targeting a 'preview' go-live on 4th September. This may still be unstable and not provide durability guarantees, but is a step towards being more solidified. A general availability (GA) release will follow later.
Current key maintainers:
- Adam Jones (Anthropic) @domdomegg
- Tadas Antanavicius (PulseMCP) @tadasant
- Toby Padilla (GitHub) @toby
We use multiple channels for collaboration - see modelcontextprotocol.io/community/communication.
Often (but not always) ideas flow through this pipeline:
- Discord - Real-time community discussions
- Discussions - Propose and discuss product/technical requirements
- Issues - Track well-scoped technical work
- Pull Requests - Contribute work towards issues
- Docker
- Go 1.24.x
- golangci-lint v2.4.0
# Start full development environment
make dev-compose
This starts the registry at localhost:8080
with PostgreSQL and seed data. It can be configured with environment variables in docker-compose.yml - see .env.example for a reference.
Alternative: Local setup without Docker
Prerequisites:
- PostgreSQL running locally
- Go 1.24.x installed
# Build and run locally
make build
make dev-local
The service runs on localhost:8080
by default. This can be configured with environment variables in .env
- see .env.example for a reference.
Alternative: Running a pre-built Docker image
Pre-built Docker images are automatically published to GitHub Container Registry:
# Run latest from main branch
docker run -p 8080:8080 ghcr.io/modelcontextprotocol/registry:latest
# Run specific commit build
docker run -p 8080:8080 ghcr.io/modelcontextprotocol/registry:main-20250806-a1b2c3d
Available tags: latest
, main-<date>-<sha>
To publish a server, we've built a simple CLI. You can use it with:
# Build the latest CLI
make publisher
# Use it!
./tools/publisher/bin/mcp-publisher --help
See the publisher README for more details.
# Run lint, unit tests and integration tests
make check
There are also a few more helpful commands for development. Run make help
to learn more, or look in Makefile.
βββ cmd/ # Application entry points
βββ data/ # Seed data
βββ deploy/ # Deployment configuration (Pulumi)
βββ docs/ # Technical documentation
β βββ server-json/ # server.json specification & examples
β βββ server-registry-api/ # API specification
βββ internal/ # Private application code
β βββ api/ # HTTP handlers and routing
β βββ auth/ # Authentication (GitHub OAuth, JWT)
β βββ config/ # Configuration management
β βββ database/ # Data persistence (PostgreSQL, in-memory)
β βββ model/ # Data models and domain structures
β βββ service/ # Business logic
β βββ telemetry/ # Metrics and monitoring
βββ scripts/ # Development and testing scripts
βββ tests/ # Integration tests
βββ tools/ # CLI tools
βββ publisher/ # Server publishing tool
βββ validate-*.sh # Schema validation tools
Publishing supports multiple authentication methods:
- GitHub OAuth - For publishing by logging into GitHub
- GitHub OIDC - For publishing from GitHub Actions
- DNS verification - For proving ownership of a domain and its subdomains
- HTTP verification - For proving ownership of a domain
The registry validates namespace ownership when publishing. E.g. to publish...:
io.github.domdomegg/my-cool-mcp
you must login to GitHub asdomdomegg
, or be in a GitHub Action on domdomegg's reposme.adamjones/my-cool-mcp
you must prove ownership ofadamjones.me
via DNS or HTTP challenge
See the docs folder for more details if your question has not been answered here!