您的位置:首页 > 手游攻略 > 我们构建了 126 个 MCP 工具:但这并不是 Agent 的最佳方案

我们构建了 126 个 MCP 工具:但这并不是 Agent 的最佳方案

作者:互联网  时间: 2026-07-13 09:07:53  

当 MCP 成为行业热点时,我们构建了一个包含 126 个自动生成工具的完整 MCP Server。以下是出现的问题,以及为什么更多的工具并不意味着更好的 Agent 赋能。

MCP 热潮

2025 年初,MCP (Model Context Protocol) 成为行业热点。

Anthropic 推出了该协议。Cursor、Claude Code、Antigravity、各种 Agent IDE 以及众多 SaaS 产品迅速跟进。该协议承诺为 AI Agent 连接外部工具和数据源提供一种标准化的方式。

在那段时间里,几乎每个拥有 API 的产品都会被问到同一个问题:

“你们支持 MCP 吗?”

对于 Apifox 来说,这个选择似乎顺理成章。

为什么 MCP 看起来是标准答案

Apifox 自身已经积累了全面的 API 开发能力:

  • API 文档
  • Schema 定义
  • Mock 服务器
  • 测试用例 (Test cases)
  • 测试场景 (Test scenarios)
  • 测试套件 (Test suites)
  • 测试报告
  • 导入/导出工作流
  • 分支协作
  • 以及更多

如果 Agent 将成为新的软件入口——用户与产品交互的新方式——那么通过 MCP 暴露这些能力似乎是一张必须拿到的入场券。

我们相信,如果我们能将能力封装为 MCP 工具,Agent 将能够:

  • 查询 API 文档
  • 创建测试用例
  • 运行测试场景
  • 导入/导出项目数据
  • 管理环境和变量
  • 跨分支协作

逻辑非常直接:暴露的能力越多 = 对 Agent 的赋能越强。

我们实际构建了什么

我们对此非常重视。

Apifox MCP 并不是一个只有几个手写端点的简单 Demo。它是一个完整的 MCP Server:

会话系统 (Session System)

MCP 客户端首先初始化一个会话。服务器生成一个 sessionId 并通过 Redis 保存会话状态。后续请求继续携带 sessionId 进行访问。

换句话说,它不是一次性的 HTTP 调用,而是一个协议级的会话系统。

工具分类

工具层也不是手写的几个固定端点。我们将 Apifox 的工具分为几类:

类别描述示例
原生项目工具为项目级操作构建项目摘要、目录结构、资源详情
内置领域工具Apifox 核心功能导入/导出、接口详情、测试用例、测试场景
生成的 OpenAPI 工具从 OpenAPI 定义自动转换126 个具有唯一标识符、路径、HTTP 方法和输入 Schema 的工具

最后一类:126 个生成的工具。

每个生成的工具都拥有:

  • 唯一的标识符
  • 特定的 API 路径
  • HTTP 方法(GET, POST, PUT, DELETE 等)
  • 完整的输入 Schema,包含字段描述、类型和枚举值
  • 定义的返回结构

渐进式披露 (Progressive Disclosure)

为了减轻工具暴露的压力,我们还构建了一个动态发现层:

Agent 可以:

  1. 首先搜索可用的接口工具 (listOpenApiEndpoints)
  2. 然后获取特定工具的 OpenAPI 详情 (getOpenApiDetails)
  3. 最后通过工具 ID 执行实际的 HTTP 调用 (executeOpenApi)

这是我们在渐进式披露方面的尝试。我们没有简单地直接、显式地暴露所有底层端点。我们希望 Agent 先搜索,再获取详情,最后执行。

随机工具之墙 (The Wall of Random Tools)

但在进入实际任务时,问题很快就出现了。

考虑一个简单的用户请求:

“帮我为这个接口添加一个测试并运行验证。”

从实现的角度来看,这是一个合理的请求。Apifox 具备以下能力:

  • 查找接口
  • 创建测试用例
  • 运行测试场景
  • 生成报告

但从 Agent 的角度来看,这个简单的请求实际上触发了一系列连续的判断:

决策点选项不确定性
从哪里开始?先找项目?还是先找接口?缺乏明确引导
该读取什么?读取接口详情?还是列出已有用例?两者看起来都合理
如何创建?直接用 createTestCase?还是先找用例分组?需求未知
如何更新?直接调用 update 工具?还是导入步骤后再读回?隐藏的工作流

Agent 不仅仅需要找到正确的工具。它需要先解决“使用哪个工具”的问题,然后才能开始解决用户的问题。

从实现角度看,这些问题都可以通过工具解决。但从 Agent 体验的角度看,它们构成了一道“随机工具之墙”。

四个结构性问题

通过实际测试和内部反馈,我们发现了 MCP 方案的四个结构性问题。

问题 1:工具发现成本飙升

Apifox 不是一个仅用十几个端点就能描述清楚的产品。

模块细分
接口 (Endpoints)列表、获取、创建、更新、删除
数据模型 (Schemas)列表、获取、创建、更新、删除
环境 (Environments)列表、获取、创建、更新、删除、变量
Mock配置、启用、禁用
测试用例 (Test cases)列表、获取、创建、更新、删除、复制
测试场景 (Test scenarios)列表、获取、创建、更新、删除、导入步骤、运行
测试套件 (Test suites)列表、获取、创建、更新、删除
报告 (Reports)列表、获取、生成、下载
导入/导出多种格式、选项
分支 (Branches)列表、创建、合并、删除

当工具从十几个增长到几十个或上百个时,Agent 在开始解决用户问题之前,必须先解决“该用哪个工具”的问题。

我们尝试将工作流写入工具的 description(用于向 AI Agent 暴露工具的字段)。例如,工具描述会明确指出:

“在查询接口数据之前,你需要先通过另一个工具确认项目,然后通过第三个工具获取项目元数据,最后调用当前工具。”

这种方法在小规模工具集中有效。但在海量的工具墙中,description 本身就在竞争模型的注意力。

我们在描述中写的引导越多,消耗的 Token 就越多——而 Agent 实际阅读并遵循它们的可能性就越小。

问题 2:业务 Schema 侵占上下文

每个 MCP 工具不仅仅是一个工具名称。

每个工具背后都有:

  • description(工具的作用)
  • input schema(参数、类型、必填/选填)
  • 字段解释(嵌套结构、约束)
  • 枚举值(允许的选项)
  • 返回结构(响应格式、错误处理)

让我们做一个保守的估计:

因素数值
工具数量100+
每个工具平均 Token 数~500
总工具描述 Token 数~50,000

用户的问题可能只有 50 个字符。但模型被迫首先引入 50,000 个 Token 的工具描述——这仅仅是为了一个 MCP Server。

这并非理论推测。行业数据支持这一点。

Cursor 的官方博客文章 "Dynamic Context Discovery" 提供了宝贵的参考数据:通过将 MCP 工具描述、终端会话和长对话转换为按需加载的上下文,运行时 Token 消耗减少了 46.9%。

Trae 的做法更为直接:限制 MCP 工具数量和单个工具描述长度:

  • 工具数量上限:40
  • 单个工具描述限制:8000 字符

事实上,在早期的内部测试中,许多团队反馈 Apifox MCP 在 Trae 中存在部分工具无法被调用的问题。由于模型上下文有限,Agent 被迫做出权衡,而外部工具往往是首个被“砍掉”的对象。

这些解决方案都指向同一个事实:

工具描述不能无限地进入模型上下文。

问题 3:协议会话让执行链变重

Apifox MCP server 需要处理:

协议状态描述
MCP initialize客户端与服务器之间的握手
sessionId generation会话的唯一标识符
Redis session storage状态持久化
Transport connect/close连接管理
Session touch保活机制
DELETE session完成后的清理
JSON response 或 SSE 配置输出格式选项

对于简单的工具调用,这些成本是可以接受的。但对于具有大量调用和频繁探索的 Agent 任务,这些状态管理要求增加了服务器端和客户端的复杂性。

在实现 Apifox MCP 时,团队耗费了大量精力来排查和适配不同的 Agent 客户端(Cursor, Claude Code, Antigravity, Trae 等)。然而,协议兼容性问题依然存在,且官方 MCP 协议仍在不断发布新版本补丁。

各方都深受其苦。

问题 4:原子化工具无法自然表达产品语义

在 Apifox 的测试场景中,它不仅仅是一个简单的 steps 数组表达式。

一个测试场景涉及:

组件复杂性
导入 (Import)来自接口或已有用例的步骤
回读 (Read-back)导入后获取完整结构
内部用例 (Internal cases)嵌入在步骤中的 HTTP 请求
前/后置处理器请求前后的脚本
断言 (Assertions)响应验证规则
变量提取从响应中捕获值
运行时环境环境选择、变量
报告验证检查测试结果

在将这些拆分为多个 MCP 工具后,Agent 仍需亲自承担测试编排工作。

工具越原子化,模型就越需要理解产品内部语义:

  • 为什么导入需要回读?
  • 为什么内部用例有不同的更新标记?
  • 为什么断言需要特定的比较器?
  • 为什么变量提取有类型约束?

这显然超出了模型的能力范围。

这迫使 Apifox 团队不得不针对内部产品语义主动进行技术工程调整。原子化的端点被动地增加了一个转换层,仅仅是为了适配单个 MCP 工具层的调度。

工程挑战和后期维护成本无疑是艰巨的。

根本原因

这四个问题的根本原因是一致的:

MCP 擅长连接工具,但复杂的研发任务需要的不仅仅是工具连接——它们需要可执行的工程流程。
MCP 优势MCP 局限
标准化连接无法表达工作流
统一协议无法引导顺序
工具暴露无法强制校验
动态发现无法提供判断

对于只有十几个定义明确的操作的简单产品,MCP 表现良好。Agent 可以合理地猜测正确的工具,调用它并获得结果。

对于像 Apifox 这样拥有数十个模块、数百个操作、嵌套结构、隐藏工作流和特定产品语义的产品,仅靠 MCP 会产生一道 “随机工具之墙”,让 Agent 难以驾驭。

我们的教训

教训启示
更多工具 ≠ 更好的 Agent 赋能工具数量是成本,而非收益
工具描述竞争上下文每个工具 500 Token × 100 个工具 = 50,000 Token 的负担
会话协议增加执行开销每次调用都带有协议状态管理
原子化工具需要产品知识Agent 必须理解内部原理才能进行编排
连接 ≠ 执行MCP 负责连接;CLI + SKILL 负责执行

转型

这一认识促使我们提出了一个不同的问题:

如果 MCP 不是 Agent 赋能的最终答案,那么什么是?

我们并没有否定 MCP 的价值——它提供了标准化的连接,这对生态系统很重要。但我们需要一种能够实现以下目标的方案:

  • 表达工作流,而不仅仅是工具
  • 引导 Agent 完成序列操作
  • 在写入前进行校验
  • 强制执行工程质量门禁
  • 将复杂性吸收进系统内部

我们得出的答案是:CLI + SKILL。

在下一篇文章《为什么我们要开发全新的 Apifox CLI》中,我们将探讨这种架构转型——复杂性如何从模型上下文转移到工程系统,以及为什么这会改变 Agent 赋能的一切。

核心要点

  • MCP 成为“Agent 如何连接工具”的行业标准答案。
  • 我们构建了 126 个 MCP 工具,原以为工具越多 = 赋能越强。
  • 实际任务揭示了四个结构性问题:发现成本、上下文侵占、会话开销、产品语义。
  • 根本原因:MCP 连接工具,但复杂任务需要可执行的流程。
  • 当工具描述消耗上下文时,更多的工具是一种成本,而非收益。

下载 Apifox,在一个工作区内完成 API 设计、Mock测试和文档工作。了解更多关于 Apifox CLI 的信息,用于命令行 API 测试、CI 自动化和 AI Agent 工作流。

开发必备:API 全流程管理神器 Apifox

介绍完上文的内容,我想额外介绍一个对开发者同样重要的效率工具 —— Apifox。作为一个集 API 文档、调试、设计、测试、Mock、自动化测试于一体的工具,Apifox 是目前提升研发效率的首选。

如果你正在开发项目,不妨试试其极其友好的界面设计,它完全兼容 Postman 和 Swagger 数据格式,导入数据非常方便,,即使是新手也能很快上手,点击这里即可注册使用。

我们构建了 126 个 MCP 工具,但这并不是 Agent 的最佳方案

值得一提的是,除了个人和常规团队使用,针对有高安全合规要求、或需要在内网环境协作的企业,Apifox 还提供了深度定制的私有化部署方案。

最新游戏

更多

Copyright©2010-2019. All rights reserved | 波波三国游戏官网|[email protected]

备案编号:湘ICP备2022015115号-4