AIエージェントという、MCPの抽象化レイヤ
まとめ
- MCPのツール数が多くなると、AIは適切にMCPツールを使えなくなります
- そこで、特定の目的を持ち、特定のMCPツールが使えるAIエージェントを作成し、MCPをラップします
- それらAIエージェントを適切にオーケストレーションすることで、AIが多くのツールを利用可能になります
- そのアイディアを実装したMCP RouterのAIエージェントをリリースしました
AIくん、適切なMCPツールを選択してくれない問題
利用するMCPツールが多くなるに従って、AIが適切なツールを選択してくれないという問題を感じたことのある方は多いと思います。
その大きな理由として、ツールの情報量(コンテキスト量)が増えすぎていることが挙げられます。
1つのMCPサーバは、複数のツールを提供することが多いです。
そして1つのツールには、名前、ツールの説明、入力スキーマの情報などの情報があります。
つまりAIには、「MCPサーバ数 × MCPサーバ1つあたりのツール提供数 × 1つのツールの情報量」の大きさのコンテキストが渡されます。
MCPサーバ数が増える毎に、ツールの情報量が線形に増加します。
また、ツールの情報量が多くなると適切なツールを選択できないどころか、リクエストのレイテンシや消費トークン量の観点からも嬉しくありません。
AIエージェント as a MCP
AIが適切なツールを選択してくれないのは、大きなコンテキストが渡されるためです。
そこで、大きなコンテキストを減らすことを考えます。
これには以下のような方法があると思います。
- ユーザ側で手動でEnable/Disableを切り替える(単純にMCPサーバ数を減らす)
- AIエージェントをMCPの抽象化レイヤとして導入する(MCPの利用を階層構造にする)
1はユーザに操作を強いるため、ユーザに負担をかけます。
また、コンテキスト量という点でも1は変わらず線形ですが、2では階層構造化になります。
2の方法では、AIエージェントをMCPとして使うことができることが条件になります。
MCP RouterのAIエージェントの動作
さて、ここからは今回作った「誰でも作成・共有・利用できるAIエージェント」について、実装時に盛り込んだ工夫ポイント等も踏まえてご紹介します。
実装はこちらからご確認いただけます。
MCP RouterのAIエージェントの強みは、以下です。
- 誰でもツールを使えるAIエージェントを利用できる
- AIエージェントが必要と判断すると、色々なツールを連続的に呼び出すことがある
- 普通にClaudeで実行すると、ツールの結果が大きくコンテキストが足りずにエラーになる一連の処理であっても、対応できる
- MCPに対応しており、今後いろいろなモデルが利用可能になる
AIエージェントを作成する
フォームに入力していきます。
「生成」ボタンを押して少し待つと、AIエージェントの利用時に使われるシステムプロンプトが生成されます。
次にAIエージェントが利用可能なMCPサーバーを設定します。環境変数やコマンドの動的な引数を設定する際は、AIエージェントを利用するユーザ(将来的にはセットアップもAIエージェントが行うようになる)のために、変数のセットアップ指示を書いておきます。
ツールのON/OFFを切り替えられます。
きちんと動いてくれるか確かめるために作成画面を表示しながらテストもできます。
AIエージェントをデプロイする
さて、いい感じの精度であることを確認できたので、デプロイします。
デプロイ時には、公開・非公開を選べます。
公開に設定して、もしそのエージェントが使われた場合、自分がエージェントを使う際に消費するクレジットを獲得できます。これは、「実際に使われているモノを作った人は正当に評価されるべき」という私の哲学です。
非公開の場合はリモートに一切送信されず、完全にローカルで利用画面に追加されるだけです。
AIエージェントを利用する
まずは設定必須の項目に入力します。ここで、このAIエージェントをMCPサーバ化することもできます。
必須の項目を入力し終えると、AIエージェントが利用できるようになります。UI上部の05:57は、セッションです。サイドバーではなく、上に固定でセッションを表示するようにしました(「+」は新規セッション)。
デプロイしたAIエージェントは、MCPとして並列動作が可能です。
Claudeからやってみます。
MCP Router内でワンクリックでClaudeに設定を追加して、Claudeを再起動します。
するとこんな感じでAIエージェントがMCPとして表示されるほか、セッションのリスト取得やセッションの結果取得のMCPが追加されます。
AIエージェントは、バックグラウンドで実行されます。
処理結果も返ってきます(今回はニュースを取得するというタスクだったため、バックグラウンドの処理中にClaudeがネイティブの検索も行ってくれてました)。
利用している技術スタック
プロジェクト全体でElectron、Typescript、React、Zustand、Tailwind + Shadcnを利用しています。LLMとのやり取りには、VercelのAI SDKを使っています(とても便利です)。
今後の展開
MCP RouterはSustainable Use Licenseでソースコードを公開しており、新規Contributorを喜んで迎えています。
その一方で、テストやCI/CDといったコントリビュータを迎えるための整備が進んでいません。まずはそこを整えたいです。
その上で、下記マイルストーンにあるロードマップを基に改善していきます。
🖥️ ヘッドレスモードのサポート
目標: GUI不要の環境でもMCP Routerを活用可能に
- ヘッドレスモードとGUIでのコードの共通化
- CLIインターフェースの提供
- コンテナ環境での動作最適化
🔧 MCP管理機能の強化
目標: MCPサーバの管理をより柔軟で強力にする
- 各ツール単位で細かな権限を設定できるようにする
- ツール名を任意に変更できる機能を追加
- autoStart オプションを設定可能にする
🧠 長期記憶(Long-Term Memory)システム
目標: あらゆるMCP呼び出しを永続的に記憶するメカニズムを提供
- メタ情報のインデックスの実装
- ベクトルDBへの保存・検索機能の実装
- 複数のベクトルDBプロバイダーのサポート(Pinecone、Weaviate、Qdrant等)
🤖 エージェントオーケストレーション
目標: 複数のAIエージェントを協調させる高度な機能
- OpenAI 互換 API に対応
- より使いやすいエージェントのUIを提供
この他、Discordやアプリ内のフォームから頂いたユーザのフィードバックについてマイルストーンに取り込み、開発していきます。日本発のAIアプリとして、盛り上げていきたいと思います。
よろしくお願いします!
Discussion