🔧

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サーバーを作成していただけると幸いです!

参考情報

Discussion