GitLab API服务器

一个部署在Vercel上的模型上下文协议(MCP)服务器,将GitLab API作为工具暴露,允许AI助手和其他MCP客户端与GitLab项目、问题、合并请求等进行交互。

  • by brianleke
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 brianleke/gitlab-mcp

使用说明

GitLab MCP服务器

可部署在Vercel上的模型上下文协议(MCP)服务器,将GitLab API作为工具公开。该服务器允许AI助手和其他MCP客户端与GitLab项目、问题、合并请求、分支、提交等进行交互。

特性

此MCP服务器提供以下GitLab API工具:

  • 项目:列出并获取项目详细信息
  • 问题:列出、获取和创建问题
  • 合并请求:列出、获取和创建合并请求
  • 分支:列出项目分支
  • 提交:列出项目提交
  • 用户:获取经过身份验证的用户信息
  • 群组:列出GitLab组并获取组成员

先决条件

  • 已安装Node.js 18+
  • Vercel帐户
  • 带有个人访问令牌的GitLab帐户

入门指南

1.克隆和安装

npm install

2.获取GitLab个人访问令牌

  1. 转到您的GitLab帐户设置
  2. 导航到“访问令牌”或“个人访问令牌”
  3. 创建具有以下作用域的新令牌:
    • api -API完全访问
    • read_api -只读API访问(如果您只需要读取操作)

3.配置环境变量

必修的: 在Vercel中设置以下环境变量:

  1. GITLAB_TOKEN -您的GitLab个人访问令牌:
vercel env add GITLAB_TOKEN
  1. SERVER_BEARER_TOKEN -用于保护访问MCP服务器的安全令牌:
vercel env add SERVER_BEARER_TOKEN

使用以下方法生成安全随机令牌:

openssl rand -hex 32

或者使用任何安全的随机字符串生成器。

可选: 如果你使用的是自托管的GitLab实例,还可以设置 GITLAB_API_URL 环境变量:

vercel env add GITLAB_API_URL

或者在Vercel仪表板的“项目设置”>“环境变量”下设置这些参数。

4.部署到Vercel

# Install Vercel CLI if you haven't already
npm i -g vercel

# Deploy
vercel deploy

或者通过Vercel仪表板将您的存储库连接到Vercel以进行自动部署。

5.配置您的MCP客户端

部署后,配置MCP客户端以连接到Vercel部署。端点将是:

https://your-project.vercel.app/api/mcp

身份验证: MCP服务器受承载令牌身份验证的保护。包括 SERVER_BEARER_TOKEN 在 Authorization 发出请求时的header:

Authorization: Bearer your-server-bearer-token-here

GitLab令牌通过环境变量配置,并自动用于GitLab API调用,因此在调用工具时不需要传递它。

可用工具

list_gitlab_projects

列出经过身份验证的用户或特定组中可访问的所有项目。

参数:

  • groupId (可选):用于筛选项目的组ID
  • owned (可选):仅限于自有项目
  • starred (可选):仅限于星级项目
  • search (可选):按名称搜索项目
  • perPage (可选):每页结果
  • page (可选):页码

get_gitlab_project

获取特定项目的详细信息。

参数:

  • projectId (必填):项目ID或路径(例如“组/项目”)

list_gitlab_issues

列出项目的问题。

参数:

  • projectId (必填):项目ID或路径
  • state (可选):按状态过滤(打开、关闭、全部)
  • labels (可选):逗号分隔的标签名称
  • assigneeId (可选):按受让人筛选
  • milestone (可选):按里程碑筛选
  • search (可选):搜索问题
  • perPage (可选):每页结果
  • page (可选):页码

get_gitlab_issue

获取有关特定问题的详细信息。

参数:

  • projectId (必填):项目ID或路径
  • issueIid (必填):问题IID(内部ID)

create_gitlab_issue

在项目中创建新问题。

参数:

  • projectId (必填):项目ID或路径
  • title (必填):发行标题
  • description (可选):问题描述
  • labels (可选):逗号分隔的标签名称
  • assigneeIds (可选):用户ID数组
  • milestoneId (可选):里程碑ID
  • dueDate (可选):到期日(YYYY-MM-DD)

list_gitlab_merge_requests

列出项目的合并请求。

参数:

  • projectId (必填):项目ID或路径
  • state (可选):按状态筛选(打开、关闭、锁定、合并、全部)
  • labels (可选):逗号分隔的标签名称
  • authorId (可选):按作者筛选
  • assigneeId (可选):按受让人筛选
  • search (可选):搜索MR
  • perPage (可选):每页结果
  • page (可选):页码

get_gitlab_merge_request

获取特定合并请求的详细信息。

参数:

  • projectId (必填):项目ID或路径
  • mergeRequestIid (必填):MR IID(内部ID)

create_gitlab_merge_request

在GitLab项目中创建新的合并请求。

参数:

  • projectId (必填):项目ID或路径
  • sourceBranch (必填):源分支名称
  • targetBranch (必填):目标分支名称(通常为main或master)
  • title (必填):合并请求标题
  • description (可选):合并请求描述
  • targetProjectId (可选):目标项目ID(用于跨项目合并请求)
  • assigneeId (可选):受让人用户ID
  • assigneeIds (可选):受让人用户ID数组
  • reviewerIds (可选):审阅者用户ID数组
  • labels (可选):逗号分隔的标签名称
  • milestoneId (可选):里程碑ID
  • removeSourceBranch (可选):合并请求时删除源分支
  • squash (可选):合并时将提交压缩为单个提交

list_gitlab_branches

列出项目的分支。

参数:

  • projectId (必填):项目ID或路径
  • search (可选):按名称搜索分支
  • perPage (可选):每页结果
  • page (可选):页码

list_gitlab_commits

列出项目的提交。

参数:

  • projectId (必填):项目ID或路径
  • refName (可选):分支、标记或提交SHA
  • since (可选):仅在此日期之后提交(ISO 8601)
  • until (可选):仅在此日期之前提交(ISO 8601)
  • path (可选):仅影响此路径的提交
  • author (可选):按作者电子邮件筛选
  • perPage (可选):每页结果
  • page (可选):页码

get_gitlab_user

获取有关已验证用户的信息。

参数: 无

list_gitlab_groups

列出经过身份验证的用户可访问的GitLab组。

参数:

  • search (可选):按名称或路径搜索组
  • owned (可选):限制为拥有的组
  • perPage (可选):每页结果
  • page (可选):页码

get_gitlab_group_members

获取属于GitLab组的用户(成员)。

参数:

  • groupId (必填):组ID或路径
  • includeInherited (可选):包括从父组继承的成员
  • query (可选):通过用户名或电子邮件搜索成员
  • perPage (可选):每页结果
  • page (可选):页码

安全考虑

  1. MCP服务器保护:MCP服务器需要Bearer令牌进行身份验证。这可以保护您的服务器免受未经授权的访问。为生成一个强随机令牌 SERVER_BEARER_TOKEN.

  2. 安全地存储令牌GitLab令牌和MCP Bearer令牌都存储在Vercel的环境变量中,这些变量是加密的,永远不会在您的代码或日志中公开。

  3. 从不提交代币:永远不要承诺你的 .env 在代码中文件或硬编码标记。使用Vercel的环境变量功能。

  4. 令牌范围:为您的GitLab令牌使用所需的最小令牌范围。对于只读操作,请使用 read_api 而不是 api.

  5. 仅限HTTPS:部署到Vercel时始终使用HTTPS以确保安全通信。

  6. 速率限制:请注意GitLab的API速率限制。服务器将通过GitLab的任何速率限制错误。

  7. 单独的关注点:The SERVER_BEARER_TOKEN 用于保护对MCP服务器的访问,同时 GITLAB_TOKEN 用于GitLab API身份验证。保持它们分开和安全。

本地开发

要在本地进行测试:

# Install dependencies
npm install

# Run Vercel dev server
npm run dev

服务器将在以下时间可用 http://localhost:3000/api.

故障排除

常见问题

  1. 401未经授权:检查您的GitLab私有令牌是否有效并且具有正确的作用域。

  2. 404未找到:验证项目ID或路径是否正确。项目路径应采用URL编码(例如,“组%2Project”)。

  3. 速率限制错误:GitLab有速率限制。请稍候,然后重试或使用具有更高速率限制的令牌。

  4. CORS问题:如果从浏览器访问,请确保在MCP客户端中正确配置了CORS。

许可证

麻省理工学院