MCPサーバーパターン は何をしますか?
Model Context Protocol (MCP) は、AIアシスタントがサーバーのツールを呼び出したり、リソースを読み取ったり、プロンプトを使用したりできるようにします。このスキルは、MCPサーバーの構築や保守を行う際に使用してください。SDK APIは進化するため、現在のメソッド名やシグネチャについてはContext7(「MCP」をクエリ)または公式のMCPドキュメントを確認してください。
機能をルール、スキル、MCP、または単純なCLI/APIワークフローのいずれとして実装すべきかのより広範な判断については、docs/capability-surface-selection.mdを参照してください。
使用タイミング
次のような場合に使用します:新しいMCPサーバーの実装、ツールやリソースの追加、stdioとHTTPの選択、SDKのアップグレード、MCPの登録やトランスポートの問題のデバッグ。
仕組み
コア概念
- ツール: モデルが呼び出せるアクション(例:検索、コマンド実行)。SDKのバージョンに応じて
registerTool()またはtool()で登録します。 - リソース: モデルが取得できる読み取り専用データ(例:ファイル内容、APIレスポンス)。
registerResource()またはresource()で登録します。ハンドラーは通常uri引数を受け取ります。 - プロンプト: クライアントが表示できる再利用可能なパラメーター化されたプロンプトテンプレート(例:Claude Desktopで)。
registerPrompt()または同等のメソッドで登録します。 - トランスポート: ローカルクライアント(例:Claude Desktop)向けのstdio。リモートクライアント(Cursor、クラウド)向けにはStreamable HTTPが推奨されます。レガシーHTTP/SSEは後方互換性のためです。
Node/TypeScript SDKはtool() / resource() またはregisterTool() / registerResource() を公開する場合があります。公式SDKは時間とともに変化しています。常に最新のMCPドキュメントまたはContext7で確認してください。
stdioでの接続
ローカルクライアントの場合、stdioトランスポートを作成し、サーバーのconnectメソッドに渡します。正確なAPIはSDKのバージョンによって異なります(例:コンストラクター vs ファクトリー)。最新のパターンについては、公式MCPドキュメントを参照するか、Context7で「MCP stdio server」をクエリしてください。
サーバーロジック(ツール + リソース)はトランスポートから独立させ、エントリポイントでstdioまたはHTTPをプラグインできるようにしてください。
リモート(Streamable HTTP)
Cursor、クラウド、その他のリモートクライアント向けには、Streamable HTTP(現在の仕様では単一のMCP HTTPエンドポイント)を使用してください。レガシーHTTP/SSEは後方互換性が必要な場合のみサポートしてください。
例
インストールとサーバーセットアップ
npm install @modelcontextprotocol/sdk zod
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
const server = new McpServer({ name: "my-server", version: "1.0.0" });
ツールとリソースは、お使いのSDKバージョンが提供するAPIを使用して登録します。一部のバージョンではserver.tool(name, description, schema, handler)(位置引数)を使用しますが、他のバージョンではserver.tool({ name, description, inputSchema }, handler) または registerTool() を使用します。リソースも同様です。APIが提供する場合は、ハンドラーにuriを含めてください。公式MCPドキュメントまたはContext7で最新の@modelcontextprotocol/sdkのシグネチャを確認し、コピーペーストによるエラーを避けてください。
入力バリデーションにはZod(またはSDKが推奨するスキーマ形式)を使用してください。
ベストプラクティス
- スキーマファースト: すべてのツールの入力スキーマを定義し、パラメーターと戻り値の形式を文書化します。
- エラー: モデルが解釈できる構造化されたエラーやメッセージを返し、生のスタックトレースは避けます。
- 冪等性: 可能な限り冪等なツールを優先し、リトライが安全になるようにします。
- レートとコスト: 外部APIを呼び出すツールの場合は、レート制限とコストを考慮し、ツールの説明に文書化します。
- バージョン管理: package.jsonでSDKのバージョンを固定し、アップグレード時にはリリースノートを確認します。
公式SDKとドキュメント
- JavaScript/TypeScript:
@modelcontextprotocol/sdk(npm)。現在の登録およびトランスポートパターンについては、ライブラリ名「MCP」でContext7を使用してください。 - Go: GitHub上の公式Go SDK (
modelcontextprotocol/go-sdk)。 - C#: .NET向け公式C# SDK。