MCP Python SDK
このドキュメントの対象は v2(現行の安定版リリース系列)
v2 が初めての場合や v1 から移行する場合は、v2 の新機能で変更点を 5 分で確認できます。破壊的変更は移行ガイドがすべて扱っています。まだ v1.x を使っている場合、そのドキュメントは v1.x のドキュメントにあります。わかりにくい点や使いにくい点があれば、教えてください。
Model Context Protocol(MCP)を使うと、アプリケーションは標準化された方法で LLM にコンテキストを提供できます。コンテキストを「提供する」という関心事を、LLM とのやり取りそのものから切り離せます。
これはその公式 Python SDK です。この SDK を使うと次のことができます。
- あらゆる MCP ホストにツール、リソース、プロンプトを公開する MCP サーバーを構築できます。
- あらゆる MCP サーバーに接続する MCP クライアントを構築できます。
- stdio、Streamable HTTP、SSE という標準のトランスポートすべてを扱えます。
要件
Python 3.10 以上が必要です。
インストール
uv add "mcp[cli]"
pip install "mcp[cli]"
[cli] エクストラを付けると mcp コマンドが使えるようになります。開発には入れておくことをおすすめします。各依存関係の用途についてはインストールを参照してください。
例
作成する
server.py というファイルを作成します。
from mcp.server import MCPServer
mcp = MCPServer("Demo")
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers."""
return a + b
@mcp.resource("greeting://{name}")
def greeting(name: str) -> str:
"""Greet someone by name."""
return f"Hello, {name}!"
これだけで完全な MCP サーバーです。
このサーバーは、ツールを 1 つ(add)と、テンプレート化されたリソースを 1 つ(greeting://{name})公開しています。
実行する
uv run mcp dev server.py
これでサーバーが起動し、MCP Inspector が開きます。サーバーをあれこれ触って試せる対話型の UI です。表示される URL を開いてください。
Note
Inspector は Node.js アプリなので、mcp dev を使うには PATH 上に npx が必要です。
試してみる
Inspector で Tools を開き、a=1、b=2 を指定して add を呼び出してください。
3 が返ってきます。✨
Inspector はこのフォーム(a 用の必須の整数フィールドが 1 つ、b 用にもう 1 つ)を型ヒントから組み立てました。Claude も、そのほかのあらゆる MCP ホストも同じことをします。
今度は Resources を開き、greeting://World を読み取ってみてください。
Hello, World!
まとめ
ここで、書かなかったものに改めて目を向けてみましょう。
- JSON Schema はありません。
a: int, b: intがそのままスキーマです。 - リクエストの解析も、シリアライズも、バリデーションのコードもありません。
- プロトコルの処理は一切ありません。
書いたのは、型ヒントと docstring を付けた Python 関数 2 つだけです。残りは SDK が引き受けます。
次に読むもの
- はじめにでは、インストールから、テストも済んだ動作するサーバーの完成までを案内します。
- MCP サーバーを「使う」側のアプリケーションを作るなら、クライアントから始めてください。
- すでに FastAPI や Starlette のアプリがあるなら、既存のアプリに追加するでその中に MCP サーバーをマウントできます。
- 特定のエラーメッセージを探しているなら、トラブルシューティングがメッセージの文言そのままで引けるように整理されています。
- v2 で何が変わったか気になるなら、v2 の新機能が 5 分で読めるツアーです。
- v1 から移行するなら、移行ガイドから始めてください。
- 正確なシグネチャを探しているなら、API リファレンスがソースから生成されています。
- LLM と一緒に読んでいるなら、このドキュメントは llms.txt 形式でも公開されています。llms.txt は各ページの索引で、llms-full.txt は全ページを 1 つのファイルに収めたものです。