⚡️ mcpo について
mcpo は、任意の MCP サーバーを標準的な HTTP エンドポイントとして公開する MCP から OpenAPI へのプロキシです。OpenAPI サーバーを想定する LLM エージェントやアプリで利用する開発者向けです。各ツールの対話型ドキュメントを自動生成します。
主な機能
- 01MCP サーバーを OpenAPI の HTTP エンドポイントとして公開
- 02プロキシに対する API キーによる保護
- 03stdio、SSE、Streamable HTTP のサーバー形式への対応
- 04設定ファイルによる複数 MCP サーバーの同時提供
- 05設定ファイル変更のホットリロード
- 06対応サーバー向けの OAuth 2.1 認証
活用シーン
- 01Open WebUI などの OpenAPI クライアントから MCP ツールを呼び出す
- 02リバースプロキシ配下のサブパスで MCP ツールを提供する
- 03複数の MCP サーバーに対する HTTP の単一の入口を用意する
MCP 対応
mcpo は stdio、SSE、Streamable HTTP で MCP サーバーに接続し、そのツールを OpenAPI エンドポイントとして提供するブリッジです。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
⚡️ mcpo
あらゆる MCP ツールを、OpenAPI 互換の HTTP サーバーとして即座に公開します。
mcpo は、MCP サーバーのコマンドを受け取り、標準的な RESTful OpenAPI 経由で利用できるようにする、非常にシンプルなプロキシです。これにより、お使いのツールは OpenAPI サーバーを想定した LLM エージェントやアプリでそのまま動作します。
独自プロトコルは不要です。つなぎ込みコードも不要です。面倒な作業はありません。
🤔 ネイティブ MCP ではなく mcpo を使う理由
MCP サーバーは通常、生の stdio 経由で通信しますが、これは次のような問題があります。
- 🔓 本質的に安全ではありません
- ❌ ほとんどのツールと互換性がありません
- 🧩 ドキュメント、認証、エラー処理などの標準機能がありません
mcpo なら、余計な手間をかけずにすべて解決できます。
- ✅ OpenAPI ツール、SDK、UIですぐに使えます
- 🛡 信頼できるウェブ標準を活用し、安全性、安定性、スケーラビリティを高めます
- 🧠 設定不要で、すべてのツールのインタラクティブなドキュメントを自動生成します
- 🔌 純粋な HTTP を使用するため、ソケットもつなぎ込みコードも不要で、予期しない問題もありません
「もうひと手間」に思えることも、実際にはより良い結果を少ない手順で実現できます。
mcpo を使えば、AI ツールを今すぐ、手間なく、使いやすく、安全で、相互運用可能なものにできます。
🚀 クイックスタート
起動が非常に速く、設定も不要な uv の使用をおすすめします。
uvx mcpo --port 8000 --api-key "top-secret" -- your_mcp_server_command
または、Python を使用する場合:
pip install mcpo
mcpo --port 8000 --api-key "top-secret" -- your_mcp_server_command
SSE 互換の MCP サーバーを使用するには、サーバーの種類とエンドポイントを指定するだけです。
mcpo --port 8000 --api-key "top-secret" --server-type "sse" -- http://127.0.0.1:8001/sse
SSE 接続用のヘッダーを指定することもできます。
mcpo --port 8000 --api-key "top-secret" --server-type "sse" --header '{"Authorization": "Bearer token", "X-Custom-Header": "value"}' -- http://127.0.0.1:8001/sse
Streamable HTTP 互換の MCP サーバーを使用するには、サーバーの種類とエンドポイントを指定します。
mcpo --port 8000 --api-key "top-secret" --server-type "streamable-http" -- http://127.0.0.1:8002/mcp
インストールせずに Docker 経由で mcpo を実行することもできます。
docker run -p 8000:8000 ghcr.io/open-webui/mcpo:main --api-key "top-secret" -- your_mcp_server_command
例:
uvx mcpo --port 8000 --api-key "top-secret" -- uvx mcp-server-time --local-timezone=America/New_York
これで完了です。MCP ツールは、生成された OpenAPI スキーマとともに http://localhost:8000 で利用できるようになりました。http://localhost:8000/docs で実際に試すことができます。
🤝 サーバーの起動後に Open WebUI と連携する方法については、ドキュメントをご確認ください。
🌐 サブパスでの公開(--root-path)
リバースプロキシの背後やサブパス(例:/api/mcpo)で mcpo を公開する場合は、--root-path 引数を使用します。
mcpo --port 8000 --root-path "/api/mcpo" --api-key "top-secret" -- your_mcp_server_command
すべてのルートは指定したルートパスの下で公開されます。例:http://localhost:8000/api/mcpo/memory。
🔄 設定ファイルの使用
Claude Desktop 形式の単一の設定ファイルを使って、複数の MCP ツールを公開できます。
--hot-reload を指定すると、ホットリロードモードが有効になり、設定ファイルの変更を自動的に監視して、ダウンタイムなしでサーバーを再読み込みします。
次のコマンドで起動します。
mcpo --config /path/to/config.json
または、ホットリロードを有効にして起動します。
mcpo --config /path/to/config.json --hot-reload
設定ファイル config.json の例:
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
},
"time": {
"command": "uvx",
"args": ["mcp-server-time", "--local-timezone=America/New_York"],
"disabledTools": ["convert_time"] // Disable specific tools if needed
},
"mcp_sse": {
"type": "sse", // Explicitly define type
"url": "http://127.0.0.1:8001/sse",
"headers": {
"Authorization": "Bearer token",
"X-Custom-Header": "value"
}
},
"mcp_streamable_http": {
"type": "streamable-http",
"url": "http://127.0.0.1:8002/mcp"
} // Streamable HTTP MCP Server
}
}
各ツールには、それぞれ固有のルートでアクセスできます。例:
各ツールには専用の OpenAPI スキーマとプロキシハンドラーが用意されます。スキーマの全体を確認できる UI には、http://localhost:8000/<tool>/docs からアクセスできます(例:/memory/docs、/time/docs)。
🔐 OAuth 2.1 認証
mcpo は、OAuth 2.1 認証を必要とする MCP サーバーに対応しています。実装では動的クライアント登録がデフォルトで有効になっているため、ほとんどのサーバーでは最小限の設定だけで済みます。
{
"mcpServers": {
"oauth-protected-server": {
"type": "streamable-http",
"url": "http://localhost:8000/mcp",
"oauth": {
"server_url": "http://localhost:8000"
}
}
}
}
OAuth 設定オプション
基本オプション:
server_url(必須):OAuth サーバーのベース URLstorage_type:「file」(永続)または「memory」(セッション中のみ。デフォルト:「file」)callback_port:OAuth コールバック用のローカルポート(デフォルト:3030)use_loopback:認証用にブラウザーを自動で開くかどうか(デフォルト:true)
高度なオプション(通常は不要): 動的クライアント登録に対応していないサーバーでは、静的なクライアントメタデータを指定できます。
{
"mcpServers": {
"legacy-oauth-server": {
"type": "streamable-http",
"url": "http://api.example.com/mcp",
"oauth": {
"server_url": "http://api.example.com",
"client_metadata": {
"client_name": "My MCPO Client",
"redirect_uris": ["http://localhost:3030/callback"]
}
}
}
}
}
注:設定で
scope、authorization_endpoint、token_endpointを設定しないでください。動的登録フロー中に、これらはサーバーの OAuth メタデータから自動的に検出されます。
初回接続時、mcpo は次の処理を行います。
- 動的クライアント登録を実行します(対応している場合)。
- 認可のためにブラウザーを開きます。
- OAuth コールバックを自動的に取得します。
- トークンを安全に保存します(ファイルストレージの場合は
~/.mcpo/tokens/)。 - 以降のすべてのリクエストでトークンを使用します。
OAuth は streamable-http サーバータイプでサポートされています。詳しい説明については、OAUTH_GUIDE.md を参照してください。
🔧 要件
- Python 3.8+
- uv(任意ですが、パフォーマンスとパッケージングのため強く推奨)
🛠️ 開発とテスト
コントリビュートする場合や、ローカルでテストを実行する場合は、次の手順に従ってください。
-
環境をセットアップします。
# リポジトリをクローンします git clone https://github.com/open-webui/mcpo.git cd mcpo # 開発用の依存関係を含め、依存関係をインストールします uv sync --dev -
テストを実行します。
uv run pytest -
変更を適用した状態でローカル実行します。
特定のブランチ(例:
my-feature-branch)のローカル変更を適用してmcpoを実行するには、次の手順に従います。# 開発ブランチに切り替えていることを確認します git checkout my-feature-branch # src/mcpo ディレクトリなどでコードを変更します # uv を使用して mcpo を実行します。ローカルの変更済みコードが使われます # このコマンドはポート 8000 で mcpo を起動し、your_mcp_server_command にプロキシします uv run mcpo --port 8000 -- your_mcp_server_command # テスト用の MCP サーバー(mcp-server-time など)を使った例: # uv run mcpo --port 8000 -- uvx mcp-server-time --local-timezone=America/New_Yorkこれにより、コミットまたはプルリクエストの作成前に、変更を対話的にテストできます。ローカルで実行中の
mcpoインスタンスにはhttp://localhost:8000から、自動生成されたドキュメントにはhttp://localhost:8000/docsからアクセスできます。
🪪 ライセンス
MIT
🤝 コントリビュート
コミュニティからのコントリビュートを歓迎しており、強く推奨しています!
バグ修正、機能追加、ドキュメントの改善、アイデアの共有など、皆さんの貢献は非常に貴重であり、mcpo を誰にとってもより良いものにする助けとなります。
始めるのは簡単です。
- リポジトリをフォークします
- 新しいブランチを作成します
- 変更を加えます
- プルリクエストを作成します
どこから始めればよいかわからない場合は、気軽にイシューを作成するか質問してください。最初に取り組むのに適したタスクを見つけるお手伝いをします。
✨ スター履歴
✨ 相互運用可能な AI ツールの未来を、一緒に築きましょう!
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。