FastAPI-MCPとは
FastAPI-MCPは、Tadata Inc.が開発したオープンソースツールで、FastAPIエンドポイントを自動的にModel Context Protocol (MCP)ツールとして公開します。設定不要で、従来のFastAPIアプリケーションとMCPをサポートするAIエージェント(Claude、Cursor IDEなど)間のブリッジとして機能します。
Model Context Protocol (MCP)とは
Model Context Protocol(MCP)は、AIモデルが外部ツールやリソースとやり取りするための新しい標準です。AIエージェントが外部サービスの機能を発見、理解、使用する方法を定義します。MCPを実装することで、APIをカスタム統合なしでAIエージェントから直接利用できるようになります。
主な機能
- 設定不要: FastAPIアプリを指定するだけですぐに動作
- 直接統合: MCPサーバーを既存のFastAPIアプリに直接マウント可能
- 自動検出: すべてのFastAPIエンドポイントを自動的にMCPツールに変換
- スキーマ保持: リクエストとレスポンスのモデルスキーマを保持
- ドキュメント保持: Swagger/OpenAPIドキュメントをAIエージェントからアクセス可能に
- 柔軟な配置: 同じアプリにマウントするか、別々に配置可能
インストール
# uvを使用(推奨)
uv add fastapi-mcp
# pipを使用
pip install fastapi-mcp
基本的な使用方法
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
app = FastAPI()
# FastAPIエンドポイントをここで定義...
# MCPサーバーを作成してマウント
mcp = FastApiMCP(
app,
name="My API MCP",
description="My API description",
base_url="http://localhost:8000", # リクエストルーティング用
)
# MCPサーバーをFastAPIアプリに直接マウント
mcp.mount()
実装後、MCPサーバーはFastAPIアプリケーションの /mcp
パスでアクセス可能になります。
ツール命名
FastAPI-MCPは、FastAPIルートの operation_id
をMCPツール名として使用します。AIが理解しやすい明確なツール名を付けるには、operation_IDを明示的に定義することをお勧めします:
# operation_idなし(複雑なツール名になる)
@app.get("/users/{user_id}")
async def read_user(user_id: int):
return {"user_id": user_id}
# 明示的なoperation_id("get_user_info"という明確なツール名になる)
@app.get("/users/{user_id}", operation_id="get_user_info")
async def read_user(user_id: int):
return {"user_id": user_id}
高度な使用方法
エンドポイントのフィルタリング
operation IDやタグでどのエンドポイントを公開するかを制御できます:
# 特定の操作のみを含める
mcp = FastApiMCP(
app,
include_operations=["get_user", "create_user"]
)
# タグでフィルタリング
mcp = FastApiMCP(
app,
include_tags=["users", "public"]
)
別々のデプロイ
MCPサーバーを別のアプリにマウントすることも可能:
# APIアプリ
api_app = FastAPI()
# エンドポイントを定義...
# MCP用の別アプリ
mcp_app = FastAPI()
# APIアプリからMCPサーバーを作成
mcp = FastApiMCP(
api_app,
base_url="http://api-host:8001" # APIアプリの実行URL
)
# MCPサーバーを別アプリにマウント
mcp.mount(mcp_app)
# 両方のアプリを別々に実行:
# uvicorn main:api_app --host api-host --port 8001
# uvicorn main:mcp_app --host mcp-host --port 8000
MCPサーバーへの接続
SSE(Server-Sent Events)を使用
Cursor IDEなどのMCPクライアントはSSEをサポート:
- アプリケーションを実行
- Cursorの設定でMCPサーバーのURLを指定(例:
http://localhost:8000/mcp
) - 利用可能なツールが自動的に検出される
SSE非対応クライアント向けにmcp-proxyを使用
Claude Desktopなど、SSEをサポートしていないクライアント向け:
- アプリケーションを実行
- mcp-proxyをインストール:
uv tool install mcp-proxy
- 設定ファイルでmcp-proxyを使用するよう設定
利用シナリオ
- データ分析ツール: AIがデータ処理エンドポイントを利用
- コンテンツ管理: AIがCMS APIを通じてコンテンツを取得・更新
- カスタム検索エンジン: AIが特殊なデータベースを検索
- Eコマース操作: AI在庫確認や注文
- ドキュメント処理: AIによるドキュメント作成・分析
必要条件
- Python 3.10+(3.12推奨)
- uv(推奨パッケージマネージャ)