GitLab MCP Server
Provides comprehensive GitLab integration with search across projects, issues, merge requests, users, and groups; code exploration and file browsing; issue and merge request management (create, update); and support for custom GraphQL queries with automatic schema discovery. Supports both GitLab.com and self-hosted instances.
Enables execution of custom GraphQL queries against GitLab's API with automatic schema introspection and discovery of available operations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GitLab MCP Serversearch for open issues in the 'web-app' project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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-serverHow 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 |
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=http2. 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-stoppedCopy 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 -dAvailable Tools
Search & Discovery
Tool | Description |
| Global search across projects, issues, and merge requests |
| Find repositories by name or description |
| Search issues globally or within a project (filter by assignee, author, labels, state) |
| Find merge requests by username or within a project |
| Find team members and contributors |
| Discover groups and organizations |
| Search labels in a project or group |
| List group members with access levels |
| Explore directory structure and files |
| Read file contents for code analysis |
Read Operations
Tool | Description |
| Detailed project information |
| List project issues with pagination |
| List project merge requests with pagination |
| Get CI/CD pipelines for a merge request |
| Get jobs for a specific pipeline |
| Get diff statistics for a merge request |
| Get commits for a merge request |
| Get notes/comments on an issue or merge request |
| List milestones with progress statistics |
| List iterations/sprints (Premium/Ultimate) |
| Get time estimate, spent, and timelogs |
| Get MR approval and reviewer status |
| Aggregate project stats dashboard |
| Get all issues assigned to a user |
| Get MRs authored by or assigned to a user |
| Resolve a path to a project or group |
| Discover available GraphQL operations |
| Run custom GraphQL queries |
Write Operations (requires user authentication)
Tool | Description |
| Create new issues |
| Create new merge requests |
| Add a comment/note to an issue or merge request |
| Retry or cancel a CI/CD pipeline |
| Update title, description, assignees, labels, due date |
| 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 instance URL |
|
| Authentication mode ( |
|
| Shared token for read operations | — |
| Maximum items per page (1-100) |
|
| Request timeout in milliseconds |
|
| HTTP server port (LibreChat mode) |
|
| Transport mode ( | 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 expiredFor 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 startHealth check (HTTP mode):
curl http://localhost:8008/healthTesting
# Test with MCP Inspector
npx @modelcontextprotocol/inspector npx @ttpears/gitlab-mcp-serverContributing
Fork the repository
Create a feature branch
Submit a pull request
License
MIT
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Appeared in Searches
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ttpears/gitlab-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server