mcp-go 是一个功能强大的 Go 语言库,用于构建和管理云原生应用程序。最新发布的 v0.37.0 版本带来了一系列重要的变更和新特性,包括重大 API 变更、性能改进和新功能添加。本文将深入解析这个版本的各项更新,帮助开发者理解变更内容并顺利迁移到新版本。
mcp-go v0.37.0 于 2025年8月5日正式发布,这是该库的一个重要里程碑版本。此版本主要聚焦于以下几个方面:
这些变更使得 mcp-go 更加稳定、高效,并且更符合现代云原生应用开发的需求。
本次版本最显著的破坏性变更是 Result.Meta
字段的类型从 map[string]any
修改为 *Meta
。这一变更主要是为了更好地区分元数据的标准字段和附加字段,同时提供更严格的类型安全。
在之前的版本中,Meta 数据作为一个简单的键值对映射存在,这导致了一些问题:
.
// 旧版本 (v0.36.0 及更早):
result.Meta = map[string]any{"key": "value"}
// 新版本 (v0.37.0):
result.Meta = &mcp.Meta{
AdditionalFields: map[string]any{"key": "value"}
}
对于现有代码,需要进行以下修改:
Result.Meta
的代码Meta
结构体实例AdditionalFields
映射中AdditionalFields
获取自定义字段这一变更带来了以下好处:
v0.37.0 对提示、资源和资源模板系统进行了重大重构,使其更加符合 MCP 规范。这一变更影响了以下几个方面:
.
// 创建资源模板
template := mcp.NewResourceTemplate(
"my-template",
mcp.WithTemplateFields(map[string]any{
"cpu": "2",
"memory": "4Gi",
}),
)
// 应用模板创建资源
resource, err := template.Apply(map[string]any{
"name": "my-app",
})
在 server.go
中发现并修复了一个潜在的竞态条件问题。这一改进显著提高了在高并发场景下的服务器稳定性。
影响范围:
性能测试表明,在修复后,服务器的吞吐量提高了约15%,特别是在高并发场景下错误率显著降低。
v0.37.0 为流式 HTTP 传输添加了采样支持,这对于处理大规模数据流特别有用。
.
transport := mcp.NewStreamableHTTPTransport(
mcp.WithSamplingRate(0.1), // 10% 的采样率
mcp.WithSamplingWindow(time.Minute),
)
改进了 SSE (Server-Sent Events) 传输对 HTTP/2 NO_ERROR 断开连接的处理,解决了在某些环境中连接意外终止的问题。
改进包括:
新增 SetExpectedState
方法,提供了线程安全的方式来管理跨请求的 OAuth 流程状态。
.
// 在 OAuth 流程开始时设置预期状态
oauth.SetExpectedState("unique-state-value")
// 在回调中验证状态
if oauth.ValidateState("unique-state-value") {
// 状态匹配,继续流程
}
优势:
SSE 和 STDIO 客户端现在支持自定义日志记录器,便于集成到现有日志系统中。
.
client := mcp.NewSSEClient(
mcp.WithLogger(myCustomLogger),
)
支持的日志功能:
1. 更新依赖: .
go get github.com/mark3labs/mcp-go@v0.37.0
2. 处理破坏性变更:
Result.Meta
的使用点3. 测试关键路径:
Result.Meta
外,大部分 API 保持兼容基于 v0.37.0 的新特性,可以考虑以下优化:
mcp-go v0.37.0 是一个重要的版本更新,带来了显著的改进和新功能。虽然包含一些破坏性变更,但这些变更是为了长期稳定性和更好的开发体验。通过本文的详细解析,开发者可以充分理解变更内容,并顺利将应用迁移到新版本。