2.3 git:把仓库交给 agent

它是什么

官方描述:read, search, and manipulate Git repositories programmatically via LLMs——以编程方式读取、搜索、操作 Git 仓库。Python 实现,包名 mcp-server-git,版本 2026.10.19。

注意:它已经从 npm 迁到 Python。旧教程里的 npm 装法(@modelcontextprotocol/server-git)已过时,现在统一走 uvx。2026 年还在按老教程装 @modelcontextprotocol/server-github 也是过时信息——第一方的 GitHub / PostgreSQL / Slack 等服务器已整体迁移到 modelcontextprotocol/servers-archived(★305,不再维护)。

它和 Bash 里跑 git 的区别

有人会说:我让 agent 直接用 Bash 跑 git log 不就行了?确实可以,但 MCP 版有几个实质优势:

维度 Bash 跑 git git MCP
输出格式 原始文本,要模型自己解析 结构化,模型好用
权限控制 全靠审批 服务端可约束
跨工具复用 ❌ ✅
误操作风险 高(git push --force) 可用工具集收窄

最后一条最实际:你可以只暴露读操作,把写操作留给审批。模型从结构化工具返回里拿数据,比从一堆 git log 文本里自己扒要可靠得多。

安装与配置

推荐 uvx,免安装:

- insert:
    - id: git
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: git
        transport: stdio
        command: uvx
        args: ["mcp-server-git"]
        cwd: !!js process.cwd()

或先装再用:

pip install mcp-server-git
        command: python
        args: ["-m", "mcp_server_git"]

cwd 决定服务器“站在哪个仓库里”。它默认用 process.cwd(),也就是你启动 dsh 时所在的目录。要让它操作某个仓库,最稳的做法是在那个仓库根目录启动 dsh,或在 patch 里写死绝对路径。多个仓库就挂多个 git 实例,各自指向不同目录。

典型用法

历史考古:

用 git 服务器查这个仓库:
1. 最近 30 天谁改了 src/auth 目录
2. 找出引入 token 刷新逻辑的那个 commit
3. 列出该 commit 改动的文件与 message

变更影响分析:

用 git 服务器对比 main 与 feature/x 的差异,
按文件统计增删行数,标出新增文件。

分支卫生检查:

用 git 服务器列出所有已合并到 main 的本地分支,
以及超过 60 天未更新的分支。

提交信息巡检:

用 git 服务器统计最近一周的提交,
按作者聚合,标出 message 少于 10 字符的"敷衍提交"。

发布说明生成:

用 git 服务器取 v1.2.0..v1.3.0 的全部 commit,
按 feat / fix / chore 分组,起草一份更新日志。

一条安全提醒

写操作(commit、push、checkout)风险高于读操作。建议两种用法:

  1. 默认只配读工具,写操作让 agent 走 Bash + 审批,你能看到每条命令;
  2. 或者接受 MCP 写操作,但绝不开 --force 相关能力。

和 git 相关的还有官方 GitHub MCP(见 4.1 GitHub):git MCP 管本地仓库,GitHub MCP 管远端协作,两者互补。

排错

现象 原因
报不是 git 仓库 cwd 设错了,没站在仓库根
大仓库操作很慢 历史太长,缩小范围或换浅克隆
权限报错 SSH key 或 credential helper 未配置
找不到某个分支 本地没 fetch,先拉远端引用

小结

  • git MCP 是 Python 实现,用 uvx mcp-server-git 最省事。
  • 相对 Bash 的优势在结构化输出、权限收窄、跨工具复用。
  • 写操作谨慎,默认优先读工具 + Bash 审批。
  • 它管本地仓库,远端协作交给 GitHub MCP。

延伸阅读