godoc-mcp-server 是一个面向 Go 程序员的 MCP(模型上下文协议)服务器,用于从 pkg.go.dev 搜索 Go 包及其文档信息,并将这些信息提供大语言模型使用。
一、用途 该工具主要用于帮助 Golang 程序员查询 Go 包信息。它通过 MCP 协议将 pkg.go.dev 上的包搜索结果和文档信息提供给 LLM,使 AI 在编程辅助过程中能够获取准确的包信息。
二、主要能力
- searchPackage:搜索 Go 包,返回结果中包含子包名称,但不包含包名称本身。
- 显示包的被导入次数(imported by how many packages)。
- getPackageInfo:获取包信息。项目说明中标注了两项待办(fixme):子包需要新的适配器;需要获取示例。
- 本地缓存(localCache):可选使用本地缓存,避免每次搜索(来自 Reddit 用户的建议)。
- 发布:使用 GitHub Actions 进行多平台发布。
三、使用方式 该服务器通过 stdio 提供服务,用户直接使用客户端发送请求即可。安装方式有两种:
- 从 releases 页面下载编译好的二进制文件。
- 从源码安装,自行编译。
四、开发经验说明 项目文档特别强调了工具描述的重要性。在描述参数时,应告知客户端如何使用一个工具的输出,并将其格式调整为匹配另一个工具的输入。
例如,searchPackage 的输出包含子包的名称,但不包含包的名称。因此,如果希望 LLM 使用 getPackageInfo 获取子包信息,需要为参数 packageName 编写描述,说明如何与 searchPackage 配合使用。文档中给出的示例描述说明:如果之前使用了 searchPackages,且用户想获取子包信息,应将两者前缀拼接。例如,当用户查询 mcp,返回的 packageName 为 github.com/mark3labs/mcp-go/mcp 以及子包 client 时,若用户想获取 client 包信息,应将 packageName 设为 github.com/mark3labs/mcp-go/mcp/client,而不是单独的 client。
使用这段详细描述后,LLM 会在搜索后告知子包名称。用户只需说明想要获取哪个包的信息,或哪个包加子包名称,LLM 便会将其拼接后调用 getPackageInfo 获取信息。文档还提到,或许应该让描述可由用户配置,使工具更实用、更高效。
五、限制与注意事项 该模块导出的 Go API 目前应视为不稳定,可能发生破坏性变更。未来可能提供稳定性,如有需要可提交 issue。
六、许可证 本项目采用 MIT 开源许可证。
七、适用场景 适用于所有 Golang 程序员,特别是在 AI 辅助编程环境中需要查询 Go 包文档和信息的场景。