MCPサーバーのPython実装:基本クラス構造 Link to heading

はじめに Link to heading

前回の記事で設計した基本構造に基づいて、MCPサーバーの基本クラス構造を実装しました。この記事では、実装の詳細と設計の意図について説明します。

実装の概要 Link to heading

プロジェクトは以下の3つの主要なファイルで構成されています:

  1. models.py: データモデルの定義
  2. server.py: MCPサーバーの基本クラス
  3. main.py: FastAPIを使用したHTTPサーバー

データモデルの実装 Link to heading

models.pyでは、Pydanticを使用して型安全なデータモデルを定義しています:

1class ServerCapabilities(BaseModel):
2    """サーバーの機能を定義するモデル"""
3    logging: Dict[str, Any] = {}
4    completions: Dict[str, Any] = {}
5    prompts: Dict[str, bool] = {"listChanged": True}
6    resources: Dict[str, bool] = {"subscribe": True, "listChanged": True}
7    tools: Dict[str, bool] = {"listChanged": True}

Pydanticを使用する利点:

  • 自動的なバリデーション
  • 型の安全性
  • JSONシリアライズ/デシリアライズの自動化

サーバークラスの実装 Link to heading

server.pyでは、MCPサーバーの基本機能を実装しています:

 1class MCPServer:
 2    def __init__(self):
 3        self.capabilities = ServerCapabilities()
 4        self.server_info = Implementation(
 5            name="MCP Basic Server",
 6            version="1.0.0"
 7        )
 8        self.protocol_version = "2025-03-26"
 9
10    async def handle_initialize(self, request: InitializeRequest) -> InitializeResult:
11        # 初期化リクエストの処理
12        ...

主な特徴:

  • 非同期処理のサポート(async/await
  • 型ヒントによる安全性
  • 明確な責務の分離

HTTPサーバーの実装 Link to heading

main.pyでは、FastAPIを使用してHTTPサーバーを実装しています:

1app = FastAPI(title="MCP Basic Server")
2server = MCPServer()
3
4@app.post("/")
5async def handle_request(request: Request) -> dict:
6    # リクエストの処理
7    ...

FastAPIの利点:

  • 自動的なAPIドキュメント生成
  • 非同期処理のサポート
  • 高速なパフォーマンス

次のステップ Link to heading

  1. エラーハンドリングの実装

    • カスタム例外クラスの作成
    • エラーレスポンスの標準化
  2. ログ機能の追加

    • 構造化ログの実装
    • ログレベルの設定
  3. テストケースの作成

    • ユニットテスト
    • 統合テスト

注記 本記事はMCPサーバーの基本クラス構造にフォーカスしていますが、現状の実装では logger.py(ログ機能)や errors.py(エラーハンドリング)などの拡張ファイルも既に存在します。 これらの詳細については、今後の記事で順次解説していきます。

まとめ Link to heading

MCPサーバーの基本クラス構造を実装し、以下の機能を提供できるようになりました:

  • 型安全なデータモデル
  • 非同期処理のサポート
  • HTTPエンドポイントの提供
  • 初期化リクエストの処理

次の記事では、エラーハンドリングの実装について説明します。