关于 GitLab MCP Server
GitLab MCP Server 将 GitLab 项目和群组操作提供给 MCP 客户端。它涵盖仓库、文件、议题、合并请求、标签及项目和群组级里程碑,并支持批量文件变更和自动创建分支。
主要功能
- 01搜索、创建和派生仓库
- 02创建、读取文件及批量推送
- 03管理分支、议题和合并请求
- 04管理标签与项目里程碑
- 05管理跨项目的群组里程碑
适用场景
- 01创建或更新单个及多个项目文件
- 02通过 MCP 客户端跟进议题和合并请求
- 03协调 GitLab 群组内多个项目的里程碑
MCP 相关
该服务将 GitLab API 操作接入 MCP 客户端,提供项目、仓库、议题、合并请求、标签和里程碑工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
GitLab MCP 服务
用于 GitLab API 的 MCP 服务,支持项目管理、文件操作等功能。派生自 https://github.com/modelcontextprotocol
目录
安装
NPX(推荐)
npx @therealchristhomas/gitlab-mcp-server
全局安装
npm install -g @therealchristhomas/gitlab-mcp-server
gitlab-mcp
功能
- 自动创建分支:创建或更新文件,或推送更改时,如果分支不存在则自动创建
- 全面的错误处理:针对常见问题提供清晰的错误消息
- 保留 Git 历史记录:操作会妥善保留 Git 历史记录,不会强制推送
- 批量操作:支持单文件和多文件操作
- 项目工作流管理:通过标签和里程碑管理,更好地组织项目
- 仓库管理:搜索、创建和派生 GitLab 项目
- 文件操作:创建、更新和获取文件内容
- 分支管理:创建分支并管理仓库结构
- 议题管理:创建、列出、更新、搜索议题并发表评论
- 合并请求管理:列出、更新、合并合并请求并发表评论
- 标签管理:创建、更新和删除项目标签
- 项目里程碑:创建、更新和删除项目级里程碑
- 群组里程碑:创建、更新和删除跨多个项目的群组级里程碑
群组里程碑与项目里程碑
此服务同时支持项目里程碑和群组里程碑:
项目里程碑
- 仅适用于单个项目
- 使用工具:
list_milestones、create_milestone、update_milestone、delete_milestone - 示例:跟踪
my-webapp项目的功能
群组里程碑
- 涵盖群组内的多个项目
- 使用工具:
list_group_milestones、create_group_milestone、update_group_milestone、delete_group_milestone - 支持使用
include_ancestors、include_descendants进行高级筛选 - 示例:跟踪
my-webapp、my-api和my-admin的版本发布
群组里程碑示例
列出群组里程碑
{
"group_id": "my-organization",
"state": "active",
"include_descendants": true
}
创建群组里程碑
{
"group_id": "my-organization",
"title": "Q1 2025 Release",
"description": "Major feature release including new tools and performance improvements",
"due_date": "2025-03-31",
"start_date": "2025-01-01"
}
高级群组里程碑搜索
{
"group_id": "my-organization/core",
"search": "release",
"include_ancestors": true,
"updated_after": "2024-01-01T00:00:00Z"
}
根据 GitLab 群组里程碑 API,群组里程碑非常适合在组织内的多个项目之间协调发布和功能开发。
实用工作流:查找群组并创建里程碑
以下是使用群组里程碑的典型工作流:
1. 搜索群组
首先,找到你要操作的群组:
{
"search": "my-organization",
"owned": true
}
2. 列出现有的群组里程碑
查看已存在的里程碑:
{
"group_id": "my-organization",
"state": "active"
}
3. 创建群组里程碑
创建一个覆盖多个项目的里程碑:
{
"group_id": "my-organization",
"title": "Q1 2025 Release",
"description": "Cross-project release including webapp, API, and admin features",
"due_date": "2025-03-31"
}
对于同一群组下有多个相关项目的大型组织,此工作流尤其有用。
工具
文件操作
-
create_or_update_file- 在项目中创建或更新单个文件
- 输入:
project_id(string):项目 ID 或经过 URL 编码的路径file_path(string):创建或更新文件的位置content(string):文件内容commit_message(string):提交消息branch(string):用于创建或更新文件的分支previous_path(可选 string):要移动或重命名的文件路径
- 返回:文件内容和提交详情
-
push_files- 在单次提交中推送多个文件
- 输入:
project_id(string):项目 ID 或经过 URL 编码的路径branch(string):要推送到的分支files(array):要推送的文件,每个文件包含file_path和contentcommit_message(string):提交消息
- 返回:更新后的分支引用
-
get_file_contents- 获取文件或目录的内容
- 输入:
project_id(string):项目 ID 或经过 URL 编码的路径file_path(string):文件或目录的路径ref(可选 string):要从中获取内容的分支、标签或提交
- 返回:文件或目录内容
仓库管理
-
search_repositories- 搜索 GitLab 项目
- 输入:
search(string):搜索查询page(可选 number):分页页码per_page(可选 number):每页结果数(默认 20)
- 返回:项目搜索结果
-
create_repository- 创建新的 GitLab 项目
- 输入:
name(string):项目名称description(可选 string):项目描述visibility(可选 string):'private'、'internal' 或 'public'initialize_with_readme(可选 boolean):使用 README 初始化
- 返回:已创建项目的详情
-
fork_repository- 派生项目
- 输入:
project_id(string):项目 ID 或经过 URL 编码的路径namespace(可选 string):要派生到的命名空间
- 返回:已派生项目的详情
-
create_branch- 创建新分支
- 输入:
project_id(string):项目 ID 或经过 URL 编码的路径branch(string):新分支的名称ref(可选 string):新分支的源分支或提交
- 返回:已创建分支的引用
群组操作
-
search_groups- 搜索 GitLab 群组
- 输入:
search(string):群组搜索查询page(可选 number):分页页码per_page(可选 number):每页结果数(默认 20)owned(可选 boolean):仅限当前用户拥有的群组min_access_level(可选 number):最低访问级别(10=访客,20=报告者,30=开发者,40=维护者,50=所有者)
- 返回:群组搜索结果
问题管理
-
create_issue- 创建新问题
- 输入:
project_id(string):项目 ID 或 URL 编码路径title(string):问题标题description(optional string):问题描述assignee_ids(optional number[]):要分配的用户 IDlabels(optional string[]):要添加的标签milestone_id(optional number):里程碑 ID
- 返回:已创建的问题详情
-
list_issues- 列出 GitLab 项目中的所有问题
- 输入:
project_id(string):项目 ID 或 URL 编码路径state(optional string):'opened'、'closed'或'all'labels(optional string):以逗号分隔的标签名称列表milestone(optional string):里程碑标题assignee_id(optional number):被分配者的用户 IDauthor_id(optional number):作者的用户 IDsearch(optional string):搜索标题和描述created_after(optional string):返回在此日期之后创建的问题(ISO 8601)created_before(optional string):返回在此日期之前创建的问题(ISO 8601)updated_after(optional string):返回在此日期之后更新的问题(ISO 8601)updated_before(optional string):返回在此日期之前更新的问题(ISO 8601)sort(optional string):按各种条件对问题排序order_by(optional string):'asc'或'desc'page(optional number):分页页码per_page(optional number):每页结果数(默认值为 20)with_labels_details(optional boolean):如果为 true,则返回每个标签的更多详情。默认值为 false。
- 返回:问题对象数组
-
update_issue- 更新 GitLab 项目中的现有问题
- 输入:
project_id(string):项目 ID 或 URL 编码路径issue_iid(number):问题内部 IDtitle(optional string):新问题标题description(optional string):新问题描述state_event(optional string):'close'或'reopen'labels(optional string[]):标签名称数组assignee_ids(optional number[]):要分配的用户 ID 数组milestone_id(optional number):要分配的里程碑 ID
- 返回:已更新的问题详情
-
search_issues- 搜索 GitLab 项目中的问题
- 输入:
project_id(string):项目 ID 或 URL 编码路径search(string):用于搜索标题和描述的词语state(optional string):'opened'、'closed'或'all'labels(optional string):以逗号分隔的标签名称列表page(optional number):分页页码per_page(optional number):每页结果数(默认值为 20)
- 返回:匹配的问题对象数组
-
add_issue_comment- 向 GitLab 项目中的问题添加评论
- 输入:
project_id(string):项目 ID 或 URL 编码路径issue_iid(number):问题内部 IDbody(string):评论内容
- 返回:已创建的评论详情
合并请求管理
create_merge_request
- 创建新的合并请求
- 输入:
project_id(string):项目 ID 或经过 URL 编码的路径title(string):MR 标题description(可选 string):MR 描述source_branch(string):包含更改的分支target_branch(string):要合并到的分支draft(可选 boolean):创建为草稿 MRallow_collaboration(可选 boolean):允许上游成员提交更改
- 返回:已创建的合并请求详情
-
list_merge_requests- 列出 GitLab 项目中的所有合并请求
- 输入:
project_id(string):项目 ID 或经过 URL 编码的路径state(可选 string):'opened'、'closed'、'locked'、'merged' 或 'all'target_branch(可选 string):按目标分支筛选source_branch(可选 string):按源分支筛选labels(可选 string):以逗号分隔的标签名称列表milestone(可选 string):里程碑标题assignee_id(可选 number):受指派者的用户 IDauthor_id(可选 number):作者的用户 IDsearch(可选 string):搜索标题和描述created_after(可选 string):返回此日期之后创建的 MR(ISO 8601)created_before(可选 string):返回此日期之前创建的 MR(ISO 8601)updated_after(可选 string):返回此日期之后更新的 MR(ISO 8601)updated_before(可选 string):返回此日期之前更新的 MR(ISO 8601)sort(可选 string):排序合并请求order_by(可选 string):'asc' 或 'desc'page(可选 number):分页页码per_page(可选 number):每页结果数(默认 20)
- 返回:合并请求对象数组
-
update_merge_request- 更新 GitLab 项目中现有的合并请求
- 输入:
project_id(string):项目 ID 或经过 URL 编码的路径merge_request_iid(number):合并请求内部 IDtitle(可选 string):新的合并请求标题description(可选 string):新的合并请求描述state_event(可选 string):'close' 或 'reopen'target_branch(可选 string):新的目标分支labels(可选 string[]):标签名称数组assignee_ids(可选 number[]):要指派的用户 ID 数组milestone_id(可选 number):要指派的里程碑 IDremove_source_branch(可选 boolean):合并时删除源分支
- 返回:已更新的合并请求详情
-
merge_merge_request- 合并 GitLab 项目中的合并请求
- 输入:
project_id(string):项目 ID 或经过 URL 编码的路径merge_request_iid(number):合并请求内部 IDmerge_commit_message(可选 string):自定义合并提交消息should_remove_source_branch(可选 boolean):合并后删除源分支merge_when_pipeline_succeeds(可选 boolean):流水线成功后合并sha(可选 string):必须与源分支 HEAD 匹配的 SHA
- 返回:已合并的合并请求详情
-
add_merge_request_comment- 在 GitLab 项目的合并请求中添加评论
- 输入:
project_id(string):项目 ID 或经过 URL 编码的路径merge_request_iid(number):合并请求内部 IDbody(string):评论内容
- 返回:已创建的评论详情
标签管理
-
list_labels- 列出项目中的所有标签
- 输入:
project_id(string):项目 ID 或 URL 编码的路径page(可选 number):分页页码per_page(可选 number):每页结果数(默认 20)
- 返回:标签对象数组
-
create_label- 创建新标签
- 输入:
project_id(string):项目 ID 或 URL 编码的路径name(string):标签名称color(string):标签颜色(十六进制代码)description(可选 string):标签描述priority(可选 number):标签优先级
- 返回:创建的标签详情
-
update_label- 更新现有标签
- 输入:
project_id(string):项目 ID 或 URL 编码的路径name(string):当前标签名称new_name(可选 string):新标签名称color(可选 string):新标签颜色description(可选 string):新标签描述priority(可选 number):新标签优先级
- 返回:更新后的标签详情
-
delete_label- 删除标签
- 输入:
project_id(string):项目 ID 或 URL 编码的路径name(string):要删除的标签名称
- 返回:成功确认
里程碑管理
-
list_milestones- 列出项目中的所有里程碑
- 输入:
project_id(string):项目 ID 或 URL 编码路径state(可选 string):'active' 或 'closed'page(可选 number):分页页码per_page(可选 number):每页结果数(默认值为 20)
- 返回:里程碑对象数组
-
create_milestone- 创建新里程碑
- 输入:
project_id(string):项目 ID 或 URL 编码路径title(string):里程碑标题description(可选 string):里程碑描述due_date(可选 string):截止日期(YYYY-MM-DD)start_date(可选 string):开始日期(YYYY-MM-DD)
- 返回:已创建的里程碑详情
-
update_milestone- 更新现有里程碑
- 输入:
project_id(string):项目 ID 或 URL 编码路径milestone_id(number):里程碑 IDtitle(可选 string):新标题description(可选 string):新描述due_date(可选 string):新截止日期start_date(可选 string):新开始日期state_event(可选 string):'close' 或 'activate'
- 返回:已更新的里程碑详情
-
delete_milestone- 删除里程碑
- 输入:
project_id(string):项目 ID 或 URL 编码路径milestone_id(number):要删除的里程碑 ID
- 返回:成功确认
-
list_group_milestones- 列出 GitLab 群组中的所有里程碑
- 输入:
group_id(string):群组 ID 或 URL 编码路径state(可选 string):'active' 或 'closed'title(可选 string):按里程碑标题筛选(区分大小写)search(可选 string):在标题或描述中搜索search_title(可选 string):仅在标题中搜索include_ancestors(可选 boolean):包含父群组的里程碑include_descendants(可选 boolean):包含子群组的里程碑updated_before(可选 string):按更新时间筛选(ISO 8601)updated_after(可选 string):按更新时间筛选(ISO 8601)containing_date(可选 string):包含指定日期的里程碑start_date(可选 string):筛选 due_date >= start_date 的结果end_date(可选 string):筛选 start_date <= end_date 的结果page(可选 number):分页页码per_page(可选 number):每页结果数(默认值为 20)
- 返回:群组里程碑对象数组
-
create_group_milestone- 在 GitLab 群组中创建新里程碑
- 输入:
group_id(string):群组 ID 或 URL 编码路径title(string):里程碑标题description(可选 string):里程碑描述due_date(可选 string):截止日期(YYYY-MM-DD)start_date(可选 string):开始日期(YYYY-MM-DD)
- 返回:已创建的群组里程碑详情
-
update_group_milestone- 更新 GitLab 群组中的现有里程碑
- 输入:
group_id(string):群组 ID 或 URL 编码路径milestone_id(number):里程碑 IDtitle(可选 string):新标题description(可选 string):新描述due_date(可选 string):新截止日期start_date(可选 string):新开始日期state_event(可选 string):'close' 或 'activate'
- 返回:已更新的群组里程碑详情
-
delete_group_milestone- 从 GitLab 群组中删除里程碑
- 输入:
group_id(string):群组 ID 或 URL 编码路径milestone_id(number):要删除的里程碑 ID
- 返回:成功确认
设置
Personal Access Token
创建 GitLab Personal Access Token,并授予适当的权限:
- 在 GitLab 中前往「用户设置」>「访问令牌」
- 选择所需的范围:
api,用于完整的 API 访问权限read_api,用于只读访问read_repository和write_repository,用于仓库操作
- 创建令牌并妥善保存
在 Claude Desktop 中使用
将以下内容添加到你的 claude_desktop_config.json 中:
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@therealchristhomas/gitlab-mcp-server"],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>",
"GITLAB_API_URL": "https://gitlab.com/api/v4"
}
}
}
}
在 Cursor/VSCode/Winsurf 中使用
将以下内容添加到你的 MCP 配置中:
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@therealchristhomas/gitlab-mcp-server"],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>",
"GITLAB_API_URL": "https://gitlab.com/api/v4"
}
}
}
}
注意:将 <YOUR_TOKEN> 替换为你的 GitLab Personal Access Token。如果你未使用 gitlab.com,也请将其替换为你的 Gitlab API URL。
环境变量
GITLAB_PERSONAL_ACCESS_TOKEN:你的 GitLab personal access token(必需)GITLAB_API_URL:GitLab API 的基础 URL(可选,默认值为https://gitlab.com/api/v4)
对于自托管的 GitLab 实例,请将 GITLAB_API_URL 更新为指向你的实例:
"GITLAB_API_URL": "https://your-gitlab-instance.com/api/v4"
开发
构建
npm run build
开发模式
npm run dev
监视模式
npm run watch
许可证
此 MCP 服务采用 MIT License 许可。这意味着你可以自由使用、修改和分发该软件,但须遵守 MIT License 的条款和条件。更多详情请参阅项目仓库中的 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。