使用说明
前言
这是非常实验性的,可能完全无用😁. 加入 这个讨论 如有反馈,我们将不胜感激。
注:这可能与 这:“跨服务器交互由主机控制”。或者不是。..
概述
该项目与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消息
(待定:此类协议的规范)
