🚀 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競態檢測器
- [ ] 改進錯誤報告並提供建議