Model Context Protocol を理解する
今更ながら Anthropic の Model Context Protocol を理解したい。
ドキュメントを読む
アーキテクチャは下記。クライアントとサーバとデータがある
サーバが間に入って、プロトコルを通じて共通言語でやり取りできるということかな
現状ローカルのデータソースがメインで、サブとして Web API になるのかも
- MCP ホスト: Claude Desktop、IDE、または MCP を介してデータにアクセスする AI ツールなどのプログラム
- MCP クライアント: サーバーとの 1:1 接続を維持するプロトコル クライアント
- MCP サーバー: 標準化されたモデル コンテキスト プロトコルを通じて特定の機能を公開する軽量プログラム
- ローカル データ ソース: MCP サーバーが安全にアクセスできるコンピューターのファイル、データベース、サービス
- リモートサービス: MCP サーバーが接続できるインターネット経由 (API 経由など) で利用可能な外部システム
ホストとクライアントの違いがよくわからんがとりあえず読み進める
クイックスタートがあるが、よく作るのはサーバな気がするのでサーバを作ってみる
サーバー開発者向けクイックスタート
このチュートリアルでは、シンプルな MCP 天気予報サーバーを構築し、ホストである Claude for Desktop に接続します。まずは基本的なセットアップから始めて、より複雑なユースケースに進みます。
Function Calling とは何が違うんだろ
get-alertsと の2 つのツールを公開するサーバーを構築しますget-forecast。次に、サーバーを MCP ホスト (この場合は Claude for Desktop) に接続します。
ツールを公開するイメージなのか
サーバーはどのクライアントにも接続できます。ここではシンプルさのために Claude for Desktop を選択しましたが、独自のクライアントを構築するためのガイドや、他のクライアントのリストもこちらにあります。
クライアントは作れるっぽい
サーバーはローカルで実行されるため、MCP は現在デスクトップ ホストのみをサポートしています。リモート ホストは現在開発中です。
なるほど
MCP サーバーは、主に次の 3 種類の機能を提供できます。
- リソース: クライアントが読み取ることができるファイルのようなデータ (API レスポンスやファイルの内容など)
- ツール: LLM から呼び出せる関数 (ユーザーの承認が必要)
- プロンプト: ユーザーが特定のタスクを達成するのに役立つ、事前に作成されたテンプレート
このチュートリアルではツールに焦点を当てる。Function Calling はツールを LLM の API に与えて使うかを判断してもらう形だが、ツールの情報をサーバ側に持たせるイメージかも
システムの要件
- Python 3.10 or higher installed.
- You must use the Python MCP SDK 1.2.0 or higher.
TypeScript はないのか
GitHub の MCP サーバがあるので試す
Docker でやってみる
上記ドキュメントにはビルドするように書いてあるが、https://hub.docker.com/r/mcp/github にあるので pull する
$ docker pull mcp/github
~/Library/Application Support/Claude/claude_desktop_config.json を書きに設定して Claude デスクトップアプリを再起動。GITHUB_PERSONAL_ACCESS_TOKEN は別途取得する
{
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"mcp/github"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
}
}
}
}
認識された。特にコンテナを起動したりしてないので、クライアントが起動している・・?
ツールを実行するときにはセーフガードとして許可するっぽい
search_repositories を使って返答できた
利用可能な tool の一覧が最初に表示されている。これは list tool をクライアント側が叩いているっぽい。これもプロトコル
MCPサーバのツールのコンセプト