MCP Go SDK 包含一个代码生成系统,用于自动生成服务器实现中重复的 Go 代码结构。该系统生成请求处理器和钩子(hook)基础设施,以减少样板代码并确保代码库的一致性。
有关生成的服务器钩子(hook)和中间件的信息,请参阅钩子(Hooks)和中间件(Middleware)。有关使用生成代码的 MCP 服务器架构的详细信息,请参阅MCP 服务器。
代码生成系统解决了 MCP 服务器实现中重复代码模式的需求,具体包括:
该生成器使用 Go 的 text/template 包以及嵌入式模板文件,来生成格式化且导入优化的 Go 源代码。
代码生成流程
来源:server/internal/gen/main.go1-87 server/internal/gen/README.md1-25
代码生成系统使用两个主要模板,将有关 MCP 请求类型的结构化数据转换为 Go 源代码:
| 模板 | 输出文件 | 目的 |
|---|---|---|
hooks.go.tmpl | server/hooks.go | 钩子函数类型和 Hook 结构体方法 |
request_handler.go.tmpl | server/request_handler.go | 请求分派 switch 语句 |
模板使用自定义函数在生成过程中转换数据:
toLower - 将字符串转换为小写以保持命名一致性模板渲染器定义在 RenderTemplateToFile 函数中,该函数处理从模板解析到格式化输出的整个流程。
模板处理流程
来源:server/internal/gen/main.go23-72
生成的 request_handler.go 包含中央请求分派逻辑,该逻辑根据 MCP 协议规范将传入的 JSON-RPC 请求路由到相应的处理程序方法。这消除了在添加新请求类型时手动维护 switch 语句的需要。
生成的 hooks.go 提供了可扩展性基础设施,允许开发人员在请求生命周期的各个点注入自定义逻辑。这包括:
Hook 结构体上的方法代码生成通过 Go 的内置生成机制触发。
生成指令嵌入在主生成器文件中,位于server/internal/gen/main.go15
该生成器通过多种机制与构建过程集成:
生成工作流
来源:server/internal/gen/main.go74-87 server/internal/gen/README.md9-13
生成过程包括全面的错误处理:
goimports 失败会包含命令输出以供调试RenderTemplateToFile 函数集中处理这些错误,以确保两个生成文件之间的一致行为。
为新的 MCP 请求类型扩展代码生成系统:
data.go 中的 MCPRequestTypes 数据结构(已引用但未在提供的文件中显示)go generate ./... 以重新生成代码修改模板时:
server/internal/gen/ 目录中的 .tmpl 文件goimports 能够成功格式化生成的代码该生成器提供了多种调试功能:
goimports 输出会在失败时被捕获和报告来源:server/internal/gen/main.go46-49 server/internal/gen/main.go58-71 server/internal/gen/README.md16-24