Ⓜ️

「リモート」から「ローカル」のMCPを使う、ソブリンMCP

に公開

こんにちは、fjm2uです。

この記事では、MCP Routerでローカルに立ち上げた MCPサーバーを、Cloudflare Tunnel経由でインターネット越しに公開し、ChatGPTなどのリモートクライアントから利用する手順を紹介します。

はじめに

MCP RouterというローカルのMCP管理アプリを8ヶ月ほど作っています。

https://github.com/mcp-router/mcp-router/

今回は、「このソフトウェアをリモートから使いたい」というissueが上がってきた

https://github.com/mcp-router/mcp-router/issues/144

のですが、既存の実装で既に可能なので、その手順を紹介します。

つまり、「リモート」から「ローカル」のMCPを使えます。

この「自己主権的にMCPを管理し、利用する」考え方をソブリンAIに準えてソブリンMCPといっています。たとえば、

  • どの MCP サーバーを有効にするか
  • ログや利用履歴をどこに保存するか

をすべて自分のローカル側で完結させたまま、外部のAIサービスにはツールだけを貸し出すイメージです。

ローカルでのMCPサーバの立ち上げ方

本題の前に、ローカルMCP管理アプリの必要性を伝えさせてください。

単純にローカルでMCPサーバを立ち上げるには、MCPを使いたいアプリの中で設定を書きます。
例えばClaude Desktopでは以下です。

{
  "mcpServers": {
    "everything": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-everything"
      ]
    }
  }
}

しかし複数のアプリで多くのMCPを利用する場合、管理が大変になります。なので、ローカルのMCP管理アプリを入れておくと便利です。

MCP Routerでは一度追加するだけで、どこからでも使えてMCP管理(コンテキストの最適化を含む)できます。

ローカルMCP管理アプリの強み

MCP RouterでMCP管理が便利になったのは確かですが、なぜローカルにこだわる必要があるのでしょうか。
つまり、「MCP Routerのユーザは、なぜMCP Routerを使ってローカルで立ち上げたMCPサーバーをリモートから使いたい」のか。その理由には以下があります。

  1. MCP RouterのUXが良くて、どこからでも使いたいから(開発者が言っててすみません。でもUXは継続的に改善してますし、UXのIssueがあったら最優先で解決するようにしてます)
  2. CodexがWSL2の利用を推奨しているが、MCP RouterはLinuxに対応しておらず、WSL2からMCP Routerを利用するにはリモートアクセスが必要になるから
  3. コードに透明性があってローカルで動く場合、不透明なリモートMCPサーバ管理よりも信頼できるから
  4. ローカルにMCPの利用データを蓄積したいから
  5. ローカルで立てたMCPサーバはどれだけ使っても無料だから(電気代とか以外)

ローカルMCP管理アプリの(直接的なリモートMCP利用に対する)上記の優位性を考慮したとき、単に「ローカルMCP」というより、「ソブリンMCP」と言うのが適切だと思います。

「リモート」から「ローカル」のMCPを使う


ソブリンMCPのアーキテクチャの一例

MCP Routerでは、他アプリとの通信にローカルのHTTP通信を利用しています。
この通信には、アプリを識別しログを保存するため、Bearer認証を利用しています。このトークン長は十分な強度を持ち、リモートからの利用も可能です。

リモートからの利用では、Cloudflare TunnelかTailscaleが現実的な選択肢になると思います。ChatGPT等のリモートサービスから利用したい場合は前者、WSL2等の個人的な利用では後者が適していると思います。

ここではCloudflare Tunnelを使って進めます。

MCP Routerのセットアップ

  1. MCP Routerをダウンロードしてインストールします
  2. MCPサーバーを追加します
  3. MCPアプリを追加します


MCPサーバを追加した画面


カスタムアプリを追加します。

カード内の「How to use」ボタンを押してトークンを表示して、これをメモしておきます。

mcpr_から始まるトークンをメモします

Cloudflare Tunnelのセットアップ

  1. Cloudflareにログインします
  2. Tunnelをセットアップします
  3. 適当なドメインとhttp://localhost:3282を指定します


Cloudflare Tunnelでlocalhost:3282を指定

これでlocalhost:3282がネットからアクセス可能になりました。

inspectorによる接続確認

  1. npx @modelcontextprotocol/inspectorでMCPインスペクタを起動します
  2. TunnelのURLと、MCP Routerアプリ内で発行したトークンを入力して接続します
  3. MCPのリクエストができます。ログも保存されてます

Transport TypeはStreamable HTTPです。
URLはCloudflare Tunnelで設定したドメイン(ここではmcpr.fjm2u.net)を指定して、パスに/mcpを指定します(ここでは https://mcpr.fjm2u.net/mcp )。
Custom HeadersでAuthorizationキーに先ほどメモしたトークンをBearer <token>形式でセットします。


MCP Routerに接続すると、ツール・リソース・プロンプトが使えます

なお、HTTPヘッダーにx-mcpr-projectをキーとしてプロジェクト名をセットすると、プロジェクトに入れたMCPサーバのみが使えます(コンテキストを制限できる)。

ChatGPTで使う

個人でChatGPTを契約してないので、カスタマイズ・コネクターを追加できず試せません。

試してみたら、以下Discordでこっそり教えてほしいです。英語でも中国語でも、ちゃんと読みます。

https://discord.com/invite/dwG9jPrhxB

おわり

まだダウンロードしてない方は、こちらからダウンロードできます。

https://github.com/mcp-router/mcp-router

本記事の質問・意見等は、DiscordかXまでお願いします。

Discussion