社内REST APIを1時間以内にMCPとして公開する
使うタイミング: エージェントから呼び出せるようにしたい社内APIがあり、クライアント仕様をゼロから書きたくない場合。
前提条件
- Python 3.10+ —
python --version - uvがインストール済み —
curl -LsSf https://astral.sh/uv/install.sh | sh
フロー
-
プロジェクトの雛形を作成Scaffold a FastMCP server project called 'acme-api-mcp' with one starter tool. Use uv for dependency management.✓ コピーしました→ pyproject.toml + server.pyに動作する@mcp.toolのサンプルが含まれている
-
最も価値の高い3つのエンドポイントをラップMy internal API has endpoints /orders/{id}, /customers/search, /invoices/{id}/pdf. Write a FastMCP tool for each, using httpx.AsyncClient and reading AUTH_TOKEN from env.✓ コピーしました→ 型ヒントとdocstringを持つデコレータ付き関数が3つ作成され、docstringがツール説明として機能する
-
MCP InspectorでローカルテストRun the server with
uv run mcp dev server.py. Open the inspector and call each tool with a realistic input.✓ コピーしました→ ツールが期待通りのJSONを返し、スタックトレースが出ない
結果: Claude Desktopや任意のMCPクライアントから接続できる、動作するMCPサーバーが完成します。
注意点
- docstringに実際のトークンを含む例を書いてしまい、シークレットがツール説明に漏洩する — docstringには動作の説明のみを記述し、実トークンの例は含めない。シークレットは
os.environで読み込み、エラーメッセージにも絶対に出力しない - 非同期と同期の混在によりイベントループエラーが発生する — どちらか一方に統一する — HTTPクライアントがasyncならツール全体をasyncにし、ツール内で
asyncio.runを呼ばない