Git操作服务器

一个基于Model Context Protocol的服务器,为AI代理提供程序化控制Git仓库的全面功能,包括克隆、提交、推送、拉取、分支等操作。

  • by Ujjawal-Rajput
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 ujjawal-rajput/git-mcp-server

使用说明

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配置。包括一个可选的工具参数,用于在签名失败时回退到未签名的提交。

安装

先决条件

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"
      }
    }
  }
}

合并冲突解决

使用分支时,您可能会遇到合并冲突。以下是解决这些问题的方法:

  1. 检查状态 使用您的存储库来识别冲突:

    git status
    

    这将显示哪些文件存在冲突。

  2. 打开冲突的文件 并寻找冲突标记:

    <<<<<<< HEAD
    Your current branch changes
    =======
    Incoming changes from the branch being merged
    >>>>>>> branch-name
    
  3. 解决冲突 通过:

    • 决定保留哪些更改(来自分支或组合)
    • 删除冲突标记-(<<<<<<<, =======, >>>>>>>)
    • 确保最终内容正确有效。
    • 测试更改以确保一切按预期运行
  4. 将文件标记为已解决 通过将其添加到staging中:

    git add <filename>
    
  5. 完成合并 带有描述性提交消息:

    git commit -m "Resolve merge conflict in <filename>"
    

    如果你使用Git的默认合并提交消息,你可以简单地使用:

    git commit
    

    这将打开默认编辑器,其中包含一条预填充的提交消息,您可以在需要时对其进行修改。

快速开始

  1. 克隆存储库:

    const result = await mcpClient.execute('git-mcp-server', 'git_clone', {
      repositoryUrl: 'https://github.com/username/repo.git',
      targetPath: '/path/to/clone/into'
    });
    
  2. 进行更改并提交:

    // 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'
    });
    
  3. 推送更改:

    await mcpClient.execute('git-mcp-server', 'git_push', {
      path: '/path/to/repo',
      remote: 'origin',
      branch: 'main'
    });
    

如果手动运行(不通过MCP客户端)进行开发或测试

通过npm安装

npm install @cyanheads/git-mcp-server

或者从源代码安装(建议用于开发)

  1. 克隆存储库:

    git clone https://github.com/cyanheads/git-mcp-server.git
    cd git-mcp-server
    
  2. 安装依赖项:

    npm install
    
  3. 构建项目:

    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