Secure MCP server for GitLab projects, merge requests, issues, and pipelines
Runs on your machine from its package; the steps are below.
At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx mcp-gitlab-crunchtools
MCP client config
{
"mcpServers": {
"mcp-gitlab": {
"command": "uvx",
"args": [
"mcp-gitlab-crunchtools"
]
}
}
}A secure MCP (Model Context Protocol) server for GitLab projects, merge requests, issues, pipelines, and search. Works with any GitLab instance (gitlab.com, self-hosted, or enterprise).
This MCP server is designed to be:
SecretStr to prevent accidental loggingquay.io/crunchtools/mcp-gitlab built on Hummingbird Python base image| Component | Name |
|---|---|
| GitHub repo | crunchtools/mcp-gitlab |
| Container | quay.io/crunchtools/mcp-gitlab |
| Python package (PyPI) | mcp-gitlab-crunchtools |
| CLI command | mcp-gitlab-crunchtools |
| Module import | mcp_gitlab_crunchtools |
The container image is built on the Hummingbird Python base image from Project Hummingbird, which provides:
list_projects - List projects with filtering and searchget_project - Get project details by ID or pathlist_project_branches - List repository branchesget_project_branch - Get a single branchlist_project_commits - List commits with date/path filteringlist_groups - List groups with filteringget_group - Get group details by ID or pathlist_group_projects - List projects in a group (with subgroup support)list_merge_requests - List MRs by state, labels, milestoneget_merge_request - Get MR detailscreate_merge_request - Create a new MRupdate_merge_request - Update MR title, description, state, assigneeslist_mr_notes - List comments on an MRcreate_mr_note - Add a comment to an MRget_mr_changes - Get the diff for an MRlist_issues - List issues by state, labels, milestone, assigneeget_issue - Get issue detailscreate_issue - Create a new issueupdate_issue - Update issue title, description, state, labelslist_issue_notes - List comments on an issuecreate_issue_note - Add a comment to an issuelist_pipelines - List CI/CD pipelines with status filteringget_pipeline - Get pipeline detailslist_pipeline_jobs - List jobs in a pipelineget_job_log - Get job log outputsearch_global - Search across all accessible GitLab resourcessearch_project - Search within a specific projectuvx mcp-gitlab-crunchtools
pip install mcp-gitlab-crunchtools
podman run -e GITLAB_TOKEN=your_token \
quay.io/crunchtools/mcp-gitlab
| Variable | Required | Default | Description |
|---|---|---|---|
GITLAB_TOKEN | Yes | — | Personal Access Token |
GITLAB_URL | No | https://gitlab.com | GitLab instance URL |
SSL_CERT_FILE | No | — | Custom CA bundle path, for self-hosted GitLab with an internal CA |
GITLAB_SSL_VERIFY | No | true | Set false to disable TLS verification (not recommended) |
Navigate to Access Tokens
Create a Custom Token
mcp-gitlab-crunchtoolsScope Selection
| Scope | Access Level | Capabilities |
|---|---|---|
read_api | Read-only | List/view projects, issues, MRs, pipelines |
api | Full access | All features including create/update |
Copy and Store Token
glpat-)claude mcp add mcp-gitlab-crunchtools \
--env GITLAB_TOKEN=your_token_here \
-- uvx mcp-gitlab-crunchtools
For self-hosted GitLab:
claude mcp add mcp-gitlab-crunchtools \
--env GITLAB_TOKEN=your_token_here \
--env GITLAB_URL=https://gitlab.example.com \
-- uvx mcp-gitlab-crunchtools
For the container version:
claude mcp add mcp-gitlab-crunchtools \
--env GITLAB_TOKEN=your_token_here \
-- podman run -i --rm -e GITLAB_TOKEN quay.io/crunchtools/mcp-gitlab
User: List my GitLab projects
Assistant: [calls list_projects with membership=true]
User: Show open merge requests for my-org/backend
Assistant: [calls list_merge_requests with project_id="my-org/backend"]
User: Create an issue in my-org/backend titled "Fix login timeout"
Assistant: [calls create_issue with title="Fix login timeout"]
User: Show failed pipelines for my-org/api
Assistant: [calls list_pipelines with status="failed"]
User: Search for "authentication" in my-org/backend
Assistant: [calls search_project with scope="blobs"]
This server was designed with security as a primary concern. See SECURITY.md for:
Token Protection
Input Validation
API Hardening
Automated CVE Scanning
git clone https://github.com/crunchtools/mcp-gitlab.git
cd mcp-gitlab
uv sync
uv run pytest
uv run ruff check src tests
uv run mypy src
podman build -t mcp-gitlab .
AGPL-3.0-or-later
Contributions welcome! Please read SECURITY.md before submitting security-related changes.