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をサポート:

  1. アプリケーションを実行
  2. Cursorの設定でMCPサーバーのURLを指定(例:http://localhost:8000/mcp
  3. 利用可能なツールが自動的に検出される

SSE非対応クライアント向けにmcp-proxyを使用

Claude Desktopなど、SSEをサポートしていないクライアント向け:

  1. アプリケーションを実行
  2. mcp-proxyをインストール: uv tool install mcp-proxy
  3. 設定ファイルでmcp-proxyを使用するよう設定

利用シナリオ

  • データ分析ツール: AIがデータ処理エンドポイントを利用
  • コンテンツ管理: AIがCMS APIを通じてコンテンツを取得・更新
  • カスタム検索エンジン: AIが特殊なデータベースを検索
  • Eコマース操作: AI在庫確認や注文
  • ドキュメント処理: AIによるドキュメント作成・分析

必要条件

  • Python 3.10+(3.12推奨)
  • uv(推奨パッケージマネージャ)