GitLab MCP(模型上下文协议)服务器。包含对原始 GitLab MCP 服务器的错误修复和改进。
<a href="https://glama.ai/mcp/servers/7jwbk4r6d7"><img width="380" height="200" src="https://gips2.baidu.com/it/u=2556439823,1539255757&fm=3081&app=3081&f=PNG?w=760&h=400" alt="gitlab mcp MCP 服务器" /></a>
当与 Claude App 一起使用时,需要直接设置您的 API 密钥和 URL。
该服务器支持两种认证方法:
OAuth2 提供了通过浏览器认证的安全认证流程。启用后,服务器会:
有关详细的 OAuth2 设置说明,请参阅 OAuth 设置指南。
快速设置 - 首先创建一个 GitLab OAuth 应用程序:
设置 → 应用程序GitLab MCP 服务器(或任何您喜欢的名称)http://127.0.0.1:8888/callbackapi(提供完整的读写 API 访问权限)然后使用 OAuth 配置 MCP 服务器:
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@zereight/mcp-gitlab"],
"env": {
"GITLAB_USE_OAUTH": "true",
"GITLAB_OAUTH_CLIENT_ID": "your_oauth_client_id",
"GITLAB_OAUTH_REDIRECT_URI": "http://127.0.0.1:8888/callback",
"GITLAB_API_URL": "your_gitlab_api_url",
"GITLAB_PROJECT_ID": "your_project_id", // 可选:默认项目
"GITLAB_ALLOWED_PROJECT_IDS": "", // 可选:允许项目的逗号分隔列表
"GITLAB_READ_ONLY_MODE": "false",
"USE_GITLAB_WIKI": "false", // 是否使用 wiki API?
"USE_MILESTONE": "false", // 是否使用里程碑 API?
"USE_PIPELINE": "false" // 是否使用流水线 API?
}
}
}
}
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@zereight/mcp-gitlab"],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "your_gitlab_token",
"GITLAB_API_URL": "your_gitlab_api_url",
"GITLAB_PROJECT_ID": "your_project_id", // 可选:默认项目
"GITLAB_ALLOWED_PROJECT_IDS": "", // 可选:允许项目的逗号分隔列表
"GITLAB_READ_ONLY_MODE": "false",
"USE_GITLAB_WIKI": "false", // 是否使用 wiki API?
"USE_MILESTONE": "false", // 是否使用里程碑 API?
"USE_PIPELINE": "false" // 是否使用流水线 API?
}
}
}
}
{
"inputs": [
{
"type": "promptString",
"id": "gitlab-token",
"description": "Gitlab Token 以读取 API",
"password": true
}
],
"servers": {
"GitLab-MCP": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@zereight/mcp-gitlab"],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "${input:gitlab-token}",
"GITLAB_API_URL": "your-fancy-gitlab-url",
"GITLAB_READ_ONLY_MODE": "true",
...
}
}
}
}
env_vars = {
"GITLAB_PERSONAL_ACCESS_TOKEN": gitlab_access_token,
"GITLAB_API_URL": gitlab_api_url,
"USE_GITLAB_WIKI": use_gitlab_wiki
# ......其余可选参数
}
stdio_gitlab_mcp_client = MCPClient(
lambda: stdio_client(
StdioServerParameters(
command="npx",
args=["-y", "@zereight/mcp-gitlab"],
env=env_vars,
)
)
)
{
"mcpServers": {
"gitlab": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITLAB_PERSONAL_ACCESS_TOKEN",
"-e",
"GITLAB_API_URL",
"-e",
"GITLAB_READ_ONLY_MODE",
"-e",
"USE_GITLAB_WIKI",
"-e",
"USE_MILESTONE",
"-e",
"USE_PIPELINE",
"iwakitakuma/gitlab-mcp"
],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "your_gitlab_token",
"GITLAB_API_URL": "https://gitlab.com/api/v4", // 可选,自托管 GitLab
"GITLAB_READ_ONLY_MODE": "false",
"USE_GITLAB_WIKI": "true",
"USE_MILESTONE": "true",
"USE_PIPELINE": "true"
}
}
}
}
docker run -i --rm \
-e GITLAB_PERSONAL_ACCESS_TOKEN=your_gitlab_token \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_READ_ONLY_MODE=true \
-e USE_GITLAB_WIKI=true \
-e USE_MILESTONE=true \
-e USE_PIPELINE=true \
-e SSE=true \
-p 3333:3002 \
iwakitakuma/gitlab-mcp
{
"mcpServers": {
"gitlab": {
"type": "sse",
"url": "http://localhost:3333/sse"
}
}
}
docker run -i --rm \
-e GITLAB_PERSONAL_ACCESS_TOKEN=your_gitlab_token \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_READ_ONLY_MODE=true \
-e USE_GITLAB_WIKI=true \
-e USE_MILESTONE=true \
-e USE_PIPELINE=true \
-e STREAMABLE_HTTP=true \
-p 3333:3002 \
iwakitakuma/gitlab-mcp
{
"mcpServers": {
"gitlab": {
"type": "streamable-http",
"url": "http://localhost:3333/mcp"
}
}
}
GITLAB_PERSONAL_ACCESS_TOKEN:您的 GitLab 个人访问令牌。标准模式下必需;当 REMOTE_AUTHORIZATION=true 或使用 OAuth 时未使用。GITLAB_USE_OAUTH:设置为 true 启用 OAuth2 认证而不是个人访问令牌。GITLAB_OAUTH_CLIENT_ID:来自您的 GitLab OAuth 应用程序的客户端 ID。使用 OAuth 时必需。GITLAB_OAUTH_REDIRECT_URI:OAuth 回调 URL。默认值:http://127.0.0.1:8888/callbackGITLAB_OAUTH_TOKEN_PATH:自定义 OAuth 令牌存储路径。默认值:~/.gitlab-mcp-token.jsonREMOTE_AUTHORIZATION:设置为 'true' 启用远程会话认证通过 HTTP 头。在这种模式下:
Authorization: Bearer <token> 或 Private-Token: <token>)的 GitLab PAT 令牌,按会话基础GITLAB_PERSONAL_ACCESS_TOKEN 环境变量STREAMABLE_HTTP=true),因为会话管理已由传输层处理SESSION_TIMEOUT_SECONDS:会话认证令牌超时时间(秒)。默认值:3600(1小时)。有效范围:1-86400 秒(建议:60+)。在此期间内无活动后,认证令牌将被移除但传输会话仍保持活跃。客户端必须在下次请求时再次提供认证头。仅当 REMOTE_AUTHORIZATION=true 时适用。GITLAB_API_URL:您的 GitLab API URL。(默认:https://gitlab.com/api/v4)GITLAB_PROJECT_ID:默认项目 ID。如果设置,则在进行 API 请求时覆盖此值。GITLAB_ALLOWED_PROJECT_IDS:可选的允许项目 ID 列表,逗号分隔。当设置为单个值时,作为默认项目(类似于旧的“锁定”模式)。当设置为多个值时,限制访问这些项目。示例:
123:MCP 服务器只能访问项目 123 并将其作为默认项目123,456,789:MCP 服务器可以访问项目 123、456 和 789,但在请求中需要明确指定项目 IDGITLAB_READ_ONLY_MODE:设置为 'true' 时,限制服务器仅暴露只读操作。对于增强安全或不需要写入访问的情况有用。也适用于与 Cursor 一起使用及其 40 工具限制。GITLAB_DENIED_TOOLS_REGEX:当设置为正则表达式时,排除匹配的工具。USE_GITLAB_WIKI:设置为 'true' 时,启用与 wiki 相关的工具(list_wiki_pages, get_wiki_page, create_wiki_page, update_wiki_page, delete_wiki_page)。默认情况下,wiki 功能是禁用的。USE_MILESTONE:设置为 'true' 时,启用与里程碑相关的工具(list_milestones, get_milestone, create_milestone, edit_milestone, delete_milestone, get_milestone_issue, get_milestone_merge_requests, promote_milestone, get_milestone_burndown_events)。默认情况下,里程碑功能是禁用的。USE_PIPELINE:设置为 'true' 时,启用与流水线相关的工具(list_pipelines, get_pipeline, list_pipeline_jobs, list_pipeline_trigger_jobs, get_pipeline_job, get_pipeline_job_output, create_pipeline, retry_pipeline, cancel_pipeline, play_pipeline_job, retry_pipeline_job, cancel_pipeline_job)。默认情况下,流水线功能是禁用的。GITLAB_AUTH_COOKIE_PATH:指向 GitLab 实例所需的认证 cookie 文件路径。当提供时,cookie 将包含在所有 GitLab API 请求中。SSE:设置为 'true' 时,启用 Server-Sent Events 传输。STREAMABLE_HTTP:设置为 'true' 时,启用流式 HTTP 传输。如果同时设置了 SSE 和 STREAMABLE_HTTP 为 'true',服务器将优先使用流式 HTTP 传输。GITLAB_COMMIT_FILES_PER_PAGE:GitLab 返回的提交差异每页文件数量。此值应与服务器端 GitLab 设置相匹配。如果您的 GitLab 实例使用自定义每页值,请调整此值。MAX_SESSIONS:允许的最大并发会话数。默认值:1000。有效范围:1-10000。达到限制时,新连接将以 HTTP 503 拒绝。MAX_REQUESTS_PER_MINUTE:每个会话的每分钟速率限制。默认值:60。有效范围:1-1000。超过限制的请求返回 HTTP 429。PORT:服务器端口。默认值:3002。有效范围:1-65535。当使用流式 HTTP 传输时,以下端点可用:
/health:健康检查端点,返回服务器状态、活动会话计数和运行时间。/metrics:详细指标包括:
当使用 REMOTE_AUTHORIZATION=true 时,MCP 服务器可以支持多个用户,每个用户的 GitLab 令牌通过 HTTP 头传递。这适用于:
设置示例:
# 启动具有远程认证的服务器
docker run -d \
-e STREAMABLE_HTTP=true \
-e REMOTE_AUTHORIZATION=true \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_READ_ONLY_MODE=true \
-e SESSION_TIMEOUT_SECONDS=3600 \
-p 3333:3002 \
iwakitakuma/gitlab-mcp
客户端配置:
您的 IDE 或 MCP 客户端必须在每次请求中发送以下之一的头部:
Authorization: Bearer glpat-xxxxxxxxxxxxxxxxxxxx
或
Private-Token: glpat-xxxxxxxxxxxxxxxxxxxx
令牌按会话存储(通过 mcp-session-id 头标识)并在同一会话中的后续请求中重复使用。
{
"mcpServers": {
"GitLab": {
"url": "http(s)://<your_mcp_gitlab_server>/mcp",
"headers": {
"Authorization": "Bearer glpat-..."
}
}
}
}
重要提示:
SESSION_TIMEOUT_SECONDS(默认 1 小时)的不活动后过期。超时后,客户端必须再次发送认证头。传输会话仍然活跃。MAX_REQUESTS_PER_MINUTE 次请求(默认 60)MAX_SESSIONS 并发会话(默认 1000)merge_merge_request - 在 GitLab 项目中合并合并请求create_or_update_file - 在 GitLab 项目中创建或更新单个文件search_repositories - 搜索 GitLab 项目create_repository - 创建新的 GitLab 项目get_file_contents - 获取 GitLab 项目中的文件或目录内容push_files - 将多个文件推送到 GitLab 项目中的单个提交create_issue - 在 GitLab 项目中创建新的问题create_merge_request - 在 GitLab 项目中创建新的合并请求fork_repository - 将 GitLab 项目 fork 到您的账户或指定命名空间create_branch - 在 GitLab 项目中创建新的分支get_merge_request - 获取合并请求的详细信息(必须提供 mergeRequestIid 或 branchName)get_merge_request_diffs - 获取合并请求的更改/差异(必须提供 mergeRequestIid 或 branchName)list_merge_request_diffs - 列出带有分页支持的合并请求差异(必须提供 mergeRequestIid 或 branchName)get_branch_diffs - 获取两个分支或提交之间的更改/差异update_merge_request - 更新合并请求(必须提供 mergeRequestIid 或 branchName)create_note - 在问题或合并请求上创建新的注释create_merge_request_thread - 在合并请求上