02 MCPとは? - HiroyukiMakita/mcp-server-tutorial GitHub Wiki
02. MCPとは?
Model Context Protocol (MCP) は、AIモデル(大規模言語モデルなど)と外部ツールやサービスとの間で、リッチなコンテキスト情報を効率的にやり取りするためのプロトコルです。 これにより、AIモデルはより複雑なタスクを実行したり、リアルタイムの情報にアクセスしたり、外部システムを操作したりする能力を獲得できます。
MCPの基本概念とメリット
基本概念
- サーバー (MCP Server): 外部ツールやリソースへのアクセスを提供するコンポーネントです。例えば、特定のAPIを叩く機能、データベースを検索する機能、ローカルファイルシステムを操作する機能などをMCPサーバーとして実装できます。
- クライアント (MCP Client): 通常はAIモデル側がクライアントとなり、MCPサーバーに対してリクエストを送信します。
- ツール (Tool): MCPサーバーが提供する具体的な機能や操作です。クライアントはツール名を指定し、必要なパラメータを渡すことで機能を呼び出します。ツールは処理結果をクライアントに返します。
- リソース (Resource): MCPサーバーが提供する静的または動的なデータです。クライアントはURIを指定してリソースにアクセスできます。
- トランスポート (Transport): クライアントとサーバー間でメッセージをやり取りする方法です。標準入出力 (Stdio) や HTTP SSE (Server-Sent Events) などが利用できます。このチュートリアルでは主にStdioベースのローカルサーバーを扱います。
メリット
- 拡張性: AIモデルの能力を外部ツール連携によって容易に拡張できます。新しい機能が必要になった場合、対応するMCPサーバーやツールを追加するだけで済みます。
- 標準化: ツールやリソースの呼び出し方が標準化されるため、異なる種類のツールでも統一的なインターフェースで利用できます。
- コンテキストの維持: 複数のツール呼び出しや対話を通じて、AIモデルがコンテキストを維持しやすくなります。
- ローカル実行: ローカル環境でMCPサーバーを動作させることができるため、開発やデバッグが容易であり、セキュリティやプライバシーが重要なデータを外部に出さずに処理できます。
- 柔軟性: 様々なプログラミング言語でMCPサーバーを実装できます。
他のプロトコルとの比較 (例: HTTP API)
MCPは、一般的なHTTP APIと比較していくつかの特徴があります。
特徴 | MCP (特にStdioベースのローカルサーバー) | 一般的なHTTP API (RESTなど) |
---|---|---|
通信形態 | 主に双方向、ステートフルな対話も可能 | 通常はリクエスト/レスポンスの単方向 |
実行環境 | ローカル実行が容易 | 主にリモートサーバー |
用途 | AIモデルとローカルツールの密連携 | Webサービス間の汎用的な連携 |
状態管理 | サーバー側で状態を保持しやすい | ステートレスが基本 |
発見可能性 | 接続時に利用可能なツール一覧を取得可能 | APIドキュメント等で別途確認が必要 |
リアルタイム性 | StdioやSSEにより比較的高い | リクエスト毎のオーバーヘッドがある |
セキュリティ | ローカル実行の場合、ネットワーク境界内 | HTTPS、認証/認可が別途重要 |
MCPが特に有効なケース:
- AIモデルにローカルのファイルシステムを操作させたい。
- AIモデルにローカルで動作する特定のアプリケーション(例: Gitコマンド、コードリンター)を実行させたい。
- 開発中のAIエージェントに、頻繁に変更されるローカルのツールセットを使わせたい。
- 機密性の高い情報を扱うため、外部ネットワークへのリクエストを避けたい。
一方で、不特定多数のクライアントに安定したサービスを提供する場合や、Webブラウザから直接利用するようなケースでは、従来型のHTTP APIが適している場合も多くあります。MCPはこれらを置き換えるものではなく、AIモデルとの連携という特定のドメインで強みを発揮するプロトコルと言えます。
このチュートリアルでは、ローカルで動作するMCPサーバーを作成し、AIモデル(この場合はRooのようなエージェント)がその機能を利用できるようにする方法を学びます。