GoDevMCP 提供了方便的工具,用于与模型上下文协议(MCP)集成的 Go 开发。
gh 命令。你可以直接使用 Go 的安装命令来安装 GoDevMCP:
go install github.com/fpt/go-dev-mcp/godevmcp@latest
这将下载、编译并安装二进制文件到你的 $GOPATH/bin 目录(通常是 ~/go/bin)。确保这个目录在你的系统 PATH 中。
make build 来构建应用程序,并运行 make install 来安装。运行以下命令以添加到用户范围
claude mcp add godevmcp -s user godevmcp serve
在用户的 settings.json 中添加以下部分
"mcp": {
"servers": {
"go-dev-mcp": {
"type": "stdio",
"command": "godevmcp",
"args": [
"serve"
],
}
}
}
执行常见的开发任务的 make 命令。
返回项目导航的目录树结构。
搜索 pkg.go.dev 上的 Go 包,并返回匹配的结果。
用法:
search_godoc 查询
示例:
search_godoc html
这将搜索与 "html" 相关的包,并返回一个带有描述的匹配包列表。
获取并显示特定 Go 包的文档。
用法:
read_godoc 包地址
示例:
read_godoc golang.org/x/net/html
这将检索指定包的文档,包括描述、函数、类型和示例。
从目录中的 Go 源文件中提取导出的函数名称。
用法:
extract_function_names 目录
示例:
extract_function_names ./internal/app
这将递归扫描目录中的 .go 文件(排除测试文件),并提取所有导出的函数名称,显示常规函数和方法及其接收器类型。
分析单个 Go 文件内的函数调用关系。
用法:
extract_call_graph 文件路径
示例:
extract_call_graph ./internal/app/github.go
这将显示哪些函数调用了其他哪些函数,包括外部包调用和本地函数调用。有助于理解代码依赖关系和重构影响分析。
在本地目录的文件中搜索文本,限制匹配以减少输出大小。
用法:
search_local_files 路径 查询 扩展名 最大匹配数
示例:
search_local_files ./internal/app "SearchLocalFiles" go 1
这将在 ./internal/app 目录内的所有 .go 文件中搜索文本 "SearchLocalFiles",每个文件最多显示 10 个匹配项及其行号。
从 GitHub 存储库中检索特定文件的内容,可选地基于行进行分页以处理大型文件。
用法:
get_github_content repo 路径 [偏移量] [限制]
参数:
repo:GitHub 存储库,格式为 'owner/repo'路径:存储库中的文件路径偏移量:开始读取的行号(0 基数,默认值:0)限制:要读取的行数(默认值:100,0 表示所有行)示例:
# 获取整个文件
get_github_content owner/repo-name README.md
# 获取前 20 行
get_github_content owner/repo-name src/main.go 0 20
# 获取第 50 到第 70 行(从第 50 行开始的 20 行)
get_github_content owner/repo-name src/main.go 50 20
这将从 GitHub 文件中获取内容,对于大型文件可以进行分页,类似于 read_godoc 工具。
显示 GitHub 存储库的目录树结构,深度限制以高效探索。
用法:
tree_github_repo repo 路径 最大深度 忽略点
示例:
tree_github_repo owner/repo-name "" 3 false
这将显示 GitHub 存储库的目录结构,最多显示 3 层深。
在 GitHub 存储库中搜索代码模式,紧凑格式化。
用法:
search_github_code 查询 语言 repo
示例:
search_github_code "func main" go owner/repo-name
这将在指定存储库的 Go 文件中搜索 "func main",以紧凑格式返回结果。
返回当前日期和时间。
用法:
get_current_datetime
此工具不需要参数,并返回当前的时间戳。
构建应用程序
make build
运行应用程序
make run
make run - 运行应用程序make build - 构建应用程序并安装到 ~/binmake test - 运行单元测试make fmt - 使用 gofumpt 格式化代码make lint - 运行 golangci-lintmake inspect - 在 MCP 检查器中运行make help - 显示帮助信息.
├── godevmcp/ # 应用程序入口点
│ └── main.go # 主应用程序入口点
├── doc/ # 文档文件
├── internal/ # 私有应用程序和库代码
│ ├── app/ # 应用核心功能
│ ├── infra/ # 基础设施代码
│ ├── mcptool/ # MCP 工具实现
│ ├── repository/ # 存储库实现
│ └── subcmd/ # 子命令实现
├── output/ # 构建工件
│ └── godevmcp # 编译的二进制文件
├── pkg/ # 公共库代码
│ └── dq/ # 文档查询实用包
├── Makefile # 构建自动化
├── go.mod # Go 模块定义
└── go.sum # Go 模块校验和
以下 Mermaid 图表展示了项目内部的包依赖关系:
graph TD
%% 入口点
main[godevmcp/main] --> subcmd[internal/subcmd]
%% 核心应用层
subcmd --> app[internal/app]
subcmd --> mcptool[internal/mcptool]
mcptool --> app
%% 应用模块
app --> repository[internal/repository]
app --> infra[internal/infra]
app --> contentsearch[internal/contentsearch]
app --> model[internal/model]
app --> dq[pkg/dq]
%% MCP 层
mcptool --> infra
%% 基础设施依赖
infra --> repository
contentsearch --> model
%% 外部依赖(关键的)
subcmd -.-> subcommands[google/subcommands]
mcptool -.-> mcp[mark3labs/mcp-go]
infra -.-> github[google/go-github]
app -.-> errors[pkg/errors]
app -.-> goldmark[yuin/goldmark]
app -.-> cache[patrickmn/go-cache]
%% 样式
classDef entryPoint fill:#e1f5fe
classDef coreLayer fill:#f3e5f5
classDef appLayer fill:#e8f5e8
classDef infraLayer fill:#fff3e0
classDef external fill:#fce4ec,stroke-dasharray: 5 5
class main entryPoint
class subcmd,mcptool coreLayer
class app,repository,infra,contentsearch,model appLayer
class dq infraLayer
class subcommands,mcp,github,errors,goldmark,cache external
该图说明了:
main 包协调子命令subcmd(CLI)和 mcptool(MCP 服务器)提供用户界面app 包含业务逻辑,由基础设施包支持make fmt 来格式化代码make lint 来检查问题make test 来确保测试通过make build 构建run_make 和 tree_dir 工具而不是使用 shell 命令。search_godoc 和 read_godoc 工具来了解如何使用依赖包。tree_github_repo、search_github_code 和 get_github_content 来检查 GitHub 存储库。