mcpField
B
building-mcp-servers

building-mcp-servers

github.com/osmontero開発1692 回インストール今日更新
リポジトリ

building-mcp-servers について

MCP サーバーを開発する人向けの設計・実装ガイドです。計画、ツール設計、テスト、評価を扱い、プロトコルや SDK、エラー処理、LLM タスクへの有効性を測る方法も紹介します。

主な機能

  1. 01API対応範囲とワークフローツールの計画
  2. 02明確なツール名と説明の設計
  3. 03ページネーションと対応可能なエラー処理
  4. 04TypeScript・Python SDKの参照
  5. 05MCP Inspectorによるテスト
  6. 06読み取り専用の評価質問の作成

活用シーン

  1. 01外部サービス向けMCPツールの計画
  2. 02構造化出力を返すツールの実装
  3. 03サーバーのビルドとツール動作の確認
  4. 04エージェントが現実的なタスクを完了できるか評価

MCP 対応

MCP クライアントが利用するサーバーの開発を支援し、ツール、リソース、プロンプト、トランスポートの設計と実装を扱います。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/osmontero/opencode-skills --skill building-mcp-servers

インストール後、Claude Code で/building-mcp-serversを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE.txt
reference/
evaluation.md
mcp_best_practices.md
node_mcp_server.md
python_mcp_server.md
scripts/
connections.py
evaluation.py
example_evaluation.xml

詳細


MCP サーバー開発ガイド

概要

LLM が適切に設計されたツールを通じて外部サービスとやり取りできるようにする MCP(Model Context Protocol)サーバーを作成します。MCP サーバーの品質は、LLM が実世界のタスクをどれだけうまく達成できるかによって評価されます。


プロセス

🚀 ハイレベルなワークフロー

高品質な MCP サーバーの作成には、主に 4 つのフェーズがあります。

フェーズ 1:徹底的な調査と計画
1.1 現代的な MCP 設計を理解する

API カバレッジとワークフローツール: API エンドポイントを包括的にカバーすることと、特化したワークフローツールのバランスを取ります。ワークフローツールは特定のタスクでより便利な場合がある一方、包括的なカバレッジがあれば、エージェントは操作を柔軟に組み合わせられます。パフォーマンスはクライアントによって異なります。基本的なツールを組み合わせるコード実行が役立つクライアントもあれば、より高レベルなワークフローのほうが適しているクライアントもあります。判断に迷う場合は、API を包括的にカバーすることを優先します。

ツールの命名と見つけやすさ: 明確で説明的なツール名にすると、エージェントは適切なツールをすばやく見つけられます。一貫したプレフィックス(例:github_create_issue、github_list_repos)を使用し、アクションを表す名前を付けます。

コンテキスト管理: エージェントは、簡潔なツールの説明と、結果をフィルタリング/ページネーションする機能を活用できます。焦点を絞った、関連性の高いデータを返すツールを設計します。一部のクライアントはコード実行をサポートしており、エージェントがデータを効率よくフィルタリング、処理するのに役立ちます。

実行可能なエラーメッセージ: エラーメッセージでは、具体的な提案や次の手順を示し、エージェントが解決策を見つけられるようにします。

1.2 MCP プロトコルのドキュメントを確認する

MCP 仕様を参照します:

サイトマップから関連ページを探します:https://modelcontextprotocol.io/sitemap.xml

次に、特定のページに .md サフィックスを付けて、Markdown 形式で取得します(例:https://modelcontextprotocol.io/specification/draft.md)。

確認すべき主なページ:

  • 仕様の概要とアーキテクチャ
  • トランスポート方式(ストリーミング可能な HTTP、stdio)
  • ツール、リソース、プロンプトの定義
1.3 フレームワークのドキュメントを確認する

推奨スタック:

  • 言語:TypeScript(高品質な SDK サポートと、多くの実行環境での優れた互換性を備えています。例:MCPB。また、AI モデルは TypeScript コードの生成が得意であり、広く使われていること、静的型付け、優れたリントツールの恩恵を受けられます)
  • トランスポート:リモートサーバーには、ステートレス JSON を使用するストリーミング可能な HTTP(ステートフルなセッションやストリーミング応答と比べて、スケールや保守が容易です)。ローカルサーバーには stdio を使用します。

フレームワークのドキュメントを読み込みます:

TypeScript の場合(推奨):

  • TypeScript SDK:WebFetch を使用して https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.md を読み込みます
  • ⚡ TypeScript ガイド - TypeScript のパターンと例

Python の場合:

  • Python SDK:WebFetch を使用して https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.md を読み込みます
  • 🐍 Python ガイド - Python のパターンと例
1.4 実装を計画する

API を理解する: サービスの API ドキュメントを確認し、主要なエンドポイント、認証要件、データモデルを特定します。必要に応じて、ウェブ検索や WebFetch を使用します。

ツールの選定: API を包括的にカバーすることを優先します。最も一般的な操作から始めて、実装するエンドポイントを一覧にします。


フェーズ 2:実装
2.1 プロジェクト構成を設定する

プロジェクトの設定については、言語別ガイドを参照してください:

2.2 コアインフラストラクチャを実装する

共通ユーティリティを作成します:

  • 認証機能を備えた API クライアント
  • エラー処理ヘルパー
  • 応答のフォーマット(JSON/Markdown)
  • ページネーションのサポート
2.3 ツールを実装する

各ツールについて:

入力スキーマ:

  • Zod(TypeScript)または Pydantic(Python)を使用します
  • 制約と明確な説明を含めます
  • フィールドの説明に例を追加します

出力スキーマ:

  • 可能な場合は、構造化データ向けに outputSchema を定義します
  • ツールの応答で structuredContent を使用します(TypeScript SDK の機能)
  • クライアントがツールの出力を理解し、処理するのに役立ちます

ツールの説明:

  • 機能の簡潔な概要
  • パラメーターの説明
  • 戻り値の型スキーマ

実装:

  • I/O 操作には async/await を使用します
  • 対処方法がわかるエラーメッセージを含む、適切なエラー処理
  • 該当する場合はページネーションをサポートします
  • 最新の SDK を使用する場合は、テキストコンテンツと構造化データの両方を返します

アノテーション:

  • readOnlyHint:true/false
  • destructiveHint:true/false
  • idempotentHint:true/false
  • openWorldHint:true/false

フェーズ 3:レビューとテスト
3.1 コード品質

以下を確認します:

  • コードが重複していないこと(DRY 原則)
  • 一貫性のあるエラー処理
  • 型が完全に網羅されていること
  • ツールの説明が明確であること
3.2 ビルドとテスト

TypeScript:

  • npm run build を実行して、コンパイルを確認します
  • MCP Inspector でテストします:npx @modelcontextprotocol/inspector

Python:

  • 構文を確認します:python -m py_compile your_server.py
  • MCP Inspector でテストします

詳しいテスト方法と品質チェックリストについては、言語別のガイドを参照してください。


フェーズ 4:評価を作成する

MCP サーバーの実装後、その有効性をテストするための包括的な評価を作成します。

評価の完全なガイドラインについては、✅ 評価ガイドを読み込みます。

4.1 評価の目的を理解する

評価を使用して、LLM が MCP サーバーを効果的に活用し、現実的で複雑な質問に回答できるかをテストします。

4.2 評価用の質問を 10 件作成する

効果的な評価を作成するには、評価ガイドに記載された手順に従います:

  1. ツールの確認:利用可能なツールを一覧表示し、その機能を理解します
  2. コンテンツの探索:読み取り専用の操作で、利用可能なデータを調べます
  3. 質問の作成:複雑で現実的な質問を 10 件作成します
  4. 回答の検証:各質問を自分で解いて、回答を検証します
4.3 評価の要件

各質問が以下の要件を満たしていることを確認します:

  • 独立性:他の質問に依存しないこと
  • 読み取り専用:破壊的でない操作のみが必要であること
  • 複雑性:複数のツール呼び出しと詳細な探索が必要であること
  • 現実性:人々が実際に関心を持つユースケースに基づいていること
  • 検証可能性:文字列比較で検証できる、明確で単一の回答があること
  • 安定性:時間が経過しても回答が変わらないこと
4.4 出力形式

次の構造の XML ファイルを作成します:

<evaluation>
  <qa_pair>
    <question>Find discussions about AI model launches with animal codenames. One model needed a specific safety designation that uses the format ASL-X. What number X was being determined for the model named after a spotted wild cat?</question>
    <answer>3</answer>
  </qa_pair>

</evaluation>

参考ファイル

📚 ドキュメントライブラリ

開発中、必要に応じて以下のリソースを読み込みます:

MCP のコアドキュメント(最初に読み込む)
  • MCP プロトコル:まず https://modelcontextprotocol.io/sitemap.xml のサイトマップを確認し、その後 .md サフィックスを付けて特定のページを取得します
  • 📋 MCP のベストプラクティス - 以下を含む、MCP に関する共通ガイドライン:
    • サーバーとツールの命名規則
    • 応答形式のガイドライン(JSON と Markdown の比較)
    • ページネーションのベストプラクティス
    • トランスポートの選択(ストリーミング可能な HTTP と stdio の比較)
    • セキュリティとエラー処理の標準
SDK ドキュメント(フェーズ 1/2 で読み込む)
  • Python SDK:https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.md から取得します
  • TypeScript SDK:https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.md から取得します
言語別実装ガイド(フェーズ 2 で読み込み)
  • 🐍 Python 実装ガイド - Python/FastMCP の包括的なガイドです。内容は次のとおりです。

    • サーバー初期化のパターン
    • Pydantic モデルの例
    • @mcp.tool を使ったツール登録
    • 動作する完全なサンプル
    • 品質チェックリスト
  • ⚡ TypeScript 実装ガイド - TypeScript の包括的なガイドです。内容は次のとおりです。

    • プロジェクト構成
    • Zod スキーマのパターン
    • server.registerTool を使ったツール登録
    • 動作する完全なサンプル
    • 品質チェックリスト
評価ガイド(フェーズ 4 で読み込み)
  • ✅ 評価ガイド - 評価作成の包括的なガイドです。内容は次のとおりです。
    • 質問作成のガイドライン
    • 回答の検証方法
    • XML 形式の仕様
    • 質問と回答の例
    • 提供されたスクリプトを使った評価の実行

コメント