项目简介

GitLab Zero-Leak MCP Server 是一个基于 Model Context Protocol (MCP) 构建的应用后端,专为 Claude Desktop 或其他 LLM 应用设计。它作为一个安全增强的 GitLab API 接口,允许 LLM 安全地与自托管的 GitLab 实例交互,同时最大限度地减少源代码泄露的风险。该服务器默认禁用所有读取源代码的操作,并通过项目级白名单来控制数据访问,确保敏感代码的安全。

主要功能点

  • 安全加固: 默认禁用 'get_file_contents' 等源代码读取操作,防止 LLM 客户端访问源代码。
  • 零读取策略: 默认情况下,所有读取操作都被禁用,需要显式配置允许读取的项目。
  • 项目级白名单: 通过 'ALLOWED_READ_PROJECTS' 环境变量配置允许读取的项目白名单,细粒度控制数据访问权限。
  • 工具集成: 提供一系列预定义的工具,允许 LLM 执行 GitLab 操作,如创建/更新文件、搜索仓库、创建 Issue 和 Merge Request 等。
  • Docker 部署: 支持 Docker 容器化部署,方便快捷地进行本地或服务器部署。
  • 兼容 Claude/Desktop: 作为 MCP 服务器实现,可直接与 Claude Desktop 等 LLM 客户端集成。
  • 审计日志: 提供全面的操作审计日志,记录所有工具调用和访问控制决策,方便安全审计和问题排查。

安装步骤

  1. 克隆仓库:

    git clone https://github.com/JerryR7/gitlab-zero-leak-mcp.git
    cd gitlab-zero-leak-mcp
  2. 配置环境变量: 复制 '.env.example' 文件并创建 '.env' 文件,根据需要修改以下环境变量:

    GITLAB_PERSONAL_ACCESS_TOKEN=your_token_here  # 替换为你的 GitLab Personal Access Token
    GITLAB_API_URL=https://gitlab.com/api/v4      # GitLab API 地址,通常为 https://gitlab.com/api/v4 或你的自托管 GitLab 实例地址
    DISABLED_HANDLERS=get_file_contents          # 默认禁用 get_file_contents,可根据需要添加其他禁用的工具,用逗号分隔
    ALLOWED_READ_PROJECTS=your-group/public-repo # 允许读取的项目,用逗号分隔

    注意:

    • 'GITLAB_PERSONAL_ACCESS_TOKEN' 需要具有访问 GitLab API 的权限,建议使用最小权限原则创建 Token。
    • 'ALLOWED_READ_PROJECTS' 配置允许 'get_file_contents' 等读取操作访问的项目,如果不需要读取操作,可以留空。
    • 请勿将 '.env' 文件提交到版本控制系统,避免泄露敏感信息。
  3. Docker 构建和运行:

    docker build -t gitlab-zero-leak-mcp .
    docker run -i --env-file .env gitlab-zero-leak-mcp

    或者使用 Docker Compose 部署:

    docker-compose up -d

服务器配置 (MCP 客户端配置)

要将 GitLab Zero-Leak MCP Server 集成到 MCP 客户端(例如 Claude Desktop),您需要配置 MCP 服务器的启动命令和参数。以下是两种常用的配置方式,您可以根据您的部署方式选择合适的配置:

Docker 部署配置 (推荐):

{
  "mcpServers": {
    "gitlab-zero-leak": {  // 服务器名称,可以自定义
      "command": "docker",  // 启动命令,使用 docker
      "args": [             // 启动参数
        "run",
        "--rm",           // 容器退出后自动删除
        "-i",             // 保持 STDIN 打开
        "-e", "GITLAB_PERSONAL_ACCESS_TOKEN=<YOUR_TOKEN>", // 传递 GitLab Token 环境变量,请替换 <YOUR_TOKEN> 为您的 Token
        "-e", "GITLAB_API_URL=https://gitlab.com/api/v4", // 传递 GitLab API URL 环境变量,如果使用自托管 GitLab,请修改为您的实例地址
        "-e", "DISABLED_HANDLERS=get_file_contents",      // 传递禁用 handlers 环境变量,默认禁用 get_file_contents
        "-e", "ALLOWED_READ_PROJECTS=your-org/public-repo,your-org/docs-repo", // 传递允许读取项目环境变量,请根据需要配置
        "gitlab-zero-leak-mcp" // Docker 镜像名称,与 docker build 命令中指定的名称一致
      ]
    }
  }
}

NPX 部署配置:

如果您选择使用 'npx' 运行服务器 (需要 Node.js 环境),可以使用以下配置:

{
  "mcpServers": {
    "gitlab-zero-leak": {  // 服务器名称,可以自定义
      "command": "npx",     // 启动命令,使用 npx
      "args": [              // 启动参数
        "-y",              // 自动确认安装
        "gitlab-zero-leak-mcp" // 使用 npx 运行 gitlab-zero-leak-mcp
      ],
      "env": {               // 环境变量配置
        "GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>", // 传递 GitLab Token 环境变量,请替换 <YOUR_TOKEN> 为您的 Token
        "GITLAB_API_URL": "https://gitlab.com/api/v4",    // 传递 GitLab API URL 环境变量,如果使用自托管 GitLab,请修改为您的实例地址
        "DISABLED_HANDLERS": "get_file_contents",         // 传递禁用 handlers 环境变量,默认禁用 get_file_contents
        "ALLOWED_READ_PROJECTS": "your-org/public-repo,your-org/docs-repo" // 传递允许读取项目环境变量,请根据需要配置
      }
    }
  }
}

配置说明:

  • 'mcpServers': MCP 客户端服务器配置的根节点。
  • 'gitlab-zero-leak': 您为该 MCP 服务器定义的名称,在客户端中引用时使用。
  • 'command': 启动服务器的命令,例如 'docker' 或 'npx'。
  • 'args': 传递给启动命令的参数,例如 Docker 镜像名称、环境变量等。
  • 'env': (仅 NPX 配置) 以键值对形式定义的环境变量。

请将以上 JSON 配置添加到您的 MCP 客户端配置文件中 (例如 Claude Desktop 的 'claude_desktop_config.json'),并根据您的实际情况修改 '<YOUR_TOKEN>' 和其他环境变量的值。

基本使用方法

配置完成后,您的 LLM 客户端 (如 Claude Desktop) 即可通过 MCP 协议与 GitLab Zero-Leak MCP Server 通信,并调用预定义的工具来执行 GitLab 操作。具体的使用方法取决于您的 LLM 客户端的功能和界面。通常,您可以在 LLM 的配置或设置中找到 MCP 服务器的配置选项,并根据客户端的提示进行操作。

例如,在 Claude Desktop 中,您可以在 "Preferences" -> "MCP Servers" 中添加和配置 GitLab Zero-Leak MCP Server。配置完成后,您可以在与 Claude 的对话中使用工具,例如让 Claude 创建 Issue、搜索仓库或更新文件等。

示例工具:

  • 'search_repositories': 搜索 GitLab 仓库,例如:'搜索关于 "自然语言处理" 的仓库'
  • 'create_issue': 在指定 GitLab 项目中创建 Issue,例如:'在项目 "your-group/your-project" 中创建一个标题为 "修复 Bug" 的 Issue'
  • 'create_or_update_file': 在指定 GitLab 项目中创建或更新文件,例如:'在项目 "your-group/your-project" 的 "main" 分支的 "README.md" 文件中添加 "欢迎使用!"'

请参考仓库的 README.md 文件和源代码,了解更多工具的详细信息和使用方法。

信息

分类

开发者工具