[开源] 我用 Go 编写了一个完整的 Git MCP 服务器,不是简单地封装 bash。它使用了 tree-sitter,处理真正的底层操作(write-tree),并且 100% 本地运行。

Reddit r/artificial 工具

摘要

git-courer 是一个用 Go 编写的完整 Git MCP 服务器,它使用 tree-sitter 进行语义代码分析,通过结构化 JSON 进行通信,支持 13 个客户端,并以本地优先的方式运行。

我受够了看着 LLM 代理在基本的 Git 操作中失败。标准集成传递原始文本,卡在分页器上,或者因为无法解析非结构化的 ⁠git diff⁠ 输出而崩溃。**git-courer** 是一个用 Go 编写的完整模型上下文协议(MCP)服务器,它正确地处理 Git。没有 bash 生成,没有需要解析的非结构化文本。一切通过结构化 JSON 进行通信。以下是它完全在本地生成的提交信息示例:fix: fix mcp server connection handling WHY The previous implementation lacked proper error handling for connection failures in the MCP server, leading to unhandled panics or silent failures when the local LLM backend was unreachable. WHAT \* Added connection timeout logic to the local client calls. \* Implemented retry mechanisms with exponential backoff for transient backend errors. 架构与工具包 **读取工具(status、diff、history、blame):** 完全结构化的 JSON 且完全分页。一次 ⁠status⁠ 调用即可替代代理使用的超过 5 个标准 Git 命令。**写入工具(commit、merge、rebase、branch、stash、stage、sync...):** 每次执行修改前会自动创建备份。如果 LLM 出错,⁠RESTORE⁠ 命令可以将你精确恢复到之前的状态。**安全模型:** 破坏性操作(硬重置、强制推送、删除分支)需要显式的 ⁠confirmed=true⁠ 门控。代理必须首先询问你。⁠dry\_run=true⁠ 也可用于安心测试。语义注释器(为何与众不同)git-courer 不仅仅将原始代码提供给 LLM,而是在 LLM 看到代码之前,使用 ⁠go-enry⁠ + ⁠go-tree-sitter⁠ 解析 AST 并对每个代码块进行语义标记。它检测如 ⁠NEW\_FUNC⁠、⁠MOD\_SIG⁠、⁠MOD\_BODY⁠、⁠DELETED⁠ 和 ⁠BREAKING\_CHANGE⁠ 等标记。提交类型(⁠feat⁠、⁠fix⁠、⁠refactor⁠)是根据这些 AST 标记确定性确定的,而不是由模型猜测。提交管道**原子提交:** 一个暂存区 = 一个提交。它主动防止代理创建庞大、混乱的多功能提交。**内存预览:** ⁠PREVIEW⁠ 工具使用 ⁠write-tree⁠ 将暂存区快照保存为 ⁠job\_id⁠。在预览阶段,工作树永远不会被触及。⁠APPLY⁠ 随后使用 ⁠commit-tree⁠ + ⁠update-ref⁠ 干净地完成操作。客户端与后端支持**13 个客户端自动配置:** 运行 ⁠git-courer mcp setup⁠ 即可与 Claude Code、Cursor、Windsurf、OpenCode、Cline、Roo Code、VS Code、Zed、Claude Desktop、Continue 等配合使用。**100% 本地优先:** 适用于任何暴露 OpenAI 兼容 ⁠/v1⁠ API 的后端(Ollama、LM Studio、llama.cpp)。该项目完全开源。非常期待听到你对架构、底层管道以及任何希望添加的功能的看法!**仓库:** [github.com/Alejandro-M-P/git-courer](https://github.com/Alejandro-M-P/git-courer)
查看原文

相似文章

grasp:一种简单的去中心化 Git 协议

Lobsters Hottest

Grasp 推出了一种去中心化 Git 协议,并附带名为 nak 的 CLI 工具,支持在无账户、仅签名消息的情况下,在自托管服务器间协作,同时保持完全互操作性。