zereight avatar

GitLab MCP Server

zereight/gitlab-mcp

The GitLab MCP Server provides comprehensive GitLab project management capabilities to AI clients through a Model Context Protocol interface, enabling operations on projects, merge requests, issues, pipelines, wiki, and releases. It offers multiple authentication methods including Personal Access Tokens, OAuth2 with browser-based flows, and remote authorization support, with compatibility across stdio, SSE, and HTTP transports for clients like Claude, VS Code, Cursor, and Copilot. The server solves the problem of giving AI assistants secure, authenticated access to GitLab resources while supporting various deployment scenarios from local desktop use to remote multi-user server deployments.

GitHub stars
2.1K
tools
80
auth
Secret needed
transport
STDIO
env vars
21
last updated
Nov 12, 2026

Install

From registry metadata
$ npx add-mcp @zereight/mcp-gitlab --name gitlab-mcp --env 'GITLAB_PERSONAL_ACCESS_TOKEN=${GITLAB_PERSONAL_ACCESS_TOKEN}' --env 'GITLAB_JOB_TOKEN=${GITLAB_JOB_TOKEN}'

Run in your terminal. add-mcp asks which agents to add it to, then asks for each value it needs. Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add gitlab-mcp --env GITLAB_PERSONAL_ACCESS_TOKEN=YOUR_GITLAB_PERSONAL_ACCESS_TOKEN --env GITLAB_PERSONAL_ACCESS_TOKEN_FILE=YOUR_GITLAB_PERSONAL_ACCESS_TOKEN_FILE --env GITLAB_JOB_TOKEN=YOUR_GITLAB_JOB_TOKEN --env GITLAB_AUTH_COOKIE_PATH=YOUR_GITLAB_AUTH_COOKIE_PATH --env GITLAB_USE_OAUTH=YOUR_GITLAB_USE_OAUTH --env GITLAB_OAUTH_CLIENT_ID=YOUR_GITLAB_OAUTH_CLIENT_ID --env GITLAB_OAUTH_TOKEN_SCRIPT=YOUR_GITLAB_OAUTH_TOKEN_SCRIPT --env GITLAB_API_URL=https://gitlab.com/api/v4 --env GITLAB_ALLOWED_PROJECT_IDS=YOUR_GITLAB_ALLOWED_PROJECT_IDS --env GITLAB_PERMISSION_MODE=YOUR_GITLAB_PERMISSION_MODE --env GITLAB_TOOLSETS=YOUR_GITLAB_TOOLSETS --env GITLAB_TOOLS=YOUR_GITLAB_TOOLS --env GITLAB_DENIED_TOOLS_REGEX=YOUR_GITLAB_DENIED_TOOLS_REGEX --env GITLAB_TOOL_POLICY_APPROVE=YOUR_GITLAB_TOOL_POLICY_APPROVE --env GITLAB_TOOL_POLICY_HIDDEN=YOUR_GITLAB_TOOL_POLICY_HIDDEN --env NODE_TLS_REJECT_UNAUTHORIZED=YOUR_NODE_TLS_REJECT_UNAUTHORIZED --env GITLAB_CA_CERT_PATH=YOUR_GITLAB_CA_CERT_PATH --env GITLAB_MASKING_ENABLED=false --env GITLAB_MASKING_CONFIG=YOUR_GITLAB_MASKING_CONFIG --env GITLAB_MASKING_POLICY_FILE=YOUR_GITLAB_MASKING_POLICY_FILE --env GITLAB_MASKING_WORKSPACE_DIR=YOUR_GITLAB_MASKING_WORKSPACE_DIR -- npx -y @zereight/mcp-gitlab

Run in your terminal. Replace YOUR_* placeholders with real values; add --scope user to install for every project.

Tools

Verified live · 80 tools

Verified live against the running server on Jun 10, 2026.

merge_merge_requestMerge a merge request8 params

Merge a merge request

Parameters* required
auto_mergeboolean
If true, the merge request merges when the pipeline succeeds.default: false
merge_commit_messagestring
Custom merge commit message
merge_request_iidstring
The IID of a merge request
merge_when_pipeline_succeedsboolean
If true, the merge request merges when the pipeline succeeds.in GitLab 17.11. Usedefault: false
project_id*string
Project ID or complete URL-encoded path to project
should_remove_source_branchboolean
Remove source branch after mergedefault: false
squashboolean
Squash commits into a single commit when mergingdefault: false
squash_commit_messagestring
Custom squash commit message
approve_merge_requestApprove a merge request4 params

Approve a merge request

Parameters* required
approval_passwordstring
Current user's password. Required if 'Require user re-authentication to approve' is enabled in the project settings
merge_request_iid*string
The IID of the merge request to approve
project_id*string
Project ID or complete URL-encoded path to project
shastring
The HEAD of the merge request. Optional, but used to ensure the merge request hasn't changed since you last reviewed it
unapprove_merge_requestUnapprove a merge request2 params

Unapprove a merge request

Parameters* required
merge_request_iid*string
The IID of the merge request to unapprove
project_id*string
Project ID or complete URL-encoded path to project
get_merge_request_approval_stateGet merge request approval details including approvers2 params

Get merge request approval details including approvers

Parameters* required
merge_request_iid*string
The IID of the merge request
project_id*string
Project ID or complete URL-encoded path to project
get_merge_request_conflictsGet the conflicts of a merge request2 params

Get the conflicts of a merge request

Parameters* required
merge_request_iid*string
The IID of the merge request
project_id*string
Project ID or complete URL-encoded path to project
list_merge_request_pipelinesList pipelines for a merge request with pagination4 params

List pipelines for a merge request with pagination

Parameters* required
merge_request_iid*string
The internal ID of the merge request
pagenumber
Page number for pagination (default: 1)
per_pagenumber
Number of items per page (max: 100, default: 20)
project_id*string
Project ID or complete URL-encoded path to project
create_or_update_fileCreate or update a file in a GitLab project8 params

Create or update a file in a GitLab project

Parameters* required
branch*string
Branch to create/update the file in
commit_idstring
Current file commit ID (for update operations)
commit_message*string
Commit message
content*string
Content of the file
file_path*string
Path where to create/update the file
last_commit_idstring
Last known file commit ID
previous_pathstring
Path of the file to move/rename
project_id*string
Project ID or complete URL-encoded path to project
search_repositoriesSearch for GitLab projects4 params

Search for GitLab projects

Parameters* required
pagenumber
Page number for pagination (default: 1)
per_pagenumber
Number of items per page (max: 100, default: 20)
querystring
Search query (alias for 'search')
searchstring
Search query
create_repositoryCreate a new GitLab project4 params

Create a new GitLab project

Parameters* required
descriptionstring
Repository description
initialize_with_readmeboolean
Initialize with README.md
name*string
Repository name
visibilitystring
Repository visibility levelone of private · internal · public
create_groupCreate new group or subgroup5 params

Create new group or subgroup

Parameters* required
descriptionstring
The group's description
name*string
The name of the group
parent_idnumber
The parent group ID for creating a subgroup
path*string
The path of the group
visibilitystring
The group's visibility levelone of private · internal · public
get_file_contentsGet contents of a file or directory from a GitLab project4 params

Get contents of a file or directory from a GitLab project

Parameters* required
file_pathstring
Path to the file or directory. Takes precedence over 'path' when both are provided
pathstring
Alias of file_path
project_idstring
Project ID or URL-encoded path (optional; falls back to env)
refstring
Branch/tag/commit to get contents from
push_filesPush multiple files in a single commit4 params

Push multiple files in a single commit

Parameters* required
branch*string
Branch to push to
commit_message*string
Commit message
files*array
Array of files to push
project_id*string
Project ID or complete URL-encoded path to project
create_issueCreate a new issue8 params

Create a new issue

Parameters* required
assignee_idsarray
Array of user IDs to assign
descriptionstring
Issue description
issue_typestring
The type of issue. One of issue, incident, test_case or task.one of issue · incident · test_case · taskdefault: issue
labelsarray
Array of label names
milestone_idstring
Milestone ID to assign
project_id*string
Project ID or complete URL-encoded path to project
title*string
Issue title
weightnumber
Weight of the issue (numeric, typically hours of work)
create_merge_requestCreate a new merge request13 params

Create a new merge request

Parameters* required
allow_collaborationboolean
Allow commits from upstream members
assignee_idsarray
The ID of the users to assign the MR to
descriptionstring
Merge request description
draftboolean
Create as draft merge request
labelsarray
Labels for the MR
project_id*string
Project ID or complete URL-encoded path to project
remove_source_branchboolean
Flag indicating if a merge request should remove the source branch when merging.
reviewer_idsarray
The ID of the users to assign as reviewers of the MR
source_branch*string
Branch containing changes
squashboolean
If true, squash all commits into a single commit on merge.
target_branch*string
Branch to merge into
target_project_idstring
Numeric ID of the target project.
title*string
Merge request title
fork_repositoryFork a project to your account or specified namespace2 params

Fork a project to your account or specified namespace

Parameters* required
namespacestring
Namespace to fork to (full path)
project_id*string
Project ID or complete URL-encoded path to project
create_branchCreate a new branch3 params

Create a new branch

Parameters* required
branch*string
Name for the new branch
project_id*string
Project ID or complete URL-encoded path to project
refstring
Source branch/commit for new branch
get_branchGet branch details (commit, protection status)2 params

Get branch details (commit, protection status)

Parameters* required
branch_name*string
Name of the branch
project_id*string
Project ID or complete URL-encoded path to project
list_branchesList branches in project with search filter4 params

List branches in project with search filter

Parameters* required
pagenumber
Page number for pagination (default: 1)
per_pagenumber
Number of items per page (max: 100, default: 20)
project_id*string
Project ID or complete URL-encoded path to project
searchstring
Search term to filter branches by name
delete_branchDelete branch from project2 params

Delete branch from project

Parameters* required
branch_name*string
Name of the branch to delete
project_id*string
Project ID or complete URL-encoded path to project
get_merge_requestGet details of a merge request (mergeRequestIid or branchName required)3 params

Get details of a merge request (mergeRequestIid or branchName required)

Parameters* required
merge_request_iidstring
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
source_branchstring
Source branch name
get_merge_request_diffsGet the changes/diffs of a merge request (mergeRequestIid or branchName required)5 params

Get the changes/diffs of a merge request (mergeRequestIid or branchName required)

Parameters* required
excluded_file_patternsarray
Array of regex patterns to exclude files from the diff results. Each pattern is a JavaScript-compatible regular expression that matches file paths to ignore. Examples: ["^vendor/", "^test/mocks/",...
merge_request_iidstring
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
source_branchstring
Source branch name
viewstring
Diff view typeone of inline · parallel
list_merge_request_changed_filesList changed file paths in a merge request without diff content (mergeRequestIid or branchName required)4 params

List changed file paths in a merge request without diff content (mergeRequestIid or branchName required)

Parameters* required
excluded_file_patternsarray
Array of regex patterns to exclude files. Examples: ["^vendor/", "\.pb\.go$"]
merge_request_iidstring
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
source_branchstring
Source branch name
list_merge_request_diffsList merge request diffs with pagination (mergeRequestIid or branchName required)6 params

List merge request diffs with pagination (mergeRequestIid or branchName required)

Parameters* required
merge_request_iidstring
The IID of a merge request
pagenumber
Page number for pagination (default: 1)
per_pagenumber
Number of items per page (max: 100, default: 20)
project_id*string
Project ID or complete URL-encoded path to project
source_branchstring
Source branch name
unidiffboolean
Present diffs in the unified diff format. Default is false. Introduced in GitLab 16.5.
get_merge_request_file_diffGet diffs for specific files from a merge request (mergeRequestIid or branchName required)5 params

Get diffs for specific files from a merge request (mergeRequestIid or branchName required)

Parameters* required
file_paths*array
List of file paths to retrieve diffs for (e.g. ['src/api/users.ts', 'src/repo/user.go']). Call list_merge_request_changed_files first to get the full list of changed paths.
merge_request_iidstring
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
source_branchstring
Source branch name
unidiffboolean
Present diff in the unified diff format. Default is false.
list_merge_request_versionsList all versions of a merge request2 params

List all versions of a merge request

Parameters* required
merge_request_iid*string
The internal ID of the merge request
project_id*string
Project ID or complete URL-encoded path to project
get_merge_request_versionGet a specific version of a merge request4 params

Get a specific version of a merge request

Parameters* required
merge_request_iid*string
The internal ID of the merge request
project_id*string
Project ID or complete URL-encoded path to project
unidiffboolean
Present diffs in the unified diff format. Default is false. Introduced in GitLab 16.5.
version_id*string
The ID of the merge request diff version
get_branch_diffsGet diffs between two branches or commits5 params

Get diffs between two branches or commits

Parameters* required
excluded_file_patternsarray
Array of regex patterns to exclude files from the diff results. Each pattern is a JavaScript-compatible regular expression that matches file paths to ignore. Examples: ["^vendor/", "^test/mocks/",...
from*string
The base branch or commit SHA to compare from
project_id*string
Project ID or complete URL-encoded path to project
straightboolean
Comparison method: false for '...' (default), true for '--'
to*string
The target branch or commit SHA to compare to
update_merge_requestUpdate a merge request (mergeRequestIid or branchName required)13 params

Update a merge request (mergeRequestIid or branchName required)

Parameters* required
assignee_idsarray
The ID of the users to assign the MR to
descriptionstring
The description of the merge request
draftboolean
Work in progress merge request
labelsarray
Labels for the MR
merge_request_iidstring
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
remove_source_branchboolean
Flag indicating if the source branch should be removed
reviewer_idsarray
The ID of the users to assign as reviewers of the MR
source_branchstring
Source branch name
squashboolean
Squash commits into a single commit when merging
state_eventstring
New state (close/reopen) for the MRone of close · reopen
target_branchstring
The target branch
titlestring
The title of the merge request
create_noteCreate a new note (comment) to an issue or merge request4 params

Create a new note (comment) to an issue or merge request

Parameters* required
body*string
Note content
noteable_iid*string
IID of the issue or merge request
noteable_type*string
Type of noteable (issue or merge_request)one of issue · merge_request
project_id*string
Project ID or namespace/project_path
create_merge_request_threadCreate a new thread on a merge request5 params

Create a new thread on a merge request

Parameters* required
body*string
The content of the thread
created_atstring
Date the thread was created at (ISO 8601 format)
merge_request_iid*string
The IID of a merge request
positionobject
Position when creating a diff note
project_id*string
Project ID or complete URL-encoded path to project
resolve_merge_request_threadResolve a thread on a merge request4 params

Resolve a thread on a merge request

Parameters* required
discussion_id*string
The ID of a thread
merge_request_iid*string
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
resolved*boolean
Whether to resolve the thread
mr_discussionsList discussion items for a merge request4 params

List discussion items for a merge request

Parameters* required
merge_request_iid*string
The IID of a merge request
pagenumber
Page number for pagination (default: 1)
per_pagenumber
Number of items per page (max: 100, default: 20)
project_id*string
Project ID or complete URL-encoded path to project
delete_merge_request_discussion_noteDelete a discussion note on a merge request4 params

Delete a discussion note on a merge request

Parameters* required
discussion_id*string
The ID of a thread
merge_request_iid*string
The IID of a merge request
note_id*string
The ID of a thread note
project_id*string
Project ID or complete URL-encoded path to project
update_merge_request_discussion_noteUpdate a discussion note on a merge request6 params

Update a discussion note on a merge request

Parameters* required
bodystring
The content of the note or reply
discussion_idstring
The ID of a thread
merge_request_iidstring
The IID of a merge request
note_idstring
The ID of a thread note
project_idstring
Project ID or complete URL-encoded path to project
resolvedboolean
Resolve or unresolve the note
create_merge_request_discussion_noteAdd a new discussion note to an existing merge request thread5 params

Add a new discussion note to an existing merge request thread

Parameters* required
body*string
The content of the note or reply
created_atstring
Date the note was created at (ISO 8601 format)
discussion_id*string
The ID of a thread
merge_request_iid*string
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
create_merge_request_noteAdd a new note to a merge request3 params

Add a new note to a merge request

Parameters* required
body*string
The content of the note or reply
merge_request_iid*string
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
delete_merge_request_noteDelete an existing merge request note3 params

Delete an existing merge request note

Parameters* required
merge_request_iid*string
The IID of a merge request
note_id*string
The ID of a thread note
project_id*string
Project ID or complete URL-encoded path to project
get_merge_request_noteGet a specific note for a merge request3 params

Get a specific note for a merge request

Parameters* required
merge_request_iid*string
The IID of a merge request
note_id*string
The ID of a thread note
project_id*string
Project ID or complete URL-encoded path to project
get_merge_request_notesList notes for a merge request6 params

List notes for a merge request

Parameters* required
merge_request_iid*string
The IID of a merge request
order_bystring
The field to sort the notes byone of created_at · updated_at
pagenumber
Page number for pagination
per_pagenumber
Number of items per page
project_id*string
Project ID or complete URL-encoded path to project
sortstring
The sort order of the notesone of asc · desc
update_merge_request_noteModify an existing merge request note4 params

Modify an existing merge request note

Parameters* required
body*string
The content of the note or reply
merge_request_iid*string
The IID of a merge request
note_id*string
The ID of a thread note
project_id*string
Project ID or complete URL-encoded path to project
get_draft_noteGet a single draft note from a merge request3 params

Get a single draft note from a merge request

Parameters* required
draft_note_id*string
The ID of the draft note
merge_request_iid*string
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
list_draft_notesList draft notes for a merge request2 params

List draft notes for a merge request

Parameters* required
merge_request_iid*string
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
create_draft_noteCreate a draft note for a merge request6 params

Create a draft note for a merge request

Parameters* required
body*string
The content of the draft note
in_reply_to_discussion_idstring
The ID of a discussion the draft note replies to
merge_request_iid*string
The IID of a merge request
positionobject
Position when creating a diff note
project_id*string
Project ID or complete URL-encoded path to project
resolve_discussionboolean
Whether to resolve the discussion when publishing
update_draft_noteUpdate an existing draft note6 params

Update an existing draft note

Parameters* required
bodystring
The content of the draft note
draft_note_id*string
The ID of the draft note
merge_request_iid*string
The IID of a merge request
positionobject
Position when creating a diff note
project_id*string
Project ID or complete URL-encoded path to project
resolve_discussionboolean
Whether to resolve the discussion when publishing
delete_draft_noteDelete a draft note3 params

Delete a draft note

Parameters* required
draft_note_id*string
The ID of the draft note
merge_request_iid*string
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
publish_draft_notePublish a single draft note3 params

Publish a single draft note

Parameters* required
draft_note_id*string
The ID of the draft note
merge_request_iid*string
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
bulk_publish_draft_notesPublish all draft notes for a merge request2 params

Publish all draft notes for a merge request

Parameters* required
merge_request_iid*string
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
list_merge_request_emoji_reactionsList all emoji reactions on a merge request2 params

List all emoji reactions on a merge request

Parameters* required
merge_request_iid*string
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
list_merge_request_note_emoji_reactionsList all emoji reactions on a merge request note. Pass discussion_id for discussion thread replies.4 params

List all emoji reactions on a merge request note. Pass discussion_id for discussion thread replies.

Parameters* required
discussion_idstring
The ID of a discussion thread. Required for notes that are discussion replies; omit for top-level notes.
merge_request_iid*string
The IID of a merge request
note_id*string
The ID of a note (comment or thread reply)
project_id*string
Project ID or complete URL-encoded path to project
create_merge_request_emoji_reactionAdd an emoji reaction to a merge request (e.g. thumbsup, rocket, eyes)3 params

Add an emoji reaction to a merge request (e.g. thumbsup, rocket, eyes)

Parameters* required
merge_request_iid*string
The IID of a merge request
name*string
Name of the emoji without colons (e.g. 'thumbsup', 'rocket', 'eyes')
project_id*string
Project ID or complete URL-encoded path to project
delete_merge_request_emoji_reactionRemove an emoji reaction from a merge request3 params

Remove an emoji reaction from a merge request

Parameters* required
award_id*string
The ID of the emoji reaction to delete
merge_request_iid*string
The IID of a merge request
project_id*string
Project ID or complete URL-encoded path to project
create_merge_request_note_emoji_reactionAdd an emoji reaction to a merge request note. Pass discussion_id for discussion thread replies.5 params

Add an emoji reaction to a merge request note. Pass discussion_id for discussion thread replies.

Parameters* required
discussion_idstring
The ID of a discussion thread. Required for notes that are discussion replies; omit for top-level notes.
merge_request_iid*string
The IID of a merge request
name*string
Name of the emoji without colons (e.g. 'thumbsup', 'rocket', 'eyes')
note_id*string
The ID of a note (comment or thread reply)
project_id*string
Project ID or complete URL-encoded path to project
delete_merge_request_note_emoji_reactionRemove an emoji reaction from a merge request note. Pass discussion_id for discussion thread replies.5 params

Remove an emoji reaction from a merge request note. Pass discussion_id for discussion thread replies.

Parameters* required
award_id*string
The ID of the emoji reaction to delete
discussion_idstring
The ID of a discussion thread. Required for notes that are discussion replies; omit for top-level notes.
merge_request_iid*string
The IID of a merge request
note_id*string
The ID of a note (comment or thread reply)
project_id*string
Project ID or complete URL-encoded path to project
update_issue_noteModify an existing issue thread note6 params

Modify an existing issue thread note

Parameters* required
bodystring
The content of the note or reply
discussion_idstring
The ID of a thread
issue_iidstring
The IID of an issue
note_idstring
The ID of a thread note
project_idstring
Project ID or complete URL-encoded path to project
resolvedboolean
Resolve or unresolve the note
create_issue_noteAdd a note to an issue, optionally replying to a discussion thread5 params

Add a note to an issue, optionally replying to a discussion thread

Parameters* required
body*string
The content of the note or reply
created_atstring
Date the note was created at (ISO 8601 format)
discussion_idstring
The ID of a thread. If provided, replies to that thread; otherwise creates a top-level note
issue_iid*string
The IID of an issue
project_id*string
Project ID or complete URL-encoded path to project
list_issue_emoji_reactionsList all emoji reactions on an issue2 params

List all emoji reactions on an issue

Parameters* required
issue_iid*string
The IID of an issue
project_id*string
Project ID or complete URL-encoded path to project
list_issue_note_emoji_reactionsList all emoji reactions on an issue note. Pass discussion_id for discussion thread replies.4 params

List all emoji reactions on an issue note. Pass discussion_id for discussion thread replies.

Parameters* required
discussion_idstring
The ID of a discussion thread. Required for notes that are discussion replies; omit for top-level notes.
issue_iid*string
The IID of an issue
note_id*string
The ID of a note (comment or thread reply)
project_id*string
Project ID or complete URL-encoded path to project
create_issue_emoji_reactionAdd an emoji reaction to an issue (e.g. thumbsup, rocket, eyes)3 params

Add an emoji reaction to an issue (e.g. thumbsup, rocket, eyes)

Parameters* required
issue_iid*string
The IID of an issue
name*string
Name of the emoji without colons (e.g. 'thumbsup', 'rocket', 'eyes')
project_id*string
Project ID or complete URL-encoded path to project
delete_issue_emoji_reactionRemove an emoji reaction from an issue3 params

Remove an emoji reaction from an issue

Parameters* required
award_id*string
The ID of the emoji reaction to delete
issue_iid*string
The IID of an issue
project_id*string
Project ID or complete URL-encoded path to project
create_issue_note_emoji_reactionAdd an emoji reaction to an issue note. Pass discussion_id for discussion thread replies.5 params

Add an emoji reaction to an issue note. Pass discussion_id for discussion thread replies.

Parameters* required
discussion_idstring
The ID of a discussion thread. Required for notes that are discussion replies; omit for top-level notes.
issue_iid*string
The IID of an issue
name*string
Name of the emoji without colons (e.g. 'thumbsup', 'rocket', 'eyes')
note_id*string
The ID of a note (comment or thread reply)
project_id*string
Project ID or complete URL-encoded path to project
delete_issue_note_emoji_reactionRemove an emoji reaction from an issue note. Pass discussion_id for discussion thread replies.5 params

Remove an emoji reaction from an issue note. Pass discussion_id for discussion thread replies.

Parameters* required
award_id*string
The ID of the emoji reaction to delete
discussion_idstring
The ID of a discussion thread. Required for notes that are discussion replies; omit for top-level notes.
issue_iid*string
The IID of an issue
note_id*string
The ID of a note (comment or thread reply)
project_id*string
Project ID or complete URL-encoded path to project
list_issuesList issues (default: created by current user; use scope='all' for all)21 params

List issues (default: created by current user; use scope='all' for all)

Parameters* required
assignee_idstring
Return issues assigned to the given user ID. user id or none or any
assignee_usernamearray
Return issues assigned to the given username
author_idstring
Return issues created by the given user ID
author_usernamestring
Return issues created by the given username
confidentialboolean
Filter confidential or public issues
created_afterstring
Return issues created after the given time
created_beforestring
Return issues created before the given time
due_datestring
Return issues that have the due date
issue_typestring
Filter to a given type of issue. One of issue, incident, test_case or taskone of issue · incident · test_case · task
iteration_idstring
Return issues assigned to the given iteration ID. None returns issues that do not belong to an iteration. Any returns issues that belong to an iteration.
labelsarray
Array of label names
milestonestring
Milestone title
pagenumber
Page number for pagination (default: 1)
per_pagenumber
Number of items per page (max: 100, default: 20)
project_idstring
Project ID or URL-encoded path (optional - if not provided, lists issues across all accessible projects)
scopestring
Return issues from a specific scopeone of created_by_me · assigned_to_me · all
searchstring
Search for specific terms
statestring
Return issues with a specific stateone of opened · closed · all
updated_afterstring
Return issues updated after the given time
updated_beforestring
Return issues updated before the given time

+1 more parameters. See the server's own documentation for the full schema.

my_issuesList issues assigned to the authenticated user11 params

List issues assigned to the authenticated user

Parameters* required
created_afterstring
Return issues created after the given time (ISO 8601)
created_beforestring
Return issues created before the given time (ISO 8601)
labelsarray
Array of label names to filter by
milestonestring
Milestone title to filter by
pagenumber
Page number for pagination (default: 1)
per_pagenumber
Number of items per page (default: 20, max: 100)
project_idstring
Project ID or URL-encoded path (optional when GITLAB_PROJECT_ID is set)
searchstring
Search for specific terms in title and description
statestring
Return issues with a specific state (default: opened)one of opened · closed · all
updated_afterstring
Return issues updated after the given time (ISO 8601)
updated_beforestring
Return issues updated before the given time (ISO 8601)
get_issueGet details of a specific issue2 params

Get details of a specific issue

Parameters* required
issue_iid*string
The internal ID of the project issue
project_id*string
Project ID or URL-encoded path
update_issueUpdate an issue13 params

Update an issue

Parameters* required
assignee_idsarray
Array of user IDs to assign issue to
confidentialboolean
Set the issue to be confidential
descriptionstring
The description of the issue
discussion_lockedboolean
Flag to lock discussions
due_datestring
Date the issue is due (YYYY-MM-DD)
issue_iid*string
The internal ID of the project issue
issue_typestring
The type of issue. One of issue, incident, test_case or task.one of issue · incident · test_case · task
labelsarray
Array of label names
milestone_idstring
Milestone ID to assign
project_id*string
Project ID or URL-encoded path
state_eventstring
Update issue state (close/reopen)one of close · reopen
titlestring
The title of the issue
weightnumber
Weight of the issue (numeric, typically hours of work)
update_issue_description_patchApply a patch (search/replace or unified diff) to an issue description. Reduces token usage by allowing small changes without sending the full description. Supports dry_run to preview changes and create_note to summarize updates.7 params

Apply a patch (search/replace or unified diff) to an issue description. Reduces token usage by allowing small changes without sending the full description. Supports dry_run to preview changes and create_note to summarize updates.

Parameters* required
allow_multipleboolean
For search_replace: allow multiple matches to all be replaced (default: false — fail on duplicate)
create_noteboolean
If true, add a note summarizing the change after update
dry_runboolean
If true, preview changes without updating the issue
issue_iid*string
The internal ID of the project issue
patch*string
The patch content to apply to the issue description
patch_type*string
Type of patch format to applyone of search_replace · unified_diff
project_id*string
Project ID or URL-encoded path
delete_issueDelete an issue2 params

Delete an issue

Parameters* required
issue_iid*string
The internal ID of the project issue
project_id*string
Project ID or URL-encoded path
list_todosList GitLab to-do items for the current user8 params

List GitLab to-do items for the current user

Parameters* required
actionstring
Filter by to-do actionone of assigned · mentioned · build_failed · marked · approval_required · unmergeable
author_idnumber
Filter by author ID
group_idnumber
Filter by group ID
pagenumber
Page number for pagination (default: 1)
per_pagenumber
Number of items per page (max: 100, default: 20)
project_idnumber
Filter by project ID
statestring
Filter by to-do stateone of pending · done
typestring
Filter by to-do target typeone of Issue · MergeRequest · Commit · Epic · DesignManagement::Design · AlertManagement::Alert
mark_todo_doneMark a GitLab to-do item as done1 params

Mark a GitLab to-do item as done

Parameters* required
id*number
The ID of the to-do item
mark_all_todos_doneMark all pending GitLab to-do items as done for the current user

Mark all pending GitLab to-do items as done for the current user

No parameters. Call it with no arguments.

list_issue_linksList all issue links for a specific issue2 params

List all issue links for a specific issue

Parameters* required
issue_iid*string
The internal ID of a project's issue
project_id*string
Project ID or URL-encoded path
list_issue_discussionsList discussions for an issue4 params

List discussions for an issue

Parameters* required
issue_iid*string
The internal ID of the project issue
pagenumber
Page number for pagination (default: 1)
per_pagenumber
Number of items per page (max: 100, default: 20)
project_id*string
Project ID or URL-encoded path
get_issue_linkGet a specific issue link3 params

Get a specific issue link

Parameters* required
issue_iid*string
The internal ID of a project's issue
issue_link_id*string
ID of an issue relationship
project_id*string
Project ID or URL-encoded path
create_issue_linkCreate an issue link between two issues5 params

Create an issue link between two issues

Parameters* required
issue_iid*string
The internal ID of a project's issue
link_typestring
The type of the relation, defaults to relates_toone of relates_to · blocks · is_blocked_by
project_id*string
Project ID or URL-encoded path
target_issue_iid*string
The internal ID of a target project's issue
target_project_id*string
The ID or URL-encoded path of a target project
delete_issue_linkDelete an issue link3 params

Delete an issue link

Parameters* required
issue_iid*string
The internal ID of a project's issue
issue_link_id*string
The ID of an issue relationship
project_id*string
Project ID or URL-encoded path
list_namespacesList all namespaces (users and groups) available to the current user. Filter by kind='group' for groups only.4 params

List all namespaces (users and groups) available to the current user. Filter by kind='group' for groups only.

Parameters* required
ownedboolean
Filter for namespaces owned by current user
pagenumber
Page number for pagination (default: 1)
per_pagenumber
Number of items per page (max: 100, default: 20)
searchstring
Search term for namespaces
get_namespaceGet details of a namespace (user or group) by ID or path. Groups are namespaces with kind='group'.1 params

Get details of a namespace (user or group) by ID or path. Groups are namespaces with kind='group'.

Parameters* required
namespace_id*string
Namespace ID or full path
verify_namespaceVerify if a namespace path exists1 params

Verify if a namespace path exists

Parameters* required
path*string
Namespace path to verify
get_projectGet details of a specific project1 params

Get details of a specific project

Parameters* required
project_id*string
Project ID or URL-encoded path
list_projectsList projects accessible by the current user15 params

List projects accessible by the current user

Parameters* required
archivedboolean
Filter for archived projects
membershipboolean
Filter for projects where current user is a member
min_access_levelnumber
Filter by minimum access level
order_bystring
Return projects ordered by fieldone of id · name · path · created_at · updated_at · last_activity_at
ownedboolean
Filter for projects owned by current user
pagenumber
Page number for pagination (default: 1)
per_pagenumber
Number of items per page (max: 100, default: 20)
searchstring
Search term for projects
search_namespacesboolean
Needs to be true if search is full path
simpleboolean
Return only limited fields
sortstring
Return projects sorted in ascending or descending orderone of asc · desc
topicstring
Filter by topic (projects tagged with this topic)
visibilitystring
Filter by project visibilityone of public · internal · private
with_issues_enabledboolean
Filter projects with issues feature enabled
with_merge_requests_enabledboolean
Filter projects with merge requests feature enabled

Sponsors

Configuration

GITLAB_PERSONAL_ACCESS_TOKENsecret

GitLab personal access token for local stdio use. A non-empty value overrides GITLAB_PERSONAL_ACCESS_TOKEN_FILE. One of this token, GITLAB_PERSONAL_ACCESS_TOKEN_FILE, GITLAB_JOB_TOKEN, GITLAB_AUTH_COOKIE_PATH, or GITLAB_USE_OAUTH=true must be set. Create a token with the GitLab s

GITLAB_PERSONAL_ACCESS_TOKEN_FILE

Path to a file that contains the personal access token. Read once at startup and trimmed. Ignored when GITLAB_PERSONAL_ACCESS_TOKEN or --token is non-empty. A missing, unreadable, or empty file stops startup. Does not replace job token, OAuth, cookie, or remote authorization.

GITLAB_JOB_TOKENsecret

Optional GitLab CI job token to use instead of a personal access token when running inside GitLab CI.

GITLAB_AUTH_COOKIE_PATH

Optional path to a GitLab authentication cookie file for cookie-based authentication.

GITLAB_USE_OAUTH

Set to true to start with GitLab OAuth instead of a personal access token, job token, or cookie file.

GITLAB_OAUTH_CLIENT_ID

GitLab OAuth application ID. When GITLAB_USE_OAUTH=true, set this or GITLAB_OAUTH_TOKEN_SCRIPT.

GITLAB_OAUTH_TOKEN_SCRIPT

Command that prints an OAuth access token. When GITLAB_USE_OAUTH=true, set this or GITLAB_OAUTH_CLIENT_ID.

GITLAB_API_URLdefault: https://gitlab.com/api/v4

GitLab API base URL. Use https://gitlab.com/api/v4 for GitLab.com or your self-managed GitLab API URL.

GITLAB_ALLOWED_PROJECT_IDS

Optional comma-separated list of GitLab project IDs that this server is allowed to access.

GITLAB_PERMISSION_MODE

Tool exposure. Allowed values are readonly, modify, and full. Unset uses full. readonly keeps read-only tools. modify blocks delete and teardown tools.

GITLAB_TOOLSETS

Optional comma-separated toolset ids (projects, issues, merge_requests, …). Unset keeps the lean core default plus discover_tools. Do not set all unless you accept loading ~all schemas (~73k tokens).

GITLAB_TOOLS

Optional comma-separated list of individual tool names to add on top of enabled toolsets.

GITLAB_DENIED_TOOLS_REGEX

Optional regular expression used to hide matching tools from the server.

GITLAB_TOOL_POLICY_APPROVE

Optional comma-separated list of tool names that require explicit approval before execution.

GITLAB_TOOL_POLICY_HIDDEN

Optional comma-separated list of tool names to hide from tools/list.

NODE_TLS_REJECT_UNAUTHORIZED

Set to 0 only when you intentionally need to connect to a GitLab instance with invalid or self-signed TLS certificates.

GITLAB_CA_CERT_PATH

Optional path to a custom CA certificate file for self-managed GitLab instances.

GITLAB_MASKING_ENABLEDdefault: false

Set to true to mask text tool results and returned errors using built-in or configured rules.

GITLAB_MASKING_CONFIG

Optional path to a response-masking JSON configuration file.

GITLAB_MASKING_POLICY_FILE

Optional protected server-owned JSON file containing managed masking policies.

GITLAB_MASKING_WORKSPACE_DIR

Directory used to resolve response-masking configuration paths.

Readme

GitLab MCP

GitLab MCP Server


View the full README on GitHub

Details

Repository
github.com/zereight/gitlab-mcp
Website
zereight.github.io/gitlab-mcp
Categories
Developer Tools, Documents & Knowledge
Package
@zereight/mcp-gitlab
Transport
STDIO
Auth
Required
Registry
MCP registry, active
Tools verified
Jun 10, 2026

Related Developer Tools MCP servers

View all
1getsentry avatarSentrygetsentry/toolkitMCP server for Sentry - error monitoring, issue tracking, and debugging for AI assistants0stars
2mark3labs avatarFilesystemmark3labs/mcp-filesystem-serverGo server implementing Model Context Protocol (MCP) for filesystem operations.640stars
3jerhadf avatarLinearjerhadf/linear-mcp-serverA server that integrates Linear's project management system with the Model Context Protocol (MCP) to allow LLMs to interact with Linear.344stars
4snyk avatarMcpsnyk/studio-mcpEasily find and fix security issues in your applications leveraging Snyk platform capabilities.0stars
5jmrplens avatarGitLab MCP Serverjmrplens/gitlab-mcp-serverGo MCP server for GitLab: 2 dynamic tools reach ~876 actions on Free/CE, up to ~1103 on Ultimate.47stars
6alejandro-m-p avatarGit Coureralejandro-m-p/git-courerFull git MCP server for LLM agents — 17 tools, AST annotator, auto-backups, real plumbing.32stars