protoc-gen-go-mcp:为gRPC或ConnectRPC API生成MCP服务器的编译器插件
项目介绍
protoc-gen-go-mcp
是一款功能强大的开源编译器插件,专门为使用 Protocol Buffers 的开发者设计。它能自动为你的 gRPC
或 ConnectRPC
API 生成 Model Context Protocol (MCP) 服务器。通过 protoc-gen-go-mcp
,开发者可以轻松生成 *.pb.mcp.go
文件,这些文件为每个 protobuf 服务提供了直接的处理器委托。
项目技术分析
protoc-gen-go-mcp
的核心功能是基于 Protocol Buffers 编译器插件,它能够从 .proto
文件中自动生成 MCP 处理器。项目使用了 JSON Schema 作为工具输入,这允许项目自动从方法输入描述符生成 JSON Schema,从而简化了开发流程。
在技术实现层面,protoc-gen-go-mcp
默认使用 {$servicename}mcp
文件夹来组织生成的文件,并且能够与 buf
工具链无缝集成,使得代码生成更加高效和可维护。
项目及技术应用场景
protoc-gen-go-mcp
的设计目标是为那些需要在应用程序中实现 MCP 服务器的开发者提供一种简单的方式。以下是几个典型的应用场景:
-
微服务架构:在微服务架构中,不同的服务可能需要相互通信,而
protoc-gen-go-mcp
可以帮助生成统一的服务接口,便于服务之间的集成和交互。 -
云原生应用:云原生应用中经常使用到 gRPC 或 ConnectRPC,通过
protoc-gen-go-mcp
,开发者可以快速构建 MCP 服务器,以支持复杂的数据模型和上下文管理。 -
中间件开发:对于需要在服务之间提供额外处理逻辑的中间件,
protoc-gen-go-mcp
可以提供一种高效的方式来生成和处理 MCP 消息。
项目特点
以下是 protoc-gen-go-mcp
的一些显著特点:
-
自动生成 MCP 处理器:项目能够自动从
.proto
文件生成 MCP 处理器,极大地简化了开发者的工作。 -
输出 JSON Schema:自动为方法输入生成 JSON Schema,便于开发者理解和使用输入数据。
-
支持 gRPC 和 ConnectRPC:生成的 MCP 服务器可以轻松与 gRPC 或 ConnectRPC 服务器或客户端集成。
-
与 buf 无缝集成:通过
buf.gen.yaml
文件配置,可以轻松集成protoc-gen-go-mcp
和buf
工具链。
使用指南
生成代码
在 buf.gen.yaml
文件中添加以下配置:
...
plugins:
- local:
- go
- run
- github.com/redpanda-data/protoc-gen-go-mcp/cmd/protoc-gen-go-mcp@latest
out: ./gen/go
opt: paths=source_relative
然后运行 buf generate
,你将看到每个 protobuf 服务定义的包中生成一个新的文件夹和文件:
gen/
└── go
└── proto
└── example
└── v1
├── example.pb.go
└── examplev1mcp
└── example.pb.mcp.go
将 MCP 与 gRPC 服务器(进程内)连接
以下是一个示例,演示如何将 MCP 处理器注册到 gRPC 服务器:
srv := exampleServer{} // 你的 gRPC 实现
// 将所有 RPC 方法注册为 MCP 服务器上的工具
examplev1mcp.RegisterExampleServiceHandler(mcpServer, &srv)
每个 protobuf 服务中的 RPC 方法都会变为 MCP 工具。
将 MCP 与 gRPC 和 ConnectRPC 客户端连接
protoc-gen-go-mcp
也支持直接将 MCP 工具调用转发到 gRPC 客户端:
examplev1mcp.ForwardToExampleServiceClient(mcpServer, myGrpcClient)
对于 ConnectRPC 客户端,操作类似:
examplev1mcp.ForwardToConnectExampleServiceClient(mcpServer, myConnectClient)
这使得将 MCP 处理器直接连接到 ConnectRPC 客户端变得非常简单。
限制
- 无拦截器支持:目前,注册到 gRPC 服务器时会绕过拦截器。
- 工具名称混淆:如果完整的 RPC 名称超过 64 个字符,工具名称的头部将被混淆以适应限制。
路线图
- 反射/代理模式:未来版本将支持反射或代理模式。
- 拦截器中间件支持:计划在 gRPC 服务器模式下支持拦截器中间件。
- 官方 Go MCP SDK 支持:一旦发布,将支持官方 Go MCP SDK。
protoc-gen-go-mcp
是一个充满潜力的项目,它为使用 Protocol Buffers 的开发者提供了一个高效、自动化的方式来生成和集成 MCP 服务器。如果你在开发过程中需要这样的工具,不妨尝试一下 protoc-gen-go-mcp
,相信它能为你的项目带来不少便利。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考