mcp-server — 最小の MCP サーバー(Python)
MCPツールやデータソースを LLM アプリケーションに接続するための標準プロトコル。概要は ツール使用、接続の実務は ツール接続標準(MCP とエコシステム)(Model Context Protocol)で 2 つのツールを公開する最小のサーバーです。読み取り専用ツールと書き込み(実行)ツールを並べ、権限・上限の考え方をコードとコメントで示します。次のドキュメントの内容を実装しています。
- ツール接続標準(MCP とエコシステム) — MCP の位置づけと接続の実務
関連する権限設計:
- ツール権限設計とサンドボックス — ツール側で認可を強制する
- エージェントの認証・認可 — 誰の権限で実行するか
このサンプルの要点
- 権限はツール実装側で強制:
submit_expenseは金額上限を実装側でチェックし、高額は自動提出せず承認が必要と返します。実際の承認フローへの登録は実装していません - 読み取りと書き込みを分ける:
get_expense_policy(副作用なし)とsubmit_expense(実行)を別ツールにしています - 自己テストで検証可能:
--mockは mcp パッケージなしでツール関数を直接呼び、上限チェックの動作を確認します - 業務エラーもプロトコルで区別: 不正な金額は本体で
ValueErrorを発生させ、MCP の登録関数がToolErrorに変換します。クライアントはisError=trueとして受け取り、通常の受理・承認待ちの結果と区別できます
前提
- Python 3.11 以降(
--mockの自己テストは追加依存なし・標準ライブラリのみで動きます) - 実サーバー起動時のみ:
pip install -r requirements.txt(mcpパッケージ)と、接続する MCP クライアント
固定 SDK は mcp==2.2.0 です。サーバーは MCPServer を使い、2026-07-28 の要求方式と 2025-11-25 の初期化方式を扱います。Python 側の結果は is_error、通信の JSON は isError です。v1 の FastMCP からの差分は 公式移行ガイド を参照してください(アクセス日: 2026-09-10)。
実行
# 自己テスト(mcp パッケージ不要・API キー不要): ツール動作と上限チェックを確認
python mcp_server.py --mock
# 実 MCP サーバーとして起動(stdio。MCP クライアントから接続する)
pip install -r requirements.txt
python mcp_server.py動作確認日
- 今回の再確認: 2026-10-04(Python 3.12.14、作業専用 venv、固定した anthropic 1.4.0 / httpx2 2.12.0 / mcp 2.2.0)。全 6 サンプルの
--mockを含む 17 回帰テストプロンプト・ツール・モデルの変更で既存の品質が壊れていないかを、評価データセットの再実行と前回比較で検知するテスト。が合格しました。実 SDK の HTTP モックとローカル MCP stdio を確認し、実 LLM API は呼んでいません(実行手順)
以下は過去の確認記録です。
- 自己テスト(
--mock): 2026-09-10 に確認(Python 3.11.3、追加依存なし) - 実 MCP サーバー起動(クライアント接続): 2026-09-10 に確認(Python 3.11.3、mcp 2.2.0、ローカル stdio)。
Client(mode="auto")の server/discover(2026-07-28)、Client(mode="legacy")の initialize(2025-11-25)、両方式の list_tools・call_tool と、不正金額のisError=true、通常受理・高額の承認案内を確認(実行手順)