Model-Context Protocol (MCP) は、ClaudeやGPT-4oなどの大規模言語モデルが、外部の「ツール」や「サーバー」を呼び出せるようにする業界標準規格だ。
例えば、AIモデルが、Googleドライブにアクセスしてファイル検索してくれたり(Google Drive MCP)、Web検索をしてくれたり(Brave Search MCP)、ブラウザを自動で操作してくれたり(Playwright MCP)、3Dモデリングをしてくれたり(Blender MCP)、様々な機能を持つMCPサーバーが公開されている。
自分に必要なMCPをネット上で見つけてきて、いわばアドオン/プラグインのように、後からLLMの機能を追加していけるのだ。
Anthropicが開発した標準規格であるため、当初はClaudeのデスクトップアプリなどに限られたが、現在急速に普及が進んでおり、CursorやCline、LibreChat等、主要なLLMアプリも次々MCPに対応している。
ついには、OpenAIも、ChatGPTのMac/WindowsアプリでMCPに対応する予定であることを発表するなど、MCPは今もっとも熱い領域の一つだ。
ただし、つまずきやすいポイントとして、Dockerの仮想コンテナや、リモート環境でLLMアプリを動かしている場合、MCPサーバーが動作しないケースが多々ある。
これは、多くのMCPサーバーが、「stdio(標準入出力)」という、ローカル環境内でのプログラム同士のやり取りにしか対応していないため、サーバーを跨いだネットワーク越しの通信ができないことが原因だ。
Dockerコンテナのような隔離された環境で動くLLMからは、stdioのみ対応のMCPに接続できないのだ。
この問題を解決するため、本記事では、あらゆるMCPクライアントが、あらゆるMCPサーバーに接続できるようにする最強の変換ツール「Supergateway」を紹介する。
以下のステップに分け、初心者にも分かりやすく解説していくので、MCP活用の参考にしてほしい。
- MCPサーバーの通信方式(stdio, SSE, WebSocket)の違い
- Docker環境でstdio専用サーバーを使うときの具体的な問題点
- その問題を解決する「Supergateway」とは何か
- 実際にDocker上の「LibreChat」から「Brave Search」ツールを使う手順
なお、そもそもMCPサーバー/MCPクライアントの基礎から分からないという人は、当サイトの以下の記事も参考にして欲しい。
MCPサーバーの通信の種類:stdio, SSE, WebSocketとは
MCPでは、AIアプリ(MCPクライアント)と、ツール(MCPサーバー)が情報をやり取りする方法がいくつか定義されている。
これをトランスポートと呼び、stdio、Server-Sent Events (SSE)、WebSocketの3タイプが存在する。各トランスポートの特徴は以下の通りである。
- 標準入出力 (stdio)
- プログラムの「標準入力」と「標準出力」を使って直接データをやり取りする方式。
- 最もシンプルで、自分のPC上でアプリやコマンドラインツールを動かすならベスト(ClaudeやChatGPTのデスクトップアプリなど)。
- ただし、ネットワーク機能はないので、別のPCやDockerコンテナからの接続は基本的にできない。ローカル専用の通信方法と言える。
- Server-Sent Events (SSE)
- Web技術(HTTP)を使ったストリーミング方式。
- サーバーからクライアントへ、一方通行で情報を送り続けることができる(例:検索結果を1行ずつ表示する)。
- ただし、サーバーから一方的に送るだけなので、クライアント側からリアルタイムに何かを送り返す、といった双方向通信は不可。
- WebSocket
- クライアントとサーバー間で常時双方向の通信を確立する。
- リアルタイムで頻繁に情報をやり取りするのに適している
- セットアップはSSEより少し複雑だが、より柔軟な通信が可能で、最近のMCPツールでは対応するものも。
まとめると、stdioはローカル(ネットワークなし)、SSEはHTTP経由で一方向(クライアントがリクエストをPOSTし、サーバーが応答をストリーム)、WebSocketは双方向の継続的な通信という違いがある。
MCPサーバーは、複数のトランスポートを実装している場合もあるが、便利なコミュニティ製ツールの多くが、stdioしかサポートしていないのが現状だ。
Dockerでstdioツールを使うときの「壁」
先述の通り、stdioはネットワークが使えないため、リモート環境や、Dockerの仮想コンテナなど、垣根を超えて通信することができない。
例えば、Web検索機能を提供する「Brave Search MCP」サーバーは、stdioにしか対応しておらず、Claudeデスクトップなどのローカルアプリでは簡単に利用できるが、LibreChatなどのDocker上のアプリではエラーが発生してしまう。
また、クライアント側も、stdioに対応していない場合がある。Webアプリとして作られたAIチャットツールやAIワークフローツールは、ローカルプロセスを起動するのではなく、当然HTTP経由で通信する。「Cline」などの一部のクライアントも、SSE専用である。
こうした問題を解決するのが「Supergateway」である。
Supergatewayは、stdioしか対応していないMCPサーバーを、SSEやWebSocketに変換し、ネットワークを経由して利用できるようにしてしまう神ツールだ。
Supergatewayの概要:stdioをSSE/WebSocketに即変換する神ツール
Supergatewayは、ローカル専用のstdioであっても、ネットワーク通信を可能にするために作られた、いわば「翻訳」兼「橋渡し」ツールである。
Supergatewayは、指定されたstdio専用のMCPサーバーを内部で起動し、そのプログラムの標準入力・標準出力と、ネットワーク(HTTP上のSSEやWebSocket)の間で、データを翻訳・中継してくれる。
ちなみに、この逆も可能だが(SSEをstdioに変換)、本記事では、stdioをSSEに変換する用途に絞って説明する。
Supergatewayがもたらすメリットは以下の通りである。
- あらゆるMCPサーバーがSSE/WebSocket対応に
- stdioのみに対応しているMCPサーバーに、HTTPのエンドポイントを提供。現在公開されているあらゆるMCPサーバーを、SSE/WebSocketタイプとして利用できてしまう。
- Dockerコンテナやリモート環境からでも、多彩なMCPサーバーを活用できる。
- あらゆるMCPクライアントがstdio対応に
- クライアント側がstdioに未対応でも、Supergatewayを噛ませればSSE/WebSocketとして認識
- Dockerコンテナ環境に最適
- MCPクライアントが動作しているメインコンテナと、MCPサーバーが動作しているツールコンテナを分離して管理できる。
- メインコンテナからは、単純なHTTP呼び出しで、MCPサーバーに到達することができる。
- 使い方もシンプルで超簡単
- Supergateway自体はNode.jsのパッケージ。
- 簡単なコマンドで、stdio MCPをネットワーク対応にできる。
かなり簡単に変換が実行できるので、一度使い方を理解すれば、MCPを活用できる範囲が格段に広がる夢のツールである。
以下、具体的な例とともに、Supergatewayの使い方を見てみよう。
実践例:LibreChatでBrave Search MCPを使う (stdio→SSE)
ここでは、オープンソースのチャットクライアントであるLibreChatと、あらゆるLLMがWeb検索を実行できるようになるBrave Search MCPサーバーを、Supergatewayを使用して統合する手順を解説する。
同じ手順が、Brave Search以外のMCPでも使えるので、他のstdio MCPを使いたい人も、以下をテンプレのように使って欲しい。
LibreChatは、各社のAIモデルを、ChatGPTのようなチャットUIで、一箇所で利用できるようにしてくれる最高のアプリだ。Dockerコンテナ上で動作し、OpenAIのGPT-4oやo3、AnthropicのClaude、GoogleのGemini、xAIのGrokなどを、各社のAPIを経由して利用できる。
Brave Searchは、GoogleやBingのように独自のインデックスを行う新興の検索エンジンだ。AIにWeb検索機能を提供するMCPも公開されている。ただし、ローカルのstdioトランスポート限定のため、LibreChatで使用するにはSupergatewayが必須である。
LibreChatとBrave Search MCPを組み合わせることで、月額サブスク料不要で、各社の最新の大規模言語モデルを使えて、しかもWebサーチ機能を付加できるので、非常にコスパが良い。
前提として、以下の手順を完了してから、読み進めて欲しい。
- LibreChatとDocker Desktopのインストール(手順を解説した過去記事はこちら)
- Brave Searchのアカウント作成とAPIキーの入手(公式サイト)
1. フォルダ構成とポートの準備
Supergatewayでは、LibreChatが動作しているメインコンテナと、MCPサーバーが動作しているツールコンテナを分離して管理できる。
将来的に複数のMCPサーバーを追加していく可能性が高いため、以下のようにLibreChatのインストールフォルダ内にmcp
というフォルダを設けて、その下に個々のMCPサーバーの設定を整理するのが良い。
各MCPサーバーのフォルダ内には、ツールコンテナを立ち上げるためのDockerfileを作成していく。
LibreChat/
│
├── mcp/
│ └── brave-search/
│ └── Dockerfile
│
├── .env
├── librechat.yaml
└── docker-compose.override.yml
また、開放するポート番号も、一定のルールに従って決定していった方が、将来的に複数のMCPをSupergatewayで接続することを考えると妥当だ。
今回は8003
番を用いるが、8003でなければいけない理由は特にない。今後、新たにstdioのMCPサーバーを追加するごとに、8004, 8005と番号を一つずつ変えていくつもりだ。
2. MCPサーバー用Dockerfileの作成
Brave Searchのツールコンテナをビルドするため、Node.js、Brave Search MCP、Supergatewayを含むDockerイメージを作成する。
例えば、以下の内容でDockerfile
を作成し、LibreChat/mcp/brave-search
に置いておく。
# ベースイメージとしてNode.js 18を使用
FROM node:18
# 作業ディレクトリを設定
WORKDIR /app
# SupergatewayとBrave Searchサーバーをインストール
# (-g はグローバルインストールを意味する)
RUN npm install -g supergateway @modelcontextprotocol/server-brave-search
# Brave APIキーを受け取るための環境変数 (値は後で.envから渡す)
ENV BRAVE_API_KEY=dummy
# Supergatewayが使用するポートを公開(この例では8003)
EXPOSE 8003
# コンテナ起動時に実行するコマンド
# Supergatewayを起動し、--stdioオプションでBrave Searchサーバーを実行させる
# --portでSupergatewayが公開するポート番号を指定
CMD ["npx", "-y", "supergateway", \
"--stdio", "npx -y @modelcontextprotocol/server-brave-search", \
"--port", "8003"]
Brave Search MCP 以外のstdio MCPを利用したい場合でも、ほぼこのDockerfileと同じ構成が転用できる。
別のMCPサーバーで同じことを実現したいときは、上のDockerfileのうち、server-brave-search
となっている部分を他のMCPに差し替え、APIキーの環境変数をサービスに合わせてリネームし、ポート番号を未使用の番号にすれば良いだけだ。
3. Supergateway × MCPサーバーコンテナの起動
LibreChatのインストールフォルダ直下にあるLibreChat/docker-compose.override.yml
というファイルを編集し、Brave Search用のサービス定義を追加する。
デフォルトではdocker-compose.override.yml
がない場合もあるので、なければ以下のようなテキストファイルを新規作成する。
services:
# ... 他のサービス (例: librechat) ...
# Brave Search (Supergateway経由) のサービス定義
brave-search:
build: ./mcp/brave-search # ステップ2で作成したDockerfileの場所
ports:
# ホストPCの8003番ポートとコンテナの8003番ポートを繋ぐ
- "8003:8003"
networks:
- librechat_default
environment:
# 環境変数を設定。.envファイルからAPIキーを渡している
- BRAVE_API_KEY=${BRAVE_API_KEY}
restart: unless-stopped # コンテナ異常終了時に自動で再起動
networks:
# LibreChatが使用するネットワーク定義
librechat_default:
external: true
APIキーは、LibreChatの.env
ファイルから読み込まれることになるので、LibreChat/.env
を開いて、どこかにBRAVE_API_KEY=your_key
と記述しておく。
筆者は、.env
ファイルの末尾に、以下のように記載しておいた。今後、別のAPIキーが必要なMCPサーバーを利用する際は、この下に書き足していけば良い。
#==================================================#
# MCP #
#==================================================#
BRAVE_API_KEY=ここにAPIキーをペースト

ここまで準備ができたら、ターミナルを開いて、LibreChatのディレクトリで以下のコマンドを実行し、Supergateway × Brave Search MCP のツールコンテナを起動する。
docker compose up -d brave-search

無事コマンドが完了すると、Brave Searchツールが、SupergatewayでSSE対応のサービスに変換され、上で設定したポート8003でリクエストを受け付けている状態になった。
このステップについても、 他のstdio MCPにそのまま転用できる。brave-search
を別のMCP名で上書きし、APIキーをリネームすればいいだけだ。
4. SSEツールを使用するようにLibreChatを設定
LibreChatに、ステップ3で起動されたMCPサーバーにアクセスするためのSSEエンドポイントを教えてあげる必要がある。
LibreChatの設定ファイルであるlibrechat.yaml
を開き、mcpServers
セクションに、Brave Searchを追加する。
# Configuration version (required)
version: 1.2.1
# Cache settings: Set to true to enable caching
cache: true
# MCP Servers
mcpServers:
brave-search:
type: sse
url: "http://brave-search:8003/sse" # Supergatewayが公開するSSEエンドポイント
本来のBrave Search MCPのtypeはstdioのはずだが、SupergatewayによってSSEに変換されているので、type: sse
を指定する。
接続先のURLは、docker-compose.override.yml
で指定したMCPのサービス名と、開放しているポート番号を組み合わせる。
このステップもまた、Brave Search以外のstdioタイプのMCPを使用する際は、サービス名とポート番号を差し替えるだけで良い。
5. LibreChatを再起動してMCPツールを備えたAgentを作成する
以上でMCPサーバーのstdio→SSE変換と、LibreChatとSSE MCPサーバーの接続設定は完了だ。
設定が反映されるように、一度LibreChatを再起動する必要がある。ターミナルに以下のコマンドを打ち込んで、ついでにLibreChatを更新しつつ再起動しよう。
docker compose down
git pull
docker compose pull
docker compose up
LibreChatは、MCPサーバーのような「ツール」を好きなモデルと組み合わせ、「Agent」として保存しておくことができる。
画面右側サイドパネルを開き、一番上にある「Agent Builder」をクリックすると、どのモデルをベースに、どんなツールを使えるAgentを作成するか、プルダウンメニューで簡単にカスタマイズできる。

今回は、Brave Search MCPを使うAgentを作る。モデルとして、最新のGemini 2.5 Proを使ってみることにした。
Agent Builderの下の方に、「Tools + Actions」という項目があるので、ここから「Add Tools」ボタンをクリックする。

SupergatewayによってSSE化されたBrave Search MCPが接続できていれば、ツールの中に、brave_web_search
といったツールが追加されているはずだ。
これを「Add」すれば、Braveによるウェブ検索機能を備えたAgentを作成できる。

「Gemini 2.5 + Brave」という名前をつけて「Create」ボタンでAgentを作成すると、あとはLibreChatの左上のモデル選択プルダウンメニューを開くと、Agentの中に追加されているはずだ。
「Gemini 2.5 + Brave」を選択した状態で、「Model Context Protocolについてリサーチして」と質問してみると、見事にbrave_web_search
ツールを呼び出してウェブ検索を行い、結果に基づいて回答を生成してくれた。

次々登場する最新MCPを、Supergatewayで使いこなそう
Supergatewayを使うことで、以下のような強力なメリットが得られた。
- stdioしか対応していないローカル用MCPサーバーを、ネットワーク越しに使える
- Docker環境でも、MCPツールごとにコンテナを分けられ、非常に管理しやすい。
- LibreChatのようなAIクライアントから、最新の様々なMCPを、手軽に利用できる。
本記事では、stdio専用MCPサーバーの一例として、ウェブ検索ツールであるBrave Search MCPを用いたが、Git連携ツールなどなど、他のstdio専用MCPサーバーも、同様の手順でSupergatewayを使ってコンテナ化してSSEとして利用できる。
その際には、本記事で紹介したDockerfileをベースにして、ポート番号(8004, 8005…)とサービス名を変えていくだけでOKだ。
また、MCPクライアントの一例としてLibreChatを用いたが、SSEに対応したMCPクライアントならば、同様の仕組みでstdio MCPをSupergateway経由で変換して活用できる。
OpenAIのAgent SDKがMCPに対応し、ChatGPTのデスクトップアプリもMCP対応が予定されている中、これから一層、MCPのエコシステムは発展していくだろう。
次々登場してくる多彩なMCPを、Supergatewayを用いることで、stdio, SSE, WebSocketというタイプの壁を超え、好きな環境で活用できるので、Supergatewayの使い方は覚えておいて損はない。