使用说明
Git MCP服务器
为您的AI代理提供对Git存储库的全面、安全和程序化控制!
MCP(模型上下文协议)服务器,为标准提供健壮、LLM友好的接口 git 命令行工具。使LLM和AI代理能够通过MCP标准执行各种Git操作,如克隆、提交、推送、拉取、分支、差异、日志、状态等。
建立在 cyanheads/mcp-ts-template,此服务器遵循模块化架构,具有强大的错误处理、日志记录和安全功能。
🚀 核心功能:Git工具🛠️
此服务器为您的AI配备了一套全面的工具,用于与Git存储库进行交互:
| 工具类别 | 描述 | 主要功能- |
|---|---|---|
| 存储库和暂存 | 管理存储库状态,从初始化到临时更改。 | - git_init:初始化新存储库。- git_clone:克隆远程存储库。- git_add:提交的阶段更改。- git_status:检查工作目录的状态。- git_clean:删除未跟踪的文件(需要强制标记)。 - |
| 承诺与历史 | 创建提交、检查历史记录并查看随时间的变化。 | - git_commit:使用常规消息创建新的提交。- git_log:使用筛选选项查看提交历史记录。- git_diff:显示提交、分支或工作树之间的更改。- git_show:检查Git对象,如提交和标签。 - |
| 分支与合并 | 管理分支、合并更改和重设提交基础。 | - git_branch:列出、创建、删除和重命名分支。- git_checkout:在分支或提交之间切换。- git_merge:将分支合并在一起。- git_rebase:在另一个基础上重新应用提交。- git_cherry_pick:应用其他分支的特定提交。 - |
| 远程操作 | 与远程存储库交互。 | - git_remote:管理远程存储库连接。- git_fetch:从远程下载对象和引用。- git_pull:获取并与另一个存储库集成。- git_push:用本地更改更新远程引用。 - |
| 高级工作流 | 支持更复杂的Git工作流和存储库管理。 | - git_tag:创建、列出或删除标记。- git_stash:临时存储修改过的文件。- git_worktree:管理连接到单个存储库的多个工作树。- git_set_working_dir:为会话设置持久工作目录。- git_wrapup_instructions:获得完成更改的标准工作流程。 - |
目录
| 概述 | 特性 | 安装 | | 配置 | 项目结构 | | 工具 | 资源 | 发展 | 许可证 |
概述
Git MCP服务器充当桥梁,允许理解模型上下文协议(MCP)的应用程序(MCP客户端)(如高级AI编码助手(LLM)、IDE扩展或自定义研究工具)直接安全地与本地Git存储库交互。
您的工具可以利用此服务器来:
- 自动化Git工作流:克隆存储库、创建分支、暂存更改、提交工作、推送更新和以编程方式管理标签。
- 获得存储库见解:检查状态、查看日志、差异更改,并在不离开宿主应用程序的情况下检查Git对象。
- 将Git集成到AI驱动的开发中:使LLM能够将版本控制作为其编码或重构任务的一部分进行管理,确保代码的完整性和历史记录。
- 支持CI/CD和DevOps自动化:构建自定义脚本和工具,以编排复杂的Git操作,实现自动化构建、测试和部署。
建立在坚固的基础上 mcp-ts-template,此服务器提供了一种标准化、安全且高效的方式,通过MCP标准公开Git功能。它通过安全地执行标准来实现这一点 git 使用Node.js安装在系统上的命令行工具 child_process 模块,确保兼容性并充分利用Git的强大功能。
开发者说明:此存储库包括 .微规则 该文件作为LLM编码代理的开发人员备忘单,可快速参考代码库模式、文件位置和代码片段。
特性
核心公用设施
利用 mcp-ts-template:
- 日志记录:结构化、可配置的日志记录(文件轮换、stdout JSON、MCP通知),带有敏感数据编辑功能。
- 错误处理:集中错误处理,标准化错误类型(
McpError),以及自动记录。 - 配置:环境变量加载(
dotenv)经过全面验证。 - 输入验证/消毒:用途
zod用于模式验证和自定义净化逻辑(对路径至关重要)。 - 请求上下文:使用唯一的请求ID跟踪和关联操作
AsyncLocalStorage. - 类型安全:TypeScript和Zod模式强制执行强类型。
- HTTP传输:使用高性能HTTP服务器 你好,具有会话管理、CORS和身份验证支持。
- 部署:多阶段
Dockerfile用于创建具有本机依赖支持的小型安全生产映像。
Git集成
- 直接Git CLI执行:通过安全执行标准与Git交互
git通过Node.js的命令行工具child_process,确保完全兼容和访问Git的功能。 - 全面指挥覆盖:将各种Git命令作为MCP工具公开(请参见 工具 部分)。
- 存储库交互:支持状态检查、分支、暂存、提交、获取、拉取、推送、差异化、日志记录、重置、标记等。
- 工作目录管理:允许设置和清除特定于会话的工作目录,以实现跨多个Git操作的上下文持久性。
- 安全功能:包括检查,并要求明确确认潜在的破坏性操作,如
git clean和git reset --hard. - 提交签名:支持GPG或SSH签名以验证提交,通过
GIT_SIGN_COMMITS环境变量和服务器端Git配置。包括一个可选的工具参数,用于在签名失败时回退到未签名的提交。
安装
先决条件
- Node.js(>=20.0.0)
- npm (附带Node.js)
- Git 已安装并可在系统PATH中访问。
MCP客户端设置
将以下内容添加到MCP客户端的配置文件中(例如。, cline_mcp_settings.json).此配置使用 npx 运行服务器,如果软件包不存在,它将自动安装:
{
"mcpServers": {
"git-mcp-server": {
"command": "npx",
"args": ["@cyanheads/git-mcp-server"],
"env": {
"MCP_LOG_LEVEL": "info",
"GIT_SIGN_COMMITS": "false"
}
}
}
}
合并冲突解决
使用分支时,您可能会遇到合并冲突。以下是解决这些问题的方法:
-
检查状态 使用您的存储库来识别冲突:
git status这将显示哪些文件存在冲突。
-
打开冲突的文件 并寻找冲突标记:
<<<<<<< HEAD Your current branch changes ======= Incoming changes from the branch being merged >>>>>>> branch-name -
解决冲突 通过:
- 决定保留哪些更改(来自分支或组合)
- 删除冲突标记-(
<<<<<<<,=======,>>>>>>>) - 确保最终内容正确有效。
- 测试更改以确保一切按预期运行
-
将文件标记为已解决 通过将其添加到staging中:
git add <filename> -
完成合并 带有描述性提交消息:
git commit -m "Resolve merge conflict in <filename>"如果你使用Git的默认合并提交消息,你可以简单地使用:
git commit这将打开默认编辑器,其中包含一条预填充的提交消息,您可以在需要时对其进行修改。
快速开始
-
克隆存储库:
const result = await mcpClient.execute('git-mcp-server', 'git_clone', { repositoryUrl: 'https://github.com/username/repo.git', targetPath: '/path/to/clone/into' }); -
进行更改并提交:
// Stage changes await mcpClient.execute('git-mcp-server', 'git_add', { files: ['.'], path: '/path/to/repo' }); // Create a commit await mcpClient.execute('git-mcp-server', 'git_commit', { message: 'feat: add new feature', path: '/path/to/repo' }); -
推送更改:
await mcpClient.execute('git-mcp-server', 'git_push', { path: '/path/to/repo', remote: 'origin', branch: 'main' });
如果手动运行(不通过MCP客户端)进行开发或测试
通过npm安装
npm install @cyanheads/git-mcp-server
或者从源代码安装(建议用于开发)
-
克隆存储库:
git clone https://github.com/cyanheads/git-mcp-server.git cd git-mcp-server -
安装依赖项:
npm install -
构建项目:
npm run build # or npm run rebuild
配置
环境变量
使用环境变量配置服务器。这些环境变量在MCP客户端配置/设置中设置(例如。 claude_desktop_config.json 克劳德桌面)
| 变量 | 描述 | 默认值 |
|---|---|---|
MCP_TRANSPORT_TYPE |
运输机制: stdio 或 http. |
stdio |
MCP_HTTP_PORT |
HTTP服务器的端口(如果 MCP_TRANSPORT_TYPE=http).如果繁忙,则检索下一个端口。 |
3010 |
MCP_HTTP_HOST |
HTTP服务器的主机地址(如果 MCP_TRANSPORT_TYPE=http). |
127.0.0.1 |
MCP_ALLOWED_ORIGINS |
CORS允许的源代码列表(如果 MCP_TRANSPORT_TYPE=http). |
(无) |
MCP_LOG_LEVEL |
日志记录级别(debug, info, notice, warning, error, crit, alert, emerg).继承自模板。 |
info |
GIT_SIGN_COMMITS |
设置为 "true" 允许对提交进行签名尝试 git_commit 工具。需要服务器端的Git/key设置(见下文)。 |
false |
MCP_AUTH_MODE |
身份验证模式: jwt, oauth,或 none. |
none |
MCP_AUTH_SECRET_KEY |
JWT验证密钥(如果 MCP_AUTH_MODE=jwt). |
'' |
OAUTH_ISSUER_URL |
OAuth验证的OIDC颁发者URL(如果 MCP_AUTH_MODE=oauth). |
'' |
OAUTH_AUDIENCE |
OAuth验证的受众声明(如果 MCP_AUTH_MODE=oauth). |
'' |
项目结构
代码库遵循模块化结构 src/ 目录:
src/
├── index.ts # Entry point: Initializes and starts the server
├── config/ # Configuration loading (env vars, package info)
│ └── index.ts
├── mcp-server/ # Core MCP server logic and capability registration
│ ├── server.ts # Server setup, capability registration
│ ├── transports/ # Transport handling (stdio, http)
│ ├── resources/ # MCP Resource implementations (currently none)
│ └── tools/ # MCP Tool implementations (subdirs per tool)
├── types-global/ # Shared TypeScript type definitions
└── utils/ # Common utility functions (logger, error handler, etc.)
要查看详细的文件树,请运行 npm run tree 或查看 docs/tree.md.
工具
Git MCP服务器提供了一套与Git存储库交互的工具,可通过模型上下文协议调用。
| 工具名称 | 描述 | 关键参数 |
|---|---|---|
git_add |
阶段指定的文件或模式。 | path?, files? |
git_branch |
管理分支(列出、创建、删除、重命名、显示当前)。 | path?, mode, branchName?, newBranchName?, startPoint?, force?, all?, remote? |
git_checkout |
切换分支或恢复工作树文件。 | path?, branchOrPath, newBranch?, force? |
git_cherry_pick |
应用现有提交引入的更改。 | path?, commitRef, mainline?, strategy?, noCommit?, signoff? |
git_clean |
删除未跟踪的文件。 需要 force: true. |
path?, force, dryRun?, directories?, ignored? |
git_clear_working_dir |
清除特定于会话的工作目录。 | (无) |
git_clone |
将存储库克隆到指定的绝对路径中。 | repositoryUrl, targetPath, branch?, depth?, quiet? |
git_commit |
提交分阶段的更改。支持作者覆盖、签名控制。 | path?, message, author?, allowEmpty?, amend?, forceUnsignedOnFailure? |
git_diff |
显示提交、工作树等之间的变化。 | path?, commit1?, commit2?, staged?, file?, includeUntracked? |
git_fetch |
从其他存储库下载对象和引用。 | path?, remote?, prune?, tags?, all? |
git_init |
在指定的绝对路径初始化新的Git存储库。初始分支默认为“main”。 | path, initialBranch?, bare?, quiet? |
git_log |
显示提交日志。 | path?, maxCount?, author?, since?, until?, branchOrFile? |
git_merge |
将指定的分支合并到当前分支中。 | path?, branch, commitMessage?, noFf?, squash?, abort? |
git_pull |
从另一个存储库或本地分支获取并与之集成。 | path?, remote?, branch?, rebase?, ffOnly? |
git_push |
使用本地参照更新远程参照。 | path?, remote?, branch?, remoteBranch?, force?, forceWithLease?, setUpstream?, tags?, delete? |
git_rebase |
在另一个基础提示之上重新应用提交。 | path?, mode?, upstream?, branch?, interactive?, strategy?, strategyOption?, onto? |
git_remote |
管理远程存储库(列表、添加、删除、显示)。 | path?, mode, name?, url? |
git_reset |
将当前HEAD重置为指定状态。支持软、混合、硬模式。 小心使用“硬”. | path?, mode?, commit? |
git_set_working_dir |
设置默认工作目录。如果不存在,可以选择初始化仓库。需要绝对路径。 | path, validateGitRepo?, initializeIfNotPresent? |
git_show |
显示有关Git对象(提交、标记等)的信息。 | path?, ref, filePath? |
git_stash |
管理隐藏的更改(列表、应用、弹出、删除、保存)。 | path?, mode, stashRef?, message? |
git_status |
获取存储库状态(分支、暂存、已修改、未跟踪的文件)。 | path? |
git_tag |
管理标签(列表、创建带注释/轻量级、删除)。 | path?, mode, tagName?, message?, commitRef?, annotate? |
git_worktree |
管理Git工作树(列表、添加、删除、移动、修剪)。 | path?, mode, worktreePath?, commitish?, newBranch?, force?, detach?, newPath?, verbose?, dryRun?, expire? |
git_wrapup_instructions |
提供标准的Git总结工作流。 | acknowledgement, updateAgentMetaFiles? |
注: path 如果通过设置,大多数工具的参数默认为会话的工作目录 git_set_working_dir.
资源
此版本(v2.1.4)中未实现MCP资源。
此版本侧重于基于最新版本重构的Git工具实现 mcp-ts-template 以及MCP SDK v1.13.0。在此重大更新期间,以前可用的资源功能已被临时删除。
如果您需要MCP资源访问权限(例如,直接通过服务器读取文件内容),请使用稳定的 v1.2.4版本发布.
未来的开发可能会在后续版本中重新引入资源功能。
发展
构建和测试
# Build the project (compile TS to JS in dist/ and make executable)
npm run build
# Test the server locally using the MCP inspector tool (stdio transport)
npm run inspector
# Test the server locally using the MCP inspector tool (http transport)
npm run inspector:http
# Clean build artifacts
npm run clean
# Generate a file tree representation for documentation
npm run tree
# Clean build artifacts and then rebuild the project
npm run rebuild
# Format code with Prettier
npm run format
# Start the server using stdio (default)
npm start
# Or explicitly:
npm run start:stdio
# Start the server using HTTP transport
npm run start:http
许可证
此项目根据Apache许可证2.0获得许可-请参阅 许可证 文件以获取详细信息。
Built with the Model Context Protocol