什么是 MCP?

MCP(Model Context Protocol)是一个用于编写模型上下文协议客户端和服务器的 SDK。

今天想和大家分享一个有趣的发现 —— 官方 Go 语言工具链中的 MCP(Model Context Protocol)实现。这是一个正在开发中的原型系统,旨在探索客户端/服务器生命周期和绑定的设计空间。

核心特性

  1. 客户端/服务器架构

    • 提供了 NewClientNewServer 接口用于创建 MCP 客户端或服务器
    • 支持通过 Transport 实例连接对等端
    • 灵活的特性扩展机制,可以通过 Add<feature> 方法添加新功能
  2. 工具系统

    • 实现了一个强大的工具定义和处理系统
    • 支持通过泛型优雅地定义新工具
    • 内置 JSON Schema 支持,用于请求验证
  3. 传输层抽象

    • 支持多种传输协议
    • 包含 SSE(Server-Sent Events)实现
    • 计划支持 Streamable HTTP 传输

技术亮点

1. 优雅的工具定义

func MakeTool[TReq any](name, description string, 
    handler func(context.Context, *ClientConnection, TReq) ([]Content, error)) *Tool

2. JSON Schema 集成

包中集成了 JSON Schema 支持,可以:

  • 自动从 Go 类型生成 Schema
  • 进行请求验证
  • 支持客户端和服务器端验证(规划中)

未来规划

从代码中的 TODO 注释可以看出,还有一些特性正在规划中:

  1. 分页支持
  2. 完整的客户端/服务器操作支持
  3. Streamable HTTP 传输
  4. 多版本协议规范支持
  5. 完善的 JSON Schema 支持

总结

MCP 包虽然还处于原型阶段,但已经展现出了优秀的设计理念和实现方案。它的模块化设计、类型安全的接口以及可扩展的架构,都让它成为一个值得关注的项目。

对于想要深入了解 Go 语言工具链实现,或者需要构建类似系统的开发者来说,MCP 的源码绝对值得一读。它展示了如何在 Go 中构建一个现代化的协议实现,以及如何利用 Go 的最新特性来提供优雅的 API。