CAT
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Cross AI Tools

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

GitLab MCP Server

jmrplens/gitlab-mcp-server
954 toolsauthSTDIO, HTTPregistry active
Summary

Hooks into the GitLab REST API v4 and GraphQL to expose 1000+ operations as MCP tools, from merge request creation and pipeline inspection to wiki edits and container registry management. Ships as a single static binary with three transport modes: stdio for local Claude Desktop, streamable HTTP for remote setups, and a dynamic find/execute surface that keeps token overhead under 21k while maintaining full API reach. Built with security scanning on SonarCloud and supports self-hosted GitLab instances with TLS verification. Includes 11 sampling actions for LLM-assisted code review and pipeline failure diagnosis, plus 46 resources for read-only access to projects, issues, and commits. Reach for this when you need programmatic GitLab control from an AI assistant without clicking through the web UI.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Tools

Public tool metadata for what this MCP can expose to an agent.

54 tools
GITLAB_ARCHIVE_PROJECTTool to archive a project. Use when you need to mark a project read-only after finishing active development. Call after confirming no further changes are required.1 params

Tool to archive a project. Use when you need to mark a project read-only after finishing active development. Call after confirming no further changes are required.

Parameters* required
idinteger
The ID or URL-encoded path of the project to archive.
GITLAB_CREATE_GROUPTool to create a new group in GitLab. Use when you need to establish a new group for projects or collaboration.26 params

Tool to create a new group in GitLab. Use when you need to establish a new group for projects or collaboration.

Parameters* required
namestring
The name of the group.
pathstring
The path of the group.
avatarstring
Image file for avatar of the group.
parent_idinteger
The parent group ID for creating nested group.
visibilitystring
The group’s visibility.one of private · internal · public
descriptionstring
The group’s description.
lfs_enabledboolean
Enable/disable Large File Storage (LFS) for the projects in this group.
default_branchstring
The default branch name for group’s projects.
emails_enabledboolean
Enable email notifications.
membership_lockboolean
Users cannot be added to projects in this group. Premium and Ultimate only.
organization_idinteger
The organization ID for the group.
duo_availabilitystring
Duo availability setting. Note: In the UI, never_on is displayed as "Always Off".one of default_on · default_off · never_on
mentions_disabledboolean
Disable the capability of a group from getting mentioned.
wiki_access_levelstring
The wiki access level. Premium and Ultimate only.one of disabled · private · enabled
auto_devops_enabledboolean
Default to Auto DevOps pipeline for all projects within this group.
share_with_group_lockboolean
Prevent sharing a project with another group within this group.
project_creation_levelstring
Determine if developers can create projects in the group.one of administrator · noone · maintainer · developer
request_access_enabledboolean
Allow users to request member access.
subgroup_creation_levelstring
Allowed to create subgroups.one of owner · maintainer
two_factor_grace_periodinteger
Time before Two-factor authentication is enforced (in hours).
enabled_git_access_protocolstring
Enabled protocols for Git access.one of ssh · http · all
experiment_features_enabledboolean
Enable experiment features for this group.
shared_runners_minutes_limitinteger
Can be set by administrators only. Maximum number of monthly compute minutes for this group. Can be nil (default; inherit system default), 0 (unlimited), or > 0. GitLab Self-Managed, Premium and Ultimate only.
require_two_factor_authenticationboolean
Require all users in this group to set up two-factor authentication.
default_branch_protection_defaultsobject
Options for default_branch_protection_defaults. E.g. {"allowed_to_push": [{"access_level":40}], "allow_force_push": False, "allowed_to_merge": [{"access_level":40}], "developer_can_initial_push": False}
extra_shared_runners_minutes_limitinteger
Can be set by administrators only. Additional compute minutes for this group. GitLab Self-Managed, Premium and Ultimate only.
GITLAB_CREATE_PROJECTTool to create a new project in GitLab. Implements POST /projects endpoint.12 params

Tool to create a new project in GitLab. Implements POST /projects endpoint.

Parameters* required
namestring
The name of the project.
pathstring
The path or URL-friendly name for the project.
visibilitystring
Project visibility.one of private · internal · public
descriptionstring
Project description.
namespace_idinteger
The namespace (group or user ID) under which to create the project.
wiki_enabledboolean
Enable wiki feature.
default_branchstring
The default branch name.
issues_enabledboolean
Enable issues feature.
snippets_enabledboolean
Enable snippets feature.
build_git_strategystring
Git strategy for builds.
merge_requests_enabledboolean
Enable merge requests feature.
container_registry_enabledboolean
Enable container registry.
GITLAB_CREATE_PROJECT_ISSUETool to create a new issue in a GitLab project. Use when you need to report a bug, request a feature, or track a task within a specific project.17 params

Tool to create a new issue in a GitLab project. Use when you need to report a bug, request a feature, or track a task within a specific project.

Parameters* required
idstring
The global ID or URL-encoded path of the project.
iidinteger
The internal ID of the project’s issue (requires administrator or project owner rights).
titlestring
The title of an issue.
labelsstring
Comma-separated label names to assign to the new issue. If a label does not already exist, this creates a new project label and assigns it to the issue.
weightinteger
The weight of the issue. Valid values are greater than or equal to 0. Premium and Ultimate only.
epic_idinteger
ID of the epic to add the issue to. Valid values are greater than or equal to 0. Premium and Ultimate only.
due_datestring
The due date. Date time string in the format `YYYY-MM-DD`, for example `2016-03-11`.
epic_iidinteger
IID of the epic to add the issue to. Valid values are greater than or equal to 0. (deprecated, scheduled for removal in API version 5). Premium and Ultimate only.
created_atstring
When the issue was created. Date time string, ISO 8601 formatted, for example `2016-03-11T03:45:40Z`. Requires administrator or project/group owner rights.
issue_typestring
The type of issue. One of `issue`, `incident`, `test_case` or `task`. Default is `issue`.one of issue · incident · test_case · taskdefault: issue
assignee_idinteger
The ID of the user to assign the issue to. Only appears on GitLab Free.
descriptionstring
The description of an issue. Limited to 1,048,576 characters.
assignee_idsarray
The IDs of the users to assign the issue to. Premium and Ultimate only.
confidentialboolean
Set an issue to be confidential. Default is false.default: false
milestone_idinteger
The global ID of a milestone to assign issue. To find the `milestone_id` associated with a milestone, view an issue with the milestone assigned and use the API to retrieve the issue’s details.
discussion_to_resolvestring
The ID of a discussion to resolve. This fills out the issue with a default description and mark the discussion as resolved. Use in combination with `merge_request_to_resolve_discussions_of`.
merge_request_to_resolve_discussions_ofinteger
The IID of a merge request in which to resolve all issues. This fills out the issue with a default description and mark all discussions as resolved. When passing a description or title, these values take precedence over the default values.
GITLAB_CREATE_REPOSITORY_BRANCHTool to create a new branch in a project. Use when you need to create a new branch from an existing branch or a specific commit in a GitLab project.3 params

Tool to create a new branch in a project. Use when you need to create a new branch from an existing branch or a specific commit in a GitLab project.

Parameters* required
refstring
The branch name or commit SHA to create the new branch from.
project_idinteger
The ID or URL-encoded path of the project.
branch_namestring
The name of the new branch.
GITLAB_DELETE_PROJECTTool to delete a GitLab project by its ID. Use when you need to remove a project, either by marking it for later deletion or deleting it immediately.3 params

Tool to delete a GitLab project by its ID. Use when you need to remove a project, either by marking it for later deletion or deleting it immediately.

Parameters* required
idinteger
The ID or URL-encoded path of the project to be deleted.
full_pathstring
The full path of the project (e.g., namespace/project_name). Used with `permanently_remove=true` for immediate deletion. Available in GitLab Free from 18.0 (previously Premium/Ultimate only since 15.11).
permanently_removeboolean
If true, the project is deleted immediately. Otherwise, it is marked for deletion and removed after a retention period. Available in GitLab Free from 18.0 (previously Premium/Ultimate only since 15.11).
GITLAB_DOWNLOAD_PROJECT_AVATARTool to download a project’s avatar image. Use when you need the raw avatar bytes after confirming the project exists.1 params

Tool to download a project’s avatar image. Use when you need the raw avatar bytes after confirming the project exists.

Parameters* required
idstring
The ID or URL-encoded path of the project whose avatar to download.
GITLAB_ERASE_JOBTool to erase the content of a specified job within a project. Use when you need to remove job artifacts and logs.2 params

Tool to erase the content of a specified job within a project. Use when you need to remove job artifacts and logs.

Parameters* required
job_idinteger
The ID of the job to be erased.
project_idinteger
The ID or URL-encoded path of the project.
GITLAB_GET_COMMIT_REFSTool to get all references (branches or tags) a commit is pushed to. Use when you need to find out which branches or tags a specific commit belongs to in a GitLab project.3 params

Tool to get all references (branches or tags) a commit is pushed to. Use when you need to find out which branches or tags a specific commit belongs to in a GitLab project.

Parameters* required
shastring
The commit hash.
ref_typestring
The scope of commits to list. Possible values are `branch`, `tag`, or `all`.one of branch · tag · alldefault: all
project_idinteger
The ID or URL-encoded path of the project.
GITLAB_GET_COMMIT_SEQUENCETool to get the sequence number of a commit in a project by following parent links from the given commit. Use when you need to determine the order of a commit in the project's history.3 params

Tool to get the sequence number of a commit in a project by following parent links from the given commit. Use when you need to determine the order of a commit in the project's history.

Parameters* required
shastring
The commit hash.
project_idinteger
The ID or URL-encoded path of the project.
first_parentboolean
Follow only the first parent commit upon seeing a merge commit.
GITLAB_GET_GROUPTool to retrieve information about a specific group by its ID. Use when you need to get details of a GitLab group.3 params

Tool to retrieve information about a specific group by its ID. Use when you need to get details of a GitLab group.

Parameters* required
idinteger
The ID or URL-encoded path of the group.
with_projectsboolean
Include details from projects that belong to the specified group (defaults to true). Deprecated, scheduled for removal in API v5.default: true
with_custom_attributesboolean
Include custom attributes in response (administrators only).
GITLAB_GET_GROUP_MEMBERTool to retrieve details for a specific group member. Use when you need to fetch membership information for a user in a group after you know both group ID and user ID.2 params

Tool to retrieve details for a specific group member. Use when you need to fetch membership information for a user in a group after you know both group ID and user ID.

Parameters* required
idinteger
The ID or URL-encoded path of the group.
user_idinteger
The user ID of the group member to retrieve.
GITLAB_GET_GROUPSGet Groups13 params

Get Groups

Parameters* required
pageinteger
Page number for pagination.
sortstring
Return groups sorted in 'asc' or 'desc' order.one of asc · desc
ownedboolean
Limit to groups owned by the current user.
searchstring
Search for groups by name or path.
order_bystring
Return groups ordered by this field.one of id · name · path · created_at · updated_at
per_pageinteger
Number of results per page.
statisticsboolean
Include group statistics (admin only).
all_availableboolean
Include all groups the user has access to (admin only).
skip_groups[]array
List of group IDs to exclude.
with_projectsboolean
Include project details in response (deprecated).
with_two_factorboolean
Include groups requiring two-factor authentication.
min_access_levelinteger
Limit to groups with minimum access level.
with_custom_attributesboolean
Include custom attributes in response (admins only).
GITLAB_GET_JOB_DETAILSTool to retrieve details of a single job by its ID within a specified project. Use this when you need to fetch specific information about a particular CI/CD job.2 params

Tool to retrieve details of a single job by its ID within a specified project. Use this when you need to fetch specific information about a particular CI/CD job.

Parameters* required
job_idinteger
The ID of the job.
project_idinteger
The ID or URL-encoded path of the project.
GITLAB_GET_MERGE_REQUEST_NOTESTool to fetch comments on a merge request. Use when you need to retrieve all notes for a specific merge request.4 params

Tool to fetch comments on a merge request. Use when you need to retrieve all notes for a specific merge request.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
pageinteger
Page number to retrieve.
per_pageinteger
Number of notes per page (max 100).
merge_request_iidinteger
Internal ID of the merge request.
GITLAB_GET_PROJECTTool to get a single project by ID or URL-encoded path.1 params

Tool to get a single project by ID or URL-encoded path.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
GITLAB_GET_PROJECT_LANGUAGESTool to list programming languages used in a project with percentages. Use when you need the project language breakdown.1 params

Tool to list programming languages used in a project with percentages. Use when you need the project language breakdown.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
GITLAB_GET_PROJECT_MEMBERTool to retrieve details for a specific project member. Use after confirming project and user IDs to fetch membership information for a project member.2 params

Tool to retrieve details for a specific project member. Use after confirming project and user IDs to fetch membership information for a project member.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
user_idinteger
The user ID of the project member to retrieve.
GITLAB_GET_PROJECT_MEMBER_ALLTool to retrieve details for a specific project member (including inherited and invited members). Use when you need the effective membership info (including invitations and inheritance).2 params

Tool to retrieve details for a specific project member (including inherited and invited members). Use when you need the effective membership info (including invitations and inheritance).

Parameters* required
idinteger
The ID or URL-encoded path of the project.
user_idinteger
The user ID of the project member.
GITLAB_GET_PROJECT_MERGE_REQUEST_COMMITSTool to get commits of a merge request. Use when you need to retrieve all commits associated with a specific merge request.2 params

Tool to get commits of a merge request. Use when you need to retrieve all commits associated with a specific merge request.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
merge_request_iidinteger
Internal ID of the merge request.
GITLAB_GET_PROJECT_MERGE_REQUESTSTool to retrieve a list of merge requests for a specific project. Use when you need to get all merge requests associated with a project, with options to filter by state, labels, milestones, and other attributes.36 params

Tool to retrieve a list of merge requests for a specific project. Use when you need to get all merge requests associated with a project, with options to filter by state, labels, milestones, and other attributes.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
wipstring
Filter merge requests against their wip status. Use yes to return only draft merge requests, no to return non-draft merge requests.
pageinteger
The page of results to return. Defaults to 1.
sortstring
Returns requests sorted in asc or desc order. Default is desc.
viewstring
If simple, returns the iid, URL, title, description, and basic state of merge request.
scopestring
Returns merge requests for the given scope: created_by_me, assigned_to_me or all. Defaults to created_by_me.
statestring
Returns all merge requests or just those that are opened, closed, locked, or merged.
iids[]array
Returns the request having the given iid.
labelsstring
Returns merge requests matching a comma-separated list of labels. None lists all merge requests with no labels. Any lists all merge requests with at least one label. Predefined names are case-insensitive.
searchstring
Search merge requests against their title and description.
approvedstring
Filters merge requests by their approved status. yes returns only approved merge requests. no returns only non-approved merge requests. Requires the mr_approved_filter feature flag, disabled by default.
order_bystring
Returns requests ordered by created_at, title, merged_at, or updated_at fields. Default is created_at.
per_pageinteger
The number of results per page. Defaults to 20.
author_idinteger
Returns merge requests created by the given user id. Mutually exclusive with author_username. Combine with scope=all or scope=assigned_to_me.
milestonestring
Returns merge requests for a specific milestone. None returns merge requests with no milestone. Any returns merge requests that have an assigned milestone.
not_filterobject
Returns merge requests that do not match the parameters supplied. Accepts: labels, milestone, author_id, author_username, assignee_id, assignee_username, reviewer_id, reviewer_username, my_reaction_emoji.
assignee_idinteger
Returns merge requests assigned to the given user id. None returns unassigned merge requests. Any returns merge requests with an assignee.
environmentstring
Returns merge requests deployed to the given environment.
reviewer_idinteger
Returns merge requests which have the user as a reviewer with the given user id. None returns merge requests with no reviewers. Any returns merge requests with any reviewer. Mutually exclusive with reviewer_username.
approver_idsarray
Returns merge requests which have specified all the users with the given id as individual approvers. None returns merge requests without approvers. Any returns merge requests with an approver. Premium and Ultimate only.
created_afterstring
Returns merge requests created on or after the given time. Expected in ISO 8601 format (2019-03-15T08:00:00Z).
merge_user_idinteger
Returns the merge requests merged by the user with the given user id. Mutually exclusive with merge_user_username. Introduced in GitLab 17.0.
source_branchstring
Returns merge requests with the given source branch.
target_branchstring
Returns merge requests with the given target branch.
updated_afterstring
Returns merge requests updated on or after the given time. Expected in ISO 8601 format (2019-03-15T08:00:00Z).
created_beforestring
Returns merge requests created on or before the given time. Expected in ISO 8601 format (2019-03-15T08:00:00Z).
deployed_afterstring
Returns merge requests deployed after the given date/time. Expected in ISO 8601 format (2019-03-15T08:00:00Z).
updated_beforestring
Returns merge requests updated on or before the given time. Expected in ISO 8601 format (2019-03-15T08:00:00Z).
approved_by_idsarray
Returns merge requests approved by all the users with the given id, up to 5 users. None returns merge requests with no approvals. Any returns merge requests with an approval. Premium and Ultimate only.
author_usernamestring
Returns merge requests created by the given username. Mutually exclusive with author_id.
deployed_beforestring
Returns merge requests deployed before the given date/time. Expected in ISO 8601 format (2019-03-15T08:00:00Z).
my_reaction_emojistring
Returns merge requests reacted by the authenticated user by the given emoji. None returns issues not given a reaction. Any returns issues given at least one reaction.
reviewer_usernamestring
Returns merge requests which have the user as a reviewer with the given username. None returns merge requests with no reviewers. Any returns merge requests with any reviewer. Mutually exclusive with reviewer_id.
merge_user_usernamestring
Returns the merge requests merged by the user with the given username. Mutually exclusive with merge_user_id. Introduced in GitLab 17.0.
with_labels_detailsboolean
If true, response returns more details for each label in labels field: :name, :color, :description, :description_html, :text_color. Default is false.
with_merge_status_recheckboolean
If true, this projection requests (but does not guarantee) an asynchronous recalculation of the merge_status field. Enable the restrict_merge_status_recheck feature flag to ignore this attribute when requested by users without at least the Developer role.
GITLAB_GET_PROJECTSTool to list all projects accessible to the authenticated user. Supports filtering.19 params

Tool to list all projects accessible to the authenticated user. Supports filtering.

Parameters* required
pageinteger
Page number for pagination.
sortstring
Return projects sorted in 'asc' or 'desc' order. Default is 'desc'.one of asc · desc
ownedboolean
Limit by projects explicitly owned by the current user.
searchstring
Return list of projects matching search criteria (case-insensitive substring).
simpleboolean
Return only limited fields for each project.
starredboolean
Limit by projects starred by the current user.
archivedboolean
Limit by archived status.
id_afterinteger
Limit results to projects with IDs greater than the specified ID.
order_bystring
Return projects ordered by this field. Default is 'created_at'.one of id · name · path · created_at · updated_at · star_count
per_pageinteger
Number of items per page (1-100).
id_beforeinteger
Limit results to projects with IDs less than the specified ID.
membershipboolean
Limit by projects that the current user is a member of.
statisticsboolean
Include project statistics. Available to Reporter role and above.
visibilitystring
Limit by project visibility.one of private · internal · public
min_access_levelinteger
Limit by current user minimal role (access_level).
with_issues_enabledboolean
Limit by enabled issues feature.
with_custom_attributesboolean
Include custom attributes in response (admin only).
with_programming_languagestring
Limit by projects which use the given programming language.
with_merge_requests_enabledboolean
Limit by enabled merge requests feature.
GITLAB_GET_PROJECTS_ID_MERGE_REQUESTS_IID_DIFFSTool to list all diff versions of a merge request. Use when you need to inspect changes across different diff versions after creating or updating a merge request.2 params

Tool to list all diff versions of a merge request. Use when you need to inspect changes across different diff versions after creating or updating a merge request.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
merge_request_iidinteger
The internal ID of the merge request.
GITLAB_GET_REPOSITORY_BRANCHTool to retrieve information about a specific branch in a project. Use when you need to get details for a single branch.2 params

Tool to retrieve information about a specific branch in a project. Use when you need to get details for a single branch.

Parameters* required
project_idinteger
The ID or URL-encoded path of the project.
branch_namestring
The URL-encoded name of the branch.
GITLAB_GET_REPOSITORY_BRANCHESRetrieves a list of repository branches for a project. Use this when you need to get all branches or search for specific branches within a GitLab project.3 params

Retrieves a list of repository branches for a project. Use this when you need to get all branches or search for specific branches within a GitLab project.

Parameters* required
regexstring
Return list of branches with names matching a re2 regular expression.
searchstring
Return list of branches containing the search string. Use `^term` to find branches that begin with `term`, and `term$` to find branches that end with `term`.
project_idinteger
The ID or URL-encoded path of the project.
GITLAB_GET_SINGLE_COMMITTool to get a specific commit identified by the commit hash or name of a branch or tag. Use this when you need to retrieve detailed information about a single commit in a GitLab project repository.3 params

Tool to get a specific commit identified by the commit hash or name of a branch or tag. Use this when you need to retrieve detailed information about a single commit in a GitLab project repository.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
shastring
The commit hash or name of a repository branch or tag.
statsboolean
Include commit stats. Default is true.default: true
GITLAB_GET_SINGLE_PIPELINETool to retrieve details of a single pipeline by its ID within a specified project. Use when you need to get information about a specific CI/CD pipeline.2 params

Tool to retrieve details of a single pipeline by its ID within a specified project. Use when you need to get information about a specific CI/CD pipeline.

Parameters* required
project_idinteger
The ID or URL-encoded path of the project.
pipeline_idinteger
The ID of the pipeline.
GITLAB_GET_USERTool to retrieve information about a specific user by their ID. Use when you need to fetch details for a single GitLab user.1 params

Tool to retrieve information about a specific user by their ID. Use when you need to fetch details for a single GitLab user.

Parameters* required
idinteger
The ID of the user.
GITLAB_GET_USER_PREFERENCESTool to get the current user's preferences. Use when you need to retrieve the user's diff display and CI identity JWT settings after authentication.

Tool to get the current user's preferences. Use when you need to retrieve the user's diff display and CI identity JWT settings after authentication.

No parameter schema in public metadata yet.

GITLAB_GET_USERSTool to retrieve a list of users from GitLab. Use this when you need to find user information, search for specific users, or filter users based on various criteria like activity status or creation date.24 params

Tool to retrieve a list of users from GitLab. Use this when you need to find user information, search for specific users, or filter users based on various criteria like activity status or creation date.

Parameters* required
pageinteger
Page number for pagination.
sortstring
Return users sorted in 'asc' or 'desc' order. Default is 'desc'. (Admin only)one of asc · desc
activeboolean
Filters only active users. Default is false.
adminsboolean
Return only administrators. Default is false. (Admin only)
humansboolean
Filters only regular users that are not bot or internal users. Default is false.
searchstring
Search for users by name, username, or public email.
blockedboolean
Filters only blocked users. Default is false.
auditorsboolean
Return only auditor users. Default is false. If not included, it returns all users. (Admin only, Premium and Ultimate only)
externalboolean
Filters only external users. Default is false.
order_bystring
Return users ordered by 'id', 'name', 'username', 'created_at', or 'updated_at' fields. Default is 'id'. (Admin only)one of id · name · username · created_at · updated_at
per_pageinteger
Number of items per page for pagination.
providerstring
The external provider. (Admin only)
usernamestring
Get a single user with a specific username.
skip_ldapboolean
Skip LDAP users. (Admin only, Premium and Ultimate only)
extern_uidstring
Get a single user with a specific external authentication provider UID. (Admin only)
two_factorstring
Filter users by Two-factor authentication. Filter values are 'enabled' or 'disabled'. (Admin only)one of enabled · disabled
created_afterstring
Return users created after specified time (ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ).
created_beforestring
Return users created before specified time (ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ).
exclude_activeboolean
Filters only non active users. Default is false.
exclude_humansboolean
Filters only bot or internal users. Default is false.
exclude_externalboolean
Filters only non external users. Default is false.
exclude_internalboolean
Filters only non internal users. Default is false.
without_projectsboolean
Filter users without projects. Default is false. (Admin only)
without_project_botsboolean
Filters user without project bots. Default is false.
GITLAB_GET_USERS_ID_STATUSTool to get a user's status by ID. Use when you need to retrieve a GitLab user's current status message, emoji, and availability after identifying their user ID.1 params

Tool to get a user's status by ID. Use when you need to retrieve a GitLab user's current status message, emoji, and availability after identifying their user ID.

Parameters* required
user_idinteger
The numeric ID of the GitLab user whose status you want to retrieve.
GITLAB_GET_USER_STATUSTool to get the current user's status. Use when displaying or verifying the authenticated user's GitLab status after login.

Tool to get the current user's status. Use when displaying or verifying the authenticated user's GitLab status after login.

No parameter schema in public metadata yet.

GITLAB_GET_USER_SUPPORT_PINTool to get details of the current user's Support PIN. Use when you need to retrieve the active support PIN and its expiration for the authenticated user.

Tool to get details of the current user's Support PIN. Use when you need to retrieve the active support PIN and its expiration for the authenticated user.

No parameter schema in public metadata yet.

GITLAB_IMPORT_PROJECT_MEMBERSTool to import members from one project to another. Use when migrating members between projects.2 params

Tool to import members from one project to another. Use when migrating members between projects.

Parameters* required
idstring
ID or URL-encoded path of the target project to receive members.
project_idstring
ID or URL-encoded path of the source project to import members from.
GITLAB_LIST_ALL_GROUP_MEMBERSTool to list all members of a group including direct, inherited, and invited members. Use when you need a comprehensive membership list beyond direct members.3 params

Tool to list all members of a group including direct, inherited, and invited members. Use when you need a comprehensive membership list beyond direct members.

Parameters* required
idinteger
The ID or URL-encoded path of the group.
pageinteger
Page number for pagination.
per_pageinteger
Number of items per page for pagination.
GITLAB_LIST_ALL_PROJECT_MEMBERSTool to list all members of a project (direct, inherited, invited). Use when you need the effective membership list including inherited and invited members.7 params

Tool to list all members of a project (direct, inherited, invited). Use when you need the effective membership list including inherited and invited members.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
pageinteger
Page number for pagination.
querystring
Filters results based on a given name, email, or username. Use partial values to widen the scope of the query.
statestring
Filter results by member state, one of 'awaiting' or 'active'. Premium and Ultimate only.one of awaiting · active
per_pageinteger
Number of items per page for pagination.
user_idsarray
Filter the results on the given user IDs.
show_seat_infoboolean
Show seat information for users.
GITLAB_LIST_BILLABLE_GROUP_MEMBERSTool to list billable members of a top-level group (including its subgroups and projects). Use when generating billing reports; requires Owner role on the group.5 params

Tool to list billable members of a top-level group (including its subgroups and projects). Use when generating billing reports; requires Owner role on the group.

Parameters* required
idinteger
The ID or URL-encoded path of the top-level group. Only top-level groups are supported.
pageinteger
Page number for pagination (must be ≥ 1).
sortstring
Sort order for results. Supported values: access_level_asc|access_level_desc|last_joined|name_asc|name_desc|oldest_joined|oldest_sign_in|recent_sign_in|last_activity_on_asc|last_activity_on_desc.one of access_level_asc · access_level_desc · last_joined · name_asc · name_desc · oldest_joined
searchstring
Search string to filter members by name, username, or public email.
per_pageinteger
Number of items per page for pagination (must be ≥ 1).
GITLAB_LIST_GROUP_MEMBERSTool to list direct members of a group. Use when you need to retrieve or filter a group's direct membership.10 params

Tool to list direct members of a group. Use when you need to retrieve or filter a group's direct membership.

Parameters* required
idinteger
The ID or URL-encoded path of the group.
pageinteger
Page number for pagination.
sortstring
Order results by access level, ascending or descending.one of access_level_asc · access_level_desc
querystring
Filter members by name, username, or email substring.
activeboolean
When true, return only active users.
per_pageinteger
Number of results per page (1–100).
relationsarray
Membership relation types to include: direct, descendants, inherited, or shared.
skip_usersarray
List of user IDs to exclude from the results.
two_factorstring
Filter users by two-factor authentication status.one of enabled · disabled
include_inheritedboolean
Include members inherited from ancestor groups when true.
GITLAB_LIST_PENDING_GROUP_MEMBERSTool to list pending members of a group and its subgroups and projects. Use when you need to review users awaiting approval or invited without an account. Call after confirming the top-level group ID.3 params

Tool to list pending members of a group and its subgroups and projects. Use when you need to review users awaiting approval or invited without an account. Call after confirming the top-level group ID.

Parameters* required
idinteger
The ID or URL-encoded path of the top-level group.
pageinteger
Page number for pagination (1-based index).
per_pageinteger
Number of items per page for pagination (max 100).
GITLAB_LIST_PIPELINE_JOBSTool to retrieve a list of jobs for a specified pipeline within a project. Use this when you need to inspect the status or details of jobs associated with a particular CI/CD pipeline.4 params

Tool to retrieve a list of jobs for a specified pipeline within a project. Use this when you need to inspect the status or details of jobs associated with a particular CI/CD pipeline.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
scopestring
The scope of jobs to show. Can be a single status or a list of statuses. If not provided, all jobs are returned.one of canceled · canceling · created · failed · manual · pending
pipeline_idinteger
The ID of the pipeline.
include_retriedboolean
Include retried jobs in the response. Defaults to false.default: false
GITLAB_LIST_PROJECT_GROUPSTool to list ancestor groups of a project. Use when you need to retrieve all groups a project belongs to or is shared with.8 params

Tool to list ancestor groups of a project. Use when you need to retrieve all groups a project belongs to or is shared with.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
pageinteger
Page number of the results to retrieve.
searchstring
Search for specific groups by name.
per_pageinteger
Number of items to return per page.
skip_groupsarray
Skip the group IDs passed.
with_sharedboolean
Include projects shared with this group. Default is false.
shared_visible_onlyboolean
Limit to shared groups user has access to.
shared_min_access_levelinteger
Limit to shared groups with at least this access level.
GITLAB_LIST_PROJECT_INVITED_GROUPSTool to list groups invited to a project. Use when auditing which groups have access to a project.3 params

Tool to list groups invited to a project. Use when auditing which groups have access to a project.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
pageinteger
Page number for pagination.
per_pageinteger
Number of items to return per page.
GITLAB_LIST_PROJECT_PIPELINESTool to retrieve a list of pipelines for a specified project. Use when you need to get information about CI/CD pipelines, such as their status, source, or creation/update times.17 params

Tool to retrieve a list of pipelines for a specified project. Use when you need to get information about CI/CD pipelines, such as their status, source, or creation/update times.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
refstring
The ref of pipelines.
shastring
The SHA of pipelines.
namestring
Return pipelines with the specified name.
pageinteger
Page number for pagination.
sortstring
Sort pipelines in 'asc' or 'desc' order.one of asc · descdefault: desc
scopestring
The scope of pipelines, one of: 'running', 'pending', 'finished', 'branches', 'tags'.one of running · pending · finished · branches · tags
sourcestring
The pipeline source. To return child pipelines, set to 'parent_pipeline'.
statusstring
The status of pipelines.one of created · waiting_for_resource · preparing · pending · running · success
order_bystring
Order pipelines by 'id', 'status', 'ref', 'updated_at' or 'user_id'.one of id · status · ref · updated_at · user_iddefault: id
per_pageinteger
Number of items per page for pagination.
usernamestring
The username of the user who triggered pipelines.
yaml_errorsboolean
Returns pipelines with invalid configurations.
created_afterstring
Return pipelines created after the specified date (ISO 8601 format).
updated_afterstring
Return pipelines updated after the specified date (ISO 8601 format).
created_beforestring
Return pipelines created before the specified date (ISO 8601 format).
updated_beforestring
Return pipelines updated before the specified date (ISO 8601 format).
GITLAB_LIST_PROJECT_SHAREABLE_GROUPSTool to list groups that can be shared with a project. Use before sharing a project to fetch eligible groups.5 params

Tool to list groups that can be shared with a project. Use before sharing a project to fetch eligible groups.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
pageinteger
Page number for pagination.
searchstring
Search term to filter groups by name or path.
per_pageinteger
Number of items per page for pagination.
skip_groupsarray
List of group IDs to exclude from the results.
GITLAB_LIST_PROJECT_TAGSTool to retrieve a list of repository tags for a specified project. Use when you need to get all tags associated with a project in GitLab.6 params

Tool to retrieve a list of repository tags for a specified project. Use when you need to get all tags associated with a project in GitLab.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
pageinteger
Page number of the results to retrieve.
sortstring
Return tags sorted in `asc` or `desc` order. Default is `desc`.
searchstring
Return a list of tags matching the search criteria. You can use `^term` and `term$` to find tags that begin and end with `term`.
order_bystring
Return tags ordered by `name`, `updated`, or `version`. Default is `updated`.
per_pageinteger
Number of items to return per page.
GITLAB_LIST_PROJECT_TRANSFER_LOCATIONSTool to list namespaces available for project transfer. Use when you need to determine which groups a project can be transferred into.2 params

Tool to list namespaces available for project transfer. Use when you need to determine which groups a project can be transferred into.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
searchstring
The group names to search for.
GITLAB_LIST_PROJECT_USERSTool to list users of a project. Use after you have a project ID and want to retrieve its users.3 params

Tool to list users of a project. Use after you have a project ID and want to retrieve its users.

Parameters* required
idstring
The ID or URL-encoded path of the project.
searchstring
Filter users by name or username.
skip_usersarray
List of user IDs to exclude from the result.
GITLAB_LIST_REPOSITORY_COMMITSTool to get a list of repository commits in a project. Use when you need to retrieve commit history for a specific project, branch, or time range.11 params

Tool to get a list of repository commits in a project. Use when you need to retrieve commit history for a specific project, branch, or time range.

Parameters* required
allboolean
Retrieve every commit from the repository. When set to true, the ref_name parameter is ignored.
pathstring
The file path to filter commits by.
orderstring
List commits in order. Possible values: default, topo. Defaults to default, the commits are shown in reverse chronological order.one of default · topo
sincestring
Only commits after or on this date are returned in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ.
untilstring
Only commits before or on this date are returned in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ.
authorstring
Search commits by commit author.
ref_namestring
The name of a repository branch, tag or revision range, or if not given the default branch.
trailersboolean
Parse and include Git trailers for every commit.
project_idinteger
The ID or URL-encoded path of the project.
with_statsboolean
Stats about each commit are added to the response.
first_parentboolean
Follow only the first parent commit upon seeing a merge commit.
GITLAB_LIST_USER_PROJECTSTool to list projects owned by a specific user. Use after obtaining target user identity to fetch owned projects.22 params

Tool to list projects owned by a specific user. Use after obtaining target user identity to fetch owned projects.

Parameters* required
idinteger
The ID or username of the user whose projects to list.
pageinteger
Page number for pagination.
sortstring
Return projects sorted in asc or desc order. Default is 'desc'.one of asc · desc
ownedboolean
Limit by projects explicitly owned by the specified user.
searchstring
Return list of projects matching search criteria (case-insensitive substring).
simpleboolean
Return only limited fields for each project.
starredboolean
Limit by projects starred by the specified user.
archivedboolean
Limit by archived status.
id_afterinteger
Limit results to projects with IDs greater than the specified ID.
order_bystring
Return projects ordered by this field. Default is 'created_at'.one of id · name · path · created_at · updated_at · star_count
per_pageinteger
Number of items per page (1-100).
id_beforeinteger
Limit results to projects with IDs less than the specified ID.
membershipboolean
Limit by projects that the current user is a member of.
statisticsboolean
Include project statistics. Available to Reporter role and above.
visibilitystring
Limit by project visibility.one of private · internal · public
updated_afterstring
Limit projects updated after given time (ISO 8601).
updated_beforestring
Limit projects updated before given time (ISO 8601).
min_access_levelinteger
Limit by current user minimal role (access_level).
with_issues_enabledboolean
Limit by enabled issues feature.
with_custom_attributesboolean
Include custom attributes in response (admin only).
with_programming_languagestring
Limit by projects which use the given programming language.
with_merge_requests_enabledboolean
Limit by enabled merge requests feature.
GITLAB_POST_USER_SUPPORT_PINTool to create a support PIN for your authenticated user. Use when GitLab Support requests a PIN to verify your identity.

Tool to create a support PIN for your authenticated user. Use when GitLab Support requests a PIN to verify your identity.

No parameter schema in public metadata yet.

GITLAB_PUT_USER_PREFERENCESTool to update the current user's preferences. Use when adjusting default diff viewing and CI identity settings.3 params

Tool to update the current user's preferences. Use when adjusting default diff viewing and CI identity settings.

Parameters* required
view_diffs_file_by_fileboolean
Flag indicating the user sees only one file diff per page.
show_whitespace_in_diffsboolean
Flag indicating the user sees whitespace changes in diffs.
pass_user_identities_to_ci_jwtboolean
Flag indicating the user passes their external identities as CI information. Internal use only; do not expose to third-party services.
GITLAB_SET_USER_STATUSTool to set the current user's status. Use when you need to update availability or convey current mood on GitLab.3 params

Tool to set the current user's status. Use when you need to update availability or convey current mood on GitLab.

Parameters* required
emojistring
Name of the emoji to use as status. Defaults to 'speech_balloon' if omitted.
messagestring
Status message to display. Max 100 characters; can contain emoji codes.
clear_status_afterstring
Automatically clear status after the specified time interval. Allowed values: 30_minutes, 3_hours, 8_hours, 1_day, 3_days, 7_days, 30_days.one of 30_minutes · 3_hours · 8_hours · 1_day · 3_days · 7_days
GITLAB_SHARE_PROJECT_WITH_GROUPTool to share a project with a group. Use when you need to grant a group specific access level to a project.4 params

Tool to share a project with a group. Use when you need to grant a group specific access level to a project.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
group_idinteger
The ID of the group to share with.
expires_atstring
Expiration date for the group share in YYYY-MM-DD format (ISO 8601).
group_accessinteger
The access level to grant the group. One of GitLab's access levels, e.g., 30 for Developer, 40 for Maintainer.
GITLAB_START_PROJECT_HOUSEKEEPINGTool to start the housekeeping task for a project. Use when you need to trigger manual maintenance or pruning on a repository.2 params

Tool to start the housekeeping task for a project. Use when you need to trigger manual maintenance or pruning on a repository.

Parameters* required
idinteger
The ID or URL-encoded path of the project.
taskstring
Type of housekeeping task to perform. `prune` triggers a manual prune of unreachable objects; `eager` triggers eager housekeeping.one of prune · eager

GitLab MCP Server

GitHub Release License: MIT Go Report Card Go Reference Glama MCP Score GitLab Mirror

Quality Gate Coverage Platform

A Model Context Protocol (MCP) server that exposes the entire GitLab API as MCP tools, resources, and prompts for AI assistants. Single static binary — zero dependencies.

Security first: Continuously monitored on SonarCloud with quality gates, coverage, and security scanning. Supports read-only mode, safe mode (dry-run preview), and self-hosted GitLab with TLS verification.

Repository mirror: GitHub is the canonical repository. A read-only mirror of the code and releases is available on GitLab.com for discoverability; please open code contributions on GitHub.

Token Footprint

Measured with go run ./cmd/gen_readme/ against the current base catalog. Totals estimate startup context visible to an MCP client: visible tool schemas plus shared resources and prompts, using the same byte/4 token heuristic as cmd/audit_tokens.

Default configuration: with TOOL_SURFACE unset or TOOL_SURFACE=dynamic, CAPABILITY_SURFACE=full, META_TOOLS unset, META_PARAM_SCHEMA=opaque, and GITLAB_ENTERPRISE unset or false, the server uses the dynamic find/execute surface. Use TOOL_SURFACE=meta only when you explicitly want domain meta-tools; use TOOL_SURFACE=individual only when your client can handle the full tool catalog.

Configuration (TOOL_SURFACE / CAPABILITY_SURFACE)Visible toolsReachable actionsMETA_PARAM_SCHEMATool schema tokensShared tokensTotal tokens
dynamic / full (default)2870n/a2,20418,10020,304
dynamic / minimal2870n/a2,2045552,759
meta / full33870opaque86,38918,100104,489
meta / minimal33870opaque86,38955586,944
individual / full866866n/a478,91418,100497,014

Rows use the base Community Edition catalog (GITLAB_ENTERPRISE=false). META_PARAM_SCHEMA=opaque affects only visible meta-tool input schemas; dynamic mode gets exact action schemas from gitlab_find_action, and every surface advertises gitlab://tools plus gitlab://tools/{id} for on-demand action browsing and input schemas. Individual mode already exposes one schema per tool.

Highlights

  • 1028 MCP tools on self-managed Enterprise/Premium, or 1034 on GitLab.com Enterprise/Premium with experimental Orbit Knowledge Graph support — broad GitLab REST API v4 + GraphQL coverage across 175 packages under internal/tools: projects, branches, tags, releases, merge requests, issues, pipelines, jobs, groups, users, wikis, environments, deployments, packages, container registry, runners, feature flags, CI/CD variables, security attributes, security categories, templates, admin settings, access tokens, deploy keys, Orbit, and more
  • Default dynamic toolset — exposes only gitlab_find_action and gitlab_execute_action while keeping the same canonical GitLab action catalog. Optional domain meta-tools remain available with TOOL_SURFACE=meta: 32 base, 48 on self-managed Enterprise/Premium, or 49 on GitLab.com Enterprise/Premium
  • AI model tool-use evaluation — automated schema-only and Docker-backed runs against populated GitLab CE and licensed Enterprise instances measure tool/action selection, parameter shaping, recovery from GitLab errors, and destructive-action safety across Anthropic, Google, OpenAI, and Qwen. Published summaries appear in the managed evaluation block below; see AI Model Evaluation Results
  • 4 elicitation tools — interactive creation wizards (issue, MR, release, project) with step-by-step user prompts
  • 45 MCP resources in default dynamic/full mode — read-only data: user, groups, group members, group projects, projects, issues, pipelines, members, labels, milestones, branches, MRs, releases, tags, commits, file blobs, wiki pages, MR notes, MR discussions, single-entity templates (issue, MR, branch, tag, release, label, milestone, commit, wiki page, deployment, environment, job, board, snippet, deploy key, feature flag, group label, group milestone), the surface-aware gitlab://tools manifest and gitlab://tools/{id} detail template, and 5 workflow best-practice guides
  • 37 MCP prompts — AI-optimized: code review, pipeline status, risk assessment, release notes, standup, workload, user stats, team management, cross-project dashboards, analytics, milestones, Git workflow quality, audit
  • 3 MCP capabilities — completions, progress, elicitation
  • 50 tool icons — base64-encoded SVG icons (Sizes: ["any"]) on all tools, resources, and prompts for visual identification in MCP clients
  • Pagination on all list endpoints with metadata (total items, pages, next/prev)
  • Transports: stdio (default for desktop AI) and HTTP (Streamable HTTP for remote clients)
  • Cross-platform: Windows, Linux & macOS, amd64 & arm64
  • Self-hosted GitLab with self-signed TLS certificate support

Example Prompts

Once connected, just talk to your AI assistant in natural language:

"List my GitLab projects" "Show me open merge requests in my-app" "Create a merge request from feature-login to main" "Review merge request !15 — is it safe to merge?" "List open issues assigned to me" "What's the pipeline status for project 42?" "Why did the last pipeline fail?" "Generate release notes from v1.0 to v2.0"

The server handles the translation from natural language to GitLab API calls. You do not need to know project IDs, API endpoints, or JSON syntax — the AI assistant figures that out for you. See Usage Examples for more scenarios.

Quick Start

1. Get the server

Download the latest binary for your platform from GitHub Releases and make it executable:

chmod +x gitlab-mcp-server-*  # Linux/macOS only

Or pull the published container image:

docker pull ghcr.io/jmrplens/gitlab-mcp-server:latest

2. Configure GitLab access

Recommended: Run the built-in setup wizard — it configures your GitLab connection and MCP client in one step:

./gitlab-mcp-server --setup

Tip: The wizard supports three user interfaces and selects the best one automatically (Web UI → TUI → CLI). Force a specific mode with --setup-mode web|tui|cli. The Web UI ships with inline help tooltips on every advanced option. On Windows, double-click the .exe to launch the wizard automatically.

The wizard configures stdio MCP clients (VS Code, Claude Desktop, Cursor, etc.). It is not used for the long-running HTTP server mode — see HTTP Server Mode for that. If ~/.gitlab-mcp-server.env already exists, the wizard pre-loads its values so you can re-run it to change just one or two fields without re-typing the rest. Leave the token field blank to keep the stored token.

Manual setup only needs a GitLab Personal Access Token with api scope:

GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx

GITLAB_URL defaults to https://gitlab.com; add it only when you connect to a self-managed GitLab instance.

GITLAB_URL=https://gitlab.example.com

3. Connect your MCP client

Most desktop clients use stdio: the client starts one local MCP server process and talks to it over stdin/stdout. Choose one of these runtime patterns.

Native binary (stdio)

VS Code and Cursor-style MCP configuration:

Add to .vscode/mcp.json in your workspace:

{
  "servers": {
    "gitlab": {
      "type": "stdio",
      "command": "/path/to/gitlab-mcp-server",
      "env": {
        "GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Claude Desktop uses the same server command under mcpServers:

{
  "mcpServers": {
    "gitlab": {
      "command": "/path/to/gitlab-mcp-server",
      "env": {
        "GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

For client-specific paths, secure token prompts, HTTP OAuth, and extra IDEs, see IDE Configuration.

Docker launched by an IDE (stdio)

If an IDE starts Docker as the MCP server process, keep docker run -i and pass --http=false after the image name. Do not publish port 8080 in this mode.

{
  "servers": {
    "gitlab": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITLAB_TOKEN",
        "-e",
        "GITLAB_URL",
        "-e",
        "GITLAB_SKIP_TLS_VERIFY",
        "ghcr.io/jmrplens/gitlab-mcp-server:latest",
        "--http=false"
      ],
      "env": {
        "GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx",
        "GITLAB_URL": "https://gitlab.com",
        "GITLAB_SKIP_TLS_VERIFY": "false"
      }
    }
  }
}

Docker or binary as an HTTP MCP server

Use HTTP mode for shared, remote, or multi-user deployments. The Docker image starts in HTTP mode by default, but the flags are shown explicitly here for clarity. These examples publish the container port on host loopback only; --http-addr=0.0.0.0:8080 binds inside the container.

# Fixed GitLab instance for all clients
docker run -d --name gitlab-mcp-server -p 127.0.0.1:8080:8080 \
  ghcr.io/jmrplens/gitlab-mcp-server:latest \
  --http \
  --http-addr=0.0.0.0:8080 \
  --gitlab-url=https://gitlab.com

# Multi-instance mode: clients send GITLAB-URL per request
docker run -d --name gitlab-mcp-server -p 127.0.0.1:8080:8080 \
  ghcr.io/jmrplens/gitlab-mcp-server:latest \
  --http \
  --http-addr=0.0.0.0:8080

HTTP clients authenticate each request with PRIVATE-TOKEN or Authorization: Bearer:

{
  "servers": {
    "gitlab": {
      "type": "http",
      "url": "http://localhost:8080/mcp",
      "headers": {
        "PRIVATE-TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

In multi-instance mode, clients must also send GITLAB-URL. See HTTP Server Mode for OAuth, reverse proxy, rate limit, and server-pool details.

4. Verify

Open your AI client and try:

"List my GitLab projects"

See the Getting Started guide for detailed setup instructions.

Tool Modes

Three registration modes, controlled by TOOL_SURFACE:

ModeToolsDescription
Dynamic Toolset (default)2 visible toolsLow-token find/execute surface over the canonical action catalog.
Meta-Tools32 base GitLab/interactive tools; gitlab_server is a separate maintenance helperDomain-grouped dispatchers with action parameter. Enable with TOOL_SURFACE=meta; see the full 32/48/49 catalog in Meta-Tools Reference.
Individual866 CE / 1028 self-managed enterprise / 1034 GitLab.com EnterpriseEvery GitLab operation as a separate MCP tool.

For dynamic experiments where resources and prompts dominate initial context, set CAPABILITY_SURFACE=minimal (stdio) or --capability-surface=minimal (HTTP). Minimal keeps the surface-aware gitlab://tools manifest so dynamic, meta, and individual deployments can still read accepted call shapes. The default remains full.

Dynamic mode is now the default low-token find/execute surface; see Dynamic Toolset for the field-aware ranking model, fuzzy fallback, response shapes, workflow diagrams, and migration guidance. Set TOOL_SURFACE=meta to use the consolidated domain meta-tool catalog.

The detailed meta-tool catalog now lives in Meta-Tools Reference, including action counts, Enterprise/Premium markers, and examples.

Compatibility

MCP CapabilitySupport
ToolsUp to 1034 individual / 32–49 meta
Resources45 (static + templates)
Prompts37 templates
CompletionsProject, user, group, branch, tag
LoggingStructured (text/JSON) to stderr
ProgressTool execution progress reporting
Elicitation4 interactive creation wizards

Tested with: VS Code + GitHub Copilot, Claude Desktop, Claude Code, Cursor, Windsurf, JetBrains IDEs, Zed, Kiro, Cline, Roo Code.

See the full Compatibility Matrix for detailed client support.

AI Model Tool-Use Evaluation

The project includes an automated evaluator for model-facing MCP quality. It can run schema-only checks against the tool catalog or execute validated model tool calls through MCP against Docker GitLab CE or licensed Enterprise instances populated with fixtures. The evaluator measures whether each model chooses the correct meta-tool and action, sends valid parameters, recovers from actionable GitLab errors, and respects destructive-action safeguards.

Current published result: Docker CE-on-Enterprise meta 20260527.

ProviderModelCompatibilityTool accuracyRecoveryDocker live status
Anthropicclaude-haiku-4-5-20251001OK100.0%No repairs100.0% final across 274 ops
Googlegemini-flash-latestReview74.3%100.0% (36/36)100.0% final across 274 ops
OpenAIgpt-5.4-nanoReview99.3%100.0% (6/6)100.0% final across 274 ops
Qwenqwen3.6-flashOK100.0%100.0% (5/5)100.0% final across 274 ops

The published model-evaluation set covers 560 task attempts and 1096 expected MCP operations. Across the selected reports, models emitted 1109 tool calls over 1145 model requests, with 100.0% aggregate final success. See AI Model Evaluation Results for the detailed current matrix.

Current published result: Docker CE dynamic 20260606.

ProviderModelCompatibilityTool accuracyRecoveryDocker live status
Anthropicclaude-haiku-4-5-20251001OK100.0%100.0% (6/6)100.0% final across 573 ops
Googlegemini-flash-latestReview100.0%80.0% (4/5)99.3% final across 573 ops
OpenAIgpt-5.4-nanoReview99.4%95.8% (23/24)97.4% final across 573 ops
Qwenqwen3.6-flashReview100.0%90.9% (10/11)99.3% final across 573 ops

The published model-evaluation set covers 620 task attempts and 2292 expected MCP operations. Across the selected reports, models emitted 2367 tool calls over 2369 model requests, with 99.0% aggregate final success. See AI Model Evaluation Results for the detailed current matrix.

Current published result: Docker Enterprise meta 20260527.

ProviderModelCompatibilityTool accuracyRecoveryDocker live status
Anthropicclaude-haiku-4-5-20251001OK100.0%100.0% (1/1)100.0% final across 84 ops
Googlegemini-flash-latestReview78.2%100.0% (7/7)100.0% final across 84 ops
OpenAIgpt-5.4-nanoReview100.0%100.0% (4/4)100.0% final across 84 ops
Qwenqwen3.6-flashOK100.0%100.0% (1/1)100.0% final across 84 ops

The published model-evaluation set covers 92 task attempts and 336 expected MCP operations. Across the selected reports, models emitted 345 tool calls over 350 model requests, with 100.0% aggregate final success. See AI Model Evaluation Results for the detailed current matrix.

Current published result: Docker Enterprise dynamic 20260605 (Enterprise).

ProviderModelCompatibilityTool accuracyRecoveryDocker live status
Anthropicclaude-haiku-4-5-20251001OK100.0%No repairs100.0% final across 202 ops
Googlegemini-flash-latestOK100.0%No repairs100.0% final across 202 ops
OpenAIgpt-5.4-nanoOK100.0%100.0% (3/3)100.0% final across 202 ops
Qwenqwen3.6-flashOK100.0%No repairs100.0% final across 202 ops

The published model-evaluation set covers 124 task attempts and 808 expected MCP operations. Across the selected reports, models emitted 817 tool calls over 817 model requests, with 100.0% aggregate final success. See AI Model Evaluation Results for the detailed current matrix.

Documentation

Full documentation is available at jmrplens.github.io/gitlab-mcp-server. Use this map when you need the source-of-truth reference for a specific area:

DocumentDescription
Getting StartedDownload, setup wizard, per-client configuration
IDE ConfigurationPer-client stdio, HTTP legacy, and HTTP OAuth examples
ConfigurationEnvironment variables, transport modes, TLS
Environment VariablesExhaustive environment variable table with defaults and examples
CLI ReferenceAll command-line flags, exit codes, and runtime examples
HTTP Server ModeShared HTTP deployments, authentication, server pool isolation
Tools ReferenceAll individual tools with input/output schemas, including GitLab.com-only Orbit
Meta-Tools32/48/49 domain meta-tools with action dispatching
Dynamic Toolset2-tool low-token mode with canonical action catalog, safety model, and examples
ResourcesAll 45 resources with URI templates
PromptsAll 37 prompts with arguments and output format
Auto-UpdateSelf-update mechanism, modes, and release format
TestingUnit, E2E, schema model evaluation, Docker model evaluation, and curated model results
SecuritySecurity model, token scopes, input validation
ArchitectureSystem architecture, component design, data flow
Development GuideBuilding, testing, CI/CD, contributing
TroubleshootingCommon startup, token, TLS, transport, and tool-discovery issues

Tech Stack

ComponentTechnology
LanguageGo 1.26+
MCP SDKgithub.com/modelcontextprotocol/go-sdk v1.6.1
GitLab Clientgitlab.com/gitlab-org/api/client-go/v2 v2.42.0
Transportstdio (default), HTTP (Streamable HTTP)

Building from Source

git clone https://github.com/jmrplens/gitlab-mcp-server.git
cd gitlab-mcp-server
make build

See the Development Guide for cross-compilation and contributing guidelines.

Container Image

The published image is ghcr.io/jmrplens/gitlab-mcp-server:latest. Runtime examples live in Quick Start next to MCP client configuration, and Docker Compose/source-build details live in the Development Guide.

FAQ

Does it work with self-hosted GitLab?

Yes. Set GITLAB_URL to your instance URL. When GITLAB_URL is omitted, stdio mode uses https://gitlab.com. Self-signed TLS certificates are supported via GITLAB_SKIP_TLS_VERIFY=true.

Is my data safe?

The server runs locally on your machine (stdio mode) or on your own infrastructure (HTTP mode). No data is sent to third parties — all API calls go directly to your GitLab instance. See SECURITY.md for details.

Can I use it in read-only mode?

Yes. Set GITLAB_READ_ONLY=true to disable all mutating tools (create, update, delete). Only read operations will be available.

Alternatively, set GITLAB_SAFE_MODE=true for a dry-run mode: mutating tools remain visible but return a structured JSON preview instead of executing. Useful for auditing, training, or reviewing what an AI assistant would do.

What GitLab editions are supported?

Both Community Edition (CE) and Enterprise Edition (EE). Set GITLAB_ENTERPRISE=true in stdio mode to enable additional tools for Premium/Ultimate features (DORA metrics, vulnerabilities, compliance, etc.). In HTTP mode, --enterprise can force the Enterprise/Premium catalog, otherwise CE/EE is detected per token+URL pool entry when GitLab reports edition.

How does it handle rate limiting?

The server includes retry logic with backoff for GitLab API rate limits. Errors are classified as transient (retryable) or permanent, with actionable hints in error messages.

Which AI clients are supported?

Any MCP-compatible client: VS Code + GitHub Copilot, Claude Desktop, Cursor, Claude Code, Windsurf, JetBrains IDEs, Zed, Kiro, and others. The built-in setup wizard can auto-configure most clients.

Contributing

See CONTRIBUTING.md for development guidelines, branch naming, commit conventions, and pull request process.

Security

See SECURITY.md for the security policy and vulnerability reporting.

Code of Conduct

See CODE_OF_CONDUCT.md. This project follows the Contributor Covenant v2.1.

Unnecessary Statistics

Numbers nobody asked for, but here they are anyway.

File counts

CategoryFilesLines
Source (.go, non-test)892155,328
Unit tests (_test.go)479264,631
End-to-end tests14134,966
Total1,512454,925

Functions

CategoryCount
Source functions6,421
— exported (public)2,411
— unexported (private)4,010
Unit test functions (TestXxx)10,426
Subtests (t.Run(...))2,577
End-to-end test functions286

Ratios worth noting

ObservationValue
Test lines vs source lines1.70× more tests than code
Average source file length~174 lines
Average test file length~552 lines
Comment lines in source14,560 (~9.4% of source)
Test functions per source function1.6×

Code patterns

PatternCount
if err != nil checks6,027
defer statements690
struct types defined2,302
//nolint suppressions91
TODO / FIXME / HACK comments2

Project

MetricValue
Go packages216
Direct dependencies (go.mod)11
Indirect dependencies49
Git commits211
Unique contributors3

Hall of fame

RecordFile
Longest source fileinternal/tools/dynamic/register.go — 3,629 lines
Longest test fileinternal/tools/projects/projects_test.go — 7,155 lines

Because why not

FactValue
Source code printed at 55 lines/page~2,824 pages of A4
Source lines mentioning "gitlab"9,869 (impossible to avoid)
Longest function name in sourceassertDynamicCompatibilityPolicyOwnedByActionCompat (51 chars)
Longest test function nameTestRequiredMissingAndUnknownParamNames_SchemaValidation_ReturnsSortedMissingAndUnknown (87 chars)
Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Configuration

GITLAB_URLdefault: https://gitlab.com

GitLab instance URL (default: https://gitlab.com; set for self-managed instances)

GITLAB_TOKEN*secret

GitLab Personal Access Token (glpat-...)

GITLAB_SKIP_TLS_VERIFYdefault: false

Skip TLS certificate verification for self-signed certs (default: false)

TOOL_SURFACEdefault: dynamic

Tool catalog selector: dynamic, meta, or individual (default: dynamic)

CAPABILITY_SURFACEdefault: full

Resource and prompt catalog selector: full or minimal (default: full)

META_PARAM_SCHEMAdefault: opaque

Meta-tool input schema detail: opaque, compact, or full (default: opaque)

GITLAB_ENTERPRISEdefault: false

Enable GitLab Premium/Ultimate tools; GitLab.com Enterprise/Premium also exposes Orbit Knowledge Graph tools (default: false)

GITLAB_READ_ONLYdefault: false

Read-only mode: disables all mutating tools (default: false)

GITLAB_SAFE_MODEdefault: false

Safe mode: intercepts mutating tools and returns a JSON preview instead of executing (default: false)

EMBEDDED_RESOURCESdefault: true

Append EmbeddedResource content blocks (clickable links to MCP resources) to get_* tool results (default: true)

EXCLUDE_TOOLS

Comma-separated tool names to exclude from registration (e.g. gitlab_admin,gitlab_runner)

GITLAB_IGNORE_SCOPESdefault: false

Skip Personal Access Token scope detection and register all tools regardless of token permissions (default: false)

UPLOAD_MAX_FILE_SIZEdefault: 2147483648

Maximum attachment upload size in bytes or human-readable (e.g. 2GB). Default: 2147483648 (2 GB)

GITLAB_MCP_ALLOWED_IMPORT_DIRS

Extra OS path-list-separated directories allowed for local GitLab import archives

RATE_LIMIT_RPSdefault: 0

Per-server tools/call rate limit in requests per second; 0 disables it (default: 0)

RATE_LIMIT_BURSTdefault: 40

Token-bucket burst size when RATE_LIMIT_RPS is greater than 0 (default: 40)

LOG_LEVELdefault: info

Logging verbosity (default: info)

AUTO_UPDATEdefault: true

Auto-update mode: true (auto-apply), check (log-only), false (disabled). Default: true

AUTO_UPDATE_REPOdefault: jmrplens/gitlab-mcp-server

GitHub repository slug for release assets (default: jmrplens/gitlab-mcp-server)

AUTO_UPDATE_INTERVALdefault: 1h

Periodic update check interval in HTTP mode (default: 1h)

AUTO_UPDATE_TIMEOUTdefault: 60s

Startup/background update timeout, range 5s-10m (default: 60s)

Categories
Developer Tools
Registryactive
Packagehttps://github.com/jmrplens/gitlab-mcp-server/releases/download/v2.1.3/gitlab-mcp-server-linux-amd64
TransportSTDIO, HTTP
AuthRequired
UpdatedJun 6, 2026
View on GitHub

Related Developer Tools MCP Servers

View all →
Git Mcp Server

ray0907/git-mcp-server

MCP server for GitLab and GitHub
Git Mcp Server

cyanheads/git-mcp-server

Comprehensive Git MCP server enabling native git tools including clone, commit, worktree, & more.
221
Atlassian Dc Mcp Bitbucket

io.github.b1ff/atlassian-dc-mcp-bitbucket

MCP server for Atlassian Bitbucket Data Center - interact with repositories and code
77
Atlassian Dc Mcp Jira

io.github.b1ff/atlassian-dc-mcp-jira

MCP server for Atlassian Jira Data Center - search, view, and create issues
77
Atlassian Jira

com.mcparmory/atlassian-jira

Create, search, and manage issues, projects, and team workflows
25
Vscode Terminal Mcp

sirlordt/vscode-terminal-mcp

Execute commands in visible VSCode terminal tabs with output capture and session reuse.
1