Git服务器工具

MCP Git服务器通过MCP协议暴露安全的Git操作子集(状态、日志、差异、提交、推送等),为Claude Desktop等客户端提供结构化且安全的本地开发工作流。

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

使用说明

🚀 MCP Git服务器

英文摘要:MCP Git服务器,它将Git操作的一个安全子集(状态、日志、差异、提交、推送等)作为MCP工具公开给Claude Desktop等客户端。它通过环境变量限制对一组可配置的允许目录的访问,专为安全的本地开发工作流而设计。


🎯 问题 → 解决方案

问题

  • 您需要LLM(例如Claude Desktop)能够在不打开终端的情况下与Git交互
  • 您需要对LLM可以访问的目录进行粒度控制
  • 您希望从聊天中进行结构化和安全的Git操作

解决方案

MCP Git服务器 是一个MCP(模型上下文协议)服务器,它:

  • ✅ 将Git命令作为MCP工具公开(git_status, git_commit, git_push等等)
  • ✅ 仅通过限制访问允许的目录 GIT_ALLOWED_DIRS
  • ✅ 返回JSON中的结构化输出
  • ✅ 使用有效路径 os.path.commonpath 避免路径遍历
  • ✅ 允许从Claude Desktop管理Git存储库,而无需触摸终端

🛠️ 可用的MCP工具

基本操作

  • git_init:在目录中初始化新的Git存储库

    • 参数: path, initial_branch (可选,默认:“main”)
    • 返回:操作结果
  • git_status:显示存储库的当前状态

    • 参数: path, short (可选,短格式)
    • 返回:文件已修改、分期、未挂载
  • git_add:将文件添加到舞台区域

    • 参数: path, files (例如:“.”,“*.py”,“file.txt”)
    • 返回:确认添加的文件
  • git_commit:创建对阶段更改的承诺

    • 参数: path, message, author (可选)
    • 返回:提交和消息哈希

历史和差异

  • git_log:显示提交历史

    • 参数: path, max_count (默认值:10), oneline (短格式)
    • 返回:带有哈希、作者、日期、消息的提交列表
  • git_diff:显示提交、分支或工作树之间的差异

    • 参数: path, staged (可选), file (可选)
    • 返回:统一差异更改

分支机构管理

  • git_branch:列出、创建或删除线程

    • 参数: path, action (“列表”|“创建”|“删除”), branch_name
    • 返回:分支列表或操作确认
  • git_checkout:更改分支

    • 参数: path, branch, create (可选,如果不存在则创建)
    • 返回:确认分支更改

远程操作

  • git_remote:删除孕产期存储库

    • 参数: path, action (“列表”|“添加”|“删除”|“显示”), name, url
    • 返回: 遥控器列表或确认
  • git_push:将提交上传到远程存储库

    • 参数: path, remote (默认:“原点”), branch, set_upstream, force
    • 返回:推送结果
  • git_pull:下载并合并远程更改

    • 参数: path, remote (默认:“原点”), branch
    • 返回:拉动结果和更新的文件
  • git_clone:克隆远程存储库

    • 参数: url, destination, branch (可选)
    • 返回:克隆确认

配置和标签

  • git_config:配置Git(用户名、用户名等)

    • 参数: key, value, path (可选), global (可选)
    • 返回:配置确认
  • git_tag:管理标签(标签)

    • 参数: path, action (“列表”|“创建”|“删除”), tag_name, message
    • 返回: 标签列表或确认

⚙️ 配置

1.安装依赖项

pip install mcp pydantic

2.配置器Claude桌面

编辑克劳德桌面配置文件:

  • 视窗: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

添加MCP服务器:

{
  "mcpServers": {
    "git-server": {
      "command": "python",
      "args": ["C:\\DesarrolloPython\\MCP Git Server\\git_server.py"],
      "env": {
        "GIT_ALLOWED_DIRS": "C:\\DesarrolloPython;C:\\Repos;D:\\MisProyectos",
        "PYTHONIOENCODING": "utf-8"
      }
    }
  }
}

不重要:根据您的系统调整路线:

  • args:文件的绝对路径 git_server.py
  • GIT_ALLOWED_DIRS:由分隔的目录 ; (Windows)o : (Unix)

3.Reiniciar克劳德桌面

完全关闭Claude Desktop并重新打开它以加载服务器。


🔒 安全和限制

⚠️ 安全警告

  1. 仅开发目录:

    • 配置器 GIT_ALLOWED_DIRS 仅指向项目文件夹
    • 不 包括系统目录(C:\Windows, /etc, /usr等等)
    • 不 包括生产中包含敏感数据或数据库的文件夹
  2. 路径验证:

    • 服务器使用 os.path.commonpath 验证路径是否在允许的目录内
    • 拒绝任何外部操作 GIT_ALLOWED_DIRS
    • 预览路径遍历攻击(../, ..\\等等)
  3. 本地git命令:

    • 服务器使用 subprocess
    • 确保正确安装和配置了Git
    • 必须配置Git凭据(SSH密钥、凭据管理器等)
  4. 生产建议:

    • 在关键环境中,考虑模式 只读的 (独唱 git_status, git_log, git_diff)
    • 必要时实施运营审计
    • 在没有额外安全审查的情况下,不要在生产服务器上使用

📋 限制

  • 需要在系统上安装Git
  • 不自动处理合并冲突
  • 不支持Git的交互式操作(交互式Rebase、冲突合并等)
  • 必须预先配置凭据(不要求密码)

🎨 使用示例

来自克劳德桌面

Usuario: "Inicializa un repo Git en C:\DesarrolloPython\mi-proyecto"

Claude: [Ejecuta git_init]
✅ Repositorio inicializado en C:\DesarrolloPython\mi-proyecto

Usuario: "Agrega todos los archivos y hace commit con mensaje 'Initial commit'"

Claude: [Ejecuta git_add y git_commit]
✅ 5 archivos agregados
✅ Commit creado: a3f5b2c "Initial commit"

Usuario: "Muéstrame los últimos 3 commits"

Claude: [Ejecuta git_log]
a3f5b2c - (hace 2 minutos) Initial commit
b4e6c1d - (hace 1 hora) Add README
c5f7d3e - (hace 2 horas) Project structure

🏗️ 建筑技术

  • 语言:Python 3.8+
  • 协议:MCP(模型上下文协议)
  • 依赖性:
    • mcp>=1.0.0 -MCP协议库
    • pydantic>=2.0.0 -数据验证
  • 执行:国家合同子流程
  • 安全:通过环境变量的目录白名单

项目结构

MCP Git Server/
├── git_server.py          # Servidor MCP principal
├── requirements.txt       # Dependencias Python
├── README.md             # Este archivo
└── install.bat           # Script de instalación (Windows)

🔧 环境变量

GIT_ALLOWED_DIRS

定义允许Git操作的目录。

福尔马托:

  • 视窗:用分隔路径 ;
  • 操作系统:用分隔路径 :

示例Windows:

set GIT_ALLOWED_DIRS=C:\DesarrolloPython;C:\Repos;D:\Git

Linux/MacOS示例:

export GIT_ALLOWED_DIRS=/home/user/dev:/home/user/projects

默认 (如果未配置):

[
    "C:\\DesarrolloPython",
    "C:\\DesarrolloC#",
    "C:\\DesarrolloBSI"
]

📝 许可证

该项目是投资组合的POC(概念证明)。


🤝 贡献

这是一个个人演示项目。如果您发现错误或改进,请随时提出更改建议。


📚 参考文献


创建人克劳迪娅、伊娃和马塞洛·维奇 技术:Python、MCP、Git
目的:演示LLM+Git与安全控制的集成