使用说明
GitLab MCP服务器
可部署在Vercel上的模型上下文协议(MCP)服务器,将GitLab API作为工具公开。该服务器允许AI助手和其他MCP客户端与GitLab项目、问题、合并请求、分支、提交等进行交互。
特性
此MCP服务器提供以下GitLab API工具:
- 项目:列出并获取项目详细信息
- 问题:列出、获取和创建问题
- 合并请求:列出、获取和创建合并请求
- 分支:列出项目分支
- 提交:列出项目提交
- 用户:获取经过身份验证的用户信息
- 群组:列出GitLab组并获取组成员
先决条件
- 已安装Node.js 18+
- Vercel帐户
- 带有个人访问令牌的GitLab帐户
入门指南
1.克隆和安装
npm install
2.获取GitLab个人访问令牌
- 转到您的GitLab帐户设置
- 导航到“访问令牌”或“个人访问令牌”
- 创建具有以下作用域的新令牌:
api-API完全访问read_api-只读API访问(如果您只需要读取操作)
3.配置环境变量
必修的: 在Vercel中设置以下环境变量:
GITLAB_TOKEN-您的GitLab个人访问令牌:
vercel env add GITLAB_TOKEN
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(可选):用于筛选项目的组IDowned(可选):仅限于自有项目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(可选):里程碑IDdueDate(可选):到期日(YYYY-MM-DD)
list_gitlab_merge_requests
列出项目的合并请求。
参数:
projectId(必填):项目ID或路径state(可选):按状态筛选(打开、关闭、锁定、合并、全部)labels(可选):逗号分隔的标签名称authorId(可选):按作者筛选assigneeId(可选):按受让人筛选search(可选):搜索MRperPage(可选):每页结果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(可选):受让人用户IDassigneeIds(可选):受让人用户ID数组reviewerIds(可选):审阅者用户ID数组labels(可选):逗号分隔的标签名称milestoneId(可选):里程碑IDremoveSourceBranch(可选):合并请求时删除源分支squash(可选):合并时将提交压缩为单个提交
list_gitlab_branches
列出项目的分支。
参数:
projectId(必填):项目ID或路径search(可选):按名称搜索分支perPage(可选):每页结果page(可选):页码
list_gitlab_commits
列出项目的提交。
参数:
projectId(必填):项目ID或路径refName(可选):分支、标记或提交SHAsince(可选):仅在此日期之后提交(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(可选):页码
安全考虑
-
MCP服务器保护:MCP服务器需要Bearer令牌进行身份验证。这可以保护您的服务器免受未经授权的访问。为生成一个强随机令牌
SERVER_BEARER_TOKEN. -
安全地存储令牌GitLab令牌和MCP Bearer令牌都存储在Vercel的环境变量中,这些变量是加密的,永远不会在您的代码或日志中公开。
-
从不提交代币:永远不要承诺你的
.env在代码中文件或硬编码标记。使用Vercel的环境变量功能。 -
令牌范围:为您的GitLab令牌使用所需的最小令牌范围。对于只读操作,请使用
read_api而不是api. -
仅限HTTPS:部署到Vercel时始终使用HTTPS以确保安全通信。
-
速率限制:请注意GitLab的API速率限制。服务器将通过GitLab的任何速率限制错误。
-
单独的关注点:The
SERVER_BEARER_TOKEN用于保护对MCP服务器的访问,同时GITLAB_TOKEN用于GitLab API身份验证。保持它们分开和安全。
本地开发
要在本地进行测试:
# Install dependencies
npm install
# Run Vercel dev server
npm run dev
服务器将在以下时间可用 http://localhost:3000/api.
故障排除
常见问题
-
401未经授权:检查您的GitLab私有令牌是否有效并且具有正确的作用域。
-
404未找到:验证项目ID或路径是否正确。项目路径应采用URL编码(例如,“组%2Project”)。
-
速率限制错误:GitLab有速率限制。请稍候,然后重试或使用具有更高速率限制的令牌。
-
CORS问题:如果从浏览器访问,请确保在MCP客户端中正确配置了CORS。
许可证
麻省理工学院
