GitLab MCP服务器

基于python-gitlab的GitLab MCP服务器,提供项目、代码和合并请求分析等功能。

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

使用说明

mcp gitlab服务器

⚠️ 开发阶段通知
该项目目前正在进行中 发展阶段。功能和API可能会更改,恕不另行通知。在生产环境中小心使用。

基于GitLab MCP服务器 python gitlab.

安装

使用个人访问令牌(最常见)

{
  "mcpServers": {
    "GitLab": {
      "command": "uvx",
      "args": [
        "gitlab-mcp-server"
      ],
      "env": {
        "GITLAB_TOKEN": "<your GitLab personal access token>",
        "GITLAB_URL": "https://gitlab.com"
      }
    }
  }
}

使用OAuth2令牌

{
  "mcpServers": {
    "GitLab": {
      "command": "uvx",
      "args": [
        "gitlab-mcp-server"
      ],
      "env": {
        "GITLAB_OAUTH_TOKEN": "<your GitLab OAuth2 token>",
        "GITLAB_URL": "https://gitlab.com"
      }
    }
  }
}

对于自托管的GitLab实例,设置 GITLAB_URL 到您的GitLab实例URL(例如。, https://gitlab.example.com).如果未设置,则默认为 https://gitlab.com.

认证

此MCP服务器支持两种身份验证方法:

方法1:个人访问令牌(建议大多数用户使用)

  1. 创建GitLab个人访问令牌:

    • 转到GitLab→ 用户设置→ 访问令牌
    • 使用创建令牌 read_api 范围(最低要求)
  2. 设置 GITLAB_TOKEN 将环境变量设置为令牌值

方法2:OAuth2令牌(适用于OAuth2应用程序)

  1. 如果你有一个来自GitLab OAuth2应用程序流的OAuth2令牌
  2. 设置 GITLAB_OAUTH_TOKEN 将环境变量设置为OAuth2令牌值

要创建OAuth2应用程序,请执行以下操作:

  1. 转到GitLab→ 用户设置→ 应用程序
  2. 创建具有适当作用域的新应用程序(read_api 最小值)
  3. 使用OAuth2流获取访问令牌
  4. 将该令牌用作 GITLAB_OAUTH_TOKEN

环境变量

  • GITLAB_TOKEN -您的GitLab个人访问令牌(如果使用个人令牌身份验证)
  • GITLAB_OAUTH_TOKEN -您的GitLab OAuth2令牌(如果使用OAuth2认证)
  • GITLAB_URL -GitLab实例URL(默认为 https://gitlab.com)

注: 服务器将首先检查 GITLAB_OAUTH_TOKEN,如果未找到,将使用 GITLAB_TOKEN。你只需要设置其中一个。

工具

存储库和项目管理

  • list_项目 -列出经过身份验证的用户可以访问的GitLab项目(支持按拥有/星号和分页进行过滤)
  • list_groups -列出经过身份验证的用户可访问的GitLab组
  • list_group_projects -列出特定GitLab组中的所有项目
  • get_user_info -获取已验证用户的信息
  • search_repositories -按名称、描述或关键字搜索GitLab存储库
  • get_pository_details -获取特定存储库的详细信息

代码访问

  • read_repository_code -使用筛选选项阅读存储库的完整代码结构和内容
  • read_repository_file -从存储库中读取特定文件的内容

合并请求分析

  • list_merge_requests -列出存储库的合并请求,并按状态、顺序和分页进行筛选
  • get_merge_request_analytics -计算全面的合并请求生命周期统计数据,包括从创建到合并的平均时间

存储库代码读取功能

MCP服务器提供强大的代码读取功能:

read_repository_code

使用高级筛选读取整个存储库结构和文件内容:

  • 选择性阅读:使用glob模式包含/排除文件(例如。, *.py,*.js 或排除 *.log,node_modules/*)
  • 大小限制:控制要读取的最大文件数和文件大小限制,以防止压倒性的响应
  • 分支/标签支持:从任何分支、标记或提交SHA读取
  • 目录筛选:关注存储库中的特定目录
  • 智能过滤:自动排除常见的构建工件、日志和二进制文件

示例用法:

  • 只读Python文件: include_patterns: "*.py"
  • 排除测试: exclude_patterns: "*test*,*spec*"
  • 读取特定目录: path: "src/"
  • 不同分支: ref: "develop"

read_repository_file

从存储库读取单个文件:

  • 单文件访问:快速获取特定文件的内容
  • 包含元数据:文件大小、编码、上次提交信息
  • 二进制检测:安全处理二进制文件
  • 灵活的参考:适用于分支、标签或提交SHA

限制和安全:

  • 默认值:最多50个文件,每个文件100KB
  • 可配置的限制以防止超时
  • 自动二进制文件检测
  • 为大型存储库提供优雅的错误处理

合并请求分析功能

MCP服务器提供全面的合并请求分析功能:

list_merge_requests

列出具有高级筛选和排序功能的合并请求:

  • 状态筛选:按州筛选(opened, closed, merged, all)
  • 灵活排序:按创建日期、更新日期或标题排序
  • 元数据:包括作者、受让人、审阅者、标签和投票信息
  • 分页支持:控制返回的结果数量

get_merge_request_analytics

计算详细的合并请求生存期统计信息:

  • 寿命分析:从创建到合并的平均时间、中位数、最小/最大时间
  • 统计分布:第25、75和90百分位分析
  • 时间段控制:分析过去N天的MR(默认值:90天)
  • 详细细分:具有精确寿命计算的单个MR详细信息
  • 多个时间单位:结果以小时和天为单位提供

您可以回答的示例问题:

  • “acapulco存储库中MR的平均寿命是多少?”
  • “合并请求通常需要多长时间才能合并?”
  • “合并请求生命周期的分布是什么?”
  • “哪些合并请求合并时间最长?”

分析输出:

  • 平均、中值、最小、最大合并时间
  • 百分位数分析(第25、75、90位)
  • 具有单独生命周期的合并请求示例
  • 完整的数据集以供进一步分析

发展

# Clone the repository
git clone <repo-url>
cd gitlab-mcp-server

# Install dependencies
uv sync

# Run in development mode
uv run python -m mcp_gitlab_server

测试配置

出于开发和测试目的,您可以使用本地wheel文件安装:

MCP测试配置:

{
  "mcpServers": {
    "GitLab": {
      "command": "uvx",
      "args": [
        "--from", "/path/to/your/gitlab-mcp-server/dist/mcp_gitlab_server-0.1.0-py3-none-any.whl",
        "gitlab-mcp-server"
      ],
      "env": {
        "GITLAB_TOKEN": "your-gitlab-token-here",
        "GITLAB_URL": "https://gitlab.com"
      }
    }
  }
}

构建和测试步骤:

# Build the wheel file
uv build

# Test with MCP client (like Claude Desktop)
# Update your MCP configuration with the local wheel path
# The wheel file will be in ./dist/ directory

# For quick testing, verify the server starts:
uv run python -m mcp_gitlab_server