导语 🚀 MCP(Model Context Protocol)把大模型应用、外部工具、数据源和业务系统连接到同一套交互框架中。真正落地时,很多团队遇到的难点并不是“能不能调用工具”,而是“输入是否稳定、输出是否可解析、错误是否可追踪”。因此,围绕工具调用的输入输出格式做标准化,是 MCP 实践中非常关键的一步。
一、为什么 MCP 工具调用需要格式标准化
MCP 的核心价值在于用统一协议连接模型与外部能力,例如资源、提示词和工具。官方规范说明 MCP 使用 JSON-RPC 消息进行通信,并为工具、资源、提示等能力提供统一组织方式,可参考 MCP 基础协议说明。在实际项目中,如果每个工具的入参字段、返回结构、错误信息都各不相同,模型就很容易出现参数遗漏、字段误解、结果二次解释失败等问题。
标准化不是为了增加开发负担,而是为了降低协作成本。对于模型侧,它能更准确地理解工具边界;对于服务端,它能更容易校验参数;对于前端或工作流系统,它能稳定展示结果;对于运维团队,它能快速定位失败原因。
二、输入格式:让模型“知道怎么填”
工具输入格式的第一原则是字段语义明确。一个参数名如果叫 query,它可能代表搜索关键词、数据库查询条件,也可能代表用户原始问题。更好的做法是使用更具体的命名,例如 search_keyword、user_question、filter_conditions。命名越清楚,模型越不容易误填。
第二个原则是类型边界清晰。每个字段都应明确是字符串、数字、布尔值、数组还是对象。对于枚举类参数,建议直接列出允许值,例如状态字段只能是 pending、running、completed、failed。这样既方便模型选择,也方便服务端做校验。
第三个原则是减少隐式约定。不要让模型猜“时间格式应该怎么写”“分页从 0 还是 1 开始”“金额单位是元还是分”。这些规则应写入工具描述或参数说明中,例如要求时间统一使用 ISO 8601 格式,分页字段统一为 page 和 page_size。
三、输出格式:让结果“可读、可用、可追踪”
工具输出建议采用稳定的外层结构。实践中可以把返回结果拆成三层:status 表示调用状态,data 承载业务结果,meta 存放分页、耗时、来源、版本等辅助信息。这样无论工具是查订单、搜文档还是生成报告,上层系统都能用相同方式处理。
一个推荐的成功返回结构可以是:status 为 success,data 中放核心内容,meta 中记录 request_id、source、schema_version。对于失败返回,则建议统一包含 error_code、error_message、recoverable 和 suggestion。JSON-RPC 对响应中的 result 与 error 有明确区分,MCP 消息也基于这种模式组织,可参考 来源链接 2.0 规范。
输出内容还要避免“人类可读但机器难用”的问题。例如只返回一段自然语言:“查到了 3 条记录,第一条最相关”,对前端展示、自动排序和后续工具调用并不友好。更好的方式是同时返回结构化数组,每条记录包含 id、title、summary、score、url 等字段,再由模型决定如何总结。
四、错误处理:不要只返回“失败了”
工具调用失败并不可怕,可怕的是失败后没有足够信息恢复。错误格式应尽量稳定,并区分参数错误、权限错误、资源不存在、外部服务超时、内部异常等类型。这样模型才能判断是重新补充参数、提示用户授权,还是稍后重试。
- INVALID_ARGUMENT:参数缺失、类型错误或不符合取值范围。
- UNAUTHORIZED:用户未授权或凭证失效。
- NOT_FOUND:目标资源不存在或不可访问。
- TIMEOUT:下游服务响应超时,可提示重试。
- INTERNAL_ERROR:服务端异常,需要记录日志并返回追踪编号。
在论坛、知识库、企业检索等场景中,建议错误信息对用户保持克制,对开发者保持完整。用户看到的是“当前文档暂不可访问,请检查权限”,日志中记录的是 request_id、tool_name、参数摘要、调用耗时和异常栈。这样既保护安全,也便于排查。
五、Schema 版本与兼容策略
MCP 工具一旦接入多个客户端,输入输出格式就不能随意变化。建议每个工具都维护 schema_version 字段,并在变更时遵循向后兼容原则:新增字段优于修改字段,废弃字段要保留过渡期,枚举值扩展要评估旧客户端是否能处理。
如果工具返回结构必须升级,可以在 meta 中加入 schema_version,并在工具描述中说明版本差异。对于高频工具,还可以设计能力探测接口,让客户端先获取当前工具支持的字段、限制和版本,再决定如何调用。MCP 规范也强调能力协商、工具暴露和客户端能力之间的边界,可参考 MCP Specification。
六、实践中的落地建议 🛠️
- 先统一命名规范:字段使用英文小写加下划线或驼峰命名,团队内部保持一致。
- 为每个工具写清楚输入示例:示例比抽象描述更容易让模型稳定调用。
- 输出必须结构化:自然语言总结可以有,但不要替代 data 字段。
- 错误码要可枚举:避免每个服务随意返回不同错误文案。
- 保留追踪信息:request_id、tool_name、schema_version 对排障非常重要。
- 把安全边界写进格式:敏感字段要脱敏,权限不足时不要泄露资源存在性。
七、一个简化的格式设计思路
在设计 MCP 工具时,可以先问三个问题:模型需要填写什么,服务端需要校验什么,调用方需要消费什么。输入侧重点是“少歧义”,输出侧重点是“可解析”,错误侧重点是“可恢复”。只要这三点稳定,工具数量增加后,系统依然能保持良好的可维护性。
好的工具格式,不只是给接口看的,也是给模型、用户、前端、日志系统和未来维护者看的。
总结
MCP 工具调用的输入输出标准化,本质上是在模型不确定性和工程确定性之间建立桥梁。输入格式要明确字段、类型和约束;输出格式要稳定结构、保留元信息;错误格式要可分类、可追踪、可恢复;版本策略要考虑长期兼容。对于正在建设 AI Agent、企业知识助手或自动化工作流的团队来说,越早建立这套规范,后续扩展工具、排查问题和提升调用成功率就越轻松。✅