GitHub の Developer Relations チームのデベロッパーアドボケイトが GitHub のブログに書いた記事で、Rubber Duck Thursdays のライブ配信に付随するものである。記事は Model Context Protocol を、AI ツールがデフォルトでは持っていないコンテキストとアクション(GitHub の issue を確認する、Playwright のテストを実行する、API を呼び出すなど)を与えるための標準化された方法として紹介し、目に見えるものを作ることを通じてそれを学んでいく。作るのは、ユーザーが GitHub Copilot を相手に三目並べとじゃんけんをプレイし、相手の手を MCP サーバーが取り仕切る Web アプリである。
プロジェクトは 1 つの TypeScript リポジトリで、Next.js の Web アプリと API、MCP TypeScript SDK 上に構築された MCP サーバー、そしてゲームの型とロジックの共有ライブラリを収めており、github-samples/turn-based-game-mcp として公開されている。記事はこれを使って MCP のアーキテクチャと、サーバーを構成する 3 つの中核的な構成要素を説明し、その後、実際のサーバーに当てはまる考慮事項へと話を進める。
要点
- 記事が述べる、MCP が取り組む問題は次のとおりである。AI ツールは、プライベートなデータ、最新のドキュメント、リアルタイムのデータにネイティブにはアクセスできず、プルリクエストを開くといったアクションも実行できない。MCP 以前は、それらをサードパーティのツールと統合する標準的な方法がなかったため、AI ツールごとに独自のプラグインや統合パターンが必要になりえた。
- MCP はクライアント・サーバーのパターンに従う。ホストは AI ツール(VS Code 上の Copilot など)であり、クライアントはホストの内部に存在してサーバーと 1 対 1 の関係を持ち、サーバーはツール、リソース、プロンプトを提供する。
- サーバーをホストに登録することが、エージェントに能力を与える手順だと説明されている。VS Code では、これは各サーバーとそれを起動するコマンドを列挙した
.vscode/mcp.jsonファイルである。 - ツールは AI が実行できるアクションであり、それぞれが説明と入力スキーマを持つ。デモではモデルがゲームの手を計算するのではなく、ツールを呼び出すとサーバー上のハンドラーが実行され、それがゲームのロジックを実行する。
- リソースは AI にコンテキストを与えるもので、多くの場合 URI ベースの識別子の下に置かれる。デモではカスタムの
game://URI を定義しており、サーバーがそれをローカル API の呼び出しに変換する。 - プロンプトはサーバーとともに提供される、あらかじめ定義された再利用可能なガイダンスであり、ユーザーは VS Code のスラッシュコマンド(デモでは
/strategy)を通じてそれを利用する。 - 著者は、その後仕様にはサンプリングやエリシテーションなどの機能が追加されたが、デモではそれらを使っていないと述べている。
- 本番環境のサーバーには認証と認可が必要になる場合がある。記事は例として GitHub MCP サーバー の OAuth とパーソナルアクセストークンへの対応を挙げているが、デモにはそのどちらもない。
- 記事は、サーバーを構築する前に既存のサーバーがないか確認すること、そしてサードパーティの MCP サーバーについては、他のサプライチェーン上の依存関係と同様に、公開元に見覚えがあるか、コードがレビューできるよう公開されているかといったデューデリジェンスを行うことを助言している。
- 自分でサーバーを構築する場合の助言は、特定の問題を解決する焦点を絞ったサーバーから、シンプルに始めることである。
背景
この記事は、GitHub のデベロッパーリレーションズによる、作りながら学ぶ入門的な解説であり、その例は Playwright の MCP サーバーのほかは GitHub 自身のエコシステム(VS Code 上の Copilot、GitHub MCP サーバー)から取られている。記事は MCP を、プロトコルの設計や限界を分析するのではなく、サーバーを設定し構築するという実践者の側から説明している。著者は、フロントエンド、バックエンド、サーバーを 1 つの言語と 1 つのリポジトリにまとめるために TypeScript を選んでおり、より堅牢な構成であれば、バージョニングと公開のプロセスを備えたパッケージやコンテナイメージとしてサーバーを配布するだろうと述べている。