此服务器提供了27个全面的Git操作,组织成六个功能性类别:
| 类别 | 工具 | 描述 |
|---|---|---|
| 仓库管理 | git_init, git_clone, git_status, git_clean | 初始化仓库,从远程克隆,检查状态,清理未跟踪文件 |
| 暂存与提交 | git_add, git_commit, git_diff | 暂存更改,创建提交,并比较更改 |
| 历史与审查 | git_log, git_show, git_blame, git_reflog | 查看提交历史,审查对象,逐行追踪作者身份,查看引用日志 |
| 分支与合并 | git_branch, git_checkout, git_merge, git_rebase, git_cherry_pick | 管理分支,切换上下文,集成更改,应用特定提交 |
| 远程操作 | git_remote, git_fetch, git_pull, git_push | 配置远程,下载更新,同步仓库,发布更改 |
| 高级工作流程 | git_tag, git_stash, git_reset, git_worktree, git_set_working_dir, git_clear_working_dir, git_wrapup_instructions | 标记发布,暂存更改,重置状态,管理工作树,设置/清除会话目录,访问工作流程指导 |
服务器提供的资源提供了关于Git环境的上下文信息:
| 资源 | URI | 描述 |
|---|---|---|
| Git 工作目录 | git://working-directory | 提供当前会话的工作目录用于Git操作。这是通过git_set_working_dir设置并作为默认值使用的目录。 |
服务器提供了结构化的提示模板,引导AI代理完成复杂的工作流程:
| 提示 | 描述 | 参数 |
|---|---|---|
| Git 结束 | 一种系统化的工作流程协议,用于完成Git会话。引导代理进行审查、记录、提交和标记更改。 | changelogPath, skipDocumentation, createTag, 和 updateAgentFiles。 |
此服务器支持Bun和Node.js运行时:
| 运行时 | 命令 | 最低版本 | 备注 |
|---|---|---|---|
| Bun | bunx @cyanheads/git-mcp-server@latest | ≥ 1.2.0 | 原生Bun运行时(最佳性能) |
| Node.js | npx @cyanheads/git-mcp-server@latest | ≥ 20.0.0 | 通过npx/bunx(通用兼容性) |
服务器自动检测运行时,并使用适当的进程启动方法进行Git操作。
在您的MCP客户端配置文件中添加以下内容(例如,cline_mcp_settings.json)。客户端有不同的方式来配置服务器,请参考您客户端的具体文档。
确保根据需要更新环境变量(特别是您的Git信息!)
{
"mcpServers": {
"git-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/git-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"GIT_BASE_DIR": "~/Developer/",
"LOGS_DIR": "~/Developer/logs/git-mcp-server/",
"GIT_USERNAME": "cyanheads",
"GIT_EMAIL": "casey@caseyjhand.com",
"GIT_SIGN_COMMITS": "false"
}
}
}
}
{
"mcpServers": {
"git-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["@cyanheads/git-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"GIT_BASE_DIR": "~/Developer/",
"LOGS_DIR": "~/Developer/logs/git-mcp-server/",
"GIT_USERNAME": "cyanheads",
"GIT_EMAIL": "casey@caseyjhand.com",
"GIT_SIGN_COMMITS": "false"
}
}
}
}
MCP_TRANSPORT_TYPE=http
MCP_HTTP_PORT=3015
此服务器基于mcp-ts-template构建,并继承了其丰富的功能集:
McpError系统确保一致、结构化的错误响应。none、jwt或oauth模式来保护服务器。in-memory、filesystem、Supabase、Cloudflare KV/R2)而不改变业务逻辑。tsyringe构建了一个干净、解耦和可测试的架构。此外,还有专门针对Git集成的功能:
git clean和git reset --hard要求明确确认标志。注意:开发使用Bun可以获得最佳体验,但发布的包同时支持Bun(
bunx)和Node.js(npx)。
git clone https://github.com/cyanheads/git-mcp-server.git
cd git-mcp-server
使用Bun(推荐用于开发):
bun install
使用Node.js:
npm install
所有配置都在启动时集中解析和验证在src/config/index.ts中。.env文件中的关键环境变量包括:
| 变量 | 描述 | 默认值 |
|---|---|---|
MCP_TRANSPORT_TYPE | 使用的传输类型:stdio 或 http。 | stdio |
MCP_SESSION_MODE | HTTP传输的会话模式:stateless,stateful 或 auto。 | auto |
MCP_RESPONSE_FORMAT | 响应格式:json(LLM优化),markdown(人类可读),或 auto。 | json |
MCP_RESPONSE_VERBOSITY | 响应详细级别:minimal,standard 或 full。 | standard |
MCP_HTTP_PORT | HTTP服务器的端口。 | 3015 |
MCP_HTTP_HOST | HTTP服务器的主机名。 | 127.0.0.1 |
MCP_HTTP_ENDPOINT_PATH | MCP请求的端点路径。 | /mcp |
MCP_AUTH_MODE | 认证模式:none,jwt 或 oauth。 | none |
STORAGE_PROVIDER_TYPE | 存储后端:in-memory,filesystem,supabase,cloudflare-kv,r2。 | in-memory |
OTEL_ENABLED | 设置为 true 启用OpenTelemetry。 | false |
MCP_LOG_LEVEL | 日志的最低级别(debug,info,warn,error)。 | info |
GIT_SIGN_COMMITS | 设置为 "true" 启用所有提交、合并、变基、樱桃挑选和标签的GPG/SSH签名。需要GPG/SSH配置。 | false |
GIT_AUTHOR_NAME | Git作者名称。别名:GIT_USERNAME,GIT_USER。如果未设置,则回退到全局git配置。 | (none) |
GIT_AUTHOR_EMAIL | Git作者电子邮件。别名:GIT_EMAIL,GIT_USER_EMAIL。如果未设置,则回退到全局git配置。 | (none) |
GIT_BASE_DIR | 可选的绝对路径,限制所有git操作到特定目录树。为多租户或多用户环境提供安全沙箱。 | (none) |
GIT_WRAPUP_INSTRUCTIONS_PATH | 可选的自定义markdown文件路径,包含Git工作流程说明。 | (none) |
MCP_AUTH_SECRET_KEY | 对于jwt认证是必需的。 32个字符以上的密钥。 | (none) |
OAUTH_ISSUER_URL | 对于oauth认证是必需的。 OIDC提供商的URL。 | (none) |
最简单的方式是通过bunx或npx(无需安装):
使用Bun:
bunx @cyanheads/git-mcp-server@latest
使用Node.js:
npx @cyanheads/git-mcp-server@latest
两个命令完全相同,可以通过环境变量或您的MCP客户端配置进行配置。
构建并运行生产版本:
# 一次性构建
bun rebuild
# 运行已构建的服务器
bun start:http
# 或
bun start:stdio
开发模式带热重载:
bun dev:http
# 或
bun dev:stdio
运行检查和测试:
bun devcheck # 检查、格式化、类型检查等
bun test # 运行测试套件
bun build:worker
bun deploy:dev
bun deploy:prod
| 目录 | 目的及内容 |
|---|---|
src/mcp-server/tools | 您的工具定义(*.tool.ts)。这是定义Git能力的地方。 |
src/mcp-server/resources | 您的资源定义(*.resource.ts)。提供Git上下文数据源。 |
src/mcp-server/transports | HTTP和STDIO传输的实现,包括认证中间件。 |
src/storage | StorageService抽象和所有存储提供商的实现。 |
src/services | 与外部服务的集成(LLMs、语音等)。 |
src/container | 依赖注入容器注册和令牌。 |
src/utils | 核心实用程序,用于日志记录、错误处理、性能和安全性。 |
src/config | 使用Zod解析和验证环境变量。 |
tests/ | 单元和集成测试,镜像src/目录结构。 |
此服务器遵循MCP的双输出架构用于所有工具(MCP工具规范):
通过环境变量配置响应格式和详细程度(参见配置):
| 变量 | 值 | 描述 |
|---|---|---|
MCP_RESPONSE_FORMAT | json(默认)、markdown、auto | 输出格式:JSON用于LLM解析,Markdown用于人类UIs |
MCP_RESPONSE_VERBOSITY | minimal、standard(默认)、full | 详细程度:最小(核心数据)、标准(平衡)、全部(一切) |
当您通过MCP客户端调用工具时,您会看到一个格式化的摘要,旨在供人类消费。例如,git_status可能会显示:
Markdown格式:
# Git 状态:main
## 暂存(2)
- src/index.ts
- README.md
## 未暂存(1)
- package.json
JSON格式(LLM优化):
{
"success": true,
"branch": "main",
"staged": ["src/index.ts", "README.md"],
"unstaged": ["package.json"],
"untracked": []
}
幕后,LLM接收完整的结构化数据作为内容块,通过responseFormatter函数传递。这包括:
为什么这很重要:LLM可以回答详细的提问,如“谁进行了最后一次提交?”或“提交abc123中哪些文件发生了变化?”因为它拥有完整数据集,即使您只看到了摘要。
详细程度等级:控制返回的数据量: