You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
## Summary
- Restructure main README to focus on registry purpose and quick start
guide
- Streamline docs/README.md with better organization and linking
- Update FAQ with current publishing methods, security approach, and
community practices
- Simplify roadmap to focus on go-live blockers rather than exhaustive
backlog
- Add ecosystem diagram to visualize registry architecture
A community driven registry service for Model Context Protocol (MCP) servers.
3
+
> [!WARNING]
4
+
> The registry is under [active development](#development-status). The registry API spec is unstable and the official MCP registry database may be wiped at any time.
4
5
5
-
## Development Status
6
-
7
-
This project is being built in the open and is currently in the early stages of development. Please see the [overview discussion](https://github.com/modelcontextprotocol/registry/discussions/11) for the project scope and goals.
8
-
9
-
### Contributing
10
-
11
-
Use [Discussions](https://github.com/modelcontextprotocol/registry/discussions) to propose and discuss product and/or technical **requirements**.
12
-
13
-
Use [Issues](https://github.com/modelcontextprotocol/registry/issues) to track **well-scoped technical work** that the community agrees should be done at some point.
14
-
15
-
Open [Pull Requests](https://github.com/modelcontextprotocol/registry/pulls) when you want to **contribute work towards an Issue**, or you feel confident that your contribution is desireable and small enough to forego community discussion at the requirements and planning levels.
16
-
17
-
## Overview
18
-
19
-
The MCP Registry service provides a centralized repository for MCP server entries. It allows discovery and management of various MCP implementations with their associated metadata, configurations, and capabilities.
- RESTful API for managing MCP registry entries (list, get, create, update, delete)
24
-
- Health check endpoint for service monitoring
25
-
- Support for various environment configurations
26
-
- Graceful shutdown handling
27
-
- PostgreSQL and in-memory database support
28
-
- Comprehensive API documentation
29
-
- Pagination support for listing registry entries
30
-
- Seed data export/import composability with HTTP support
31
-
- Registry instance data sharing via HTTP endpoints
10
+
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.)
32
11
33
-
## Getting Started
12
+
There are two parts to the registry project:
13
+
1. 🟦 **The MCP registry spec**: An [API specification](./docs/server-registry-api/) that allows anyone to implement a registry.
14
+
2. 🟥 **The Official MCP registry**: A hosted registry following the MCP registry spec at [`registry.modelcontextprotocol.io`](https://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.
34
15
35
-
### Prerequisites
16
+
The registry is built around the [`server.json`](./docs/server-json/) format - a standardized way to describe MCP servers that works across discovery, initialization, and packaging scenarios.
36
17
37
-
- Go 1.24.x (required - check with `go version`)
38
-
- PostgreSQL
39
-
- Docker (optional, but recommended for development)
18
+
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.
48
23
49
-
The easiest way to get the registry running is uses docker compose. This will setup the MCP Registry service, import the seed data and run PostgreSQL in a local Docker environment.
24
+
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.
50
25
51
-
```bash
52
-
make dev-compose
53
-
```
54
-
55
-
This will start the MCP Registry service running at [`localhost:8080`](http://localhost:8080).
26
+
## Development Status
56
27
57
-
## Building
28
+
**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.
58
29
59
-
If you prefer to run the service locally without Docker, you can build and run it directly:
This will create the `registry` binary in the current directory.
35
+
## Contributing
66
36
67
-
To run the service locally:
68
-
```bash
69
-
# Run registry locally
70
-
make dev-local
71
-
```
37
+
We use multiple channels for collaboration - see [modelcontextprotocol.io/community/communication](https://modelcontextprotocol.io/community/communication).
72
38
73
-
By default, the service will run on [`localhost:8080`](http://localhost:8080). You'll need to use the in-memory database or have PostgreSQL running.
39
+
Often (but not always) ideas flow through this pipeline:
74
40
75
-
To build the CLI tool for publishing MCP servers to the registry:
41
+
-**[Discord](https://modelcontextprotocol.io/community/communication)** - Real-time community discussions
42
+
-**[Discussions](https://github.com/modelcontextprotocol/registry/discussions)** - Propose and discuss product/technical requirements
43
+
-**[Issues](https://github.com/modelcontextprotocol/registry/issues)** - Track well-scoped technical work
44
+
-**[Pull Requests](https://github.com/modelcontextprotocol/registry/pulls)** - Contribute work towards issues
76
45
77
-
```bash
78
-
# Build the publisher tool
79
-
make publisher
80
-
```
46
+
### Quick start:
81
47
82
-
##Development
48
+
#### Pre-requisites
83
49
84
-
### Available Make Targets
50
+
-**Docker**
51
+
-**Go 1.24.x**
52
+
-**golangci-lint v2.4.0**
85
53
86
-
To see all available make targets:
54
+
#### Running the server
87
55
88
56
```bash
89
-
make help
57
+
# Start full development environment
58
+
make dev-compose
90
59
```
91
60
92
-
Key development commands:
61
+
This starts the registry at [`localhost:8080`](http://localhost:8080) with PostgreSQL and seed data. It can be configured with environment variables in [docker-compose.yml](./docker-compose.yml) - see [.env.example](./.env.example) for a reference.
93
62
94
-
```bash
95
-
# Development
96
-
make dev-compose # Start development environment with Docker Compose
97
-
make dev-local # Run registry locally
98
-
99
-
# Build targets
100
-
make build # Build the registry application
101
-
make publisher # Build the publisher tool
102
-
make migrate # Build the database migration tool
103
-
104
-
# Testing
105
-
make test-unit # Run unit tests with coverage report
106
-
make test-integration # Run integration tests
107
-
make test-endpoints # Test API endpoints (requires running server)
108
-
make test-publish # Test publish endpoint (requires BEARER_TOKEN)
109
-
make test-all # Run all tests
110
-
111
-
# Code quality
112
-
make lint # Run linter (same as CI)
113
-
make lint-fix # Run linter with auto-fix
114
-
115
-
# Validation
116
-
make validate-schemas # Validate JSON schemas
117
-
make validate-examples # Validate examples against schemas
118
-
make validate # Run all validation checks
119
-
120
-
# Combined workflows
121
-
make check # Run all checks (lint, validate, unit tests)
122
-
123
-
# Utilities
124
-
make clean # Clean build artifacts and coverage files
125
-
```
63
+
<details>
64
+
<summary>Alternative: Local setup without Docker</summary>
126
65
127
-
### Linting
128
-
129
-
The project uses golangci-lint with extensive checks. Always run linting before pushing:
66
+
**Prerequisites:**
67
+
- PostgreSQL running locally
68
+
- Go 1.24.x installed
130
69
131
70
```bash
132
-
# Run all linters (same as CI)
133
-
make lint
134
-
135
-
# Run linter with auto-fix
136
-
make lint-fix
137
-
```
138
-
139
-
### Git Hooks (Optional)
140
-
141
-
To automatically run linting before commits:
142
-
143
-
```bash
144
-
git config core.hooksPath .githooks
145
-
```
146
-
147
-
This will prevent commits that fail linting or have formatting issues.
148
-
149
-
### Project Structure
150
-
151
-
```
152
-
├── api/ # OpenApi specification
153
-
├── cmd/ # Application entry points
154
-
├── config/ # Configuration files
155
-
├── internal/ # Private application code
156
-
│ ├── api/ # HTTP server and request handlers (routing)
157
-
│ ├── auth/ # GitHub OAuth integration
158
-
│ ├── config/ # Configuration management
159
-
│ ├── database/ # Data persistence abstraction
160
-
│ ├── model/ # Data models and domain structures
161
-
│ └── service/ # Business logic implementation
162
-
├── pkg/ # Public libraries
163
-
├── scripts/ # Utility scripts
164
-
└── tools/ # Command line tools
165
-
└── publisher/ # Tool to publish MCP servers to the registry
166
-
```
167
-
168
-
### Architecture Overview
169
-
170
-
### Request Flow
171
-
1. HTTP requests enter through router (`internal/api/router/`)
172
-
2. Handlers in `internal/api/handlers/v0/` validate and process requests
173
-
3. Service layer executes business logic
174
-
4. Database interface handles persistence
175
-
5. JSON responses returned to clients
176
-
177
-
### Key Interfaces
178
-
-**Database Interface** (`internal/database/database.go`) - Abstracts data persistence with PostgreSQL and in-memory implementations
179
-
-**RegistryService** (`internal/service/service.go`) - Business logic abstraction over database
180
-
-**Auth Service** (`internal/auth/jwt.go`) - Registry token creation and validation
-**Factory Pattern** for service creation with dependency injection
191
-
-**Repository Pattern** for database abstraction
192
-
-**Context Pattern** for timeout management (5-second DB operations)
193
-
-**Cursor-based Pagination** using UUIDs for stateless pagination
194
-
195
-
## API Endpoints
196
-
197
-
### API Documentation
198
-
199
-
```
200
-
GET /docs
71
+
# Build and run locally
72
+
make build
73
+
make dev-local
201
74
```
202
75
203
-
The API is documented using Swagger/OpenAPI. This page provides a complete reference of all endpoints with request/response schemas and examples, and allows you to test the API directly from your browser.
204
-
205
-
## Configuration
76
+
The service runs on [`localhost:8080`](http://localhost:8080) by default. This can be configured with environment variables in `.env` - see [.env.example](./.env.example) for a reference.
206
77
207
-
The service can be configured using environment variables. See [.env.example](./.env.example) for details.
78
+
</details>
208
79
209
-
## Pre-built Docker Images
80
+
<details>
81
+
<summary>Alternative: Running a pre-built Docker image</summary>
210
82
211
-
Pre-built Docker images are automatically published to GitHub Container Registry on each release and main branch commit:
83
+
Pre-built Docker images are automatically published to GitHub Container Registry:
212
84
213
85
```bash
214
86
# Run latest from main branch
@@ -218,41 +90,75 @@ docker run -p 8080:8080 ghcr.io/modelcontextprotocol/registry:latest
218
90
docker run -p 8080:8080 ghcr.io/modelcontextprotocol/registry:main-20250806-a1b2c3d
219
91
```
220
92
221
-
**Available image tags:**
222
-
-`latest` - Latest commit from main branch
223
-
-`main-<date>-<sha>` - Specific commit builds
93
+
**Available tags:**`latest`, `main-<date>-<sha>`
224
94
225
-
**Configuration:** The Docker images support all environment variables listed in the [Configuration](#configuration) section. For production deployments, you'll need to configure the database connection and other settings via environment variables.
95
+
</details>
226
96
227
-
###Import Seed Data
97
+
#### Publishing a server
228
98
229
-
Registry instances can import data from:
99
+
To publish a server, we've built a simple CLI. You can use it with:
[`design_principles.md`](./design_principles.md) - Core constraints and principles guiding the registry design
3
+
This extends [the main README](../README.md).
6
4
7
-
[`faq.md`](./faq.md) - Frequently asked questions about the MCP Registry
8
-
9
-
[`roadmap.md`](./roadmap.md) - High-level roadmap for the MCP Registry development
5
+
## Project Documentation
10
6
11
-
[`MCP Developers Summit 2025 - Registry Talk Slides.pdf`](./MCP%20Developers%20Summit%202025%20-%20Registry%20Talk%20Slides.pdf) - Slides from a talk given at the MCP Developers Summit on May 23, 2025, with an up-to-date vision of how we are thinking about the official registry.
7
+
-[`faq.md`](./faq.md) - Frequently asked questions about the MCP Registry
8
+
-[`design_principles.md`](./design_principles.md) - Core constraints and principles guiding the registry design
9
+
-[`roadmap.md`](./roadmap.md) - High-level roadmap for the MCP Registry development
10
+
-[`MCP Developers Summit 2025 - Registry Talk Slides.pdf`](./MCP%20Developers%20Summit%202025%20-%20Registry%20Talk%20Slides.pdf) - Slides from a talk given at the MCP Developers Summit on May 23, 2025, with an up-to-date vision of how we are thinking about the official registry.
12
11
13
12
## API & Technical Specifications
14
13
15
-
[`openapi.yaml`](./openapi.yaml) - OpenAPI specification for the official registry API
16
-
17
-
[`api_examples.md`](./api_examples.md) - Examples of what data will actually look like coming from the official registry API
18
-
19
-
[`architecture.md`](./architecture.md) - Technical architecture, deployment strategies, and data flows
20
-
21
-
[`server.json` README](./server-json/README.md) - description of the `server.json` purpose and schema
22
-
23
-
[`new_package_registry.md`](./new_package_registry.md) - steps to add a new package registry for local server packages
14
+
-[`openapi.yaml`](./openapi.yaml) - OpenAPI specification for the official registry API
15
+
-[`api_examples.md`](./api_examples.md) - Examples of what data will actually look like coming from the official registry API
16
+
-[`architecture.md`](./architecture.md) - Technical architecture, deployment strategies, and data flows
17
+
-[`server.json` README](./server-json/README.md) - description of the `server.json` purpose and schema
18
+
-[`new_package_registry.md`](./new_package_registry.md) - steps to add a new package registry for local server packages
0 commit comments