Git MCP服务器

一个本地模型上下文协议(MCP)服务器,使AI编码代理能够以安全、自动化和非交互的方式处理Git仓库。

  • by Esty8321
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Esty8321/git-mcp-server

使用说明

Git MCP服务器🚀

本地人 模型上下文协议(MCP)服务器 它使AI编码代理能够以安全、自动化和非交互式的方式与Git存储库协同工作。

该项目的重点是 开发人员生产力:它使AI代理能够通过克隆存储库中的显式MCP工具执行常见的Git工作流 提交更改和打开pull请求。


🌟 概述

现代AI编码代理擅长编写和修改代码,但它们往往缺乏对版本控制工作流程的标准化、非交互式访问。

该项目通过将Git和GitHub操作作为显式MCP工具公开,使AI代理能够安全、可预测地在存储库上操作,而不依赖于终端提示或编辑器,从而弥合了这一差距。


🏗️ 建筑

  • 在开发人员的计算机上本地运行
  • 将Git功能作为MCP工具公开
  • 通过子进程执行Git和GitHub CLI命令
  • 依赖于现有的本地身份验证(SSH、gh-auth、凭据管理器)

🛠️ 可用工具

git_clone

将远程存储库克隆到本地目录中。

使用 git_diff

生成差异,AI代理可以使用这些差异来推理更改并编写有意义的提交消息。

git_提交

阶段更改并使用提供的消息创建提交。

git_push

将分支推送到远程存储库。

open_pr_to-base

使用GitHub CLI创建Pull请求(gh).

send_邮件

通过SMTP发送电子邮件通知。 此工具允许AI代理在工作准备就绪时通知人类审阅者(例如,在打开Pull Request后)。

配置(可选)

要启用电子邮件发送,请创建 .env 在项目根目录中创建文件,并提供所需的SMTP设置。

示例 .env 文件:

SMTP_HOST=
SMTP_PORT=
SMTP_USERNAME=
SMTP_PASSWORD=
FROM_EMAIL=

🔁 工作流示例

  1. 使用克隆存储库 git_clone.
  2. 在本地修改代码。
  3. 使用检查更改 git_diff.
  4. 根据差异和上下文编写提交消息。
  5. 使用提交更改 git_commit.
  6. 使用以下命令推送分支 git_push.
  7. 使用打开拉取请求 open_pr_to_base.
  8. 可选择使用以下方式通知审阅者 send_email.

⚙️ 需求

  • Python 3.9+
  • Git
  • GitHub命令行界面(gh)公关创作
  • 本地GitHub身份验证
  • MCP兼容客户端(例如Claude Desktop)

▶️ 作为本地MCP服务器运行

安装Python依赖项:

pip install -r requirements.txt

设置:

  1. 将存储库克隆到任何本地目录
  2. 创建一个名为的文件 mcp.json 在项目根中
  3. 复制以下内容 mcp.example.json
  4. 替换 <PATH_TO_YOUR_LOCAL_CLONE> 走你当地的路
  5. 在Claude Desktop中注册文件→ MCP → 添加本地MCP

🧾 错误代码参考

MCP服务器返回结构化错误代码,以允许AI代理和人类 以编程方式理解故障并优雅地恢复。

常见错误代码

代码 含义 典型工具 如何修复
invalid_input 输入验证失败 任何工具 检查必填字段和约束
not_a_directory 路径存在但不是目录 git_clone 提供目录路径
not_a_git_repo 路径不是Git存储库 Git_status/Git_diff/Git_commit/Git_push 确保 .git 存在
dest_not_directory 目标存在,但不是目录 git_clone 选择目录路径
dest_dir_not_empty 目标目录不为空 git_clone 使用空目录
command_timeout 命令超出允许的超时 任何git/gh命令 增加超时或检查网络
command_failed 命令以非零状态退出 任何git/gh命令 检查stderr并遵循提示
gh_not_configured GitHub CLI未通过身份验证 open_pr_to_base 运行 gh auth login
email_config_missing 缺少SMTP配置 send_email 在中设置SMTP变量 .env
email_send_failed SMTP发送失败 send_email 验证凭据和SMTP主机
branch_detect_failed 无法检测到当前分支 git_push/open_pr_to_base 确保仓库有提交
on_base_branch 尝试从基础分支 open_PR_to_base 切换到功能分支进行PR

🧰 故障排除

1) git_push 失败(身份验证/权限)

症状:

  • error.code = command_failed
  • stderr提到身份验证、权限被拒绝或无法读取用户名。

修复:

  • 首选SSH远程+SSH密钥,或提前配置凭据。
  • 此服务器以非交互方式运行,因此不会打开登录提示。

2) open_pr_to_base 以“…之间没有提交”失败

症状:

  • stderr包含: No commits between <base> and <branch>

修复:

  • 确保您在功能分支上提交了更改。
  • 确保分支被推送:运行 git_push 随着 set_upstream=true 第一次推。

3) send_email 失败,缺少SMTP_PORT/config

症状:

  • SMTP_PORT 没有/ EMAIL_CONFIG_MISSING

修复:

  • 验证 .env 已加载(正确路径)。
  • 确保这些变量存在:SMTP_HOST、SMTP_PORT、SMTP_USERNAME、SMTP.PASSWORD、FROM_EMAIL
  • 例子: SMTP_PORT=587

🚧 未来改进

以下功能将进一步增强服务器:

  • git_pull 具有冲突检测功能
  • 自动冲突解决协助
  • 分支合并工具
  • 重新构建工作流
  • Pull请求的审阅者分配
  • 提交消息过滤和执行

这些新增功能将使服务器更接近一个更完整的AI辅助Git工作流工具包。