FastAPIを使用している開発者の皆さんに朗報です。APIをAIモデル(GPTやClaudeなど)に簡単に操作させることができる強力なツール「FastAPI-MCP」をご紹介します。初心者でも数分で設定できる、このツールの魅力と実装方法を詳しく解説します。
FastAPI-MCPとは?
FastAPI-MCPは、FastAPIアプリケーションをModel Context Protocol(MCP)ツールに変換するためのライブラリです。これにより、AIモデルがあなたのAPIを直接呼び出せるようになります。
主な特徴
- 認証機能が標準装備:FastAPIの依存性注入(Depends())をそのまま使用できるため、セキュリティ面も安心です
- FastAPIとの完全統合:単なるOpenAPI変換ツールではなく、FastAPIのASGIインターフェースを直接使用するため、高いパフォーマンスを実現します
- 最小限の設定:FastAPIアプリを指定するだけでMCPツールが自動生成されます
- スキーマ情報の保持:リクエストとレスポンスのモデル構造がそのまま維持され、データ構造の正確性が保証されます
- APIドキュメントとの一貫性:Swaggerドキュメントとの整合性も保たれ、優れた開発者体験を提供します
- 柔軟な配置オプション:MCPサーバーを同じFastAPIアプリにマウントすることも、別々に配置することも可能です
- ASGI転送の高速性:FastAPIのASGIインターフェースを直接使用するため、HTTPコールのオーバーヘッドがありません
FastAPI-MCPを選ぶ理由
従来の方法でAPIをMCPツールに変換しようとすると、以下のような課題に直面します:
- インターフェース適応コードの繰り返し作成による作業量の増加とミスの発生
- 認証と権限制御の複雑さによるセキュリティ確保の難しさ
- APIドキュメントとデータモデルの同期維持の困難さ
- 従来のHTTP転送による遅延の増加とパフォーマンスの制限
FastAPI-MCPは、FastAPIとの深い統合により、これらの課題を解決します。通常のFastAPIアプリケーションを作成するのと同じくらい簡単にMCPツールを生成でき、高いパフォーマンスとセキュリティを確保できます。
実装ガイド
ローカル環境でFastAPI MCPを構築してテストする手順を説明します。
ステップ1:Python環境の準備
Python 3.10以上(3.12推奨)の環境を用意します。
Pythonをインストールしていない場合は、Python公式サイトから最新版をダウンロードしてインストールしてください。
インストール後、バージョンを確認します:
python --version
# または
python3 --version
ステップ2:必要なパッケージのインストール
FastAPI、Uvicorn、FastAPI MCPをインストールします:
pip install fastapi uvicorn fastapi-mcp
ステップ3:FastAPIアプリケーションの作成
シンプルなFastAPIアプリケーションを作成します。main.pyファイルを作成し、以下のコードを記述します:
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
app = FastAPI(title="シンプルAPI")
@app.get("/hello", operation_id="say_hello")
async def hello():
"""シンプルな挨拶エンドポイント"""
return {"message": "Hello World"}
# MCPサーバーを作成
mcp = FastApiMCP(app, name="シンプルMCPサービス")
mcp.mount()
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
このサンプルは、/helloエンドポイントのみを持つシンプルな構成です。
ステップ4:アプリケーションの実行とテスト
アプリケーションを実行します:
python main.py
または:
uvicorn main:app --reload
サーバーはhttp://127.0.0.1:8000で起動します。
ステップ5:MCPエンドポイントの確認
ブラウザでMCPエンドポイントにアクセスします:http://127.0.0.1:8000/mcp
MCPエンドポイントはServer-Sent Events (SSE)プロトコルを使用しているため、ブラウザには以下のような出力が表示されます:
event: endpoint
data: /mcp/messages/?session_id=02b22de319bb43e596ec91ed5d480411
これは、MCPサーバーが起動し、AIクライアントからのリクエストを受け付ける準備ができたことを示しています。
AIクライアントとの接続
MCPをサポートするAIクライアントをサーバーに接続します。Cursorを例に説明します。
方法1:SSE(Server-Sent Events)接続
Claude Desktop、Cursor、Windsurfなどの主要なMCPクライアントはSSE接続をサポートしています:
{
"mcpServers": {
"fastapi-mcp": {
"url": "http://localhost:8000/mcp"
}
}
}
Cursorの場合、右上の設定アイコンから「MCP -> Add new global MCP server」に移動し、開いたmcp.jsonファイルに上記の設定を追加します。
FastAPI MCPサービスが起動していれば、自動的に有効になります。
方法2:mcp-remoteをブリッジとして使用
認証が必要な場合や、MCPクライアントがSSEをサポートしていない場合は、mcp-remoteを使用できます:
{
"mcpServers": {
"fastapi-mcp": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8000/mcp",
"8080"
]
}
}
}
AIクライアントでの使用
CursorなどのAI IDEでFastAPI MCPに接続したら、対話を開始できます。例えば、Cursorのエージェントモードで「/helloインターフェースを呼び出して」と質問すると、AIがインターフェースの出力結果を返します。
高度な機能
カスタムエンドポイント公開
すべてのAPIエンドポイントをAIモデルに公開したくない場合、公開するエンドポイントを制御できます:
# 特定の操作IDのみを公開
mcp = FastApiMCP(
app,
include_operations=["say_hello", "get_user_info"]
)
# 特定の操作IDを除外
mcp = FastApiMCP(
app,
exclude_operations=["delete_user", "update_settings"]
)
# 特定のタグを持つエンドポイントのみを公開
mcp = FastApiMCP(
app,
include_tags=["public", "read_only"]
)
# 特定のタグを持つエンドポイントを除外
mcp = FastApiMCP(
app,
exclude_tags=["admin", "sensitive"]
)
この柔軟性により、AIモデルが利用できる機能を正確に制御でき、セキュリティが向上します。
認証保護の追加
本番環境では、MCPエンドポイントを保護することが重要です:
from fastapi import FastAPI, Depends, Security, HTTPException
from fastapi.security import APIKeyHeader
app = FastAPI()
api_key_header = APIKeyHeader(name="X-API-Key")
async def verify_api_key(api_key: str = Security(api_key_header)):
if api_key != "your-secret-key":
raise HTTPException(status_code=403, detail="Invalid API key")
return api_key
# 認証依存関係を追加
mcp = FastApiMCP(app, mcp_dependencies=[Depends(verify_api_key)])
mcp.mount()
これにより、MCPサービスへのすべてのリクエストには、有効なAPI鍵が必要になります。
カスタムレスポンス処理
AIモデルに返すレスポンスをカスタマイズできます:
from fastapi import FastAPI, Response, Request
from fastapi_mcp import FastApiMCP
from typing import Dict, Any
from datetime import datetime
app = FastAPI()
async def response_processor(
request: Request,
response: Response,
response_data: Dict[str, Any]
) -> Dict[str, Any]:
response_data["processed_by"] = "custom_processor"
response_data["timestamp"] = datetime.now().isoformat()
return response_data
mcp = FastApiMCP(
app,
response_processor=response_processor
)
mcp.mount()
分離デプロイ
MCPサーバーをメインAPIサービスとは別にデプロイすることも可能です:
# api_app.py - メインAPIアプリケーション
from fastapi import FastAPI
api_app = FastAPI()
@api_app.get("/data")
def get_data():
return {"data": "some value"}
# mcp_app.py - 独立したMCPサーバーアプリケーション
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
from api_app import api_app
mcp_app = FastAPI()
mcp = FastApiMCP(api_app)
mcp.mount(mcp_app)
# 2つのアプリケーションを別々に実行
# uvicorn api_app:api_app --port 8001
# uvicorn mcp_app:mcp_app --port 8000
この方法により、MCPサービスを独立してスケーリングできます。
セキュリティに関する考慮事項
FastAPI MCPを使用する際は、以下のセキュリティ対策を実施してください:
- 公開するエンドポイントを制限:安全な読み取り専用のエンドポイントのみを公開し、システムに変更を加える可能性のあるエンドポイント(DELETE、PUT操作など)の公開を避けます
- 適切な認証を追加:認証されたユーザーのみがAIを通じてAPIにアクセスできるようにします
- リクエスト検証:FastAPIのPydanticモデルを使用して、リクエストパラメータを厳密に検証します
- レスポンスフィルタリング:レスポンス内の機密情報をフィルタリングすることを検討します
まとめ
FastAPI MCPは、FastAPI APIをMCPツールに迅速に変換できる、効率的で使いやすいツールです。わずか数行のコードで統合が完了し、認証、ドキュメント保持、柔軟なデプロイをサポートしています。
実装手順のまとめ:
- Python 3.10以上(3.12推奨)をインストール
- 必要なパッケージをインストール
- FastAPIアプリケーションを作成
- MCPサポートを追加
- AI IDEで実行してテスト
FastAPI-MCPを活用して、AIとAPIの連携を実現し、開発効率を向上させましょう。
Apidogなら、美しいAPIドキュメントを自動生成するだけでなく、Postmanをより手頃な価格で置き換えることもできます。
オールインワンの開発体験を、ぜひお試しください。




