/ ディレクトリ / プレイグラウンド / MCP Python SDK
● 公式 modelcontextprotocol ⚡ 即起動

MCP Python SDK

作者 modelcontextprotocol · modelcontextprotocol/python-sdk

Model Context Protocol公式PythonSDK — 30行でサーバーとクライアントを構築でき、FastMCP互換のデコレーターを同梱。

AnthropicがメンテナンスするMCPの公式Python SDKです。サーバー(mcp.server.fastmcp.FastMCP)・クライアント(mcp.client.session.ClientSession)・低レベルプリミティブを提供します。仕様準拠のカノニカルリファレンスとして使われており、疑問があればこれが正解です。デコレーターベースのFastMCP APIはjlowin/fastmcpからマージされています。

なぜ使うのか

主な機能

ライブデモ

実際の動作

mcp-python-sdk.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "mcp-python-sdk": {
      "command": "uvx",
      "args": [
        "--with",
        "mcp",
        "python",
        "-m",
        "mcp.server.example"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "mcp-python-sdk": {
      "command": "uvx",
      "args": [
        "--with",
        "mcp",
        "python",
        "-m",
        "mcp.server.example"
      ],
      "_inferred": true
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "mcp-python-sdk": {
      "command": "uvx",
      "args": [
        "--with",
        "mcp",
        "python",
        "-m",
        "mcp.server.example"
      ],
      "_inferred": true
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "mcp-python-sdk": {
      "command": "uvx",
      "args": [
        "--with",
        "mcp",
        "python",
        "-m",
        "mcp.server.example"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "mcp-python-sdk",
      "command": "uvx",
      "args": [
        "--with",
        "mcp",
        "python",
        "-m",
        "mcp.server.example"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "mcp-python-sdk": {
      "command": {
        "path": "uvx",
        "args": [
          "--with",
          "mcp",
          "python",
          "-m",
          "mcp.server.example"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add mcp-python-sdk -- uvx --with mcp python -m mcp.server.example

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: MCP Python SDK

10分以内にPythonで初めてのMCPサーバーを構築する

👤 MCPを初めて使うPython開発者 ⏱ ~15 min beginner

使うタイミング: Python関数をClaudeに公開したいとき。

前提条件
  • Python 3.10以上 — uvまたはpyenv
フロー
  1. インストールしてスキャフォールドする
    Use uv to install mcp. Create server.py with one tool: get_weather(city) that calls a public API.✓ コピーしました
    → @toolデコレーター付きの10行ファイル
  2. stdioで実行する
    Run mcp dev server.py. Open the MCP Inspector and verify the tool listing.✓ コピーしました
    → インスペクターからツールを呼び出せる
  3. Claude Desktopに追加する
    Add to claude_desktop_config.json. Test from Claude.✓ コピーしました
    → チャット内でのライブレスポンス

結果: ClaudeにPythonのMCPサーバーが正常に登録されて動作している。

注意点
  • ハンドラーでprint()を使うとstdioが壊れる — stderrへのloggingを使う。stdoutには絶対に書き込まない

SDKのクライアントを使ってMCPサーバーの統合テストを書く

👤 本番環境にMCPを公開する開発者 ⏱ ~30 min intermediate

使うタイミング: MCPが正しく動作することを証明するCIテストが必要なとき。

フロー
  1. サーバーを起動する
    Use mcp.client.stdio to spawn server.py and call list_tools(). Assert expected names.✓ コピーしました
    → テストが通る
  2. 各ツールを呼び出す
    For each tool, call with a representative input and assert the output schema.✓ コピーしました
    → 全ツールの検証完了
  3. pytestに組み込む
    Convert into pytest fixtures so CI runs them on every PR.✓ コピーしました
    → 再利用可能なテストハーネス

結果: ツールがリグレッションしないという確信を持てるMCPサーバー。

長時間実行ツールの出力を実行中にClaudeにストリームする

👤 ビルド・デプロイ・長時間シミュレーション向けのMCPを構築する開発者 ⏱ ~45 min advanced

使うタイミング: ツールが数分かかり、完了後ではなく実行中の進捗をチャットで確認したいとき。

フロー
  1. streamable HTTPトランスポートを使う
    Switch from stdio to streamable HTTP. Yield progress events from the tool.✓ コピーしました
    → 実行中にClaudeが部分的な出力を表示する
  2. キャンセルを追加する
    Honor cancel requests so user can abort if the tool takes too long.✓ コピーしました
    → 実行途中でのキャンセルが機能する

結果: 遅くてもリアルタイムのように感じられるツール。

組み合わせ

他のMCPと組み合わせて10倍の力を

mcp-python-sdk + mcp-go-mark3labs

ポリグロット — パフォーマンスが重要な部分はGo、ML/データはPython

Use mcp-python-sdk for the model-serving MCP, mcp-go for the high-throughput one.✓ コピーしました
mcp-python-sdk + mcp-registry

Python製MCPを公式レジストリに公開する

Submit metadata to modelcontextprotocol/registry once your server passes its tests.✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
FastMCP name, version? トップレベルのサーバー作成に使用 0
@server.tool decorator on async function 公開したい各関数に使用 0
@server.resource decorator with uri pattern 読み取り専用データの公開に使用 0
@server.prompt decorator on prompt builder 再利用可能なpromptテンプレートに使用 0
ClientSession transport テストまたはMCPクライアント構築に使用 0
stdio_server () ローカルモードに使用 0

コストと制限

運用コスト

APIクォータ
N/A — ライブラリ
呼び出しあたりのトークン
N/A
金額
無料 (MIT)
ヒント
pyproject.tomlでSDKバージョンを固定する。仕様は進化する

セキュリティ

権限、シークレット、影響範囲

認証情報の保管: ツールが必要とするものに依存
データ送信先: ハンドラーによって制御される

トラブルシューティング

よくあるエラーと対処法

ツールが表示されない

@toolデコレーターが非同期関数に付いており、サーバー起動前に関数が登録されているか確認する

確認: Run `mcp dev server.py` and open the inspector
Pydanticバリデーションエラー

ツール入力はPydanticで検証される。型ヒントがClaudeが送信する内容と一致しているか確認する

stdin EOFでサーバーがハングする

非同期ハンドラーがデッドロックしていないか確認する — 互換性のためanyioを使う

代替案

MCP Python SDK 他との比較

代替案代わりに使う場面トレードオフ
FastMCP (PrefectHQ)追加ユーティリティを持つオリジナルのサードパーティフォークが欲しいとき現在はほぼマージ済み。薄いラッパー
mcp-go (mark3labs)Goが使いたい言語のときエコシステムが異なる

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る