Git仓库管理服务器

基于Model Context Protocol的Git仓库管理服务器,为AI助手和LLM代理提供标准化的Git操作接口,包括仓库管理、分支操作、提交管理等核心功能。

  • by wty0512
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 wty0512/git-mcp-server

使用说明

GIT MCP服务器

一个模型上下文协议(MCP)服务器,提供与Git存储库交互的工具。该服务器允许AI助手和LLM代理通过标准化的界面管理存储库、分支、提交和文件,而不需要直接的文件系统或命令行访问。它将Git操作作为MCP资源和工具公开,同时保持适当的安全边界。

目录

概述

关键能力:

  • 库管理:初始化、克隆和检查存储库状态
  • 转移操作:创建、列出、签出、删除和合并分支
  • 工作目录:暂存文件、提交更改、创建差异
  • 远程操作:添加遥控器、取、拉、推
  • 高级Git命令:管理标签、存储更改、樱桃采摘、重设底座

架构和组件

核心系统架构:

Click to expand Mermaid diagram
flowchart TB
    subgraph API["API Layer"]
        direction LR
        MCP["MCP Protocol"]
        Val["Validation"]

        MCP --> Val
    end

    subgraph Core["Core Services"]
        direction LR
        GitService["Git Service"]
        ErrorService["Error Service"]

        GitService <--> ErrorService
    end

    subgraph Resources["Resource Layer"]
        direction LR
        Repo["Repository Resources"]
        Diff["Diff Resources"]
        File["File Resources"]
        History["History Resources"]

        Repo <--> Diff
        Repo <--> File
        Repo <--> History
    end

    subgraph Tools["Tool Layer"]
        direction LR
        RepoTools["Repository Tools"]
        BranchTools["Branch Tools"]
        WorkdirTools["Working Directory Tools"]
        RemoteTools["Remote Tools"]
        AdvancedTools["Advanced Tools"]

        RepoTools <--> BranchTools
        BranchTools <--> WorkdirTools
        WorkdirTools <--> RemoteTools
        RemoteTools <--> AdvancedTools
    end

    Val --> GitService
    GitService --> Resources
    GitService --> Tools

    classDef layer fill:#2d3748,stroke:#4299e1,stroke-width:3px,rx:5,color:#fff
    classDef component fill:#1a202c,stroke:#a0aec0,stroke-width:2px,rx:3,color:#fff
    classDef api fill:#3182ce,stroke:#90cdf4,stroke-width:2px,rx:3,color:#fff
    classDef core fill:#319795,stroke:#81e6d9,stroke-width:2px,rx:3,color:#fff
    classDef resource fill:#2f855a,stroke:#9ae6b4,stroke-width:2px,rx:3,color:#fff
    classDef tool fill:#805ad5,stroke:#d6bcfa,stroke-width:2px,rx:3,color:#fff

    class API,Core,Resources,Tools layer
    class MCP,Val api
    class GitService,ErrorService core
    class Repo,Diff,File,History resource
    class RepoTools,BranchTools,WorkdirTools,RemoteTools,AdvancedTools tool

核心组件:

  • MCP服务器:使用模型上下文协议SDK创建一个公开资源和工具的服务器
  • Git服务:简单git之上的抽象层,为git操作提供干净的接口
  • 资源:通过具有一致URI模板的MCP资源公开Git数据
  • 工具:通过具有明确模式的MCP工具公开Git操作
  • 错误处理:标准化错误处理和报告

特性

资源访问

通过MCP资源公开Git存储库信息:

  • 存储库信息:访问基本的Git存储库信息,包括当前分支、状态和参考详细信息
  • 存储库分支:使用当前分支指示符列出存储库中的所有分支
  • 存储库远程:列出所有已配置的远程存储库及其URL
  • 存储库标签:列出存储库中的所有标记及其引用
  • 文件内容:访问给定Git引用中特定文件的内容
  • 目录列表:查看特定路径和引用处的文件和目录列表
  • 差异:获取引用、非阶段性更改或阶段性更改之间的差异
  • 提交历史记录:查看包含作者、日期和消息信息的详细提交日志
  • 文件责任:查看逐行归因,显示最后修改每行的提交
  • 提交详细信息:访问有关特定提交的详细信息,包括差异更改

Git操作

通过MCP工具执行Git命令:

  • 存储库操作:初始化存储库,从远程克隆,检查存储库状态
  • 转移操作:创建分支、列出分支、签出、删除分支、合并
  • 工作目录操作:暂存文件、取消暂存文件、提交更改、创建差异
  • 远程操作:添加遥控器、列出遥控器、获取、拉取、推送
  • 高级操作:管理标签、隐藏更改、樱桃选择提交、重设分支、重置、清理

安装

先决条件

  • Node.js 16或更高版本
  • Git已安装并在PATH中可用

从NPM安装

npm install -g git-mcp-server

从源代码安装

git clone https://github.com/cyanheads/git-mcp-server.git
cd git-mcp-server
npm install
npm run build

用法

运行服务器

git-mcp-server

服务器使用模型上下文协议通过stdin/stdout进行通信,使其与任何MCP客户端兼容。

与Claude整合

添加到您的Claude配置文件中:

{
  "mcpServers": {
    "git": {
      "command": "git-mcp-server",
      "args": [],
      "env": {},
      "disabled": false
    }
  }
}

与其他MCP客户端集成

使用MCP检查器测试服务器:

npx @modelcontextprotocol/inspector git-mcp-server

项目结构

代码库遵循模块化结构:

git-mcp-server/
├── src/
│   ├── index.ts           # Entry point
│   ├── server.ts          # MCP server implementation
│   ├── resources/         # Resource implementations
│   │   ├── descriptors.ts # Resource URI templates
│   │   ├── diff.ts        # Diff-related resources
│   │   ├── file.ts        # File-related resources
│   │   ├── history.ts     # History-related resources
│   │   ├── index.ts       # Resource registration
│   │   └── repository.ts  # Repository resources
│   ├── services/          # Service implementations
│   │   ├── error-service.ts # Error handling
│   │   └── git-service.ts   # Git operations abstraction
│   ├── tools/             # Tool implementations
│   │   ├── advanced.ts    # Advanced Git operations
│   │   ├── branch.ts      # Branch operations
│   │   ├── index.ts       # Tool registration
│   │   ├── remote.ts      # Remote operations
│   │   ├── repository.ts  # Repository operations
│   │   └── workdir.ts     # Working directory operations
│   ├── types/             # Type definitions
│   │   └── git.ts         # Git-related types
│   └── utils/             # Utility functions
│       └── validation.ts  # Input validation
└── scripts/               # Development scripts

工具

Git MCP Server为Git操作提供了一套全面的工具:

存储库操作

工具 说明
git_init 使用裸存储库选项在指定路径初始化新的Git存储库。
git_clone 将Git存储库从远程URL克隆到具有分支和深度选项的本地路径。
git_status 获取Git存储库的当前状态,包括工作目录和暂存区的更改。

转移操作

工具 说明
git_branch_list 列出存储库中的所有分支,并提供包括远程分支的选项。
git_branch_create 创建一个新分支,其中包含指定起点和自动签出的选项。
git_checkout 签出分支、标记或提交,并带有在签出期间创建新分支的选项。
git_branch_delete 使用强制删除未合并分支的选项删除分支。
git_merge 使用可定制的提交消息和合并策略将分支合并到当前分支中。

工作目录操作

工具 说明
git_add 用于提交的阶段文件,支持单个文件或整个目录。
git_reset 使用特定文件或所有暂存更改的选项从暂存区域取消暂存文件。
git_commit 使用可自定义的提交消息、作者信息和修改选项提交分阶段更改。
git_diff_unstaged 使用特定文件的选项获取工作目录中所有未暂存更改的差异。
git_diff_staged 使用特定文件的选项获取索引中所有阶段性更改的差异。
git_reset_commit 将存储库重置为具有硬、软或混合模式选项的特定引用。
git_clean 使用目录选项从工作树中删除未跟踪的文件并强制清理。

远程操作

工具 说明
git_remote_add 使用名称和URL添加新的远程存储库
git_remote_list 列出所有已配置的远程存储库及其URL
git_fetch 使用特定分支的选项从远程存储库获取更新。
git_pull 从远程存储库中提取更改,并提供重基策略选项。
git_push 将本地更改推送到远程存储库,并提供强制推送和上游跟踪选项。

高级操作

工具 说明
git_tag_create 创建一个新标签,其中包含带消息的带注释标签的选项。
git_tag_list 列出存储库中的所有标记及其引用。
git_stash_create 使用未跟踪文件和描述的选项将更改保留在工作目录中。
git_stash_list 列出存储库中的所有存储及其描述。
git_stash_apply 应用隐藏的零钱,而不将其从隐藏列表中删除。
git_stash_pop 应用隐藏的零钱并将其从隐藏列表中删除。
git_cherry_pick 将特定提交的更改应用于当前分支。
git_rebase 使用交互模式选项将当前分支重新建立到另一个分支上。
git_log 使用可定制的输出格式和深度获取提交历史记录。
git_show 显示有关特定提交的详细信息,包括差异更改。

资源

Git MCP服务器通过标准MCP资源公开Git数据:

存储库资源

资源 描述
git://repo/{repoPath}/info Git存储库的基本信息,包括当前分支、状态和参考详细信息
git://repo/{repoPath}/branches 包含当前分支指示器的存储库中所有分支的列表
git://repo/{repoPath}/remotes 所有已配置的远程存储库及其URL列表
git://repo/{repoPath}/tags 存储库中所有标签及其引用的列表
git://repo/{repoPath}/file/{filePath}?ref={ref} 返回给定Git引用处特定文件的内容
git://repo/{repoPath}/ls/{dirPath}?ref={ref} 返回特定路径和引用处的文件和目录列表
git://repo/{repoPath}/diff/{fromRef}/{toRef}?path={path} 返回两个Git引用(提交、分支、标签)之间的差异
git://repo/{repoPath}/diff-unstaged?path={path} 返回工作目录中所有未暂存更改的差异
git://repo/{repoPath}/diff-staged?path={path} 返回索引中所有阶段性变化的差异
git://repo/{repoPath}/log?maxCount={maxCount}&file={file} 返回包含作者、日期和消息详细信息的提交历史日志
git://repo/{repoPath}/blame/{filePath} 逐行返回属性,显示最后修改每一行的提交
git://repo/{repoPath}/commit/{commitHash} 返回特定提交的详细信息,包括差异更改

发展

构建和测试

# Build the project
npm run build

# Watch for changes
npm run watch

# Test with MCP inspector
npm run inspector

# Clean build artifacts
npm run clean

# Rebuild completely
npm run rebuild

许可证

Apache许可证2.0-请参阅 许可证 了解详情。


Built with the Model Context Protocol