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 相关

从客户端视角看,mcproxy 表现为 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 会使用相同的标识符(名称、URI……)公开其连接的 MCP 服务中的所有资源/提示词/工具。这些标识符可以重命名(参见下文的“功能”)。

配置

为了连接 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 或大模型即时翻译某些字段。

配置:

  • 首选语言
  • 翻译工具的连接参数

外部模块

它们在 MCProxy 自身提供的基本功能之上提供额外功能。

它们是可接入 MCProxy 的独立项目。

可以维护此类模块列表,就像目前正在建立 MCP 客户端 / 服务列表一样(例如参见此处、此处或此处)。

托管

它们可以作为服务在本地或远程托管。

功能

它们声明自己的“功能”,即它们感兴趣的 MCP 消息类型。

它们按照在配置文件中声明的顺序被调用。

协议

MCProxy 与外部模块之间的协议深受 MCP 规范的启发。

但工作流大不相同:响应通常与发送的消息类型相同。

例如:

  • 发送给模块的 GetPromptRequest 消息会返回一条更新后的 GetPromptRequest 消息
  • 发送给模块的 ListToolsResult 消息会返回一条更新后的 ListToolsResult 消息

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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。