第一代 MCP 服务器非常出色。它们让 AI 代理能够访问大量的外部应用程序和数据——Jira、Confluence、GitHub、Linear 等等,不胜枚举。但它们大多只是对 REST API 的封装。这会导致大量的上下文信息膨胀、出现各种错误信息,以及令牌浪费。
结合ultra-mcp-toolkit中的一些策略,您可以大幅减少这种臃肿——并节省资金。
构建一个经济高效的MCP服务器很简单。只需安装相应的技能即可。
这就是“戏剧性地”是什么样子的
真实基准测试,基于实时 Jira 实例,可复现:
每次呼叫响应大小
| 设想 | 幼稚的 | 工具包 | 节省 |
|---|---|---|---|
| 获取 1 张简单票据 | 20.3KB | 1.2KB | 17.5倍 |
| 调查富票 | 270.7KB | 15.5KB | 17.5倍 |
| JQL 搜索约 10 张票 | 20.5KB | 3.5KB | 5.8倍 |
那条包含大量信息的票务记录才是真正令人头疼的地方。270 KB → 15.5 KB。大约 67000 个令牌减少到大约 3900 个令牌。内容不变;完整的有效载荷仍然会保存到磁盘,代理只有在真正需要详细信息时才能通过路径获取它ref:。
工具清单成本(每次对话均需付费)
| 方法 | 字节 | ~tokens | 节省 |
|---|---|---|---|
| 简单粗暴(每次操作只用一个工具) | 38.9KB | 9,947 | 1× |
| 整合工具 | 25.1KB | 6,427 | 1.5倍 |
| 已合并 + 已筛选 | 约6 KB | 约1600 | 5倍 |
| 代码 API 模式 | 401B | 100 | 99× |
你没看错。工具列表的价格从大约 1 万个代币骤降至大约 100 个代币。每一次对话都是如此。
为什么MCP服务器会泄露令牌?
四种反模式几乎无处不在:
- 返回原始 API JSON 数据。Jira问题包含
iconUrl状态、嵌套selfURL、模式元数据、展开提示以及同一状态字段的三种不同格式。代理程序不需要这些信息。 - 每个端点对应一个 MCP 工具。典型的 CRM 系统大约有 80 个端点 → 列表中有 80 个工具描述 → 用户输入任何内容之前大约会产生 1 万个令牌。
- 请求 LLM 进行过滤或分页。该模型无法可靠地处理大型数据结构,而且分块逻辑本身会消耗令牌。过滤操作应在服务器端进行。
- 没有对保留哪些内容的约束。拒绝列表修剪(
delete result.iconUrl)会在 API 添加新的冗余字段时悄无声息地破坏协议。允许列表则能保持协议的稳定性。
解决方案,分为三种策略
1. 允许列表式修剪投影
import { pick } from "ultra-mcp-toolkit/trim";
const issueSummary = (raw) => {
const r = raw as { key: string; fields: Record<string, unknown> };
return {
key: r.key,
...pick(r.fields, ["summary", "status", "priority", "assignee"]),
};
};
注册一次修剪规则。所有响应都会经过它。新的 API 字段默认会被丢弃。模型会查看它需要的内容;完整的响应会以字符串的形式存储在磁盘上,ref:代理可以按需进行解引用。
2. 综合工具(行动区分型)
与其使用 80 个工具,不如只提供约 15 个——每个工具都接受一个action参数:
{ action: "get", issueIdOrKey: "PROJ-1" }
{ action: "create", projectKey: "PROJ", summary: "..." }
{ action: "transition", issueIdOrKey: "PROJ-1", transition: "Done" }
相同的操作,工具列表成本却只有原来的五分之一。该工具包的调度器负责处理每个操作的 Zod 验证、清单路由,以及full: true在模型确实需要原始响应时的备用方案。
3. 代码 API 模式(99 倍速)
公开一个MCP工具,该工具向代理提供捆绑式 CLI 的路径以及套接字地址:
node <cli-path> issue.get --issueIdOrKey=PROJ-1
# stdout: trimmed summary as JSON
# final line: `ref: /path/to/full-response.json`
代理程序通过其 shell 控制整个 API。无论有多少操作,工具列表始终只包含一个工具。对于支持 shell 的代理程序(例如 Claude Code、Cursor 以及任何支持 bash 的代理程序),这简直是完美之选。
快速入门
npm install ultra-mcp-toolkit
该工具包包含一个 Claude Code 技能,当您在 MCP 服务器上工作时,该技能会自动加载。请安装它:
npm run install-skill
就是这样。这项技能引导代理人完成清单设计、修剪投影、调度器布线和服务器启动——这些模式产生了上述数字。
使用非 Claude 代理(Codex CLI、Cursor、Aider、Continue、Zed)?直接指向技能标记——AGENTS.md向您展示如何操作。
盒子里装的是什么?
- 操作清单— 将端点声明为纯数据;通过单一数据源为 MCP 工具、CLI 和代码 API 桥接提供支持。
- 修剪注册表——类型安全的允许列表投影。
- 内容寻址沙箱——完整的响应会保存到磁盘;模型只能看到一个响应
ref:。 - 页面缓存— 稳定键的版本化 ID 磁盘缓存(按 SHA 排序的 PR 差异,按版本排序的 Confluence 页面)。
- 池化重试感知 HTTP 传输—
undici+ 429 感知重试尊重Retry-After。 - 原子级流媒体下载——sha256 验证,路径遍历安全。
- 综合工具调度器——经 Zod 验证,可区分操作。
- CLI 脚手架— 桥接模式 + 直接模式,免费
createCli。 - 捆绑式 Claude Code 技能——只需一条命令即可安装。
生产证明
用于ultra-jira-mcp和ultra-bitbucket-mcp。以上基准测试数据来自针对真实 Jira Cloud 实例运行的 Jira 服务器——测量的每个字节都是生产代理实际会接收到的字节。
如果您正在为任何企业 API(Jira、Confluence、GitHub、Linear、Notion、ServiceNow、Salesforce 等)构建 MCP 服务器,并且您的令牌费用或上下文窗口开始变得难以承受,不妨试一试。
⭐ github.com/scottlepp/ultra-mcp-toolkit — 欢迎提出问题、提交 PR 和基准测试贡献。
X记录空间