FastAPI MCP サーバーは、Model Context Protocol (MCP) を使用して、あなたの FastAPI アプリケーションと AI エージェントの間のギャップを埋める革新的なツールです。 AI 統合がますます重要になっている時代において、このゼロ構成のソリューションは、既存の FastAPI エンドポイントを AI モデルやエージェントが最小限の労力で発見し利用できるツールとして公開することを可能にします。

FastAPI MCP の紹介
Model Context Protocol (MCP) は、AI モデルが外部ツールやリソースと対話するための新しい標準です。FastAPI MCP サーバーは、あなたの既存の FastAPI アプリケーションと、Anthropic の Claude や Cursor IDE などの MCP 互換 AI エージェントの間の架け橋として機能します。API を再構築したり、複雑な新しいフレームワークを学んだりすることなく実現できます。
FastAPI MCP の真に注目すべき点は、ゼロ構成のアプローチです。それは、既存の FastAPI エンドポイントを MCP 互換のツールに自動的に変換し、エンドポイントスキーマ、ドキュメント、および機能を保持します。これにより、AI エージェントは、あなたが必要とする最小限の設定で API を発見し、対話することができます。

FastAPI MCP サーバーのリポジトリは次の場所にあります: https://github.com/tadata-org/fastapi_mcp
FastAPI MCP の始め方
インストール
FastAPI MCP を使用する前に、インストールする必要があります。開発者は、速い Python パッケージインストーラーである uv
の使用を推奨していますが、従来の pip
メソッドも使用できます:
uv を使用する場合:
uv add fastapi-mcp
pip を使用する場合:
pip install fastapi-mcp
基本的な実装
FastAPI MCP を既存の FastAPI アプリケーションに統合するのは非常に簡単です。以下は最も基本的な実装です:
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
# あなたの既存の FastAPI アプリケーション
app = FastAPI()
# MCP サーバーを作成
mcp = FastApiMCP(
app,
name="私の API MCP",
description="私の API の説明",
base_url="http://localhost:8000" # リクエストをルーティングするために重要
)
# FastAPI アプリに MCP サーバーをマウント
mcp.mount()
これで完了です!このシンプルなコードで、あなたの MCP サーバーは https://app.base.url/mcp
で利用可能になります。MCP 互換のクライアントがこのエンドポイントに接続すると、すべての FastAPI ルートがツールとして自動的に発見されます。
MCP ツール名とオペレーション ID の理解
FastAPI MCP がエンドポイントをツールとして公開するとき、FastAPI ルートの operation_id
を MCP ツール名として使用します。FastAPI は明示的に指定されていないときにこれらの ID を自動生成しますが、暗号的でユーザーフレンドリーでない場合があります。
これらの2つのアプローチを比較してください:
# 自動生成された operation_id (ユーザーフレンドリーでない)
@app.get("/users/{user_id}")
async def read_user(user_id: int):
return {"user_id": user_id}
# 明示的な operation_id (よりユーザーフレンドリー)
@app.get("/users/{user_id}", operation_id="get_user_info")
async def read_user(user_id: int):
return {"user_id": user_id}
最初の例では、ツールは「read_user_users__user_id__get」などの名前にされる可能性がありますが、2番目の例では単に「get_user_info」になります。特に AI エージェントがツールと対話する際の使いやすさのために、明確で説明的な操作 ID を明示的に定義することをお勧めします。
高度な構成オプション
FastAPI MCP は、あなたの API が MCP クライアントにどのように公開されるかを調整するためのいくつかのカスタマイズオプションを提供します。
スキーマ説明のカスタマイズ
ツールの説明に含まれる情報量を制御できます:
mcp = FastApiMCP(
app,
name="私の API MCP",
base_url="http://localhost:8000",
describe_all_responses=True, # すべての可能なレスポンススキーマを含める
describe_full_response_schema=True # 完全な JSON スキーマの詳細を含める
)
エンドポイントのフィルタリング
どのエンドポイントを MCP ツールとして公開するかを制御したい場合があります。FastAPI MCP は、いくつかのフィルタリングメカニズムを提供します:
# operation ID によって特定の操作のみを含める
mcp = FastApiMCP(
app,
include_operations=["get_user", "create_user"]
)
# 特定の操作を除外
mcp = FastApiMCP(
app,
exclude_operations=["delete_user"]
)
# タグによってフィルタリング
mcp = FastApiMCP(
app,
include_tags=["users", "public"]
)
# タグによって除外
mcp = FastApiMCP(
app,
exclude_tags=["admin", "internal"]
)
# フィルタリング戦略を組み合わせる
mcp = FastApiMCP(
app,
include_operations=["user_login"],
include_tags=["public"]
)
注意点として、同じタイプ(操作またはタグ)の含めると除外するフィルタを組み合わせることはできませんが、操作フィルタをタグフィルタと一緒に使用することはできます。
デプロイメント戦略
FastAPI MCP は、MCP サーバーのデプロイ方法に柔軟性を提供します。
元のアプリケーションへのマウント
最も簡単な方法は、基本的な例で示したように MCP サーバーを元の FastAPI アプリに直接マウントすることです。これにより、既存のアプリケーションに /mcp
というエンドポイントが作成されます。
別のサービスとしてのデプロイ
1 つの FastAPI アプリから MCP サーバーを作成し、それを別のアプリにマウントすることもできます。これにより、API とその MCP インターフェースを別々にデプロイすることが可能になります:
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
# あなたの元の 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)
# 今、2つのアプリを別々に実行します:
# uvicorn main:api_app --host api-host --port 8001
# uvicorn main:mcp_app --host mcp-host --port 8000
この分離は、リソース、セキュリティ、スケーリングの管理に役立ちます。
新しいエンドポイントを追加した後の MCP の更新
MCP サーバーを作成した後に FastAPI アプリにエンドポイントを追加した場合、それらを含めるためにサーバーを更新する必要があります:
# 初期設定
app = FastAPI()
mcp = FastApiMCP(app)
mcp.mount()
# 後で、新しいエンドポイントを追加
@app.get("/new/endpoint/", operation_id="new_endpoint")
async def new_endpoint():
return {"message": "こんにちは、世界!"}
# 新しいエンドポイントを含めるために MCP サーバーを更新
mcp.setup_server()
MCP サーバーへの接続
MCP 統合が行われた FastAPI アプリが実行されていると、クライアントはさまざまな方法で接続できます。
サーバー送信イベント (SSE) の使用
多くの MCP クライアント、例えば Cursor IDE は SSE 接続をサポートしています:
- アプリケーションを実行します
- Cursor → 設定 → MCP で、あなたの MCP サーバーのエンドポイントの URL (例:
http://localhost:8000/mcp
) を SSE URL として使用します - Cursor は自動的にすべての利用可能なツールとリソースを発見します
SSE 非対応クライアント向けの MCP プロキシの使用
SSE に直接対応していないクライアント (例: Claude Desktop) の場合:
- アプリケーションを実行します
- MCP プロキシツールをインストールします:
uv tool install mcp-proxy
- クライアントを mcp-proxy を使うように設定します
Windows の Claude Desktop 用に、構成ファイル (claude_desktop_config.json
) を作成します:
{
"mcpServers": {
"my-api-mcp-proxy": {
"command": "mcp-proxy",
"args": ["http://127.0.0.1:8000/mcp"]
}
}
}
macOS の場合、mcp-proxy 実行ファイルへのフルパスを指定する必要があります。これは which mcp-proxy
を使用して見つけることができます。
実際のユースケース
FastAPI MCP は、AI 主導のアプリケーションに無限の可能性を提供します:
- データ分析ツール: AI エージェントがユーザーデータを分析するために使用できるデータ処理エンドポイントを公開し、各 AI モデルに対してカスタム統合を必要としません。
- コンテンツ管理システム: AI ツールが既存の CMS API を介してコンテンツを取得および更新できるようにし、コンテンツ作成と管理の効率を向上させます。
- カスタム検索エンジン: AI アシスタントがシンプルな API インターフェースを通じて専門的なデータベースやコンテンツリポジトリを検索できるようにします。
- e コマースオペレーション: AI エージェントが在庫、製品情報を確認したり、既存の e コマース API エンドポイントを通じて注文を行ったりできるようにします。
- ドキュメント処理: AI ツールに対して、バックエンドのドキュメント処理能力を使用してドキュメントを作成、変換、または分析する能力を提供します。
ベストプラクティス
FastAPI MCP を最大限に活用するために、以下のベストプラクティスを考慮してください:
- 明示的な操作 ID を使用する: すべてのエンドポイントに対して明確で説明的な操作 ID を定義し、AI エージェントによる利用を向上させます。
- 包括的なドキュメントを提供する: 各エンドポイントおよびパラメーターの詳細な説明を含め、AI モデルがツールを効果的に使用する方法を理解できるようにします。
- 一貫したパラメーター命名を使用する: 異なるエンドポイント間で類似のパラメーターに対する一貫した命名規則を採用します。
- セキュリティの影響を考慮する: MCP を介して公開するエンドポイントに十分注意し、必要に応じて適切な認証を実装します。
- 使用状況を監視する: AI エージェントがあなたの MCP ツールをどのように使用しているかを追跡し、パターン、エラー、改善の余地を特定します。
結論
FastAPI MCP サーバーは、バックエンドサービスを AI エージェントがアクセスできるようにする大きな一歩です。既存の FastAPI エンドポイントをゼロ構成で MCP 互換のツールに自動的に変換することで、カスタム統合や API デザインへの複雑な調整が不要になります。
MCP エコシステムが成長し続け、より多くの AI モデルがこの標準を採用するにつれて、FastAPI MCP を介して公開された API は、さまざまな AI エージェントやツールに簡単にアクセスできるサービスを提供します。内部ツール、開発者向けサービス、またはパブリック API を構築している場合、FastAPI MCP はサービスを AI にアクセス可能にするための明快な道を提供します。
この記事のガイダンスに従うことで、既存の FastAPI アプリケーションに FastAPI MCP を迅速に統合し、AI 主導の自動化およびサービスとの対話の可能性を探索し始めることができます。