既存のFastAPIアプリをリファクタリングなしでMCPとして公開する
使うタイミング: すでにFastAPI APIを運用している。エージェントにそれを使わせたい。並行してコードベースを二重管理したくない。
前提条件
- リクエスト/レスポンスにPydanticモデルを使用した動作中のFastAPIアプリ — ルートが
dictを返している場合は、まずPydantic BaseModelにリファクタリングしてください。そうしないとツールスキーマがobjectになります
フロー
-
インストールとマウントAdd
fastapi-mcpto my project. In my main.py, afterapp = FastAPI(), addFastApiMCP(app).mount(). Show the diff.✓ コピーしました→ 差分は最小限。サーバーは引き続き動作する -
ツールの出現を確認Run the server. Connect with
npx -y mcp-remote http://localhost:8000/mcp. List tools — do all my GET/POST routes show up?✓ コピーしました→ ツールが一覧に表示され、名前がルートのoperation_idと一致する -
公開範囲のフィルタリングI don't want /admin/* routes exposed. Reconfigure with
include_operationsor exclude by tag.✓ コピーしました→ 管理ルートがツール一覧から消える
結果: 既存のAPIが、スキーマやロジックの重複なしにMCPアドレス可能になります。
注意点
- すべてのルートがツールになる — 公開するつもりのない内部ルートも含めて — 本番公開前に
include_tags=['public']またはexclude_operations=[...]を明示的に設定する - operation_idのないルートは
read_item_items__item_id__getのような見苦しい名前が自動生成される — ルートには必ず明示的なoperation_idを設定する:@app.get('/items/{id}', operation_id='get_item')