Better GitLab MCP Server
JSON →An improved GitLab MCP server with bug fixes and enhancements for accessing GitLab resources.
Install
npx skills Tools · 92
- merge_merge_request Merge a merge request in a GitLab project
- create_or_update_file Create or update a single file in a GitLab project
- search_repositories Search for GitLab projects
- create_repository Create a new GitLab project
- create_group Create a new GitLab group or subgroup (name, path, description, visibility, and optional parent_id)
- get_file_contents Get the contents of a file or directory from a GitLab project
- push_files Push multiple files to a GitLab project in a single commit
- create_issue Create a new issue in a GitLab project
- create_merge_request Create a new merge request in a GitLab project
- fork_repository Fork a GitLab project to your account or specified namespace
- create_branch Create a new branch in a GitLab project
- get_merge_request Get details of a merge request with compact deployment summary, behind-count, commit addition summary, and approval summary (Either mergeRequestIid or branchName must be provided)
- get_merge_request_diffs Get the changes/diffs of a merge request (Either mergeRequestIid or branchName must be provided)
- list_merge_request_diffs List merge request diffs with pagination support (Either mergeRequestIid or branchName must be provided)
- get_merge_request_conflicts Get the conflicts of a merge request in a GitLab project
- list_merge_request_changed_files STEP 1 of code review workflow. Returns ONLY the list of changed file paths in a merge request — WITHOUT diff content. Call this first to get file paths, then call get_merge_request_file_diff with multiple files in a single batched call (recommended 3-5 files per call). Supports excluded_file_patterns filtering using regex. (Either mergeRequestIid or branchName must be provided)
- get_merge_request_file_diff STEP 2 of code review workflow. Get diffs for one or more files from a merge request. Call list_merge_request_changed_files first, then pass them as an array to fetch diffs efficiently. Batching multiple files (recommended 3-5) is supported. (Either mergeRequestIid or branchName must be provided)
- list_merge_request_versions List all versions of a merge request
- get_merge_request_version Get a specific version of a merge request
- get_branch_diffs Get the changes/diffs between two branches or commits in a GitLab project
- update_merge_request Update a merge request (Either mergeRequestIid or branchName must be provided)
- create_note Create a new note (comment) to an issue or merge request
- create_merge_request_thread Create a new thread on a merge request
- mr_discussions List discussion items for a merge request
- resolve_merge_request_thread Resolve a thread on a merge request
- update_merge_request_note Modify an existing merge request thread note
- create_merge_request_note Add a new note to an existing merge request thread
- delete_merge_request_discussion_note Delete a discussion note on a merge request
- update_merge_request_discussion_note Update a discussion note on a merge request
- create_merge_request_discussion_note Add a new discussion note to an existing merge request thread
- delete_merge_request_note Delete an existing merge request note
- get_merge_request_note Get a specific note for a merge request
- get_merge_request_notes List notes for a merge request
- get_draft_note Get a single draft note from a merge request
- list_draft_notes List draft notes for a merge request
- create_draft_note Create a draft note for a merge request
- update_draft_note Update an existing draft note
- delete_draft_note Delete a draft note
- publish_draft_note Publish a single draft note
- bulk_publish_draft_notes Publish all draft notes for a merge request
- list_merge_requests List merge requests globally or in a specific GitLab project with filtering options (project_id is now optional)
- approve_merge_request Approve a merge request (requires appropriate permissions)
- unapprove_merge_request Unapprove a previously approved merge request
- get_merge_request_approval_state Get merge request approval details including approvers (uses `approval_state` when available, otherwise falls back to `approvals`)
- update_issue_note Modify an existing issue thread note
- create_issue_note Add a new note to an existing issue thread
- list_issues List issues (default: created by current user only; use scope='all' for all accessible issues)
- my_issues List issues assigned to the authenticated user (defaults to open issues)
- get_issue Get details of a specific issue in a GitLab project
- update_issue Update an issue in a GitLab project
- update_issue_description_patch Apply a patch (search/replace or unified diff) to an issue description. Reduces token usage by sending only the change instead of the full description. Supports `dry_run` to preview and `create_note` to summarize.
- delete_issue Delete an issue from a GitLab project
- list_todos List GitLab to-do items for the current user
- mark_todo_done Mark a GitLab to-do item as done
- mark_all_todos_done Mark all pending GitLab to-do items as done for the current user
- list_issue_links List all issue links for a specific issue
- list_issue_discussions List discussions for an issue in a GitLab project
- get_issue_link Get a specific issue link
- create_issue_link Create an issue link between two issues
- delete_issue_link Delete an issue link
- list_namespaces List all namespaces available to the current user
- get_namespace Get details of a namespace by ID or path
- verify_namespace Verify if a namespace path exists
- get_project Get details of a specific project
- list_projects List projects accessible by the current user
- list_project_members List members of a GitLab project
- list_group_projects List projects in a GitLab group with filtering options
- list_group_iterations List group iterations with filtering options
- list_labels List labels for a project
- get_label Get a single label from a project
- create_label Create a new label in a project
- update_label Update an existing label in a project
- delete_label Delete a label from a project
- list_pipelines List pipelines in a GitLab project with filtering options
- get_pipeline Get details of a specific pipeline in a GitLab project
- list_pipeline_jobs List all jobs in a specific pipeline
- list_pipeline_trigger_jobs List all trigger jobs (bridges) in a specific pipeline that trigger downstream pipelines
- get_pipeline_job Get details of a GitLab pipeline job number
- get_pipeline_job_output Get the output/trace of a GitLab pipeline job with optional pagination to limit context window usage
- validate_ci_lint Validate provided GitLab CI/CD YAML content for a project
- validate_project_ci_lint Validate an existing `.gitlab-ci.yml` configuration for a project
- create_pipeline Create a new pipeline for a branch or tag
- retry_pipeline Retry a failed or canceled pipeline
- cancel_pipeline Cancel a running pipeline
- play_pipeline_job Run a manual pipeline job
- retry_pipeline_job Retry a failed or canceled pipeline job
- cancel_pipeline_job Cancel a running pipeline job
- list_deployments List deployments in a GitLab project with filtering options
- get_deployment Get details of a specific deployment in a GitLab project
- list_environments List environments in a GitLab project
- get_environment Get details of a specific environment in a GitLab project
- list_job_artifacts List artifact files in a job's artifacts archive
Environment variables
GITLAB_PERSONAL_ACCESS_TOKENYOUR_GITLAB_TOKENGITLAB_API_URLMCP_SERVER_URLGITLAB_OAUTH_APP_IDGITLAB_JOB_TOKENENABLE_DYNAMIC_API_URLGITLAB_OAUTH_CLIENT_IDOAUTH_STATELESS_SECRETMCP_DANGEROUSLY_ALLOW_INSECURE_ISSUER_URL
Links
★ 1,592 GitHub stars