MCP Tool / Agent-ready Harness
static page
一个工具能被 API 调用,不代表它适合 Agent 使用;输出协议、错误信息和调用顺序都需要重新设计。
Agent Infra 2025 done
#mcp#tool-use#agent-ready#harness#error-handling#prompt-engineering
Context#
我参与过 MCP Tool Serving 相关链路改造。这个经历让我形成了一个很强的判断:
API-ready 不等于 Agent-ready。
一个工具能被后端程序调用,不代表它适合 LLM Agent 使用。Agent 面对的是上下文、自然语言、错误恢复和多轮规划,而不是稳定的函数调用环境。
The problem#
原始工具接口通常面向后端服务,输出大量结构化 JSON。这对程序来说没问题,但对 Agent 来说可能有几个问题:
- 字段太多,token 浪费;
- 错误信息不够可读;
- 不知道失败是否可重试;
- 不知道下一步应该等待、换工具还是终止;
- 工具调用顺序不清楚;
- 返回结果不适合放进上下文;
- 生产环境里的异常没有被转化成 Agent 可理解的状态。
What I worked on#
我参与的改造主要包括:
- 压缩冗余 JSON 输出;
- 合并对 Agent 无用的字段;
- 规范错误语义;
- 区分 retryable / non-retryable 状态;
- 给出更清晰的等待和 fallback 信息;
- 让工具调用链路更适合被上下文记录;
- 让 Agent 能更容易理解下一步动作。
Why it matters#
Agent 在真实生产链路里不可能只面对完美工具。它会遇到超时、排队、网络问题、权限问题、参数错误、资源不足和内部服务异常。
如果工具只返回一个后端错误码,Agent 很难知道怎么处理。更好的工具协议应该告诉它:
- 当前发生了什么;
- 是否可以重试;
- 如果重试,应该等多久;
- 是否需要换一个工具;
- 哪些信息应该保留在上下文中;
- 哪些失败是不可恢复的。
What I learned#
MCP 和 tool-use 的关键不是“接入更多工具”,而是让工具输出成为 Agent 可以理解、可以决策、可以恢复的状态。
这也是我后面看 Coding Agent 和 sandbox 环境时很在意的一点:工具、环境和错误信息本身就是训练和评测的一部分。