my-cool-proxy について
my-cool-proxyは、複数のMCPサーバーを使うエージェント向けのゲートウェイです。Luaを通じてツールを段階的に検出し、公開するツールを絞り込むほか、他のMCP機能も転送します。
主な機能
- 01サーバーとツールの段階的な検出
- 02Luaによるツール呼び出しの連鎖
- 03公開ツールのフィルタリング
- 04プロンプトとリソースの転送
- 05任意のアクティビティダッシュボード
活用シーン
- 01エージェントのコンテキストに読み込むツール説明の削減
- 021つのLuaスクリプトで複数の呼び出しを連鎖
- 03エージェントが使える上流ツールの制限
- 04実行履歴とツール呼び出しの確認
MCP 対応
設定した複数のMCPサーバーに接続し、単一のMCPエンドポイントから利用できるようにします。ツール、プロンプト、リソース、指示、通知、補完、ログ、ルート、サンプリング、エリシテーション、進捗、タスクを、それぞれ異なる範囲でサポートします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
My Cool Proxy
My Cool Proxy は、現在の MCP に関して認識されている多くの問題の解決を目指す、Model Context Protocol (MCP) のサーバーゲートウェイです。順不同で、次のような問題があります。
- ツールの説明がコンテキストウィンドウを圧迫する: これは、ほとんどのエージェントが MCP と連携する方法に起因する問題です。必要に応じてツールを読み込める抽象化を実装するのではなく、ほとんどのアプリケーションはすべての MCP ツールを一度にコンテキストに読み込みます。この問題を軽減するため、My Cool Proxy はツールを Lua インタープリターでラップし、ツールを段階的に見つけるための高レベルなツールを公開します。詳しくは段階的な開示を参照してください。
- ツールの結果がコンテキストウィンドウを圧迫する。Bash を使えばよいのでは? MCP ツールを使わず、エージェントがターミナルコマンドを実行して bash で結果を絞り込むこともできます。しかし、これはエージェントがより頻繁に高リスクな操作を行えるようにすることを意味します。たとえば、エージェントに
ghCLI を使って GitHub とやり取りさせることはできますが、ghCLI を使って変更や破壊を伴う操作も実行できてしまいます。GitHub MCP Server を使えば、読み取り専用のツールだけに簡単に範囲を絞ることができます。MCP を使うと、エージェントがアクセスできるツールを厳密に制御できます。これを支援するため、My Cool Proxy ではエージェントに公開するツールをさらにフィルタリングできます。 - ほとんどの MCP 機能がサポートされていない: 残念ながら、ほとんどのアプリケーションはエージェントに MCP ツールのみを公開し、プロトコルが提供するその他のクライアント機能やサーバー機能を活用していません。My Cool Proxy は、できるだけ多くのプロトコル機能に共通の抽象化レイヤーを提供することを目指しています。これにより、開発者は MCP 互換アプリケーションで MCP の機能を最大限に活用できます。これは現在も開発中です。詳しくは機能サポート表を確認してください。
- 複数のエージェント用の設定ファイル管理が大変: MCP 互換アプリケーションを複数使う場合、MCP サーバーの設定をそれらの間で同期し続けるのはすぐに難しくなります。My Cool Proxy は、利用するすべてのサーバーとの単一の連携ポイントとして動作することで、この問題を解決し、同期が必要なサーバーを 1 つだけに減らします。
クイックスタート
0. インストール
CLI ツールとして使うには、グローバルにインストールします。
npm install -g @karashiiro/my-cool-proxy
または、npx を使って直接実行します。
npx @karashiiro/my-cool-proxy
1. 設定
ゲートウェイは初回実行時にデフォルト設定を自動作成します。設定ファイルを生成するには、一度実行するだけです。
my-cool-proxy # Creates config and starts (with no servers)
# Find your config location
my-cool-proxy --config-path
次に、設定を編集して MCP サーバーを追加します。
設定の構成例:
{
"port": 3000,
"host": "localhost",
"mcpClients": {
"my-server": {
"type": "http",
"url": "https://example.com/mcp"
}
}
}
または、より充実した初期設定として設定例をコピーしてください。
2. 実行
# If installed globally
my-cool-proxy
# If running via npx
npx @karashiiro/my-cool-proxy
3. 接続
たとえば Claude Desktop などの MCP クライアント設定に追加します。
{
"mcpServers": {
"my-cool-proxy": {
"url": "http://localhost:3000/mcp"
}
}
}
4. 使用
設定した MCP サーバーが支援できるタスクをエージェントに依頼し、実行される様子を確認しましょう。
段階的な情報開示
このプロキシは、エージェントと複数の MCP(Model Context Protocol)サーバー間のゲートウェイとして機能します。各 MCP サーバーに個別に接続する代わりに、エージェントはこの単一のプロキシに接続し、統一されたインターフェースを通じて設定済みのすべてのサーバーにアクセスできます。
エージェントは、利用可能なサーバーやツールについての最小限の知識から開始します。コンテキストを段階的に構築していきます。
- サーバーの指示を確認する — My Cool Proxy は、エージェントがツールを利用できるよう促すため、設定済みのサーバーとツールの概要を短くまとめたプロンプトを事前に読み込みます。
list-serversを呼び出す — エージェントのコンテキストに、利用可能なすべての MCP サーバーの名前と説明(例:「github」、「slack」、「database」)が追加されます。list-server-tools(server_name)を呼び出す — エージェントのコンテキストに、指定したサーバーのすべてのツール名と説明が追加されます。tool-details(server_name, tool_name)を呼び出す — エージェントのコンテキストに、特定のツールの完全なパラメータスキーマ、戻り値の型(利用可能な場合)、使用例が追加されます。execute(lua_script)を呼び出す — コンテキストが十分にそろったエージェントは、Lua スクリプトを作成し、見つけたツールを呼び出せます。
すべてのツールとその説明を最初からコンテキストに読み込むのではなく、エージェントが必要だと判断するまでツールの読み込みを保留します。
Lua によるツールの連携: エージェントは利用可能なツールを把握すると、1 回の execute() 呼び出しで複雑な複数ステップのワークフローを組み立てることができ、中間ツールの結果によるコンテキストの負荷を抑えられます。Lua ランタイムでは、見つかったすべてのサーバーにグローバル変数としてアクセスでき、ツールを非同期関数として呼び出せます。
順次ツールを連携する例:
local raw_data = api_server.fetch({ id = 123 }):await()
local processed = processor.transform({ input = raw_data }):await()
result(processed)
条件分岐:
local status = checker.validate({}):await()
if status.ok then
result(processor.run({}):await())
else
result(error_handler.notify({ error = status.message }):await())
end
ループによる反復処理:
local results = {}
for i = 1, 5 do
results[i] = worker.process({ index = i }):await()
end
result({ total = #results, data = results })
ゲートウェイスキル
ゲートウェイスキルは、My Cool Proxy による Agent Skills の実装です。エージェントが MCP リソース として読み込める、再利用可能なコンテキスト文書です。有効にすると、エージェントは次のことができます。
- ゲートウェイのサーバー指示に自動挿入されるプロンプトからスキルを見つける(または Lua 組み込み関数
_gateway.list_resources()を使って、gw-skill://URI を探す) - Lua 組み込み関数
_gateway.read_resource()を使ってスキルの内容を読む - Lua 組み込み関数
_gateway.invoke_skill_script()を使ってスキルスクリプトを実行する
多くのエージェントにはすでに独自のスキルシステムが実装されていますが、これらのシステムは大きく分断されており、複数の個別のエージェントアプリケーション間で同じスキルを再利用するのは困難です。skills.sh のように、アプリケーション間でスキルを明示的にコピーすることでこの問題を解決するシステムもありますが、My Cool Proxy は、すべてのスキルを独自のスキル管理システムに集約し、MCP 経由で公開することで解決します。既存のスキルシステムと区別するため、My Cool Proxy ではこれらを「ゲートウェイスキル」と呼びます。
ゲートウェイスキルは、エージェントに組み込まれた既存のスキルシステムと競合する可能性があるため、デフォルトでは無効になっています。設定方法については、設定ガイドを参照してください。
ゲートウェイスキルがこのように実装されている理由について、設計を詳しく知りたい場合は、設計ドキュメントのこちらのセクションを参照してください。
Web Dashboard
My Cool Proxy には、ゲートウェイのアクティビティを監視するためのオプションの Web ダッシュボードが含まれています。有効にすると、別のポートで実行され、次の機能を利用できます。
- 実行履歴 — 構文がハイライトされたスクリプトと結果を使って、すべての Lua スクリプトの実行を確認できます
- ツール呼び出しログ — 各実行中に呼び出された MCP ツールを確認できます
- セッション監視 — アクティブなセッション、接続済みサーバー、機能を確認できます
- リアルタイム更新 — 新しい実行が WebSocket 経由でダッシュボードにストリーミングされます
設定に dashboard セクションを追加して有効にします。
{
"dashboard": {
"port": 3100,
"host": "localhost"
}
}
ブラウザーで http://localhost:3100 にアクセスしてください。詳細については、設定ガイドを参照してください。
設定
設定全体のリファレンスについては、設定ガイドを参照してください。
MCP 機能サポート表
| 機能 | 対応状況 | 詳細 |
|---|---|---|
| ツール | ✅ | My Cool Proxy では、最低限ツールがサポートされていることを前提としています。幸い、MCP をサポートするものはすべてツールもサポートしています。 |
| プロンプト | ✅ | My Cool Proxy は、MCP サーバーからのプロンプトを接続されたクライアントに転送し、エージェントがスクリプト内でプロンプトを読み込めるよう、Lua 組み込み関数 _gateway.get_prompt() と _gateway.list_prompts() を提供します。 |
| リソース | ✅ | My Cool Proxy は、MCP サーバーからのリソースを接続されたクライアントに転送するとともに、エージェントがスクリプト内でリソースを読み込めるよう、Lua 組み込み関数 _gateway.read_resource() と _gateway.list_resources() を提供します。 |
| サーバーの指示 | ✅ | My Cool Proxy は、接続された MCP サーバーの指示から抜粋を読み込み、自身のサーバーの指示に含めます。また、呼び出し時には list-servers ツールを通じて全文を送信します。 |
| 検出通知 | ✅ | My Cool Proxy は、接続された MCP サーバーからのツール/プロンプト/リソースの変更通知を監視し、自身の内部レジストリを自動的に更新します。更新内容は、その後のツール呼び出しに反映されます。 |
| 補完 | ✅ | プロンプト引数とリソーステンプレート変数の補完候補は、上流サーバーから接続されたクライアントに転送されます。エージェントは Lua スクリプト内で _gateway.complete() を呼び出し、リソーステンプレート変数とプロンプト引数の有効な値を見つけることもできます。 |
| ロギング | ✅ | My Cool Proxy は、ロギング通知を接続されたクライアントに転送し、自身でもログに記録します。 |
| ルート | ✅ | roots/list リクエストは上流サーバーから下流クライアントに転送されます。下流クライアントからの notifications/roots/list_changed 通知は、すべての上流サーバーに配信されます。サンプリングシムが有効な場合、最初の有効なローカルルートが ACP エージェントの作業ディレクトリとして使用されます。 |
| サンプリング | ✅ | My Cool Proxy は、ACP 上でサンプリングをシム経由でサポートしますが、これはデフォルトで無効です。詳しくは設定ドキュメントを参照してください。 |
| 引き出し | ⚠️ | 引き出しリクエスト(フォームモードと URL モード)は、上流サーバーから接続されたクライアントにプロキシされます。引き出しをネイティブにサポートしていないクライアント向けのシムは、現在利用できません(ACP 経由でシム可能なサンプリングとは異なります)。 |
| 進捗 | ✅ | 上流サーバーからの進捗通知は、接続されたクライアントに転送されます。Lua スクリプトが複数のツールを並行して呼び出す場合、それらの進捗は集約(合算)され、単一のストリームになります。 |
| タスク | ⚠️ | タスクをサポートするツールの呼び出しには対応していますが、ステータス更新を特に活用する機能はありません。サンプリング/引き出しタスクには現在対応していません。 |
| OAuth 2.0 | ❌ | OAuth 2.0 認証チャレンジにはまだ対応していません(ただし、今後対応予定です)。 |
| MCP Apps | ❌ | MCP Apps にはまだ対応していません(ただし、今後対応予定です)。 |
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。