模型上下文协议代理

MCProxy是MCP客户端和服务器之间的代理,提供日志记录、能力聚合、内容更新等功能,支持插件扩展。

  • by LaurentAjdnik
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 laurentajdnik/mcproxy

使用说明

前言

这是非常实验性的,可能完全无用😁. 加入 这个讨论 如有反馈,我们将不胜感激。

注:这可能与 这:“跨服务器交互由主机控制”。或者不是。..

概述

该项目与Anthropic的模型上下文协议(MCP,见 文档 和 规格).

MCProxy是MCP客户端和MCP服务器之间的代理,允许在它们之间的工作流程中使用新功能(一些 示例 下面给出)。

MCProxy为这种代理架构提供了构建块,以及一些基本功能(TBD:基本功能列表)。

根据用户的需求,可以使用插件模块(TBD:插件机制)添加新功能。

全球架构

从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主机可以连接到具有非常不同配置的不同MCPox:

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

如果有任何用途,MCProxies可以链接:

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使用相同的标识符(名称、URI等)公开其连接的MCP服务器的所有资源/提示/工具。这些标识符可以重命名(见下面的功能)。

配置

为了连接到MCP服务器,MCProxy使用与 快速入门部分 MCP文件。

MCProxy本身还有一些内部配置。

最后,每个模块都提供了一些配置指令。示例如下。

注意:在MCP主机中,如Claude Dekstop,配置文件将指向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 消息

(待定:此类协议的规范)