这是一个模型上下文协议(MCP)服务器,允许AI助手使用Go的LSP(gopls)进行导航、诊断、测试、覆盖率等功能。
TL;DR: 如果您使用Claude / Cursor / Copilot与Go一起工作,
mcp-gopls将赋予AI完整的LSP功能: 跳转到定义、引用、悬停信息、代码补全、go test、覆盖率分析、go mod tidy、govulncheck等。

此MCP服务器帮助AI助手:
go mod tidy、govulncheck和模块图命令,并以结构化结果形式返回状态: 积极开发中 – 已在实际项目中使用。
测试通过Go 1.25.x和gopls@latest。
该项目使用mark3labs/mcp-go库实现模型上下文协议。MCP集成使AI助手与Go工具之间的通信无缝连接。
服务器通过语言服务器协议(LSP)与gopls,即官方的Go语言服务器进行通信。
--workspace, --gopls-path, --log-level, --rpc-timeout, 和 --shutdown-timeout 标志 + 环境变量 (MCP_GOPLS_*)go test、go mod tidy、govulncheck、go mod graphresource://workspace/overview, resource://workspace/go.mod) 和提示 (summarize_diagnostics, refactor_plan)notifications/progress 事件,以便客户端显示状态更新.
├── cmd
│ └── mcp-gopls # 应用程序入口点
├── pkg
│ ├── lsp # 与gopls通信的LSP客户端
│ │ ├── client # LSP客户端实现
│ │ └── protocol # LSP协议类型和特性
│ ├── server # MCP服务器
│ └── tools # 暴露LSP特性的MCP工具
go install github.com/hloiseaufcms/mcp-gopls/cmd/mcp-gopls@latest
注意:Go模块路径是github.com/hloiseaufcms/mcp-gopls,尽管GitHub仓库是在hlo-iseau下。
go install github.com/hloiseaufcms/mcp-gopls/cmd/mcp-gopls@latest
$PATH上:mcp-gopls --help
注意: 所有客户端指向相同的命令:
mcp-gopls --workspace /绝对路径/到你的/go/项目
配置格式略有不同,但二进制文件和参数保持一致。
mcp-gopls条目:{
"mcpServers": {
"mcp-gopls": {
"command": "mcp-gopls",
"args": ["--workspace", "/绝对路径/到你的/go/项目"],
"env": {
"MCP_GOPLS_LOG_LEVEL": "info"
}
}
}
}
mcp-gopls。| 工具 / 提示 | 示例请求在Cursor聊天中 |
|---|---|
go_to_definition | “对pkg/server/server.go:42使用go_to_definition。” |
find_references | “要求工具查找ServeStdio的所有引用。” |
check_diagnostics | “请求cmd/mcp-gopls/main.go的诊断信息。” |
get_hover_info | “在pkg/tools/workspace.go:88处调用get_hover_info。” |
get_completion | “在pkg/server/server.go:55处触发补全。” |
format_document | “对pkg/tools/refactor.go运行格式化器。” |
rename_symbol | “通过工具将clientFactory重命名为newClientFactory。” |
list_code_actions | “列出pkg/server/server.go:80-90的代码操作。” |
search_workspace_symbols | “搜索工作区符号NewWorkspaceConfig。” |
analyze_coverage | “对./pkg/...运行analyze_coverage,带有每个函数的统计信息。” |
run_go_test | “对./cmd/...执行run_go_test。” |
run_go_mod_tidy | “调用run_go_mod_tidy来同步go.mod。” |
run_govulncheck | “运行run_govulncheck并流式传输发现。” |
module_graph | “调用module_graph来检查依赖关系。” |
summarize_diagnostics | “对最新的诊断信息使用summarize_diagnostics提示。” |
refactor_plan | “将诊断JSON喂给refactor_plan以规划修复。” |
mcp-gopls并确保它在您的$PATH上。claude_desktop_config.json。
~/Library/Application Support/Claude/claude_desktop_config.json~/.config/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"mcp-gopls": {
"command": "mcp-gopls",
"args": ["--workspace", "/绝对路径/到你的/go/项目"],
"env": {
"MCP_GOPLS_LOG_LEVEL": "info"
}
}
}
}
重启Claude Desktop,打开一个聊天窗口,并要求它连接到mcp-gopls工具(一旦检测到服务器,Claude将显示一个“工具”标签)。典型的提示包括“列出cmd/api/server.go的诊断信息”或“将userService重命名为accountService”。
在Cursor中打开设置 → MCP服务器 → 编辑JSON(这会写入~/.cursor/config.json或项目的本地覆盖文件)。添加:
{
"mcpServers": {
"mcp-gopls": {
"command": "mcp-gopls",
"args": ["--workspace", "/绝对路径/到你的/go/项目"]
}
}
}
重新加载Cursor(或运行开发者: 重新加载窗口命令),服务器将在“工具”抽屉中出现。现在您可以向Cursor聊天询问诸如“运行go test ./pkg/server并带覆盖率”或“显示pkg/tools/tests.go:42的悬停信息”之类的问题。
GitHub Copilot的代理模式可以与VS Code、JetBrains IDEs、Eclipse和Xcode中的本地MCP服务器通信(文档)。要在VS Code中连接mcp-gopls:
.vscode/mcp.json(或编辑Copilot“编辑配置”对话框中显示的全局文件)。{
"servers": {
"mcp-gopls": {
"type": "stdio",
"command": "mcp-gopls",
"args": ["--workspace", "/绝对路径/到你的/go/项目"],
"env": {
"MCP_GOPLS_LOG_LEVEL": "warn"
}
}
}
}
run_go_test、run_govulncheck等)。JetBrains和其他IDE通过它们的Copilot设置面板共享相同的JSON模式。对于快速冒烟测试或演示,您可以使用mark3labs/mcp-inspector:
npx -y @mark3labs/mcp-inspector \
--command mcp-gopls \
--args "--workspace" "/绝对路径/到你的/go/项目"
Inspector允许您手动调用每个工具/资源/提示,这对于在将其连接到AI助手之前调试服务器配置非常有用。
| 工具 | 描述 |
|---|---|
go_to_definition | 导航到符号的定义 |
find_references | 列出符号的所有引用 |
check_diagnostics | 获取文件的缓存诊断信息 |
get_hover_info | 返回符号的悬停markdown |
get_completion | 返回位置处的补全标签 |
format_document | 返回整个文档的格式化编辑 |
rename_symbol | 返回重命名的工作区编辑 |
list_code_actions | 列出范围内的可用代码操作 |
search_workspace_symbols | 搜索工作区范围内的符号 |
analyze_coverage | 运行go test并带有覆盖率,可选每个函数报告 |
run_go_test | 对包/模式执行go test |
run_go_mod_tidy | 执行go mod tidy |
run_govulncheck | 执行govulncheck ./... |
module_graph | 返回go mod graph输出 |
长时间运行的工具会发出结构化的notifications/progress事件,以便IDE可以显示丰富的状态指示器:
run_go_test, analyze_coverage, run_govulncheck, run_go_mod_tidy) 前进增量日志行和百分比更新。Cursor将这些显示为实时日志。go_to_definition, find_references, rename_symbol等) 触发一个快速的“已启动”事件,以便UI可以显示一个旋转图标,然后是一个包含最终结果的完成负载。run_go_test/<rand>),以避免当多个工具并发运行时出现“未知令牌”错误。在集成新工具时,如果底层LSP/golang命令产生有意义的中间输出,则可以选择流式传输模式;否则坚持使用轻量级的开始/完成流程以减少噪音。
两个提示都可以通过任何支持MCP的客户端的“提示”目录访问。
summarize_diagnosticscheck_diagnostics或run_go_test之后,将原始诊断信息转化为可操作步骤。check_diagnostics → 将返回的数组复制到提示输入字段(Cursor的UI会在您选择“使用最后一个结果”时自动粘贴)。refactor_plandiagnostics对象(与check_diagnostics返回的相同负载)。{
"diagnostics": [
{
"uri": "file:///path/to/pkg/tools/workspace.go",
"range": {"start": {"line": 12, "character": 5}, "end": {"line": 12, "character": 25}},
"severity": 1,
"message": "未使用的变量testHelper"
}
]
}
提示响应将提供一组编号的重构步骤以及建议的验证命令(go test、analyze_coverage等)。
服务器支持通过命令行标志和环境变量的各种配置选项:
| 标志 | 默认值 | 描述 |
|---|---|---|
--workspace | . | Go项目的绝对路径根 |
--gopls-path | gopls | gopls二进制文件的路径 |
--log-level | info | 日志级别(debug、info、warn、error) |
--rpc-timeout | 30s | LSP调用的RPC超时 |
--shutdown-timeout | 5s | 优雅关闭的超时 |
所有标志都可以通过带有MCP_GOPLS_前缀的环境变量设置:
| 环境变量 | 相当于标志 | 描述 |
|---|---|---|
MCP_GOPLS_WORKSPACE | --workspace | Go项目的绝对路径根 |
MCP_GOPLS_GOPLS_PATH | --gopls-path | gopls二进制文件的路径 |
MCP_GOPLS_LOG_LEVEL | --log-level | 日志级别(debug、info、warn、error) |
MCP_GOPLS_RPC_TIMEOUT | --rpc-timeout | LSP调用的RPC超时(例如,30s、1m) |
MCP_GOPLS_SHUTDOWN_TIMEOUT | --shutdown-timeout | 优雅关闭的超时 |
命令行标志优先于环境变量。
go fmt以确保制表符与空格与gopls期望的一致。--workspace标志指向模块根,并且go list ./...成功。workspace initialized日志行或删除过时的.gopls缓存后重启mcp-gopls。run_govulncheck缺少二进制文件 – 该工具现在回退到go run golang.org/x/vuln/cmd/govulncheck@latest,但机器仍然需要出站网络访问。如果回退被阻止,请手动安装二进制文件。使用支持MCP的AI助手:
# 让AI获取有关代码的信息
你能找到这个项目中`ServeStdio`函数的定义吗?
# 请求诊断信息
我的main.go文件中有任何错误吗?
# 请求关于符号的信息
Go中的Context.WithTimeout函数做什么?
git clone https://github.com/hloiseaufcms/mcp-gopls.git
cd mcp-gopls
go mod tidy
go test ./...
go build ./cmd/mcp-gopls
基于表格驱动的测试位于pkg/tools下,CI通过.github/workflows/ci.yml运行。
docs/usage.md – 快速入门和工具目录浏览resource://workspace/overview和resource://workspace/go.modsummarize_diagnostics,refactor_plan)帮助助手生成一致的输出欢迎PR和问题!
go test ./...。所有贡献应保持测试覆盖率并遵循Go最佳实践。请