mcpField
M
mcproxy

mcproxy

ローカル
github.com/LaurentAjdnik開発ツール299 週間前に更新

mcproxy について

mcproxyは、MCPクライアントとサーバーの間に置く実験的なプロキシ層で、両者間のワークフローの変更を試す開発者向けです。メッセージを転送し、機能の制限や名称変更、コンテンツ更新などを行う内部機能と外部モジュールの基盤を備えます。

主な機能

  1. 01複数のMCPサーバーに接続
  2. 02リクエスト、レスポンス、エラー、通知を転送
  3. 03サーバー機能の集約またはブロック
  4. 04識別子の衝突を避ける機能名の変更
  5. 05テキストコンテンツのフィルタリングや補完

活用シーン

  1. 01プロキシ経由で複数のサーバーを公開
  2. 02クライアントが利用できるサーバー機能を制限
  3. 03重複するツール名やリソース名を区別
  4. 04転送中のメッセージコンテンツを処理

MCP 対応

クライアント側からはMCPサーバーとして、接続先サーバー側からはMCPクライアントとして動作します。MCPメッセージを転送し、内部機能を適用したり設定済みの外部モジュールを呼び出したりできます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

はじめに

これは非常に実験的なもので、まったく役に立たない可能性もあります 😁。フィードバックをいただけると大変ありがたいので、こちらのディスカッションにぜひご参加ください。

注:これはこちらの「サーバー間のやり取りはホストが制御する」という原則に反する可能性があります。あるいは、そうではないかもしれません……

概要

このプロジェクトは、Anthropic の Model Context Protocol(MCP。詳細はドキュメントと仕様をご覧ください)に関連しています。

MCProxy は MCP クライアントと MCP サーバーの間に位置するプロキシであり、両者間のワークフローに新たな機能を追加できます(以下にいくつかの例を示します)。

MCProxy は、このようなプロキシアーキテクチャを構築するための基本要素と、いくつかの基本機能を提供します(要対応:基本機能の一覧)。

ユーザーのニーズに応じて、プラグインモジュールを使って新機能を追加できます(要対応:プラグインの仕組み)。

全体アーキテクチャ

MCP クライアントから見ると、MCProxy は MCP サーバーとして動作します。MCP サーバーから見ると、MCProxy は MCP クライアントとして動作します。

最もシンプルな構成は次のとおりです。

flowchart LR
    client1[MCP Client]
    subgraph "MCProxy"
        server1[MCP Server]
        client2[MCP Client]
    end
    server2[MCP Server]

    client1 <--MCP--> server1
    client2 <--MCP--> server2
    server1 <--> client2

MCProxy は複数のサーバーに接続できます。

flowchart LR
    client1[MCP Client]
    subgraph "MCProxy"
        server1[MCP Server]
        client2[MCP Client A]
        client3[MCP Client B]
    end
    server2[MCP Server A]
    server3[MCP Server B]

    client1 <--MCP--> server1
    client2 <--MCP--> server2
    client3 <--MCP--> server3
    server1 <--> client2
    server1 <--> client3

MCP ホストは、構成が大きく異なる複数の MCProxy に接続できます。

flowchart LR
    subgraph "Host"
        clientH1[MCP Client]
        clientH2[MCP Client]
    end
    subgraph "MCProxy A"
        serverPA[MCP Server]
        clientPA[MCP Client]
    end
    serverA[MCP Server A]
    subgraph "MCProxy B"
        serverPB[MCP Server]
        clientPB[MCP Client]
    end
    serverB[MCP Server B]

    clientH1 <--MCP--> serverPA
    clientH2 <--MCP--> serverPB
    clientPA <--MCP--> serverA
    clientPB <--MCP--> serverB
    serverPA <--> clientPA
    serverPB <--> clientPB

必要であれば、MCProxy を連結することもできます。

flowchart LR
    client1[MCP Client]
    subgraph "MCProxy A"
        server1[MCP Server]
        client2[MCP Client]
    end
    subgraph "MCProxy B"
        server2[MCP Server]
        client3[MCP Client]
    end
    server3[MCP Server]

    client1 <--MCP--> server1
    client2 <--MCP--> server2
    client3 <--MCP--> server3
    server1 <--> client2
    server2 <--> client3

内部アーキテクチャ

基本コンポーネントは次のとおりです。

  • サーバーマネージャー:MCP クライアントとの通信(リクエストだけでなく、レスポンス/エラー/通知も含む)を処理します。
  • クライアントマネージャー:接続された MCP サーバーの一覧を管理し、それらとの通信(リクエストだけでなく、レスポンス/エラー/通知も含む)を処理します。

内部機能コンポーネントは、常に利用できる基本機能の一覧を提供します。

モジュールマネージャーは、追加機能を提供する外部モジュールの一覧を管理し、それらと連携します。

中核となるコンポーネントはディスパッチャーで、次の処理を行います。

  • MCP クライアントと MCP サーバー間でメッセージを双方向に転送します。
  • 該当する場合、内部機能を適用します。
  • 該当する場合、外部モジュールを呼び出します。
flowchart LR
    subgraph MCProxy
        subgraph servermanager[Server manager]
            server[MCP Server]
        end
        dispatcher[Dispatcher]
        internalfeatures[Internal features]
        modulesmanager[Modules manager]
        subgraph clientsmanager[Clients manager]
            direction TB
            clientA[MCP Client A]
            clientB[MCP Client B]
        end
    end
    moduleA[External module A]
    moduleB[External module B]

    servermanager <--> dispatcher
    dispatcher <--> clientsmanager
    dispatcher <--> internalfeatures
    dispatcher <--> modulesmanager
    modulesmanager <--> moduleA
    modulesmanager <--> moduleB

識別子

デフォルトでは、MCProxy は接続先の MCP サーバーが提供するすべてのリソース/プロンプト/ツールを、同じ識別子(名前、URI など)で公開します。これらの識別子は名前を変更できます(以下の「機能」をご覧ください)。

設定

MCP サーバーに接続するため、MCProxy は MCP ドキュメントのクイックスタートのセクションで定義されているものと同じ設定ファイル形式を使用します。

MCProxy 自体には、さらに内部設定があります。

最後に、各モジュールは設定ディレクティブを提供します。例を以下に示します。

注:Claude Dekstop のような MCP ホストでは、設定ファイルの接続先は MCProxy であり、その背後にある個々のサーバーではありません。

機能

以下は、MCProxy が内部または外部モジュールを通じて実装できる機能の例です。

ログ記録

MCProxy は、MCP クライアントと MCP サーバー間を行き来するすべてのメッセージを記録できます。

設定項目:

  • 記録する内容
  • 記録先

ケイパビリティの集約

MCProxy は、複数の MCP サーバーのケイパビリティを集約し、意味のあるパッケージにまとめることができます。

ケイパビリティのブロック

MCProxy は、接続先の MCP サーバーが提供するケイパビリティの一部のみを公開できます。

設定項目:

  • ブロックするケイパビリティ

ケイパビリティの曖昧さ解消

MCP サーバーの数が急速に増加するにつれて、名前の衝突が発生する可能性があります。MCProxy はケイパビリティの名前を変更して MCP クライアントから一意に見えるようにし、適切な MCP サーバーへのルーティングを処理できます。

設定項目:

  • サーバー/識別子 => 新しい識別子の一覧

コンテンツの更新

MCProxy を通過するテキストコンテンツは、フィルタリングしたり、情報を追加したりできます。

オンザフライの国際化(i18n)

現在の MCP 仕様では、i18n は提供されていません(この件に関する私の課題を参照してください)。

MCProxy は、翻訳 API または LLM を使用して、一部のフィールドをオンザフライで翻訳できます。

設定:

  • 優先言語
  • 翻訳ツールへの接続パラメーター

外部モジュール

外部モジュールは、MCProxy 自体が提供する基本機能に追加機能を提供します。

これらは、MCProxy に接続する独立したプロジェクトです。

現在、MCP クライアント/サーバーのリストが作成されているのと同様に、このようなモジュールのリストを維持できます(たとえば、こちら、こちら、こちらを参照してください)。

ホスティング

ローカルまたはサービスとしてリモートでホストできます。

機能

モジュールは、自身の「機能」、つまり関心のある MCP メッセージの種類を宣言します。

設定ファイルで宣言された順序で呼び出されます。

プロトコル

MCProxy と外部モジュール間のプロトコルは、MCP 仕様から強い影響を受けています。

ただし、ワークフローはかなり異なります。通常、応答は送信されたメッセージと同じ型です。

たとえば、次のようになります。

  • モジュールに送信された GetPromptRequest メッセージは、更新された GetPromptRequest メッセージを返します
  • モジュールに送信された ListToolsResult メッセージは、更新された ListToolsResult メッセージを返します

(未定:このようなプロトコルの仕様)

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。