FastMCPでリモートMCPサーバーを楽々ホスト!
はじめに
リモートMCPサーバー、作りたいけどなんだか難しそう... sse型?それともstdio型?そんな風に悩んでいませんか?
実際私は自作のMCPサーバーをリモート型で立ち上げるのに割と苦労しました。
しかしご安心ください!
FastMCPを使えば、驚くほど簡単にMCPサーバーを立ち上げ、リモートでホストできます。
MCPサーバーの立ち上げ3方式
MCPはクライアント-サーバーアーキテクチャを採用しており、主に以下の3つの通信方式をサポートしています。
-
stdio型(Standard Input Output):
- LLMアプリケーション(ホスト)が、別のプロセスとして起動したMCPサーバーに標準入出力(stdio)を通じて直接コマンドとデータを受け渡す方式です。主にローカル環境や単一サーバー内での連携に適しています。シンプルですが、リモートからのアクセスやスケーラビリティには課題があります。
-
sse型(Server-Sent Events):
- サーバーからクライアントへリアルタイムにデータをプッシュする方式です。Webブラウザとサーバー間の通信によく使われます。MCPにおいては、LLMアプリケーションがHTTPリクエストを送信し、MCPサーバーがHTTPレスポンスとしてイベントストリームを返すことで通信します。
-
http型(Streamable HTTP):
- sse型に代わりネットワーク経由のアクセスや、Webへのデプロイに推奨されています。ただし、Clineなどのコーディングエージェントでは対応していない場合があるので、今回はsse型でサーバーを立ち上げます。
「じゃあ、リモートでホストしたいならsse型が良さそうだけど、自分で一から実装するのは大変そう...」そう思いますよね?そこで登場するのがFastMCPです!
FastMCPがリモートホストの悩みを解決!
FastMCPは、PythonでMCPサーバーを簡単に構築するための高レベルなライブラリです。
これを使用することにより、MCPプロトコルの複雑な詳細を意識することなく、Pythonicなコードでサーバーを実装できます。
FastMCPがどのようにリモートホストの悩みを解決するか見ていきましょう。
1. シンプルなAPI設計で迷わない
FastMCPは、MCPサーバーの各機能をデコレータを使って簡単に定義できます。
例えば、以下のようにツールを定義できます。
# mcp_server.py
from fastmcp import FastMCP
mcp = FastMCP("Demo 🚀")
@mcp.tool
def hello(name: str) -> str:
return f"Hello, {name}!"
if __name__ == "__main__":
mcp.run(transport="stdio") # Default: uses stdio transport
このように、シンプルなコードを使ってMCPツールを定義できます。FastMCPが裏側でMCPプロトコルに準拠したスキーマ生成やデータ検証を自動で行ってくれるため、学習コストが低く済みます!
2. sse型サーバーも楽々構築!
FastMCPはASGIサーバー(例えばUvicorn)を使って簡単にHTTPやSSEベースのMCPサーバーとして公開できます。
例えば、mcp_server.py
というファイルに上記のコードを記述し、fastmcpコマンドを使って起動すると、sse型MCPサーバーとして機能します。
fastmcp run mcp_server.py --transport sse --port 9001
これで、http://0.0.0.0:9001/sse
でMCPサーバーがリッスンし、LLMアプリケーションからSSEリクエスト経由でアクセスできるようになります。
実践
例として、ClineでFastMCPを使ったstdio
型とsse
型のMCPサーバーを利用してみます。
Cline設定
# cline_mcp_settings.json
{
"mcpServers": {
"mcp-stdio": {
"type": "stdio",
"command": "【python実行binのパス】",
"args": [
"mcp_server.py"
]
},
"mcp-sse": {
"type": "sse",
"url": "http://0.0.0.0:9001/sse"
}
}
}
上記を適用すると下記のように表示されるはずです。
使用例
stdio型
質問
mcpサーバーの`mcp-stdio`でハローワールドを実行してください。
応答
stdio型MCPサーバーを利用して応答が返って来ています。
sse型
質問
mcpサーバーの`mcp-sse`でハローワールドを実行してください。
応答
sse型MCPサーバーを利用して応答が返って来ています。
まとめ
FastMCPを使うことで、ネット上にサンプルが少ないリモート型MCPサーバーをシンプルなコードで実装することができました。
いくつかハマりポイントがあり私は苦戦していたので、こちらを参考に様々なMCPサーバーを作成していただけると幸いです!
参考情報
- FastMCPの公式ドキュメント: https://github.com/jlowin/fastmcp
Discussion