5.1 KiB
5.1 KiB
MCP Registry Architecture
This document describes the technical architecture of the MCP Registry, including system components, deployment strategies, and data flows.
System Overview
The MCP Registry is designed as a lightweight metadata service that bridges MCP server creators with consumers (MCP clients and aggregators).
graph TB
subgraph "Server Maintainers"
CLI[CLI Tool]
end
subgraph "MCP Registry"
API[REST API<br/>Go]
DB[(MongoDB or PostgreSQL)]
CDN[CDN Cache]
end
subgraph "Intermediaries"
MKT[Marketplaces]
AGG[Aggregators]
end
subgraph "End Consumers"
MC[MCP Client Host Apps<br/>e.g. Claude Desktop]
end
subgraph "External Services"
NPM[npm Registry]
PYPI[PyPI Registry]
DOCKER[Docker Hub]
NUGET[NuGet Gallery]
DNS[DNS Services]
GH[GitHub OAuth]
end
CLI --> |Publish| API
API --> DB
API --> CDN
CDN --> |Daily ETL| MKT
CDN --> |Daily ETL| AGG
MKT --> MC
AGG --> MC
API -.-> |Auth| GH
API -.-> |Verify| DNS
API -.-> |Reference| NPM
API -.-> |Reference| PYPI
API -.-> |Reference| NUGET
API -.-> |Reference| DOCKER
Core Components
REST API (Go)
The main application server implemented in Go, providing:
- Public read endpoints for server discovery
- Authenticated write endpoints for server publication
- GitHub OAuth integration (extensible to other providers)
- DNS verification system (optional for custom namespaces)
Database (MongoDB or PostgreSQL)
Primary data store for:
- Versioned server metadata (server.json contents)
- User authentication state
- DNS verification records
CDN Layer
Critical for scalability:
- Caches all public read endpoints
- Reduces load on origin servers
- Enables global distribution
- Designed for daily consumer polling patterns
CLI Tool
Developer interface for:
- Server publication workflow
- GitHub OAuth flow
- DNS verification
Deployment Architecture
Kubernetes Deployment (Helm)
The registry is designed to run on Kubernetes using Helm charts:
graph TB
subgraph "Kubernetes Cluster"
subgraph "Namespace: mcp-registry"
subgraph "Registry Service"
LB[Load Balancer<br/>:80]
RS[Registry Service<br/>:8080]
RP1[Registry Pod 1]
RP2[Registry Pod 2]
RP3[Registry Pod N]
end
subgraph "Database Service"
DBS[DB Service<br/>:27017]
SS[StatefulSet]
PV[Persistent Volume]
end
subgraph "Secrets"
GHS[GitHub OAuth Secret]
end
end
end
LB --> RS
RS --> RP1
RS --> RP2
RS --> RP3
RP1 --> DBS
RP2 --> DBS
RP3 --> DBS
DBS --> SS
SS --> PV
RP1 -.-> GHS
RP2 -.-> GHS
RP3 -.-> GHS
Data Flow Patterns
1. Server Publication Flow
sequenceDiagram
participant Dev as Developer
participant CLI as CLI Tool
participant API as Registry API
participant DB as Database
participant GH as GitHub
participant DNS as DNS Provider
Dev->>CLI: mcp publish server.json
CLI->>CLI: Validate server.json
CLI->>GH: OAuth flow
GH-->>CLI: Access token
CLI->>API: POST /servers
API->>GH: Verify token
API->>DNS: Verify domain (if applicable)
API->>DB: Store metadata
API-->>CLI: Success
CLI-->>Dev: Published!
2. Consumer Discovery Flow
sequenceDiagram
participant Client as MCP Client Host App
participant INT as Intermediary<br/>(Marketplace/Aggregator)
participant CDN as CDN Cache
participant API as Registry API
participant DB as Database
Note over INT,CDN: Daily ETL Process
INT->>CDN: GET /servers
alt Cache Hit
CDN-->>INT: Cached response
else Cache Miss
CDN->>API: GET /servers
API->>DB: Query servers
DB-->>API: Server list
API-->>CDN: Response + cache headers
CDN-->>INT: Response
end
INT->>INT: Process & enhance data
INT->>INT: Store in local cache
Note over Client,INT: Real-time Client Access
Client->>INT: Request server list
INT-->>Client: Curated/enhanced data
3. DNS Verification Flow
sequenceDiagram
participant User as User
participant CLI as CLI Tool
participant API as Registry API
participant DNS as DNS Provider
participant DB as Database
User->>CLI: mcp verify-domain example.com
CLI->>API: POST /verify-domain
API->>API: Generate verification token
API->>DB: Store pending verification
API-->>CLI: TXT record: mcp-verify=abc123
CLI-->>User: Add TXT record to DNS
User->>DNS: Configure TXT record
User->>CLI: Confirm added
CLI->>API: POST /verify-domain/check
API->>DNS: Query TXT records
DNS-->>API: TXT records
API->>API: Validate token
API->>DB: Store verification
API-->>CLI: Domain verified
CLI-->>User: Success!