mcpField
M
Model Context Protocol (MCP) Server

Model Context Protocol (MCP) Server

ローカル
github.com/shaswata56AI・エージェント074 週間前に更新

Model Context Protocol (MCP) Server について

Claude、OpenAI、mock AI サービスにリクエストを振り分けるモジュール型 MCP サーバーです。stdio、TCP、WebSocket に対応し、リクエストごとのサービス選択やストリーミングが可能です。

主な機能

  1. 01Claude、OpenAI、mock に対応
  2. 02リクエストごとにサービスを選択
  3. 03stdio、TCP、WebSocket のトランスポート
  4. 04JSON-RPC 2.0 インターフェース
  5. 05ストリーミング応答
  6. 06サービスとトランスポートの拡張

活用シーン

  1. 01stdio 経由で AI リクエストを提供
  2. 02TCP 経由でネットワークアプリに接続
  3. 03WebSocket 経由でブラウザー要求を処理
  4. 04mock サービスで連携をテスト

MCP 対応

MCP インターフェースを通じて、ツールやリソース操作を含む AI メッセージ処理とシステム機能を提供します。クライアントは stdio、TCP、WebSocket で接続できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Model Context Protocol (MCP) サーバー

複数のトランスポートオプションと動的なサービス選択に対応した、AI サービス向けのモジュール式 Model Context Protocol サーバーです。保守性と拡張性を高めるため、SOLID 原則に基づいて構築されています。

特長

  • 複数の AI サービス:Claude、OpenAI、モックサービスに対応
  • 動的なサービス選択:リクエストごとに AI サービスを選択
  • 複数のトランスポート:
    • stdio:コマンドラインでの使用やスクリプト向け
    • TCP:ネットワークベースのアプリケーション向け
    • WebSocket:ウェブブラウザーやリアルタイムアプリケーション向け
  • JSON-RPC 2.0:予測可能なやり取りを実現する準拠インターフェース
  • モジュール式アーキテクチャ:新しいサービスやトランスポートを簡単に追加可能
  • 環境設定:.env ファイルを使った簡単なセットアップ
  • ストリーミング対応:対応するトランスポートでリアルタイムに応答をストリーミング

リポジトリ構成

basic-mcp-server/
├── .env                      # Environment configuration
├── .gitignore                # Git ignore rules
├── README.md                 # Project documentation
├── examples/                 # Example clients
│   ├── example_client.py     # Command-line client example
│   └── websocket_client.html # Browser WebSocket client
├── mcp_server.py             # Main entry point
└── mcp_server/               # Core package
    ├── config/               # Configuration management
    │   ├── settings.py       # Environment and settings handling
    │   └── __init__.py
    ├── core/                 # Core server logic
    │   ├── server.py         # Main server implementation
    │   └── __init__.py
    ├── handlers/             # Method handlers
    │   ├── base_handlers.py  # Standard MCP handlers
    │   ├── system_handlers.py # System info handlers
    │   └── __init__.py
    ├── models/               # Data models
    │   ├── json_rpc.py       # JSON-RPC data structures
    │   └── __init__.py
    ├── services/             # AI service implementations
    │   ├── claude_service.py # Anthropic Claude API
    │   ├── openai_service.py # OpenAI API
    │   └── __init__.py       # Service registry
    ├── transports/           # Communication protocols
    │   ├── base.py           # Transport interfaces
    │   ├── websocket.py      # WebSocket implementation
    │   └── __init__.py
    └── __init__.py

インストール

  1. リポジトリをクローンします:

    git clone https://github.com/shaswata56/basic-mcp-server.git
    cd basic-mcp-server
    
  2. 仮想環境を作成し、依存関係をインストールします:

    python -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
    pip install -e .
    
  3. .env ファイルを編集し、API キーと設定を指定して環境を構成します。

設定

環境変数

サーバーは、.env ファイル内の環境変数を使って設定できます。

変数説明デフォルト
AI_SERVICE_TYPE使用するデフォルトの AI サービス("claude"、"openai"、"mock")"claude"
SECRETS_FILEAPI シークレットを含む JSON ファイルのパスNone
ANTHROPIC_API_KEYAnthropic API キーNone
OPENAI_API_KEYOpenAI API キーNone
MCP_SERVER_NAMEサーバー名"ai-mcp-server"
MCP_SERVER_VERSIONサーバーのバージョン"1.0.0"
MCP_TRANSPORT_TYPEトランスポートの種類("stdio"、"tcp"、"websocket")"stdio"
MCP_TCP_HOSTTCP/WebSocket のホストアドレス"127.0.0.1"
MCP_TCP_PORTTCP サーバーのポート9000
MCP_WS_PORTWebSocket サーバーのポート8765
MCP_WS_PATHWebSocket サーバーのパス"/"
MCP_WS_ORIGINS許可するオリジンをカンマ区切りで指定したリストNone(すべて許可)
CLAUDE_DEFAULT_MODELデフォルトの Claude モデル"claude-3-opus-20240229"
CLAUDE_DEFAULT_MAX_TOKENSClaude のデフォルトの最大トークン数4096
CLAUDE_DEFAULT_TEMPERATUREClaude のデフォルトの temperature0.7
OPENAI_DEFAULT_MODELデフォルトの OpenAI モデル"gpt-4o"
OPENAI_DEFAULT_MAX_TOKENSOpenAI のデフォルトの最大トークン数1024
OPENAI_DEFAULT_TEMPERATUREOpenAI のデフォルトの temperature0.7

| EMBEDDINGS_3_LARGE_API_URL | text-embedding-3-large の Azure エンドポイント | None | | EMBEDDINGS_3_LARGE_API_KEY | text-embedding-3-large の API キー | None | | EMBEDDINGS_3_SMALL_API_URL | text-embedding-3-small の Azure エンドポイント | None | | EMBEDDINGS_3_SMALL_API_KEY | text-embedding-3-small の API キー | None | | AZURE_OPENAI_EMBEDDING_DEPLOYMENT | 埋め込みの Azure デプロイ名 | <model name> | | QDRANT_URL | Qdrant サーバーの URL(インメモリーで使用する場合は :memory:) | None | | QDRANT_API_KEY | Qdrant Cloud の API キー | None |

埋め込み API の認証情報が指定されていない場合、外部サービスなしでテストを実行できるよう、サーバーは決定論的なモック埋め込みを生成します。

本番環境にデプロイする場合は、専用の Qdrant サーバーを指すように QDRANT_URL を設定してください。リモートサーバーを使用すると、デフォルトのインメモリーモードと比較して、永続ストレージと優れたベクトル検索パフォーマンスが得られます。

オプションの SECRETS_FILE 変数を使用すると、環境変数の代わりに JSON ファイルに API キーを保存できます。シークレットファイルに定義された値は、対応する環境変数が設定されていない場合に使用されます。シークレット値が配列の場合、キーが要求されるたびにサーバーは値を順番に切り替えるため、簡単なキーのローテーション戦略を実現できます。

使用方法

サーバーの起動
標準の stdio モード
python mcp_server.py
TCP サーバーモード
python mcp_server.py --tcp --host 127.0.0.1 --port 9000
WebSocket サーバーモード
python mcp_server.py --websocket --host 127.0.0.1 --port 8765 --ws-path /
コマンドラインオプション
usage: mcp_server.py [-h] [--tcp | --websocket] [--host HOST] [--port PORT]
                     [--ws-path WS_PATH] [--service-type {claude,openai,mock}]
                     [--claude-api-key CLAUDE_API_KEY]
                     [--openai-api-key OPENAI_API_KEY]
                     [--qdrant-url QDRANT_URL]
                     [--qdrant-api-key QDRANT_API_KEY] [--mock]
                     [--log-level {DEBUG,INFO,WARNING,ERROR}]
                     [--env-file ENV_FILE]

AI MCP Server with JSON-RPC

options:
  -h, --help            show this help message and exit
  --log-level {DEBUG,INFO,WARNING,ERROR}
                        Logging level
  --env-file ENV_FILE   Path to .env file (default: .env in project root)

Transport Options:
  --tcp                 Run as TCP server
  --websocket           Run as WebSocket server
  --host HOST           Host to bind server
  --port PORT           Port for server
  --ws-path WS_PATH     URL path for WebSocket server (default: /)

AI Service Options:
  --service-type {claude,openai,mock}
                        AI service to use
  --claude-api-key CLAUDE_API_KEY
                        Anthropic API key
  --openai-api-key OPENAI_API_KEY
                          OpenAI API key
  --qdrant-url QDRANT_URL
                          Qdrant server URL
  --qdrant-api-key QDRANT_API_KEY
                          Qdrant API key
  --mock                Use mock AI service (for testing)

クライアントの例

コマンドラインクライアント

examples/example_client.py を使用すると、サーバーと簡単にやり取りできます。

# Initialize connection
python examples/example_client.py initialize

# List available tools
python examples/example_client.py list-tools

# Echo text
python examples/example_client.py echo "Hello, world!"

# Calculate expression
python examples/example_client.py calculate "2 + 3 * 4"

# Ask AI with dynamic service selection
python examples/example_client.py ask "What is the capital of France?" --service claude

# System information
python examples/example_client.py system-info
WebSocket ブラウザクライアント

WebSocket トランスポートを使用する場合は、ブラウザーで examples/websocket_client.html を開きます。

  1. WebSocket URL(例:ws://localhost:8765/)を入力します
  2. 「Connect」をクリックします
  3. インターフェースを使ってサーバーにリクエストを送信します

JSON-RPC インターフェース

統合 AI メッセージリクエスト
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "ai/message",
    "arguments": {
      "prompt": "What is the capital of France?",
      "service_name": "claude"  // Optional: "claude", "openai", "mock" or omit for default
    }
  },
  "id": 1
}
サービス固有のリクエスト(後方互換性のため)

Claude:

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "claude/message",
    "arguments": {
      "prompt": "What is the capital of France?"
    }
  },
  "id": 2
}

OpenAI:

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "openai/message",
    "arguments": {
      "prompt": "What is the capital of France?"
    }
  },
  "id": 3
}
利用可能なメソッド
メソッド説明
initializeサーバー接続を初期化します
tools/list利用可能なツールの一覧を取得します
tools/call引数を指定してツールを呼び出します
resources/list利用可能なリソースの一覧を取得します
resources/readリソースを読み取ります
system/infoシステム情報を取得します
system/healthシステムの健全性を確認します

サーバーの拡張

新しいメソッドハンドラーの追加
  1. handlers ディレクトリに、HandlerInterface を実装する新しいハンドラークラスを作成します
  2. AIMCPServerApp.initialize() メソッドに登録します
新しい AI サービスの追加
  1. services ディレクトリに、AIServiceInterface を実装する新しいサービスクラスを作成します
  2. create_ai_services_from_config() のサービスレジストリに追加します
新しいトランスポートの追加
  1. transports ディレクトリに、Transport クラスを継承する新しいトランスポートクラスを作成します
  2. 新しいトランスポートを使用するようにメイン関数を更新します

WebSocket とロードバランサー

このサーバーの前段で、TLS/SSL を終端するロードバランサー(AWS ELB など)を使用する場合:

  • クライアントはセキュア WebSocket(wss://)を使用してロードバランサーに接続します
  • ロードバランサーが TLS/SSL の終端を処理します
  • ロードバランサーは通常の WebSocket(ws://)を使用して MCP サーバーにトラフィックを転送します
  • アプリケーション自体で WSS を実装する必要はありません

パフォーマンスに関する考慮事項

非常に大規模なリポジトリ、特に C# プロジェクトを処理すると、多数のデータベース操作が発生することがあります。 MongoDB でパフォーマンスの問題が発生した場合は、挿入をバッチ処理するか、別のストレージ戦略を検討してください。

ライセンス

MIT ライセンス

謝辞

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。