欢迎光临
我们一直在努力

构建不令人失望的MCP服务器……令牌。

第一代 MCP 服务器非常出色。它们让 AI 代理能够访问大量的外部应用程序和数据——Jira、Confluence、GitHub、Linear 等等,不胜枚举。但它们大多只是对 REST API 的封装。这会导致大量的上下文信息膨胀、出现各种错误信息,以及令牌浪费。

结合ultra-mcp-toolkit中的一些策略,您可以大幅减少这种臃肿——并节省资金。

构建一个经济高效的MCP服务器很简单。只需安装相应的技能即可。

这就是“戏剧性地”是什么样子的

真实基准测试,基于实时 Jira 实例,可复现

每次呼叫响应大小

设想幼稚的工具包节省
获取 1 张简单票据20.3KB1.2KB17.5倍
调查富票270.7KB15.5KB17.5倍
JQL 搜索约 10 张票20.5KB3.5KB5.8倍

那条包含大量信息的票务记录才是真正令人头疼的地方。270 KB → 15.5 KB。大约 67000 个令牌减少到大约 3900 个令牌。内容不变;完整的有效载荷仍然会保存到磁盘,代理只有在真正需要详细信息时才能通过路径获取它ref:

工具清单成本(每次对话均需付费)

方法字节~tokens节省
简单粗暴(每次操作只用一个工具)38.9KB9,947
整合工具25.1KB6,4271.5倍
已合并 + 已筛选约6 KB约16005倍
代码 API 模式401B10099×

你没看错。工具列表的价格从大约 1 万个代币骤降至大约 100 个代币。每一次对话都是如此。

为什么MCP服务器会泄露令牌?

四种反模式几乎无处不在:

  1. 返回原始 API JSON 数据。Jira问题包含iconUrl状态、嵌套selfURL、模式元数据、展开提示以及同一状态字段的三种不同格式。代理程序不需要这些信息。
  2. 每个端点对应一个 MCP 工具。典型的 CRM 系统大约有 80 个端点 → 列表中有 80 个工具描述 → 用户输入任何内容之前大约会产生 1 万个令牌。
  3. 请求 LLM 进行过滤或分页。该模型无法可靠地处理大型数据结构,而且分块逻辑本身会消耗令牌。过滤操作应在服务器端进行。
  4. 没有对保留哪些内容的约束。拒绝列表修剪(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-mcpultra-bitbucket-mcp。以上基准测试数据来自针对真实 Jira Cloud 实例运行的 Jira 服务器——测量的每个字节都是生产代理实际会接收到的字节。


如果您正在为任何企业 API(Jira、Confluence、GitHub、Linear、Notion、ServiceNow、Salesforce 等)构建 MCP 服务器,并且您的令牌费用或上下文窗口开始变得难以承受,不妨试一试。

⭐ github.com/scottlepp/ultra-mcp-toolkit — 欢迎提出问题、提交 PR 和基准测试贡献。

赞(0)
未经允许不得转载:X记录空间 » 构建不令人失望的MCP服务器……令牌。