在这里插入图片描述

近日,mcp-go框架发布了v0.39.1版本,该版本主要修复了一个与工具输出Schema序列化相关的重要问题。本次更新虽仅包含一个关键修复,但对确保工具接口的稳定性和数据一致性具有重要意义。

问题背景

在之前的版本中,当工具的OutputSchema未明确设置时(即其Type字段为空),序列化后的JSON仍会包含一个空的outputSchema字段。这种行为可能导致某些客户端解析时出现预期外的错误,尤其是在依赖Schema类型校验的场景中。

修复内容

本次修复的核心改动位于mcp/tools.go文件的MarshalJSON方法中。具体逻辑调整为:

  • 如果工具同时设置了OutputSchemaRawOutputSchema,仍会返回冲突错误。
  • 仅当OutputSchema.Type不为空时,才在序列化结果中包含outputSchema字段。
  • 若未设置输出Schema(即Type为空),则完全省略该字段,避免返回空值。

代码示例

修复后的核心逻辑如下:

if t.RawOutputSchema != nil {
    // 处理原始Schema
} else if t.OutputSchema.Type != "" { // 仅当Type非空时返回Schema
    m["outputSchema"] = t.OutputSchema
}

测试覆盖

为确保修复的可靠性,本次更新还增强了测试用例(mcp/tools_test.go),新增以下场景验证:

  1. 默认行为:当工具设置了输出Schema时,序列化结果应包含该Schema。
  2. 无输出Schema:当工具未设置输出Schema时,序列化结果不应包含outputSchema字段。

影响范围

该修复属于向后兼容性改动,不会破坏现有接口的行为。仅当工具未定义输出Schema时,序列化结果不再包含空字段,从而避免客户端解析异常。

总结

mcp-go v0.39.1虽是一个小版本更新,但通过精准修复工具输出Schema的序列化逻辑,进一步提升了框架的鲁棒性。建议所有使用工具输出Schema功能的用户升级至此版本,以确保数据交互的稳定性。

Logo

更多推荐