MCP代理服务器

Toolshed是一款MCP代理服务器,通过仅暴露两个工具接口(list_tools和run_tool)来复用多个MCP后端服务,显著减少代理的令牌消耗。

  • by OZmasterAI
  • Python
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 OZmasterAI/toroidal-toolshed

使用说明

工具棚

MCP代理服务器,只需2个工具即可多路复用多个MCP后端。

问题

MCP驱动的代理每次都会将工具模式加载到其上下文窗口中。如果你在多个MCP服务器上有20多个工具,那么在代理开始思考之前,就已经花费了数千个令牌。随着服务器的增加,成本呈线性增长。

解决方案

Toolshed位于您的代理和MCP后端之间。它没有直接公开每个工具模式,而是只公开了两个工具:

  • list_tools --在运行时发现可用工具
  • run_tool --按名称调用任何后端工具

你的代理看到了大约400个模式令牌,而不是数千个。工具发现通过代理按需进行。

需求

  • Python 3.10+
  • mcp SDK>=1.22.0

设置

1.安装依赖项

pip install -r requirements.txt

2.配置您的后端

复制示例配置并对其进行编辑:

cp toolshed.example.json toolshed.json

toolshed.json 定义Toolshed代理的MCP服务器:

{
  "servers": {
    "my-http-server": {
      "type": "http",
      "url": "http://127.0.0.1:8000/mcp"
    },
    "my-stdio-server": {
      "type": "stdio",
      "command": "python3",
      "args": ["path/to/your/mcp_server.py"],
      "env": {}
    }
  },
  "groups": {
    "research": ["my-http-server:search", "my-http-server:fetch"],
    "ops": ["my-http-server:health_check"]
  }
}

服务器类型:

类型 描述
http 通过可流式传输的http连接到正在运行的MCP服务器。集 url 连接到服务器的MCP端点。
stdio 生成一个子进程,并通过stdin/stdout进行通信。集 command, args,并且可选 env.

群组 是可选的。它们允许您将跨服务器的工具组织成逻辑集合(例如“研究”、“操作”)。将组名传递给 list_tools 过滤结果。

3.启动服务器

python3 toolshed.py --config toolshed.json --port 8750

服务器启动于 http://127.0.0.1:8750启动时,它连接到所有配置的后端并构建工具目录。

4.连接您的代理

Toolshed公开了一个标准的MCP流式HTTP端点,因此它与 任何兼容MCP的客户端 --不仅仅是克劳德代码。

克劳德代码 (~/.claude/mcp.json):

{
  "mcpServers": {
    "toolshed": {
      "type": "http",
      "url": "http://127.0.0.1:8750/mcp"
    }
  }
}

其他MCP客户端: 将您的客户指向 http://127.0.0.1:8750/mcp 使用流式HTTP传输。任何支持MCP的代理或框架(Claude agent SDK、OpenAI Agents SDK、LangChain、Cursor等)都可以连接。

您的代理现在可以通过以下方式访问所有后端工具 list_tools 和 run_tool.

用法

list_tools

发现所有后端的可用工具:

list_tools()                    # all tools
list_tools(group="research")    # filter by group

返回工具名称、描述、输入模式以及哪个服务器拥有每个工具。

运行工具

在特定后端调用特定工具:

run_tool(server="my-http-server", tool="search", args={"query": "hello"})

从后端返回原始结果——Toolshed不会修改或汇总响应。

端点

端点 描述
GET/POST /mcp MCP协议端点(可流式传输http)
GET /refresh 强制刷新完整工具目录
GET /refresh?server=name 刷新一个后端的工具

作为服务运行(systemd)

编辑 toolshed.service 要为系统设置正确的路径,请执行以下操作:

cp toolshed.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now toolshed

检查状态:

systemctl --user status toolshed
journalctl --user -u toolshed -f

运作原理

  1. 启动时,Toolshed连接到中的每个后端 toolshed.json
  2. 它召唤 tools/list 在每个后端上缓存结果
  3. 当代理人来电时 list_tools,Toolshed返回缓存的目录
  4. 当代理人来电时 run_tool,Toolshed将调用转发到右后端并返回原始结果
  5. 击打 /refresh 在不重新启动的情况下重建目录

项目结构

toolshed.py             # Server (single file, all logic)
toolshed_bridge.py      # stdio-to-HTTP bridge for Claude Code MCP integration
torus-launcher.sh       # Startup script that launches all MCP backend servers on first session
toolshed.json           # Your backend config (gitignored)
toolshed.example.json   # Example config to copy
test_toolshed.py        # Test suite
toolshed.service        # systemd unit template
requirements.txt        # Python dependencies

使用环形技能

工具架和 环形技能 它们被设计为协同工作。将技能服务器注册为后端 toolshed.json 您的代理通过同一个2-tool接口获得技能发现、调用和质量跟踪:

{
  "servers": {
    "torus-skills": {
      "type": "http",
      "url": "http://127.0.0.1:8743/mcp"
    }
  }
}

两者也可以单独使用。

作为子模块

可以用作任何项目中的子模块,包括 Torus框架:

git submodule add https://github.com/OZmasterAI/toroidal-toolshed.git toolshed

内置于

内置于 Torus框架 --Claude Code的自我进化质量框架。

许可证

阿帕奇-2.0