GitLab自动化服务器

基于模型上下文协议(MCP)的GitLab自动化服务器,用于简化的项目管理和开发工作流自动化。

  • by FalkoGuderian
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 FalkoGuderian/gitlab-mcp-server

使用说明

GitLab MCP 服务器

一个基于模型上下文协议(MCP)构建的全面GitLab自动化服务器,旨在简化项目管理和开发工作流自动化。

概述

GitLab MCP服务器提供了一套强大的工具,用于自动化GitLab操作,能够实现与开发工作流的无缝集成、智能任务分配以及分层项目管理。它支持管理员模式和非管理员模式,并根据用户权限提供不同的功能集。

特点/功能

核心能力

  • 问题管理利用智能自动化创建、分配、关闭并重新开启问题
  • 用户管理全面的用户操作与基于角色的访问控制
  • 项目管理项目全生命周期管理,包括成员管理

安装

先决条件

  • Python 3.8 或更高版本
  • 具有API访问权限的GitLab实例
  • 具有适当权限的GitLab个人访问令牌

设置步骤

  1. 克隆或下载服务器文件:

    # Files needed:
    # - gitlab-mcp-server.py
    # - gitlab-mcp-config.json
    
  2. 安装Python依赖项:

    pip install mcp
    
  3. 配置服务器: 编辑 gitlab-mcp-config.json 附上您的 GitLab 实例详细信息:

 {
   "gitlab_url": "https://your-gitlab-instance.com",
   "access_token": "your-gitlab-token",
   "default_project_id": 1,
   "default_user_id": 1
 }
  1. 设置环境变量(可选):

    export DEFAULT_GITLAB_PROJECT_ID=1
    export DEFAULT_GITLAB_USER_ID=1
    export GITLAB_MCP_ADMIN_MODE=false
    

    注: gitlab_url 并且 access_token 必须在……中进行配置 gitlab-mcp-config.json 文件,而非环境变量。

MCP配置

要将此GitLab MCP服务器与您的开发环境集成,请在MCP设置文件中添加以下配置(该文件通常位于 ~/.cline/mcp-settings.json 或者在你的集成开发环境(IDE)的MCP配置中:

{
  "mcpServers": {
    "gitlab": {
      "command": "python",
      "args": [
        "<base-directory>\\gitlab-mcp-server.py"
      ],
      "env": {
        "GITLAB_TOKEN": "your-gitlab-token-here",
        "GITLAB_URL": "http://localhost",
        "DEFAULT_GITLAB_PROJECT_ID": "4",
        "DEFAULT_GITLAB_USER_ID": "5",
        "GITLAB_MCP_ADMIN_MODE": "false"
      },
      "autoApprove": [
        "list_gitlab_users",
        "list_project_issues",
        "list_assignee_open_tasks"
      ],
      "disabled": false,
      "timeout": 60
    }
  }
}

额外的MCP服务器

该配置还支持额外的MCP服务器以增强功能:

Git 服务器

"github.com/modelcontextprotocol/servers/tree/main/src/git": {
  "command": "python",
  "args": ["-m", "mcp_server_git"],
  "autoApprove": [],
  "disabled": false,
  "timeout": 60
}

搜索服务器

"github.com/NightTrek/Serper-search-mcp": {
  "command": "node",
  "args": ["d:/Projects/mcp/serper-search-server/build/index.js"],
  "env": {
    "SERPER_API_KEY": "your-serper-api-key",
    "OPENROUTER_API_KEY": "your-openrouter-api-key"
  },
  "autoApprove": [],
  "disabled": false,
  "timeout": 60
}

配置选项

  • 自动批准无需手动审批即可执行的工具名称列表
  • 残疾的设置为 true 禁用服务器
  • 超时请求超时(秒)
  • **环境(env 为 environment 的缩写)**传递给服务器进程的环境变量

配置

基本配置(gitlab-mcp-config.json)

字段 描述 必填
gitlab_url 您的GitLab实例URL 是
access_token GitLab 个人访问令牌 是
default_project_id 操作的默认项目 否
default_user_id 分配任务的默认用户 否

访问令牌权限

为了实现全部功能,您的GitLab个人访问令牌应具备:

  • read_api - 读取API访问权限
  • read_user - 读取用户信息
  • read_repository - 读取仓库数据
  • write_repository - 写入仓库数据
  • api - 完全API访问权限(用于管理员操作)

管理员模式与非管理员模式

管理员模式 (admin_mode: true):

  • 完全访问所有工具
  • 可以删除问题
  • 能够管理所有项目和用户
  • 可以执行批量操作

非管理员模式 (admin_mode: false):

  • 仅限于与受让人相关的操作
  • 只能处理分配给我的问题
  • 无法删除问题
  • 无法访问用户管理工具

可用工具

问题管理工具

list_open_issues

获取分配给特定用户的未解决问题。

{
  "project_id": 4,
  "user_id": 5
}

list_closed_issues

获取分配给特定用户的已关闭问题。

{
  "project_id": 4,
  "user_id": 5
}

close_issue

关闭特定问题,并可选地添加评论。

{
  "project_id": 4,
  "issue_iid": 123,
  "comment": "Issue resolved successfully"
}

reopen_issue

重新打开一个已关闭的问题,并可选择添加评论。

{
  "project_id": 4,
  "issue_iid": 123,
  "comment": "Reopening for additional work"
}

create_bug

创建一个新的错误报告,并以“BUG: ”作为前缀。

{
  "project_id": 4,
  "title": "Login button not working",
  "description": "Users cannot log in when clicking the login button",
  "labels": ["bug", "urgent"],
  "assignee_id": 5
}

delete_all_project_issues (仅限管理员)

删除项目中的所有问题。

{
  "project_id": 4
}

用户管理工具(仅限管理员)

list_gitlab_users

获取GitLab实例中的所有用户。

list_project_issues

获取项目中的所有问题。

使用示例

创建错误报告

# Using the MCP server to create a bug
{
  "tool": "create_bug",
  "arguments": {
    "title": "Authentication failure on mobile devices",
    "description": "Users are experiencing login issues when accessing the application from mobile browsers.",
    "labels": ["bug", "mobile", "authentication"],
    "assignee_id": 5
  }
}

管理问题生命周期

# Close an issue with a comment
{
  "tool": "close_issue",
  "arguments": {
    "issue_iid": 123,
    "comment": "Fixed in commit abc123. Tested on multiple browsers."
  }
}

获取用户分配

# List all open issues for a specific user
{
  "tool": "list_open_issues",
  "arguments": {
    "user_id": 5
  }
}

开发工作流程

  1. 项目规划创建结构化的问题,并使用标签和里程碑进行组织
  2. 任务分配将问题分配给合适的团队成员
  3. 进度跟踪监控问题状态及完成情况
  4. 质量保证使用标签和里程碑进行组织

错误处理

服务器为以下情况提供全面的错误处理:

  • 网络问题与GitLab API的连接问题
  • 认证错误无效或过期的令牌
  • 权限错误操作权限不足
  • 验证错误无效参数或缺少必填字段

安全考虑因素

  • 安全地存储访问令牌(建议使用环境变量)
  • 为令牌使用最小必要权限
  • 仅在必要时启用管理员模式
  • 定期更换访问令牌
  • 监控API使用情况和速率限制

故障排除

常见问题

GitLab API 未配置

  • 确保 gitlab_url 并且 access_token 在配置中设置
  • 验证令牌是否具有所需的权限

“未提供项目ID”

  • 设置 default_project_id 在配置中或在工具参数中提供
  • 验证项目是否存在且可访问

“权限被拒绝”

  • 检查访问令牌权限
  • 验证用户是否可以访问指定项目
  • 考虑管理员模式的要求

调试模式

通过设置环境变量来启用调试日志记录:

export GITLAB_MCP_DEBUG=true

做出贡献

为服务器添加新工具以进行扩展:

  1. 在(相应位置)添加工具定义 handle_list_tools()
  2. 实现工具逻辑于 handle_call_tool()
  3. 如有需要,请更新配置模式
  4. 添加测试和文档

许可证

MIT 许可证 - 欢迎在您的应用程序中自由使用此项目。

支持

对于问题和疑问:

  • 查看故障排除部分
  • 验证您的GitLab实例配置
  • 确保所有先决条件都已满足
  • 审查访问令牌权限