GitLab MCP Server
编码与调试by ttpears
让 LLM 深度探索和分析 GitLab 实例,支持搜索、代码浏览、Issue 管理,并兼容自托管与 GitLab.com 认证。
什么是 GitLab MCP Server?
让 LLM 深度探索和分析 GitLab 实例,支持搜索、代码浏览、Issue 管理,并兼容自托管与 GitLab.com 认证。
README
GitLab MCP Server
A community MCP server for GitLab — works with any GitLab tier (Free, Premium, Ultimate), no GitLab Duo required.
npx @ttpears/gitlab-mcp-server
How This Differs from GitLab's Official MCP Server
GitLab ships an official MCP server (Beta) that requires Premium/Ultimate and GitLab Duo with beta features enabled. This community server is an alternative for teams that don't have those requirements or need different capabilities.
| This server | GitLab official | |
|---|---|---|
| GitLab tier | Free, Premium, Ultimate | Premium / Ultimate only |
| GitLab Duo required | No | Yes |
| Auth | Personal Access Token | OAuth 2.0 Dynamic Client Registration |
| Transport | stdio + streamable HTTP | stdio (via mcp-remote) + HTTP |
| Multi-client | Claude Code, LibreChat, any MCP client | Claude Desktop, Claude Code, Cursor, VS Code |
| Multi-user auth modes | hybrid / shared / per-user | OAuth per-user |
| GraphQL schema discovery | Yes — introspect & run custom queries | No |
| Repository browsing & file reading | Yes | No |
| User / group search | Yes | No |
| Update issues & MRs | Yes | No (create only) |
| CI/CD pipeline management | Yes | Yes |
| MR diffs & commits | Yes | Yes |
| Work item notes | Yes | Yes |
| Semantic code search | No | Yes (requires additional setup) |
| Label search | Yes | Yes |
| Milestone tracking | Yes | No |
| Iteration/sprint tracking | Yes | No |
| Time tracking & timelogs | Yes | No |
| MR reviewer & approval status | Yes | No |
| Project statistics dashboard | Yes | No |
| Group member listing | Yes | No |
Choose this server if you're on GitLab Free/Community Edition, need GraphQL flexibility, want repo browsing, or run LibreChat multi-user deployments.
Choose the official server if you have GitLab Premium/Ultimate with Duo, need semantic code search, or prefer OAuth over PATs.
Quick Start
1. Create a GitLab Token
Go to GitLab → User Settings → Access Tokens → create a token with read_api (read-only) or api (full access) scope.
2. Choose Your Client
- Claude Code — stdio transport, single-user
- LibreChat (Docker) — streamable HTTP, multi-user with per-user auth
Claude Code
Add to your Claude Code settings (.claude/settings.json or project .mcp.json):
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@ttpears/gitlab-mcp-server"],
"env": {
"GITLAB_URL": "https://gitlab.com",
"GITLAB_SHARED_ACCESS_TOKEN": "glpat-your-token-here"
}
}
}
}
Restart Claude Code to load the server.
LibreChat (Docker)
Runs as a sidecar container using streamable HTTP transport for multi-user deployments with per-user credential isolation.
1. Add environment variables to your LibreChat .env:
GITLAB_URL=https://gitlab.com
GITLAB_AUTH_MODE=hybrid
GITLAB_SHARED_ACCESS_TOKEN=glpat-your-shared-token
GITLAB_MCP_PORT=8008
MCP_TRANSPORT=http
2. Add the service to docker-compose.override.yml:
services:
gitlab-mcp:
build:
context: .
dockerfile: Dockerfile.mcp-gitlab
env_file:
- .env
ports:
- "8008:8008"
networks:
- librechat
restart: unless-stopped
Copy the Dockerfile from this repo into your LibreChat directory as Dockerfile.mcp-gitlab. It clones and builds from this repository automatically — no source files needed.
3. Configure in librechat.yml:
mcpServers:
gitlab:
type: streamable-http
url: "http://gitlab-mcp:8008/"
headers:
Authorization: "Bearer {{GITLAB_PAT}}"
X-GitLab-Url: "{{GITLAB_URL_OVERRIDE}}"
customUserVars:
GITLAB_PAT:
title: "GitLab Personal Access Token"
description: "PAT with api scope"
GITLAB_URL_OVERRIDE:
title: "GitLab URL (optional)"
description: "e.g., https://gitlab.yourdomain.com"
4. Restart LibreChat:
docker compose down && docker compose -f docker-compose.yml -f docker-compose.override.yml up -d
Available Tools
Search & Discovery
| Tool | Description |
|---|---|
search_gitlab | Global search across projects, issues, and merge requests |
search_projects | Find repositories by name or description |
search_issues | Search issues globally or within a project (filter by assignee, author, labels, state) |
search_merge_requests | Find merge requests by username or within a project |
search_users | Find team members and contributors |
search_groups | Discover groups and organizations |
search_labels | Search labels in a project or group |
list_group_members | List group members with access levels |
browse_repository | Explore directory structure and files |
get_file_content | Read file contents for code analysis |
Read Operations
| Tool | Description |
|---|---|
get_project | Detailed project information |
get_issues | List project issues with pagination |
get_merge_requests | List project merge requests with pagination |
get_merge_request_pipelines | Get CI/CD pipelines for a merge request |
get_pipeline_jobs | Get jobs for a specific pipeline |
get_merge_request_diffs | Get diff statistics for a merge request |
get_merge_request_commits | Get commits for a merge request |
get_notes | Get notes/comments on an issue or merge request |
list_milestones | List milestones with progress statistics |
list_iterations | List iterations/sprints (Premium/Ultimate) |
get_time_tracking | Get time estimate, spent, and timelogs |
get_merge_request_reviewers | Get MR approval and reviewer status |
get_project_statistics | Aggregate project stats dashboard |
get_user_issues | Get all issues assigned to a user |
get_user_merge_requests | Get MRs authored by or assigned to a user |
resolve_path | Resolve a path to a project or group |
get_available_queries | Discover available GraphQL operations |
execute_custom_query | Run custom GraphQL queries |
Write Operations (requires user authentication)
| Tool | Description |
|---|---|
create_issue | Create new issues |
create_merge_request | Create new merge requests |
create_note | Add a comment/note to an issue or merge request |
manage_pipeline | Retry or cancel a CI/CD pipeline |
update_issue | Update title, description, assignees, labels, due date |
update_merge_request | Update title, description, assignees, reviewers, labels |
Configuration
Authentication Modes
| Mode | Description | Use Case |
|---|---|---|
| hybrid (default) | Shared token for reads + per-user tokens for writes | Multi-user deployments |
| shared | Single token for all operations | Single-user / trusted environments |
| per-user | All operations require user authentication | High-security environments |
Environment Variables
| Variable | Description | Default |
|---|---|---|
GITLAB_URL | GitLab instance URL | https://gitlab.com |
GITLAB_AUTH_MODE | Authentication mode (hybrid, shared, per-user) | hybrid |
GITLAB_SHARED_ACCESS_TOKEN | Shared token for read operations | — |
GITLAB_MAX_PAGE_SIZE | Maximum items per page (1-100) | 50 |
GITLAB_TIMEOUT | Request timeout in milliseconds | 30000 |
GITLAB_MCP_PORT | HTTP server port (LibreChat mode) | 8008 |
MCP_TRANSPORT | Transport mode (http for LibreChat) | stdio |
Troubleshooting
Connection issues with LibreChat:
- Verify
type: streamable-httpinlibrechat.yml(notsse) - URL should be
http://gitlab-mcp:8008/(the Docker service name, not localhost) - Ensure both containers share the same Docker network
- Check logs:
docker logs gitlab-mcp
Authentication errors:
- Verify token has
read_apiorapiscope and hasn't expired - For LibreChat: check the user provided a valid PAT in the credentials UI
Schema introspection failed:
- Requires GitLab 12.0+ with GraphQL API enabled
- Verify
GITLAB_URLis reachable from the container
Debug logging:
NODE_ENV=development GITLAB_URL=https://your-gitlab.com npm start
Health check (HTTP mode):
curl http://localhost:8008/health
Testing
# Test with MCP Inspector
npx @modelcontextprotocol/inspector npx @ttpears/gitlab-mcp-server
Contributing
- Fork the repository
- Create a feature branch
- Submit a pull request
License
MIT
常见问题
GitLab MCP Server 是什么?
让 LLM 深度探索和分析 GitLab 实例,支持搜索、代码浏览、Issue 管理,并兼容自托管与 GitLab.com 认证。
相关 Skills
网页构建器
by anthropics
面向复杂 claude.ai HTML artifact 开发,快速初始化 React + Tailwind CSS + shadcn/ui 项目并打包为单文件 HTML,适合需要状态管理、路由或多组件交互的页面。
✎ 在 claude.ai 里做复杂网页 Artifact 很省心,多组件、状态和路由都能顺手搭起来,React、Tailwind 与 shadcn/ui 组合效率高、成品也更精致。
前端设计
by anthropics
面向组件、页面、海报和 Web 应用开发,按鲜明视觉方向生成可直接落地的前端代码与高质感 UI,适合做 landing page、Dashboard 或美化现有界面,避开千篇一律的 AI 审美。
✎ 想把页面做得既能上线又有设计感,就用前端设计:组件到整站都能产出,难得的是能避开千篇一律的 AI 味。
网页应用测试
by anthropics
用 Playwright 为本地 Web 应用编写自动化测试,支持启动开发服务器、校验前端交互、排查 UI 异常、抓取截图与浏览器日志,适合调试动态页面和回归验证。
✎ 借助 Playwright 一站式验证本地 Web 应用前端功能,调 UI 时还能同步查看日志和截图,定位问题更快。
相关 MCP Server
GitHub
编辑精选by GitHub
GitHub 是 MCP 官方参考服务器,让 Claude 直接读写你的代码仓库和 Issues。
✎ 这个参考服务器解决了开发者想让 AI 安全访问 GitHub 数据的问题,适合需要自动化代码审查或 Issue 管理的团队。但注意它只是参考实现,生产环境得自己加固安全。
Context7 文档查询
编辑精选by Context7
Context7 是实时拉取最新文档和代码示例的智能助手,让你告别过时资料。
✎ 它能解决开发者查找文档时信息滞后的问题,特别适合快速上手新库或跟进更新。不过,依赖外部源可能导致偶尔的数据延迟,建议结合官方文档使用。
by tldraw
tldraw 是让 AI 助手直接在无限画布上绘图和协作的 MCP 服务器。
✎ 这解决了 AI 只能输出文本、无法视觉化协作的痛点——想象让 Claude 帮你画流程图或白板讨论。最适合需要快速原型设计或头脑风暴的开发者。不过,目前它只是个基础连接器,你得自己搭建画布应用才能发挥全部潜力。