modelcontextprotocol/registry
主な特徴
- RESTful APIによるMCPサーバーエントリの管理(CRUD操作)
- GitHub認証によるセキュアなパブリッシング
- ページネーションサポート付きのサーバーリスト
リポジトリ解析: modelcontextprotocol/registry
基本情報
- リポジトリ名: modelcontextprotocol/registry
- 主要言語: Go
- スター数: 1,768
- フォーク数: 122
- 最終更新: アクティブ開発中(初期段階)
- ライセンス: MIT License
- トピックス: MCP、レジストリサービス、API
概要
一言で言うと
Model Context Protocol(MCP)サーバーのためのコミュニティ主導の集中型レジストリサービス
詳細説明
MCP Registryは、Model Context Protocol(MCP)サーバーの検出と管理を可能にする中央リポジトリサービスです。MCPは、AIモデルがさまざまなコンテキスト(ファイルシステム、データベース、API等)と対話するための標準化されたプロトコルで、このレジストリはMCPサーバーのメタデータ、設定、機能情報を一元管理します。サーバー作成者は一度パブリッシュすれば、すべてのMCPクライアントやアグリゲーターが同じ正式なデータを参照できるという「Single Source of Truth」の原則に基づいて設計されています。
主な特徴
- RESTful APIによるMCPサーバーエントリの管理(CRUD操作)
- GitHub認証によるセキュアなパブリッシング
- ページネーションサポート付きのサーバーリスト
使用方法
インストール
前提条件
- Go 1.18以上
- MongoDB
- Docker(推奨、開発環境用)
インストール手順
# 方法1: Docker Compose経由(推奨)
# Dockerイメージをビルド
docker build -t registry .
# Docker ComposeでレジストリとMongoDBを起動
docker compose up
# 方法2: ローカルビルド
# 実行ファイルをビルド
go build ./cmd/registry
基本的な使い方
Hello World相当の例
# ヘルスチェック
curl http://localhost:8080/v0/health
# Ping(環境情報確認)
curl http://localhost:8080/v0/ping
実践的な使用例
# MCPサーバーリストを取得
curl "http://localhost:8080/v0/servers?limit=30"
# 特定のサーバー詳細を取得
curl "http://localhost:8080/v0/servers/{server-id}"
# 新しいサーバーをパブリッシュ(認証必要)
curl -X POST http://localhost:8080/v0/publish \
-H "Authorization: Bearer your_token_here" \
-H "Content-Type: application/json" \
-d '{
"name": "io.github.example/my-mcp-server",
"description": "My MCP server description",
"repository": {
"url": "https://github.com/example/my-mcp-server",
"source": "github"
},
"packages": [
{
"registry_name": "npm",
"name": "@example/my-mcp-server",
"version": "1.0.0"
}
]
}'
高度な使い方
# ページネーションを使用したサーバーリスト取得
curl "http://localhost:8080/v0/servers?limit=100&cursor=next_cursor_value"
# エンドポイントのテスト実行
./scripts/test_endpoints.sh --endpoint servers
# パブリッシュツールを使用
cd tools/publisher
go run main.go --config server.json --token $GITHUB_TOKEN
ドキュメント・リソース
公式ドキュメント
- README.md: プロジェクト概要とクイックスタート
- docs/api_examples.md: API使用例
- docs/architecture.md: システムアーキテクチャ
- docs/design_principles.md: 設計原則
サンプル・デモ
- scripts/test_endpoints.sh: エンドポイントテストスクリプト
- scripts/test_publish.sh: パブリッシュテストスクリプト
- data/seed_2025_05_16.json: シードデータ例
チュートリアル・ガイド
- Swagger UI:
/v0/swagger/index.html
(対話的APIドキュメント) - OpenAPI仕様:
docs/openapi.yaml
- 貢献ガイドライン:
CONTRIBUTING.md
技術的詳細
アーキテクチャ
全体構造
レイヤードアーキテクチャを採用したRESTful APIサービス:
- API層: HTTPリクエストハンドリング
- サービス層: ビジネスロジック
- データベース層: MongoDB/メモリDBアクセス
- 認証層: GitHub OAuth認証
ディレクトリ構成
project-root/
├── cmd/ # アプリケーションエントリポイント
│ └── registry/ # メインアプリケーション
├── internal/ # プライベートアプリケーションコード
│ ├── api/ # HTTPサーバーとリクエストハンドラー
│ ├── auth/ # 認証サービス(GitHub OAuth)
│ ├── config/ # 設定管理
│ ├── database/ # データベース実装
│ ├── model/ # データモデル定義
│ └── service/ # ビジネスロジック
├── docs/ # APIドキュメント
├── scripts/ # ユーティリティスクリプト
└── tools/ # コマンドラインツール
└── publisher/ # MCPサーバーパブリッシュツール
主要コンポーネント
-
RegistryService: MCPサーバー管理のコアサービス
- 場所:
internal/service/registry_service.go
- 依存: Database interface
- インターフェース: ListServers, GetServer, PublishServer
- 場所:
-
Database Interface: データベース抽象化層
- 場所:
internal/database/database.go
- 依存: MongoDB driver / Memory storage
- インターフェース: CRUD操作、ImportSeed
- 場所:
-
AuthService: 認証・認可サービス
- 場所:
internal/auth/service.go
- 依存: GitHub OAuth
- インターフェース: ValidateToken, GetGitHubAuth
- 場所:
技術スタック
コア技術
- 言語: Go 1.23(高性能、並行処理)
- フレームワーク: 標準ライブラリ + gorilla/mux(推測)
- 主要ライブラリ:
- go.mongodb.org/mongo-driver: MongoDBドライバー
- github.com/swaggo/http-swagger: Swagger UI統合
- github.com/caarlos0/env: 環境変数管理
開発・運用ツール
- ビルドツール: Go Modules、Docker
- テスト: Go標準テストフレームワーク
- CI/CD: GitHub Actions(推測)
- デプロイ: Docker、Kubernetes対応
設計パターン・手法
- Repository Pattern(データアクセス層の抽象化)
- Dependency Injection(インターフェースベースの設計)
- RESTful API設計原則
- 環境変数による設定管理
データフロー・処理フロー
- HTTPリクエスト受信 → API層
- 認証チェック(必要な場合)
- サービス層でビジネスロジック実行
- データベース層でデータ操作
- レスポンス生成・返却
API・インターフェース
公開API
サーバーリスト取得
GET /v0/servers?limit=30&cursor=next_cursor
Response:
{
"servers": [...],
"metadata": {
"next_cursor": "...",
"count": 30
}
}
サーバー詳細取得
GET /v0/servers/{id}
Response:
{
"id": "...",
"name": "io.example/server",
"packages": [...],
"repository": {...}
}
設定・カスタマイズ
環境変数設定
MCP_REGISTRY_DATABASE_TYPE=mongodb
MCP_REGISTRY_DATABASE_URL=mongodb://localhost:27017
MCP_REGISTRY_GITHUB_CLIENT_ID=your_client_id
MCP_REGISTRY_GITHUB_CLIENT_SECRET=your_client_secret
MCP_REGISTRY_LOG_LEVEL=info
拡張・プラグイン開発
Database interfaceを実装することで、新しいストレージバックエンドを追加可能
パフォーマンス・スケーラビリティ
パフォーマンス特性
- 軽量なGoランタイム
- 効率的なMongoDBクエリ
- ページネーションによる大規模データセット対応
スケーラビリティ
- 水平スケーリング対応(ステートレス設計)
- MongoDB レプリケーション対応
- Docker/Kubernetes環境での運用可能
制限事項
- 初期開発段階のため、一部機能が未実装
- 24時間のダウンタイム許容設計
- 現在は基本的な認証のみ(GitHubのみ)
評価・所感
技術的評価
強み
- シンプルで拡張可能な設計
- 業界標準のセキュリティプラクティス
- ベンダー中立的なアプローチ
改善の余地
- より高度な検索・フィルタリング機能
- キャッシング戦略の実装
- より詳細なドキュメント
向いている用途
- MCPサーバーの中央レジストリ
- MCPエコシステムの成長支援
- 開発者向けのMCPサーバー発見ツール
- プライベートレジストリの構築基盤
向いていない用途
- リアルタイムが要求されるシステム
- 高頻度更新が必要なアプリケーション
- 複雑な権限管理が必要な環境
総評
MCP Registryは、Model Context Protocolエコシステムの重要な基盤コンポーネントです。シンプルで実用的な設計により、MCPサーバーの発見と管理を効率化します。初期開発段階にありながら、明確な設計原則(Single Source of Truth、最小運用負荷、ベンダー中立性など)に基づいて構築されており、将来的な拡張性も考慮されています。MCPが普及するにつれて、このレジストリの重要性はさらに高まることが予想されます。