mcpo:MCPをOpenAPI化してBedrock・OpenWebUIから活用する完全ガイド
tags: [mcp, openapi, fargate, aws, ai-agent]
created: 2025-01-31
source: 20250124_PlaywrightMCP_DockerLLMGateway_アーキテクチャ設計.md
AWS Bedrock AgentsやOpenWebUIでMCPサーバーを使う:mcpoによるOpenAPI化の実践
最近話題の MCP (Model Context Protocol)。
CursorやClaude Desktopではネイティブに動作するため非常に便利ですが、AWS Bedrock AgentsやOpenWebUIといったプラットフォームに組み込もうとした瞬間、「接続プロトコルが違う」という壁にぶつかります。
この記事では、mcpo (MCP-to-OpenAPI Proxy) というツールを使ってMCPサーバーをOpenAPI化し、REST APIとして外部から叩けるようにする方法を解説します。
実際にOpenWebUIでの活用向けに構築した際の手順や、ハマりどころ(Mixed Content問題など)も共有します。
なぜmcpoが必要なのか
MCPの接続性の課題
MCPは非常に強力な標準規格ですが、現状ではクライアント側の対応状況によって接続方式が分かれます。
- Cursor / Claude Desktop: MCP(Stdio/SSE)にネイティブ対応。そのまま繋がる。
- AWS Bedrock Agents (Action Group): 基本的に OpenAPI Schema (REST API) が必要。
- OpenWebUI: ツールとして取り込むには OpenAPI Schema が必要。
つまり、既存のAIプラットフォームからMCPサーバーの機能を使いたくても、そのままではプロトコルが噛み合いません。
mcpoとは何か
mcpo は、OpenWebUIチームが開発しているプロキシツールです。
一言で言えば、「MCPサーバーをラップして、OpenAPI 3.0準拠のREST APIサーバーに変身させるツール」 です。
これを使うことで、以下のような構成が可能になります。
mcpoがやってくれること
-
OpenAPIスキーマの自動生成: MCPのツール定義を読み取り、
/openapi.jsonを自動生成してくれます。 - プロトコル変換: HTTPリクエストを受け取り、MCPプロトコル(JSON-RPC等)に変換してバックエンドのMCPサーバーを実行します。
- Swagger UIの提供: ブラウザからAPIのテスト実行が可能になります。
実装手順:Playwright MCPをWeb化する
例として、ブラウザ操作を行う Playwright MCP をコンテナ化し、mcpo経由で公開する手順を紹介します。
1. Dockerfileの作成
Node.jsとPython環境が必要です。uv を使って mcpo をインストールし、npx でMCPサーバーを動かす構成にします。
FROM python:3.11-slim
# 必要なツールのインストール
RUN pip install --no-cache-dir mcpo uv
RUN apt-get update && apt-get install -y curl npm \
&& npm install -g npx
# Playwrightとその依存関係のインストール
# 注意: 本番運用ではbrowsersのインストール先などを適切に管理してください
RUN npx playwright install chrome --with-deps
# mcpo経由でPlaywright MCPを起動
# --host 0.0.0.0 で外部アクセスを許可
CMD ["uvx", "mcpo", "--host", "0.0.0.0", "--port", "8000", "--", "npx", "@playwright/mcp@0.0.30", "--headless", "--isolated", "--no-sandbox", "--host", "0.0.0.0"]
CMD の部分がポイントです。mcpo コマンドの引数として -- を挟み、その後ろに実際に起動したいMCPサーバーのコマンド(今回は npx @playwright/mcp...)を記述します。
2. デプロイ構成(AWS Fargate + ALB)
作成したコンテナは、AWS ECS (Fargate) などにデプロイし、前段に ALB (Application Load Balancer) を配置するのが一般的です。
OpenAPI スキーマは http://<ALBのDNS>:8000/openapi.json で取得できます。この URL(または JSON ファイル)を Bedrock Agents や OpenWebUI に登録すれば連携完了です。
3. 運用上の注意点:HTTPS と Mixed Content
実際に構築していてハマりやすいのが Mixed Content(混在コンテンツ)の問題です。
特に OpenWebUI を HTTPS でホストしている場合、連携先のツール(今回の mcpo)が HTTP だと、ブラウザのセキュリティ制約によりリクエストがブロックされることがあります。ALB に ACM 証明書を適用し、mcpo へのアクセスも HTTPS 化しておくことを強く推奨します。
まとめ
mcpo を使うことで、MCP エコシステムの豊富な資産(Playwright, Git, Memory など)を、REST API しか喋れないプラットフォームからも簡単に利用できるようになります。
- OpenWebUI: 公式ツールだけあって親和性が高い。
- Bedrock Agents: Action Group を作る際に、API Gateway + Lambda を自作しなくても、このコンテナを立てるだけで済む。
「MCP を使いたいけど、クライアントが対応していない」というケースでは、ぜひ mcpo によるプロキシ構成を検討してみてください。
Discussion