MCP Git Server
一个用于执行 git push 操作的模型上下文协议 (MCP) 服务器,支持灵活的分支映射和待处理修改管理。
💡 高效实践
通过配置 工具提示词,规范 AI 的 git 操作行为:
- 注册账号:
- 添加自己的厂商和模型配置
- 生成 API 密钥
- 在密钥的 工具提示词 中添加:
工具名:get_push
提示词:除非我明确确认,不要使用原生git工具做任何操作,我明确说使用push pr时,才要使用MCP工具中的git_push和pr工具,其它任何时间不允许做git相关的操作
工具名:save_changes
提示词:工具中有save_changes的工具,你修改完成要调用这个工具保存修改记录
效果:AI 只会在你明确要求时才执行 git 操作,同时每次修改后自动保存记录。
功能特性
- 使用可配置的远程仓库、源分支和目标分支执行
git push命令 - 推送历史跟踪和重复推送预防
- 操作日志记录用于调试和监控
- 待处理修改管理和审查功能
- 支持多种语言(英语、中文)
- 环境变量配置以提高灵活性
安装
npm install -g @liangshanli/mcp-server-git
环境变量
必需变量
PROJECT_PATH: git 仓库的绝对路径LOCAL_BRANCH: 要推送的本地分支名称REMOTE_BRANCH: 要推送到的远程分支名称
可选变量
REMOTE_NAME: 远程仓库名称(默认:"origin")PULL_SOURCE_BRANCH:git_pull的源分支(默认:与REMOTE_BRANCH相同)GIT_PUSH_FLAGS: 额外的git push标志(默认:"--progress")TOOL_PREFIX: MCP工具名称前缀(默认:"")REPO_NAME: 仓库标识符,用于日志记录和标识LANGUAGE: 消息语言("en", "zh", "zh-CN", "zh-TW")(默认:"en")MCP_LOG_DIR: 日志文件目录MCP_PUSH_HISTORY_FILE: 推送历史文件名(默认:"push-history.json")HTTP_PROXY/HTTPS_PROXY/SOCKS_PROXY: 代理设置
使用方法
1. 设置环境变量
export PROJECT_PATH="/path/to/your/git/repository"
export LOCAL_BRANCH="main"
export REMOTE_BRANCH="main"
export REMOTE_NAME="origin"
export REPO_NAME="my-project"
export TOOL_PREFIX="myproject"
2. 编辑器配置
在项目根目录创建或更新 .cursor/mcp.json 或 .vscode/mcp.json:
{
"mcpServers": {
"git": {
"command": "npx",
"args": ["@liangshanli/mcp-server-git"],
"env": {
"PROJECT_PATH": "/path/to/your/git/repository",
"LOCAL_BRANCH": "main",
"REMOTE_BRANCH": "main",
"REMOTE_NAME": "origin",
"REPO_NAME": "my-project",
"TOOL_PREFIX": ""
}
}
}
}
3. 启动服务器
npm start
# 或
mcp-server-git
# 或(带验证)
npm run start-managed
多项目实例支持
你可以在编辑器中配置多个 Git MCP 服务器实例,以便同时管理不同的仓库。
Cursor 编辑器配置
{
"mcpServers": {
"git-web-app": {
"command": "npx",
"args": ["@liangshanli/mcp-server-git"],
"env": {
"PROJECT_PATH": "D:/projects/web-app",
"LOCAL_BRANCH": "main",
"REMOTE_BRANCH": "main",
"REPO_NAME": "web-app",
"TOOL_PREFIX": "web"
}
},
"git-api-service": {
"command": "npx",
"args": ["@liangshanli/mcp-server-git"],
"env": {
"PROJECT_PATH": "D:/projects/api-service",
"LOCAL_BRANCH": "develop",
"REMOTE_BRANCH": "develop",
"REPO_NAME": "api-service",
"TOOL_PREFIX": "api"
}
}
}
}
VS Code 编辑器配置
{
"servers": {
"git-project-a": {
"command": "npx",
"args": ["@liangshanli/mcp-server-git"],
"env": {
"PROJECT_PATH": "/path/to/project-a",
"LOCAL_BRANCH": "main",
"REMOTE_BRANCH": "main",
"REPO_NAME": "project-a",
"TOOL_PREFIX": "a"
}
},
"git-project-b": {
"command": "npx",
"args": ["@liangshanli/mcp-server-git"],
"env": {
"PROJECT_PATH": "/path/to/project-b",
"LOCAL_BRANCH": "main",
"REMOTE_BRANCH": "main",
"REPO_NAME": "project-b",
"TOOL_PREFIX": "b"
}
}
}
}
多实例集成的优势:
- 工具隔离:每个实例都有带前缀的独立工具(例如:
web_git_push,api_git_push) - 日志隔离:日志存储在不同的目录中
- 独立配置:每个仓库可以配置不同的分支映射和项目路径
MCP 工具
git_push
使用提交消息执行 git push 命令。自动添加并提交修改后推送。
重要: 必须先调用 get_pending_changes 来审查修改后才能使用此工具。
执行的操作:
- 自动执行
git add .添加所有修改到暂存区 - 自动执行
git commit -m "message"提交修改 - 执行
git push推送到远程仓库 - 清除所有待处理修改并重置审查状态
{
"name": "git_push",
"arguments": {
"message": "更新项目文件"
}
}
get_pending_changes
获取并审查推送前的待处理修改。必须在使用 git_push 前调用此工具来启用推送。
{
"name": "get_pending_changes",
"arguments": {
"limit": 1000
}
}
save_changes
在推送前保存待处理修改。记录修改的文件和修改内容以供推送前审查。
{
"name": "save_changes",
"arguments": {
"files": ["src/main.js", "src/utils.js"],
"content": "修复用户认证中的bug"
}
}
get_push_history
获取最近5次推送历史记录以检查重复项。
get_operation_logs
获取操作日志用于调试。
{
"name": "get_operation_logs",
"arguments": {
"limit": 50
}
}
git_status
显示工作目录和暂存区的状态。
git_diff
显示工作目录与HEAD或暂存区之间的差异。
{
"name": "git_diff",
"arguments": {
"staged": true
}
}
git_add
将文件内容添加到暂存区。
{
"name": "git_add",
"arguments": {
"files": ["src/main.js", "src/utils.js"]
}
}
git_log
显示提交历史。
{
"name": "git_log",
"arguments": {
"limit": 5,
"oneline": true
}
}
git_pull
从配置的远程仓库和源分支执行 git pull 命令。
💡 最佳实践与使用建议
为了充分发挥 MCP Git Server 的威力,建议在与 AI 协作时遵循以下"强约束"指令:
1. 原子化记录 (save_changes)
指令建议:"请在每次完成一个独立的小功能或修复一个 Bug 后,立即调用 save_changes 工具。你需要明确列出修改的文件,并用一两句话简述你的修改逻辑。严禁累积大量变动而不记录。"
价值:这能确保 AI 的记忆碎片被实时固化,防止在后续复杂的重构中丢失初始意图。
2. 模块化推送 (git_push)
指令建议:"当我们完成当前功能模块的所有开发和自测后,请通过调用 git_push 进行推送。在推送前,你必须先通过 get_pending_changes 完整读取并总结我们会话的所有保存记录,生成一份结构清晰、涵盖所有变动的 Commit Message。"
价值:将"总结历史记录"作为推送的法定前置步骤,彻底消灭"金鱼脑"提交。
3. 阶段性复盘
如果会话过程极长(如持续数小时),可以偶尔要求 AI 调用 get_pending_changes 进行一次中场总结,确保存储的记录与当前的实际代码状态完全吻合。
必需的工作流程
- 进行代码修改
- 调用
save_changes记录修改内容 - 调用
get_pending_changes审查并标记修改为已审查 - 调用
git_push自动添加、提交并推送修改 - 对于后续推送,重复步骤 3-4(每次推送尝试后审查状态都会重置)
验证
服务器在启动时执行以下验证:
- 检查必需的环境变量
- 验证
PROJECT_PATH路径是否存在 - 确保
PROJECT_PATH是有效的 git 仓库(包含.git目录)