FastMCPとは|PythonでMCPサーバーを最速構築するフレームワークの使い方【2026年版】
FastMCP(fast mcp)は、MCP(Model Context Protocol)のサーバーとクライアントをPythonで構築するためのフレームワークです。Pythonの関数に@mcp.toolを付けるだけで、LLMやAIエージェントから呼び出せるツールに変換できます。本記事は公式リポジトリ(PrefectHQ/fastmcp、旧jlowin/fastmcp)と公式ドキュメント gofastmcp.com を一次ソースとして、定義・インストール・最小実装・FastAPI/OpenAPI連携・認証・デプロイ・公式SDKとの違いまでを、実行検証済みのコードとともに整理します。なお「fastmcp はAPIのモックを生成するツール」という説明を見かけますが、これは誤りです。FastMCPはモック生成ツールではなく、MCPサーバー/クライアントを構築するフレームワークです。
目次
- 1 まとめ:FastMCPはMCPサーバー構築の事実上の標準フレームワーク
- 2 FastMCPとは:MCPサーバー/クライアントを構築するPythonフレームワーク
- 3 MCPサーバーの作り方:@mcp.toolで定義する最小コード
- 4 FastMCPのインストールとPython要件
- 5 FastAPI・OpenAPIからMCPサーバーを自動生成する
- 6 FastMCPの認証:JWT(Bearer)でエンドポイントを保護する
- 7 Context・依存の扱い:ctx引数でロギングとLLMサンプリング
- 8 トランスポートとデプロイ:stdioとStreamable HTTPの選択基準
- 9 FastMCPと公式MCP Python SDK・TypeScript版の違い(独自章)
- 10 FastMCPのプロキシとサーバー合成
- 11 FAQ:FastMCPに関するよくある質問
- 12 関連記事
まとめ:FastMCPはMCPサーバー構築の事実上の標準フレームワーク
結論から述べます。FastMCPは「MCPサーバー・クライアントをPythonで最短実装するためのフレームワーク」です。要点は次のとおりです。
- 立ち位置:MCP(AIが外部ツールやデータに接続するためのオープン標準。Anthropicが2024年11月25日に公開)を、ボイラープレートなしに実装するためのフレームワーク。公式READMEは「全言語のMCPサーバーの70%を何らかのFastMCPが支えている」と記載(同社調べの自称値)。
- 最小実装:
pip install fastmcp後、from fastmcp import FastMCP→@mcp.tool→mcp.run()の数行でサーバーが動く(本記事の環境で fastmcp 3.4.2 / Python 3.10 にて実行確認)。 - 既存資産の流用:
FastMCP.from_fastapi()やFastMCP.from_openapi()で、稼働中のFastAPIアプリやOpenAPI仕様からMCPサーバーを自動生成できる。 - 本番運用:トランスポートはローカル向けの
stdioと本番推奨のStreamable HTTP。JWTベースの認証(BearerAuthProvider)やプロキシ機能も備える。 - 言語:本命はPython実装。TypeScript実装(punkpeye/fastmcp)も別途存在する。
以降で、検索ニーズの多い「とは」「MCPサーバーの作り方」「Pythonでのインストール」「FastAPI・OpenAPI連携」「認証」「デプロイ」「公式SDKとの違い」を順に掘り下げます。
FastMCPとは:MCPサーバー/クライアントを構築するPythonフレームワーク
FastMCPは、MCPに準拠したサーバーとクライアントをPythonで書くためのフレームワークです。開発者は自分のロジック(関数)だけを書き、スキーマ生成・入力検証・ドキュメント生成・トランスポート交渉・認証・プロトコルのライフサイクル管理はFastMCPが肩代わりします。GitHubの公式リポジトリ(PrefectHQ/fastmcp)はスター約25,800(2026年初頭時点)、READMEは「FastMCPはMCPを扱うための標準フレームワーク」と自称し、PyPIから1日100万回ダウンロードされていると記載しています(いずれも公式READMEによる自称値)。
誤解の訂正:FastMCPは「APIモック生成ツール」ではない
FastMCPを「APIのモックを定義・生成するツール」と説明する情報がありますが、公式ドキュメントにそのような機能・用途の記載はありません。config.yamlでモックエンドポイントを定義する、fastmcp start --configで起動する、といった使い方も公式には存在しません。FastMCPの実体は、Python関数をMCPツール・リソース・プロンプトとして公開するフレームワークです。起動はmcp.run()またはCLIのfastmcp runを使います。本記事はこの誤情報を引き継がず、公式仕様で書き直しています。
FastMCPの3本柱:Servers・Clients・Apps
公式READMEはFastMCPを3つの柱で説明しています。ServersはPython関数をMCP準拠のツール・リソース・プロンプトに変換する部分。Clientsはローカル・リモートを問わず任意のMCPサーバーへ接続する部分。Appsは会話画面に直接描画される対話的UIをツールに与える部分です。最初に押さえるべきはServersで、MCPサーバーを公開する用途が中核です。
前提となるMCPとは:Anthropicが2024年に公開したオープン標準
MCP(Model Context Protocol)は、LLMやAIエージェントを外部のツール・データソースに接続するためのオープン標準です。Anthropicが2024年11月25日に公開しました。各データ連携を個別実装する代わりに、共通プロトコル1つで接続できる点が要点で、AI界の「USB-Cポート」と表現されます。MCPの基本概念はMCP(Model Context Protocol)とは?基本概念とその重要性で詳しく扱っています。FastMCPは、このMCPをPythonで実装するための道具立てだと理解すると位置づけが明確になります。
MCPサーバーの作り方:@mcp.toolで定義する最小コード
FastMCPでMCPサーバーを作る手順は、関数を書いてデコレータを付けるだけです。以下は公式READMEの最小例とほぼ同等のコードで、本記事の検証環境(fastmcp 3.4.2 / Python 3.10、Linux)で実際に動作確認しました。
from fastmcp import FastMCP
mcp = FastMCP("Demo")
@mcp.tool
def add(a: int, b: int) -> int:
"""2つの数値を加算する"""
return a + b
if __name__ == "__main__":
mcp.run()
このコードをserver.pyとして保存し、python server.pyまたはfastmcp run server.pyで起動します。型ヒント(a: int)とdocstringから、入力スキーマ・検証・説明文が自動生成されるため、別途JSON Schemaを書く必要はありません。手元でadd(2, 3)を呼ぶと5が返ることを確認しています。
ツール・リソース・プロンプトの3デコレータ
FastMCPでは公開する対象に応じてデコレータを使い分けます。実務ではまず@mcp.tool(LLMに実行させたい処理)だけ押さえれば動きます。読み取り専用データを渡したいときに@mcp.resource、定型プロンプトをテンプレート化したいときに@mcp.promptを追加します。
| デコレータ | 公開対象 | 主な用途 |
|---|---|---|
@mcp.tool |
ツール(実行可能関数) | 計算・検索・外部API呼び出しなど副作用ある処理 |
@mcp.resource |
リソース(読み取りデータ) | 設定値・ファイル内容・参照データの提供 |
@mcp.prompt |
プロンプト(テンプレート) | 再利用する定型指示のテンプレート化 |
本記事の環境では、上記の最小サーバーに@mcp.resource("config://version")を追加してリソースが正しく一覧に現れることも確認しました。3種類すべてを最初から使う必要はなく、必要になった時点で足すのが現実的です。
FastMCPのインストールとPython要件
FastMCPはPyPIで配布されており、pip install fastmcpでインストールできます。公式は高速なパッケージマネージャuvの利用を推奨しており、その場合はuv pip install fastmcpまたはuv add fastmcpです。動作要件はPython 3.10以上です。
# pip の場合
pip install fastmcp
# uv の場合(公式推奨)
uv pip install fastmcp
# バージョン確認
python -c "import fastmcp; print(fastmcp.__version__)"
本記事の検証時点ではfastmcp 3.4.2がインストールされ、依存として公式MCP Python SDK(mcp 1.28.1)が同梱されました。バージョンは更新が速いため、最新版と互換情報は必ず公式(gofastmcp.com)で確認してください。アップグレード後にimport fastmcpが失敗する既知事象があり、公式はpip install --force-reinstall fastmcpでの再インストールを案内しています。
FastAPI・OpenAPIからMCPサーバーを自動生成する
FastMCP 2.0以降の大きな実機能が、既存のREST API資産をそのままMCP化できる点です。稼働中のFastAPIアプリやOpenAPI仕様から、エンドポイントをMCPツール・リソースとして自動公開できます。検索クエリ「fastmcp fastapi」「fastmcp openapi」に対応する中核機能です。
FastAPIアプリをMCP化:FastMCP.from_fastapi()
既存のFastAPIアプリはFastMCP.from_fastapi(app=app)でMCPサーバーに変換できます。次のコードは本記事環境で実行し、/items/{item_id}エンドポイントがget_item_itemsというMCPツールとして生成されることを確認しました。
from fastapi import FastAPI
from fastmcp import FastMCP
app = FastAPI()
@app.get("/items/{item_id}")
def get_item(item_id: int):
return {"id": item_id}
# 既存FastAPIアプリからMCPサーバーを生成
mcp = FastMCP.from_fastapi(app=app)
if __name__ == "__main__":
mcp.run()
FastAPIそのものの基礎はFastAPIの概要と基本的な特徴:API構築のためのモダンな選択肢、データモデル設計はFastAPIとSQLAlchemyでのモデルの構築方法とベストプラクティスで解説しています。すでにFastAPIでAPIを運用しているなら、ゼロからMCPサーバーを書き直すよりfrom_fastapi()でMCP化するほうが速い、というのが実務上の判断軸です。
OpenAPI仕様からMCP化:FastMCP.from_openapi()
FastAPI以外のフレームワークで作ったAPIでも、OpenAPI(Swagger)仕様があればFastMCP.from_openapi()でMCPサーバーを生成できます。仕様(JSON/YAML)とHTTPクライアントを渡す形式です。OpenAPI仕様の自動生成についてはFastAPIでSwagger UIを自動生成する手順ガイドが参考になります。どのHTTPメソッド・パスをツールにマッピングするかはルートマップで制御でき、変換ルールの詳細は公式OpenAPIガイドで確認してください。
FastMCPの認証:JWT(Bearer)でエンドポイントを保護する
検索クエリ「fastmcp api key」「fastmcp jwt」に対応する機能です。認証はHTTP系トランスポート(Streamable HTTP)でのみ有効で、stdioのローカル実行では使いません。サーバー側はJWTを検証するBearerAuthProviderを使い、JWKSのURI・発行者(issuer)・想定オーディエンス(audience)・必要スコープを指定して保護します。
動作は、クライアントがAuthorization: Bearer <token>を送ると、サーバーが発行者のJWKSから公開鍵を取得・キャッシュし、署名・有効期限・issuer・audienceを検証して、妥当なら処理を許可、不正なら401/403を返す、という流れです。クライアント側はトークン文字列をfastmcp.Clientのauth引数に渡すだけで、FastMCPが自動でBearerスキームのヘッダに整形します。サービスアカウントや長期APIキー、CI/CDなど非対話的な認証に向く方式です。なお、FastMCPの認証はJWT(Bearer)が中核であり、単純な固定APIキー(fixed API key)をそのまま使いたい場合は、カスタム認証プロバイダを実装するか、前段のプロキシ層で検証する形で対応します。最新の認証プロバイダ(OAuthや動的クライアント登録など)の対応状況は公式の認証ドキュメントで確認してください。
Context・依存の扱い:ctx引数でロギングとLLMサンプリング
検索クエリ「fastmcp depends」に関連する論点です。FastMCPでは、ツール関数の引数にctx: Contextを加えると、リクエスト単位の機能を関数内で使えます。これがFastMCPにおける依存性注入的な仕組みで、別途DIコンテナを組む必要はありません。
Contextからは、クライアントのコンソールへのロギング(await ctx.info(...))、リソースの読み取り(ctx.read_resource(...))、そしてクライアント側のLLMに処理を依頼するサンプリング(await ctx.sample(...))が呼べます。たとえば「サーバー側でデータを取得し、要約だけはクライアント側のLLMに任せて返す」といった協調処理が書けます。型ヒントでContextを宣言した引数は、呼び出し側が値を渡す必要はなくFastMCPが自動で注入します。
トランスポートとデプロイ:stdioとStreamable HTTPの選択基準
検索クエリ「fastmcp uvicorn」「port」「cors」などに関わる実行・配信まわりです。FastMCPの主要トランスポートはstdioとStreamable HTTPの2つで、用途で選びます。
| トランスポート | 通信方式 | 向く場面 | ポート公開 |
|---|---|---|---|
stdio(既定) |
標準入出力(subprocess) | Claude Desktop等のローカル利用 | なし |
| Streamable HTTP | HTTP上の双方向ストリーミング | 本番・リモート公開(公式推奨) | あり |
| in-memory | 同一プロセス内直結 | テスト・開発(subprocess不要) | なし |
判断基準は明確です。Claude Desktopなど手元のクライアントに繋ぐローカル用途ならstdio(既定)でよく、IPもポートも公開されません。リモートから複数クライアントに公開する本番運用ではStreamable HTTPを選びます。HTTP起動時はmcp.run(transport="http", host="0.0.0.0", port=8000)のようにホスト・ポートを指定でき、内部ではStarlette/uvicornで配信されます。HTTP起動時のuvicorn側オプション(ワーカー数 workers など)の詳細は公式ドキュメントを参照してください。テストでは、サーバーインスタンスを直接Clientに渡すin-memoryトランスポートがsubprocess起動もネットワークも挟まず最速です。CORSやログ・デバッグの細かな設定は更新が速いため公式ドキュメントで最新を確認してください。
FastMCPと公式MCP Python SDK・TypeScript版の違い(独自章)
ここは検索結果でも整理が手薄な論点です。「FastMCPと公式SDKは別物か」「Python版とTypeScript版のどちらを使うか」を、出自に基づいて言い切ります。
公式SDKに入っているFastMCPと、独立版FastMCPの関係
混同しやすい点を先に整理します。FastMCP 1.0は2024年に公式MCP Python SDKへ取り込まれ、いまもfrom mcp.server.fastmcp import FastMCPで使えます。一方、本記事が扱うpip install fastmcp/from fastmcp import FastMCPは、作者が独立プロジェクトとして開発を続けるFastMCP 2.x/3.x系で、composition(サーバー合成)、proxy、OpenAPI/FastAPI連携、クライアント基盤といった1.0には無い機能を備えます。結論:単一サーバーを最小構成で公開するだけなら公式SDK同梱版でも足りますが、既存API資産のMCP化・プロキシ・サーバー合成・クライアント実装まで踏み込むなら独立版FastMCPを選ぶべきです。
Python版とTypeScript版の使い分け
FastMCPには2つの実装系統があります。本命はここまで解説したPython実装(PrefectHQ/fastmcp)です。これとは別に、TypeScript実装のfastmcp(punkpeye/fastmcp)が存在し、公式MCP SDK上に構築されたTS向けフレームワークとして、ツール・リソース・プロンプト定義やZod等によるスキーマ検証を提供します。判断軸はランタイムです。バックエンドがPython(FastAPI/Django等)ならPython版、Node.js環境やフロントと言語を揃えたいならTypeScript版を選びます。両者は名前と思想こそ近いものの別リポジトリ・別実装で、APIも完全互換ではない点に注意してください。
FastMCPを採用すべきでない場面
玉虫色を避けて明記します。次のケースではFastMCPは過剰、あるいは不適です。第一に、外部のLLM/AIエージェントに機能を公開する必要がなく、自社アプリ内で関数を呼ぶだけならMCP自体が不要で、通常のライブラリ呼び出しで十分です。第二に、ランタイムがPythonでもNode.jsでもない環境(Goやその他言語のみ)では、その言語の公式MCP SDKを使うほうが素直です。第三に、プロトコル挙動を細部まで自前制御したい特殊要件では、抽象化されたFastMCPより低レベルSDKが適します。「AI連携が要らない」「対象言語のSDKが別にある」――この2点に当てはまるなら、FastMCPの導入は見送ってよい、というのが判断です。
FastMCPのプロキシとサーバー合成
検索クエリ「fastmcp proxy」に対応する機能です。FastMCPは任意のMCPサーバー(FastMCP製でない第三者サーバーやリモートサーバーを含む)をプロキシし、自分のFastMCPサーバーとして再公開できます。クライアントを介してFastMCP.from_client()(用途によりas_proxy)でプロキシを構成します。利点は、バックエンドのトランスポートに縛られない点です。たとえばリモートのHTTPサーバーをプロキシしつつ、自分はstdioで公開してClaude Desktopから使う、といった橋渡しができます。
合成(composition)は、複数のFastMCPサーバーを1つにまとめる機能です。mount()でサブサーバーをライブ接続し、プレフィックス付きでツールを束ねられます(例:weather_get_forecast、calc_add)。チームごとに分割したMCPサーバーを統合ゲートウェイにまとめる、といった構成に向きます。AIエージェント文脈での実務適用はAIエージェント活用によるチケット駆動開発 (TiDD with Agent) の概要と背景を解説も参考になります。
FAQ:FastMCPに関するよくある質問
FastMCPとは何ですか?
MCP(Model Context Protocol)のサーバーとクライアントをPythonで構築するためのフレームワークです。Python関数に@mcp.toolを付けるだけで、LLMやAIエージェントから呼べるツールに変換でき、スキーマ生成・検証・トランスポート・認証はFastMCPが処理します。公式リポジトリはPrefectHQ/fastmcp(旧jlowin/fastmcp)で、「APIモック生成ツール」ではありません。
FastMCPでMCPサーバーはどう作りますか?
pip install fastmcpの後、from fastmcp import FastMCPでインスタンスを作り、公開したい関数に@mcp.toolを付け、最後にmcp.run()を呼ぶだけです。型ヒントとdocstringから入力スキーマと説明が自動生成されます。起動はpython server.pyまたはfastmcp run server.pyです。
既存のFastAPIアプリをMCP化できますか?
できます。FastMCP.from_fastapi(app=app)に稼働中のFastAPIアプリを渡すと、エンドポイントがMCPツール・リソースとして自動公開されます。FastAPI以外でもOpenAPI仕様があればFastMCP.from_openapi()で同様に変換できます。ゼロから書き直すより既存資産を流用するほうが速いケースが多いです。
FastMCPの認証はどう設定しますか?
JWT(Bearerトークン)による認証に対応します。サーバー側はBearerAuthProviderにJWKSのURI・issuer・audience・必要スコープを設定してエンドポイントを保護し、クライアント側はトークン文字列をClientのauth引数に渡します。認証はHTTP系トランスポートでのみ有効で、ローカルのstdio実行では使いません。
FastMCPのPython要件と最新バージョンは?
Python 3.10以上が必要です。pip install fastmcpまたはuv pip install fastmcpでインストールします。本記事の検証時点ではfastmcp 3.4.2が入り、公式MCP Python SDK(mcp 1.28.1)が依存として同梱されました。更新が速いため、最新版と互換情報は公式ドキュメント(gofastmcp.com)で確認してください。関連する内容として、CLI-Anythingもご覧ください。