使用说明
🚀 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.pyGIT_ALLOWED_DIRS:由分隔的目录;(Windows)o:(Unix)
3.Reiniciar克劳德桌面
完全关闭Claude Desktop并重新打开它以加载服务器。
🔒 安全和限制
⚠️ 安全警告
-
仅开发目录:
- 配置器
GIT_ALLOWED_DIRS仅指向项目文件夹 - 不 包括系统目录(
C:\Windows,/etc,/usr等等) - 不 包括生产中包含敏感数据或数据库的文件夹
- 配置器
-
路径验证:
- 服务器使用
os.path.commonpath验证路径是否在允许的目录内 - 拒绝任何外部操作
GIT_ALLOWED_DIRS - 预览路径遍历攻击(
../,..\\等等)
- 服务器使用
-
本地git命令:
- 服务器使用
subprocess - 确保正确安装和配置了Git
- 必须配置Git凭据(SSH密钥、凭据管理器等)
- 服务器使用
-
生产建议:
- 在关键环境中,考虑模式 只读的 (独唱
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与安全控制的集成