GoDoc-MCP 服务器
`godoc-mcp` 是一个模型上下文协议(MCP)服务器,它提供了对 Go 文档的高效访问。通过直接访问包文档,而无需读取整个源文件,它有助于大型语言模型(LLMs)理解 Go 项目。
服务介绍
godoc-mcp
概述
godoc-mcp 是一个 Model Context Protocol (MCP) 服务器,提供对 Go 文档的高效访问。它通过直接访问包文档来帮助 LLM(语言模型)理解 Go 项目,而无需读取整个源文件。godoc-mcp 可以大幅提高使用 LLM 进行 Go 开发的性能,显著减少理解和使用 Go 包所需的令牌数量。
入门
go install github.com/mrjoshuak/godoc-mcp@latest
为什么使用 godoc-mcp?
一句话概括:godoc-mcp 提供了一种更高效的令牌方式,让 LLM 理解 Go 项目。
传统的文件读取方法要求 LLM 处理整个源文件,通常需要处理许多文件才能理解单个包。godoc-mcp 提供了以下几个优点:
- 令牌效率:仅返回必要的文档,显著减少了令牌使用量。
- 结构化信息:以一致且结构良好的格式提供官方包文档。
- 项目导航:智能处理项目结构,帮助 LLM 理解多包项目。
- 集成就绪:与其他 MCP 服务器协同工作,实现高层次和详细代码分析。
- 性能:缓存和优化的令牌使用使
godoc-mcp成为 Go 开发中快速高效的工具。 - 本地化:不需要互联网连接即可访问文档。
使用 godoc-mcp,LLM 可以精确获取所需的信息,而无需读取整个源文件。以下是 LLM 可以获取的不同级别的详细信息。
- 单个导出符号的文档
- 单个符号的完整源代码
- 所有导出符号的列表(简明文档)
- 包括未导出符号在内的所有符号的列表
- 包的完整文档
- 包的整个源代码
这使得 godoc-mcp 成为使用 LLM 的 Go 开发者的必备工具,使 LLM 能够比以往任何编程语言都更详细地了解上下文。
功能
服务器将:
- 对于包含 Go 文件的目录:返回包文档
- 对于不包含 Go 文件的目录:列出子目录中的可用 Go 包
- 对于导入路径:返回标准库或第三方包文档
- 高效的文档访问:以最少的 token 使用量检索官方 Go 文档
- 智能包发现:当指向没有 Go 文件的目录时,列出子目录中可用的 Go 包
- 灵活的路径支持:
- 本地文件路径(例如,"/full/path/to/mypackage")
- 导入路径(例如,"io", "github.com/user/repo")
- 自动模块上下文:
- 在需要时创建临时 Go 项目
- 自动为外部包设置模块上下文
- 无需手动设置任何包文档的模块
- 处理临时项目的清理
- 模块感知:通过工作目录上下文支持第三方包的文档(即它将在工作目录中运行
go doc) - 性能优化:
- 内置响应缓存
- 通过专注的文档检索高效使用 token
- 响应大小的元数据
- 智能处理标准库与外部包
示例
除了在编码任务中提供文档外,godoc-mcp 还可以用于探索 Go 项目和包。以下是一些通用提示示例:
项目理解
“我在查看位于 /path/to/some/project 的一个 Go 项目。它包含哪些包?它们各自做什么?”
包接口理解
“io 包提供了哪些接口?我对与读取相关的部分特别感兴趣。”
实现指导
“我需要实现 io.Reader 接口。请显示其文档以及我应该了解的相关类型。”
API 使用
“显示 /path/to/some/project 中 Resource 类型的文档。我需要了解如何创建和使用它。”
库探索
“我在 /path/to/some/project 目录下,该目录使用了 github.com/gorilla/mux。请显示 Router 类型的文档。”
方法发现
“http.Request 类型有哪些可用的方法?我正在处理标准库中的 HTTP 处理程序。”
专注学习
“解释如何配置 /path/to/project/server 包中的 Server 类型。”
包浏览
“我在一个新的 Go 项目目录中,看到了多个包。你能告诉我每个包的作用吗?”
使用方法
要添加到 Claude 桌面应用程序中:
{
"mcpServers": {
# other MCP servers ...
"godoc": {
"command": "/path/to/godoc-mcp",
"args": [],
"env": {
"GOPATH": "/path/to/go",
"GOMODCACHE": "/path/to/go/pkg/mod"
}
}
}
}
当连接到支持 MCP 的 LLM(如 Claude)时,godoc-mcp 提供了带有以下参数的 get_doc 工具:
path:Go 包或文件的路径(导入路径或文件路径)target(可选):要记录的具体符号(函数、类型等)cmd_flags(可选):附加的 go doc 命令标志working_dir(可选):用于模块感知文档的工作目录(如果未提供,则会自动创建一个临时项目)
LLM 可以利用的高级 cmd_flags 值:
-all:显示包的所有文档,不包括未导出的符号-u:显示未导出的符号-src:显示源代码而不是文档
故障排除
- 对于本地路径,请确保它们包含 Go 源文件或指向包含 Go 包的目录
- 如果您看到与模块相关的错误,请确保在您的 MCP 服务器配置中正确设置了 GOPATH 和 GOMODCACHE 环境变量
- 服务器会自动处理外部包的模块上下文,但如有特殊情况,您仍然可以提供特定的工作目录
working_dir
许可证
本项目根据 MIT 许可证授权 - 详情请参阅 LICENSE 文件。