🚀 Go开发MCP服务器
Go开发MCP服务器是一个将Go开发工作流与Claude Desktop等AI助手或其他MCP兼容工具集成的综合解决方案。它使AI助手能够通过模型上下文协议(MCP)直接编译、测试、运行和分析Go代码。
🚀 快速开始
Go开发MCP服务器为AI助手与Go开发工作流的集成提供了便利。通过该服务器,AI助手可以借助MCP协议对Go代码进行编译、测试等操作。你可以按照以下步骤进行安装和使用。
✨ 主要特性
- Go构建:编译Go代码并接收详细反馈
- Go测试:对Go代码运行测试,并支持覆盖率分析
- Go运行:编译并执行带有命令行参数的Go程序
- Go模块:管理Go模块依赖项(初始化、整理、下载等)
- Go格式化:根据标准约定格式化Go代码
- Go分析:使用静态分析工具分析Go代码中的问题
- Go工作区:管理用于多模块开发的Go工作区(新增!)
本次版本新增特性
- MCP v0.29.0兼容性:更新为使用最新的模型上下文协议v0.29.0
- Go工作区支持:为多模块Go项目提供完整的工作区管理
- 项目路径支持:所有工具现在支持处理现有的Go项目目录
- 工作区感知执行:所有工具都可以在Go工作区上下文中运行
- 策略模式:针对代码片段、项目目录和工作区提供灵活的执行策略
- 增强的响应格式化:提供结构更优、带有自然语言元数据的响应
- 改进的错误处理:提供更详细、有用的错误消息
- 端到端测试:全面的行为测试脚本,用于验证功能
- 现代测试框架:基于Go的新测试框架,支持并行测试执行
📦 安装指南
前提条件
Windows系统
手动安装
- 克隆仓库:
git clone https://github.com/MrFixit96/go-dev-mcp.git
cd go-dev-mcp
- 构建可执行文件:
go build -o go-dev-mcp.exe ./cmd/server
- 将可执行文件移动到系统路径中的某个位置,或者在Claude Desktop配置中直接引用它。
使用WinGet(即将推出)
winget install go-dev-mcp
macOS系统
使用Homebrew(即将推出)
brew install go-dev-mcp
手动安装(macOS)
- 克隆仓库:
git clone https://github.com/MrFixit96/go-dev-mcp.git
cd go-dev-mcp
- 构建可执行文件:
go build -o go-dev-mcp ./cmd/server
- 将可执行文件移动到系统路径中的某个位置:
sudo mv go-dev-mcp /usr/local/bin/
Linux系统
- 克隆仓库:
git clone https://github.com/MrFixit96/go-dev-mcp.git
cd go-dev-mcp
- 构建可执行文件:
go build -o go-dev-mcp ./cmd/server
- 将可执行文件移动到系统路径中的某个位置:
sudo mv go-dev-mcp /usr/local/bin/
💻 使用示例
基础用法
处理代码片段
所有工具都可以通过code参数直接接收Go代码:
go_build(code: "package main\n\nfunc main() {\n\tfmt.Println(\"Hello World\")\n}")
go_test(code: "package main", testCode: "package main\n\nimport \"testing\"\n\nfunc TestHello(t *testing.T) {...}")
处理项目目录
所有工具现在支持通过新的project_path参数处理现有的Go项目目录:
go_build(project_path: "/path/to/your/go/project")
go_test(project_path: "/path/to/your/go/project", verbose: true, coverage: true)
go_fmt(project_path: "/path/to/your/go/project")
go_analyze(project_path: "/path/to/your/go/project", vet: true)
高级用法
Go工作区支持
服务器现在全面支持Go工作区,支持多模块开发工作流。此功能允许你:
- 初始化工作区:使用
go work init创建新的Go工作区
- 管理模块:在工作区内添加、移除和组织模块
- 统一操作:在工作区的所有模块中运行Go命令
- 依赖同步:保持模块间的依赖一致
- 工作区感知工具:所有现有工具(构建、测试、运行等)都能与工作区无缝协作
工作区命令
go_workspace工具提供以下子命令:
init:初始化新的Go工作区
use:将模块添加到现有工作区
sync:同步工作区依赖项
edit:查看和修改工作区配置
vendor:将所有工作区依赖项打包
info:获取详细的工作区信息
工作区集成
所有现有工具都通过workspace_path参数支持工作区上下文:
{
"tool": "go_build",
"arguments": {
"workspace_path": "/path/to/workspace",
"module": "specific-module",
"code": "package main..."
}
}
工作区使用示例
基本工作区操作
{
"tool": "go_workspace",
"arguments": {
"command": "init",
"workspace_path": "/path/to/my-workspace",
"modules": ["./module1", "./module2"]
}
}
{
"tool": "go_workspace",
"arguments": {
"command": "use",
"workspace_path": "/path/to/my-workspace",
"modules": ["./new-module", "../external-module"]
}
}
{
"tool": "go_workspace",
"arguments": {
"command": "info",
"workspace_path": "/path/to/my-workspace"
}
}
多模块开发工作流
mkdir my-project-workspace
cd my-project-workspace
{
"tool": "go_workspace",
"arguments": {
"command": "init",
"workspace_path": ".",
"modules": ["./api", "./client", "./shared"]
}
}
{
"tool": "go_build",
"arguments": {
"workspace_path": "/path/to/my-workspace"
}
}
{
"tool": "go_test",
"arguments": {
"workspace_path": "/path/to/my-workspace",
"module": "api",
"coverage": true
}
}
{
"tool": "go_workspace",
"arguments": {
"command": "sync",
"workspace_path": "/path/to/my-workspace"
}
}
高级工作区特性
{
"tool": "go_run",
"arguments": {
"workspace_path": "/path/to/my-workspace",
"module": "api",
"code": "package main\n\nimport \"fmt\"\n\nfunc main() {\n fmt.Println(\"Running in workspace context\")\n}"
}
}
{
"tool": "go_workspace",
"arguments": {
"command": "vendor",
"workspace_path": "/path/to/my-workspace"
}
}
{
"tool": "go_fmt",
"arguments": {
"workspace_path": "/path/to/my-workspace"
}
}
错误处理和故障排除
- 常见工作区问题
- 缺少go.work文件:使用
init命令创建工作区
- 未找到模块:使用
use命令添加模块
- 依赖冲突:使用
sync命令解决
- 构建失败:使用针对性命令检查特定模块的问题
- 工作区验证
{
"tool": "go_workspace",
"arguments": {
"command": "info",
"workspace_path": "/path/to/my-workspace"
}
}
返回详细的工作区结构和验证状态。
📚 详细文档
Claude Desktop集成
要与Claude Desktop集成,请更新你的claude_desktop_config.json文件:
Windows配置
{
"mcpServers": {
"go-dev": {
"command": "C:\\path\\to\\go-dev-mcp.exe",
"args": [],
"env": {
"GOCACHE": "%LOCALAPPDATA%\\go-build",
"LOCALAPPDATA": "%LOCALAPPDATA%",
"GOPATH": "%USERPROFILE%\\go",
"GOROOT": "%GOROOT%",
"PATH": "%PATH%",
"DEBUG": "*"
},
"disabled": false,
"autoApprove": []
}
}
}
使用的环境变量:
%LOCALAPPDATA%:解析为C:\Users\{username}\AppData\Local
%USERPROFILE%:解析为C:\Users\{username}
%GOROOT%:Go安装目录(由Go安装程序自动设置)
%PATH%:用于访问Go二进制文件的系统路径
使用Go环境变量的替代方案:
{
"mcpServers": {
"go-dev": {
"command": "C:\\path\\to\\go-dev-mcp.exe",
"args": [],
"env": {
"DEBUG": "*"
},
"disabled": false,
"autoApprove": []
}
}
}
⚠️ 重要提示
替代配置依赖于Go的默认环境检测。当未明确设置时,Go会自动使用%LOCALAPPDATA%\go-build作为GOCACHE,使用%USERPROFILE%\go作为GOPATH。
macOS和Linux
{
"mcpServers": {
"go-dev": {
"command": "/path/to/go-dev-mcp",
"args": [],
"env": {},
"disabled": false,
"autoApprove": []
}
}
}
配置
服务器使用位于以下位置的配置文件:
- Windows:
%APPDATA%\go-dev-mcp\config.json
- macOS:
~/Library/Application Support/go-dev-mcp/config.json
- Linux:
~/.config/go-dev-mcp/config.json
首次运行时将创建一个默认配置文件,你可以进行自定义:
{
"version": "1.0.0",
"logLevel": "info",
"sandboxType": "process",
"resourceLimits": {
"cpuLimit": 2,
"memoryLimit": 512,
"timeoutSecs": 30
}
}
测试
服务器包含全面的测试功能,以验证其与真实Go项目的兼容性。测试通过两个框架提供:
- Go测试框架:使用Go的原生测试工具和testify的现代并行测试框架
- PowerShell测试:传统的端到端行为测试(用于向后兼容)
测试验证所有输入模式(仅代码、项目路径和混合模式),并确保执行策略按预期工作。
运行测试
Go测试(推荐)
cd go-dev-mcp
.\scripts\testing\run_tests.ps1 -TestType go -UseGoTests -WithCoverage
.\scripts\testing\run_tests.ps1 -TestType go -UseGoTests -WithRaceDetection
go test -v ./internal/tools/...
PowerShell测试(传统)
cd go-dev-mcp\scripts\testing
.\basic\simple_test.ps1
cd go-dev-mcp\scripts\testing
.\core\all_tools_test.ps1 -Verbose
cd go-dev-mcp\scripts\testing
.\strategies\hybrid_strategy_test.ps1 -Verbose
有关测试框架的详细信息,请参阅测试文档。测试脚本按类别组织:
- 基本测试:用于健全性检查的简单、快速运行的测试
- 核心测试:涵盖所有工具和输入模式的全面测试
- 策略测试:专注于特定执行策略(如混合执行)的测试
更多详情请参阅测试README。
🔧 技术细节
Go开发MCP服务器在沙盒环境中运行命令,具备以下特性:
- 进程隔离:确保不同操作之间的独立性。
- 资源限制:对CPU、内存和执行时间进行限制,避免资源过度占用。
- 临时目录隔离:将操作限制在临时目录内,防止对系统造成不必要的影响。
- 默认无网络访问:提高安全性,防止潜在的网络攻击。
📄 许可证
本项目采用MIT许可证。
贡献说明
欢迎贡献代码!请随时提交拉取请求。
路线图
- [ ] 增加对Go工作区的支持
- [ ] 实现基于Docker的沙盒,以提供更强的隔离性
- [ ] 增加调试功能
- [ ] 支持Go竞态检测器
- [ ] 改进错误报告并提供建议