MCP Server について
MCP Serverは、AIモデルと開発環境の間で標準化されたコンテキスト交換を行う、FastAPIベースのPython実装です。JSON-RPC 2.0、SSE接続、セッション管理、テストクライアントを備え、MCPサービスを拡張・統合する開発者向けです。
主な機能
- 01JSON-RPC 2.0通信
- 02Server-Sent Events接続
- 03セッションの初期化と終了
- 04モジュール式メソッドハンドラー
- 05FastAPIによる非同期処理
- 06付属のテストクライアント
活用シーン
- 01付属クライアントでMCPセッションをテスト
- 02独自のMCPリクエストメソッドを追加
- 03SSE経由でクライアントを接続
- 04FastAPIでMCPサービスを開発
MCP 対応
初期化、サンプリング、セッション管理に対応するMCPサーバーを実装し、`/api`でJSON-RPCリクエスト、`/sse`でSSE接続を提供します。テストクライアントも付属します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP サーバー
プロジェクト概要
FastAPI と MCP(Model Context Protocol)を基盤とするこのプロジェクトは、AI モデルと開発環境間の標準化されたコンテキストのやり取りを可能にします。モデルのデプロイを簡素化し、効率的な API エンドポイントを提供して、モデルの入力と出力の一貫性を確保することで、AI アプリケーションの拡張性と保守性を高め、開発者が AI タスクを容易に統合、管理できるようにします。
MCP(Model Context Protocol)は、AI モデルと開発環境間のコンテキストのやり取りを統一するプロトコルです。このプロジェクトは、初期化、サンプリング、セッション管理など、基本的な MCP プロトコル機能をサポートする Python ベースの MCP サーバー実装を提供します。
機能
- JSON-RPC 2.0:標準の JSON-RPC 2.0 プロトコルに基づくリクエストとレスポンスの通信
- SSE 接続:リアルタイム通知のための Server-Sent Events 接続をサポート
- モジュール設計:拡張やカスタマイズが容易なモジュール型アーキテクチャ
- 非同期処理:FastAPI と非同期 I/O を使用した高性能サービス
- 完全なクライアント:完全なテストクライアント実装を同梱
プロジェクト構成
mcp_server/
├── mcp_server.py # MCP server main program
├── mcp_client.py # MCP client test program
├── routers/
│ ├── __init__.py # Router package initialization
│ └── base_router.py # Base router implementation
├── requirements.txt # Project dependencies
└── README.md # Project documentation
インストール
- リポジトリをクローンします:
git clone https://github.com/freedanfan/mcp_server.git
cd mcp_server
- 依存関係をインストールします:
pip install -r requirements.txt
使用方法
サーバーの起動
python mcp_server.py
デフォルトでは、サーバーは 127.0.0.1:12000 で起動します。環境変数を使用してホストとポートをカスタマイズできます:
export MCP_SERVER_HOST=0.0.0.0
export MCP_SERVER_PORT=8000
python mcp_server.py
クライアントの実行
別のターミナルでクライアントを実行します:
python mcp_client.py
サーバーがデフォルトのアドレスで実行されていない場合は、環境変数を設定できます:
export MCP_SERVER_URL="http://your-server-address:port"
python mcp_client.py
API エンドポイント
サーバーは以下の API エンドポイントを提供します:
- ルートパス(
/):サーバー情報を提供します - API エンドポイント(
/api):JSON-RPC リクエストを処理します - SSE エンドポイント(
/sse):SSE 接続を処理します
MCP プロトコルの実装
初期化の流れ
- クライアントが SSE 経由でサーバーに接続します
- サーバーが API エンドポイントの URI を返します
- クライアントがプロトコルのバージョンと機能を含む初期化リクエストを送信します
- サーバーが初期化リクエストに応答し、サーバーの機能を返します
サンプリングリクエスト
クライアントはプロンプトを含むサンプリングリクエストを送信できます:
{
"jsonrpc": "2.0",
"id": "request-id",
"method": "sample",
"params": {
"prompt": "Hello, please introduce yourself."
}
}
サーバーはサンプリング結果を返します:
{
"jsonrpc": "2.0",
"id": "request-id",
"result": {
"content": "This is a response to the prompt...",
"usage": {
"prompt_tokens": 10,
"completion_tokens": 50,
"total_tokens": 60
}
}
}
セッションの終了
クライアントはシャットダウンリクエストを送信できます:
{
"jsonrpc": "2.0",
"id": "request-id",
"method": "shutdown",
"params": {}
}
サーバーは正常にシャットダウンします:
{
"jsonrpc": "2.0",
"id": "request-id",
"result": {
"status": "shutting_down"
}
}
開発時の拡張
新しいメソッドの追加
新しい MCP メソッドを追加するには、MCPServer クラスにハンドラー関数を追加し、_register_methods メソッドに登録します:
def handle_new_method(self, params: dict) -> dict:
"""Handle new method"""
logger.info(f"Received new method request: {params}")
# Processing logic
return {"result": "success"}
def _register_methods(self):
# Register existing methods
self.router.register_method("initialize", self.handle_initialize)
self.router.register_method("sample", self.handle_sample)
self.router.register_method("shutdown", self.handle_shutdown)
# Register new method
self.router.register_method("new_method", self.handle_new_method)
AI モデルの統合
実際の AI モデルを統合するには、handle_sample メソッドを変更します:
async def handle_sample(self, params: dict) -> dict:
"""Handle sampling request"""
logger.info(f"Received sampling request: {params}")
# Get prompt
prompt = params.get("prompt", "")
# Call AI model API
# For example: using OpenAI API
response = await openai.ChatCompletion.acreate(
model="gpt-4",
messages=[{"role": "user", "content": prompt}]
)
content = response.choices[0].message.content
usage = response.usage
return {
"content": content,
"usage": {
"prompt_tokens": usage.prompt_tokens,
"completion_tokens": usage.completion_tokens,
"total_tokens": usage.total_tokens
}
}
トラブルシューティング
よくある問題
- 接続エラー:サーバーが実行中であり、クライアントが正しいサーバー URL を使用していることを確認します
- 405 Method Not Allowed:クライアントが正しい API エンドポイントにリクエストを送信していることを確認します
- SSE 接続の失敗:ネットワーク接続とファイアウォールの設定を確認します
ログ
サーバーとクライアントの両方で詳細なログを確認できます。詳しい情報はログを確認してください:
# Increase log level
export PYTHONPATH=.
python -m logging -v DEBUG -m mcp_server
参考資料
ライセンス
このプロジェクトは MIT ライセンスのもとでライセンスされています。詳細については LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。