GitLab API交互服务器

GitLab MCP服务器是一个用于与GitLab API交互的工具集,支持对GitLab仓库、问题、合并请求等执行同步和异步操作。

  • by Adit-999
  • Python
  • 本地部署
  • 8 星标
  • 更新于
在 GitHub 查看 Adit-999/gitlab-mcp

使用说明

GitLab MCP服务器

用于与GitLab API交互的MCP(模型上下文协议)服务器。该服务器提供了一组工具,允许AI客户端对GitLab存储库、问题、合并请求等执行操作。所有操作都支持同步和异步执行模式。

安装

使用紫外线(推荐)

# Clone the repository
git clone https://github.com/Adit-999/gitlab-mcp.git
cd gitlab-mcp

# Install dependencies using uv
uv sync

使用pip

# Clone the repository
git clone https://github.com/Adit-999/gitlab-mcp.git
cd gitlab-mcp

# Create and activate a virtual environment
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install dependencies
pip install -e .

配置

GitLab MCP服务器需要两个环境变量才能正常运行:

  1. GITLAB_PERSONAL_ACCESS_TOKEN -用于使用GitLab API进行身份验证
  2. GITLAB_API_URL -GitLab API的基本URL

选项1:环境变量

创建一个 .env 项目根目录中包含以下变量的文件:

GITLAB_PERSONAL_ACCESS_TOKEN=your_personal_access_token
GITLAB_API_URL=https://gitlab.com

选项2:MCP配置

您还可以在MCP JSON配置文件中配置MCP服务器:

{
  "mcpServers": {
    "gitlab-mcp": {
      "command": "uv",
      "args": ["run", "--with", "mcp[cli]", "mcp", "run", "/path/to/gitlab-mcp/server.py"],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "your_personal_access_token",
        "GITLAB_API_URL": "https://gitlab.com"
      }
    }
  }
}

为Claude Desktop配置uv

uv run mcp install server.py

项目结构

该项目遵循模块化、领域驱动的架构:

gitlab-mcp/
├── src/                           # Source code
│   ├── api/                       # API interaction layer
│   │   ├── rest_client.py         # GitLab REST API client
│   │   ├── exceptions.py          # API exception definitions
│   ├── schemas/                   # Data models and validation
│   │   ├── base.py                # Base schema classes
│   │   ├── repositories.py        # Repository data models
│   │   ├── branches.py            # Branch data models
│   │   ├── issues.py              # Issue data models
│   │   ├── merge_requests.py      # Merge request data models
│   │   ├── groups.py              # Group data models
│   │   └── search.py              # search data models
│   ├── services/                  # Business logic layer
│   │   ├── repositories.py        # Repository operations
│   │   ├── branches.py            # Branch operations
│   │   ├── issues.py              # Issue operations
│   │   ├── merge_requests.py      # Merge request operations
│   │   ├── groups.py              # Group operations
│   │   └── search.py              # search operations
│   └── tools/                     # MCP tool implementations
│       ├── repositories.py        # Repository tools
│       ├── branches.py            # Branch tools
│       ├── issues.py              # Issue tools
│       ├── merge_requests.py      # Merge request tools
│       ├── groups.py              # Group tools
│       └── search.py              # search tools
├── server.py                      # Main MCP server entry point

这种架构提供了几个好处:

  • 关注点分离:每个模块都有明确的职责
  • 类型安全性:Pydantic模式确保数据验证
  • 可维护性:域驱动的组织使代码更易于导航
  • 可扩展性:可以按照既定模式添加新功能
  • 异步支持:所有操作都有同步和异步版本

可用工具

服务器提供了以下与GitLab交互的工具:

库管理

  • create_repository:创建一个新的GitLab仓库
  • list_repository_tree:列出存储库树的内容

转移操作

  • create_branch:在GitLab存储库中创建一个新分支
  • list_branches:列出GitLab存储库中的分支
  • get_branch:获取特定GitLab分支的详细信息
  • delete_branch:从GitLab存储库中删除分支
  • delete_merged_branches:从GitLab存储库中删除所有合并的分支
  • protect_branch:保护GitLab存储库中的分支
  • unprotect_branch:从GitLab存储库中的分支中删除保护
  • get_default_branch_ref:获取GitLab存储库的默认分支引用

文件操作

  • create_file:在GitLab存储库中创建一个新文件
  • get_file_contents:从GitLab存储库检索文件内容
  • update_file:更新GitLab存储库中的现有文件
  • delete_file:从GitLab存储库中删除文件

问题管理

  • create_issue:在GitLab存储库中创建新问题
  • list_all_issues:列出经过身份验证的用户有权访问的所有问题
  • get_issue:获取特定GitLab问题的详细信息
  • close_issue:关闭GitLab问题
  • delete_issue:从GitLab存储库中删除问题
  • move_issue:将问题转移到其他项目
  • comment_on_issue:在GitLab问题中添加评论
  • list_issue_comments:列出GitLab问题的评论

合并请求操作

  • create_merge_request:在GitLab存储库中创建新的合并请求
  • list_merge_requests:列出GitLab项目的合并请求
  • get_merge_request:获取特定GitLab合并请求的详细信息
  • merge_merge_request:合并GitLab合并请求
  • update_merge_request:更新GitLab存储库中的现有合并请求。
  • delete_merge_request:从GitLab存储库中删除合并请求。
  • merge_request_changes:获取特定合并请求的更改。
  • create_merge_request_comment:在GitLab合并请求中添加注释。

作业操作

  • get_job_logs:从GitLab作业获取日志

组操作

  • list_groups:列出GitLab组
  • get_group:获取特定的GitLab组
  • get_group_by_project_namespace:基于项目命名空间获取GitLab组

搜索工具

  • search_globally:搜索所有GitLab资源(目前支持项目和文件/blobs)。
  • search_project:在特定项目内搜索(目前支持项目和文件/bobs)。
  • search_group:在特定组内搜索(目前支持项目和文件/bobs)。

故障排除

常见问题

  • GitLab API身份验证错误:确保您的 GITLAB_PERSONAL_ACCESS_TOKEN 具有必要的权限,并在环境变量中正确设置。
  • 非类型错误:处理空结果时,某些函数可能会遇到问题。如果您遇到这些错误,请报告并详细说明重现步骤。

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。