🚀 はじめに
こんにちは。
Claude の MCPサーバーをリモートで動かしたいと思い立ち、今回は Supergateway を利用して HTTP ベースの MCP サーバーを構築しました。
- なぜ Supergateway を使うのか
- なぜ App Runner を選んだのか
- Lambda との連携でどう改善できるのか
この記事では、実装の手順・構成図・起動のクセ まで含めて詳しく解説します。
実際のコードはこちら👇
https://github.com/witter1954/supergateway-aws-document-server
💡 Supergatewayとは?
従来 MCP サーバーは stdio ベースで動作していましたが、Supergateway を使うと、
- stdio → HTTP
- stdio → HTTP Streamable
- stdio → SSE
など、複数の通信方式へ変換できます。
つまり、ローカルに閉じた MCP サーバーを“リモート化”できるツールです。
公式 GitHub:
https://github.com/supercorp-ai/supergateway
🌏 今回の実装環境(App Runner採用の理由)
最初は Lambda 単体で完結させようとしましたが、supergateway のプロセス管理や常時起動が必要になる点から断念しました。
そこで今回は AWS App Runner を選択し、下記のような構成をしました。
- デプロイ:Docker コンテナ
- ホスティング:AWS App Runner
- 役割:常時稼働型の MCP リモートサーバー
App Runner は ECS より手軽で、“軽い常時稼働アプリ” に向いています。
🏗️ アーキテクチャ構成(起動制御つき)
App Runner は「常時起動」を前提としたサービスですが、コスト面から Lambda で起動・停止を制御 する構成を取りました。
🔧 実装ポイント
-
resumeLambda:- 外部リクエストを受ける
- App Runner が落ちていれば起動
- 起動後は App Runner へプロキシ
-
pauseLambda:- 過去15分リクエストがなければ App Runner を停止
- EventBridge でトリガー
Claude Desktop の MCP カスタムコネクタには、resume のURLを指定します。
構成図はこちら。
初めてのGraphVizです。
📝 実装で得た知見
1. App Runner の起動は 2〜3分かかる
起動直後は MCP の Initialize が通りません。
一度起動待ち → 再接続 が必要。
2. Lambdaのみで完結は難しい
supergateway を detach して動かそうとしましたが、Lambda の制約上、実用は厳しめ。
3. App Runnerは個人用途でも優秀
“軽い常時稼働・外部公開” の用途には非常に便利。
4. 起動/停止制御は専用アプリにまとめるのもアリ
将来的には Next.js や軽量APIにまとめるとさらに安定します。
