modelcontextprotocol/registry

⭐ 1,768 🍴 122 Go📄 MIT License GitHubで見る →

主な特徴

  • 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 Modules、Docker
  • テスト: Go標準テストフレームワーク
  • CI/CD: GitHub Actions(推測)
  • デプロイ: Docker、Kubernetes対応

設計パターン・手法

  • Repository Pattern(データアクセス層の抽象化)
  • Dependency Injection(インターフェースベースの設計)
  • RESTful API設計原則
  • 環境変数による設定管理

データフロー・処理フロー

  1. HTTPリクエスト受信 → API層
  2. 認証チェック(必要な場合)
  3. サービス層でビジネスロジック実行
  4. データベース層でデータ操作
  5. レスポンス生成・返却

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が普及するにつれて、このレジストリの重要性はさらに高まることが予想されます。