MCP(Model Context Protocol)是 Google、Anthropic 等推出的 LLM 应用与外部工具集成协议。为其官方 Go SDK 自动插桩面临几个挑战:协议复杂(tools/call、resources/read、prompts/get 等多种操作)、依赖用户主动使用中间件、需精确测量请求-响应完整耗时。
Loongsuite Go Agent 采用初始化时自动注入中间件的策略:
// 在 NewServer 创建时自动注入监控中间件
func afterNewServer(call api.CallContext, s *mcp.Server) {
if s == nil { return }
s.AddReceivingMiddleware(createServerMonitoringMiddleware())
}
// 在 NewClient 创建时也自动注入
func afterNewClient(call api.CallContext, c *mcp.Client) {
if c == nil { return }
c.AddReceivingMiddleware(createClientMonitoringMiddleware())
}
实现效果:无论用户是否手动调用 AddReceivingMiddleware,监控中间件都会 100% 覆盖;能自动记录 MCP 方法名、工具名称、资源 URI、请求参数、错误信息和耗时。用户代码完全不用修改,用 otel go build 编译后所有 MCP 请求自动被监控。