Skip to main content
Glama
GitLab MCP Server

GitLab MCP Server

by Alosies

GitLab MCP Server

A fully typed TypeScript Model Context Protocol (MCP) server for comprehensive GitLab integration.

Quick Start

1. Get a GitLab Token

Create a GitLab Personal Access Token with api, read_user, and read_repository scopes.

2. Add to Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": ["-y", "@alosies/gitlab-mcp-server"],
      "env": {
        "NPM_CONFIG_TOKEN": "your-gitlab-token-here"
      }
    }
  }
}

3. Start Using

Ask Claude things like:

  • "List my GitLab projects"

  • "Show me open issues in myproject"

  • "Create a merge request from feature-branch to main"

  • "Comment on MR #42 in myproject"

  • "Show me MRs where I'm assigned as reviewer"

  • "Mark MR #15 as ready for review"

  • "Get the logs for job #123"

Related MCP server: GitLab MCP Server

Features

  • Projects: List, get details

  • Issues: List, get, create

  • Merge Requests: List, get, create, update with full review workflow support

    • Comments & Discussions: Create notes, threaded discussions, inline code comments

    • Review Management: Resolve/unresolve discussions, mark as draft/ready

    • Filtering: Filter by reviewer, assignee, author

    • Templates: Use GitLab MR templates for descriptions

  • Pipelines: List, get, create, retry, cancel, delete

  • Jobs: List jobs, get logs with advanced trace options

  • Repository: List branches, get commits

  • User: Get current user info

  • TypeScript: Fully typed with comprehensive type definitions

Documentation

Self-Hosted GitLab

For self-hosted GitLab instances, add your base URL:

{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": ["-y", "@alosies/gitlab-mcp-server"],
      "env": {
        "NPM_CONFIG_TOKEN": "your-token",
        "GITLAB_BASE_URL": "https://gitlab.mycompany.com"
      }
    }
  }
}

Support

License

MIT License

Available Tools

50 tools
approve_mrB

Approve a merge request. The authenticated user must have permission to approve.

NameRequiredDescriptionDefault
shaNoSHA of the HEAD commit. Approval fails if this does not match the current HEAD.
project_idYesProject ID or path
approval_passwordNoCurrent password of the authenticated user. Required if "Require user re-authentication" is enabled.
merge_request_iidYesMerge request internal ID
cancel_pipelineB

Cancel a running pipeline

NameRequiredDescriptionDefault
project_idYesProject ID or path
pipeline_idYesPipeline ID
create_issueC

Create a new issue

NameRequiredDescriptionDefault
titleYesIssue title
labelsNoComma-separated list of labels
project_idYesProject ID or path
descriptionNoIssue description
assignee_idsNoArray of user IDs to assign
milestone_idNoMilestone ID
create_merge_requestC

Create a new merge request

NameRequiredDescriptionDefault
titleYesMerge request title
labelsNoComma-separated list of labels
project_idYesProject ID or path
descriptionNoMerge request description
assignee_idsNoArray of user IDs to assign
milestone_idNoMilestone ID
reviewer_idsNoArray of user IDs to review
source_branchYesSource branch name
target_branchYesTarget branch name
create_mr_discussionA

Create a new discussion on a merge request. Can be a general discussion or an inline comment on the diff. Supports embedding images/files via attachments parameter.

NameRequiredDescriptionDefault
bodyYesThe content of the discussion (supports Markdown). Use {{placeholderName}} syntax to embed attachments.
positionNoPosition for inline/diff comments. Required fields: base_sha, start_sha, head_sha, old_path, new_path. Use new_line for additions, old_line for deletions, both for context lines.
project_idYesProject ID or path
attachmentsNoMap of placeholder names to local file paths. Each file is uploaded and {{placeholderName}} in body is replaced with the GitLab markdown. Example: {"screenshot": "/tmp/screenshot.png"} replaces {{screenshot}} with ![screenshot](/uploads/...)
merge_request_iidYesMerge request internal ID
create_mr_discussion_noteB

Add a new note to an existing merge request discussion thread

NameRequiredDescriptionDefault
bodyYesThe content of the note (supports Markdown)
project_idYesProject ID or path
discussion_idYesThe ID of the discussion to add the note to
merge_request_iidYesMerge request internal ID
create_mr_noteA

Add a new top-level comment to a merge request. Supports embedding images/files via attachments parameter.

NameRequiredDescriptionDefault
bodyYesThe content of the comment (supports Markdown). Use {{placeholderName}} syntax to embed attachments.
project_idYesProject ID or path
attachmentsNoMap of placeholder names to local file paths. Each file is uploaded and {{placeholderName}} in body is replaced with the GitLab markdown. Example: {"screenshot": "/tmp/screenshot.png"} replaces {{screenshot}} with ![screenshot](/uploads/...)
merge_request_iidYesMerge request internal ID
create_pipelineD

Create a new pipeline

NameRequiredDescriptionDefault
refYesBranch or tag name
variablesNoPipeline variables
project_idYesProject ID or path
delete_mr_discussion_noteC

Delete a note from a merge request discussion

NameRequiredDescriptionDefault
note_idYesThe ID of the note to delete
project_idYesProject ID or path
discussion_idYesThe ID of the discussion
merge_request_iidYesMerge request internal ID
delete_mr_noteA

Delete a top-level note (comment) from a merge request

NameRequiredDescriptionDefault
note_idYesThe ID of the note to delete
project_idYesProject ID or path
merge_request_iidYesMerge request internal ID
delete_pipelineC

Delete a pipeline

NameRequiredDescriptionDefault
project_idYesProject ID or path
pipeline_idYesPipeline ID
get_branch_diffsB

Get the changes/diffs between two branches or commits in a GitLab project

NameRequiredDescriptionDefault
toYesThe target branch or commit SHA to compare to
fromYesThe base branch or commit SHA to compare from
straightNoComparison method: false for "..." (default), true for "--"
project_idYesProject ID or path
get_commitB

Get details of a specific commit

NameRequiredDescriptionDefault
shaYesThe commit hash or name of a repository branch or tag
statsNoInclude commit stats (additions, deletions)
project_idYesProject ID or path
get_commit_diffB

Get changes/diffs of a specific commit

NameRequiredDescriptionDefault
shaYesThe commit hash or name of a repository branch or tag
project_idYesProject ID or path
get_issueB

Get details of a specific issue

NameRequiredDescriptionDefault
issue_iidYesIssue internal ID
project_idYesProject ID or path
get_job_logsB

Get the log (trace) file of a specific job

NameRequiredDescriptionDefault
job_idYesJob ID
project_idYesProject ID or path
get_job_traceB

Get job trace with options for partial logs, tail mode, and line limits

NameRequiredDescriptionDefault
rawNoReturn raw log without formatting
tailNoGet the last N lines instead of first N lines
job_idYesJob ID
project_idYesProject ID or path
lines_limitNoMaximum number of lines to return (default: 1000)
get_merge_requestA

Get details of a merge request. Either merge_request_iid or source_branch must be provided.

NameRequiredDescriptionDefault
project_idYesProject ID or path
source_branchNoSource branch name (alternative to merge_request_iid)
merge_request_iidNoMerge request internal ID
get_merge_request_diffsB

Get the changes/diffs of a merge request. Either merge_request_iid or source_branch must be provided.

NameRequiredDescriptionDefault
viewNoDiff view type
project_idYesProject ID or path
source_branchNoSource branch name (alternative to merge_request_iid)
merge_request_iidNoMerge request internal ID
get_mr_approvalsA

Get the approval status of a merge request, including who has approved, how many approvals are needed, and approval rules.

NameRequiredDescriptionDefault
project_idYesProject ID or path
merge_request_iidYesMerge request internal ID
get_mr_templateB

Get a specific merge request description template by name

NameRequiredDescriptionDefault
nameYesTemplate name (without .md extension)
project_idYesProject ID or path
get_pipelineB

Get details of a specific pipeline

NameRequiredDescriptionDefault
project_idYesProject ID or path
pipeline_idYesPipeline ID
get_pipeline_variablesB

Get variables of a pipeline

NameRequiredDescriptionDefault
project_idYesProject ID or path
pipeline_idYesPipeline ID
get_projectC

Get details of a specific project

NameRequiredDescriptionDefault
project_idYesProject ID or path (e.g., "1" or "group/project")
get_project_commitsB

List repository commits with filtering options

NameRequiredDescriptionDefault
allNoRetrieve every commit from the repository
pageNoPage number for pagination (default: 1)
pathNoFilter commits by file path
orderNoList commits in order (default or topological)
sinceNoISO 8601 date format (YYYY-MM-DDTHH:MM:SSZ) - commits after this date
untilNoISO 8601 date format (YYYY-MM-DDTHH:MM:SSZ) - commits before this date
authorNoFilter commits by author name
per_pageNoNumber of results per page (max 100)
ref_nameNoBranch, tag, or commit SHAmain
trailersNoParse and include Git trailers for every commit
project_idYesProject ID or path
with_statsNoInclude commit stats (additions, deletions)
first_parentNoFollow only the first parent commit on merge commits
get_userA

Get current user information

NameRequiredDescriptionDefault

No parameters

list_issuesC

List issues in a project

NameRequiredDescriptionDefault
scopeNoReturn issues with the given scope (optional)
stateNoFilter by issue stateopened
labelsNoComma-separated list of labels
searchNoSearch issues by title and description
per_pageNoNumber of results per page (max 100)
author_idNoFilter by author user ID
project_idYesProject ID or path
assignee_idNoFilter by assignee user ID
list_merge_request_diffsA

List merge request diffs with pagination support. Either merge_request_iid or source_branch must be provided.

NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
unidiffNoPresent diffs in unified diff format (GitLab 16.5+)
per_pageNoNumber of items per page (max: 100, default: 20)
project_idYesProject ID or path
source_branchNoSource branch name (alternative to merge_request_iid)
merge_request_iidNoMerge request internal ID
list_merge_requestsC

List merge requests in a project

NameRequiredDescriptionDefault
scopeNoReturn merge requests with the given scope (optional)
stateNoFilter by merge request stateopened
searchNoSearch merge requests by title and description
per_pageNoNumber of results per page (max 100)
author_idNoFilter by author user ID
project_idYesProject ID or path
assignee_idNoFilter by assignee user ID
reviewer_idNoFilter by reviewer user ID
source_branchNoFilter by source branch
target_branchNoFilter by target branch
reviewer_usernameNoFilter by reviewer username
list_mr_discussionsA

List discussions (threaded comments including inline code comments) on a merge request. Use unresolved_only=true to fetch only unresolved discussions (saves tokens).

NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1). Ignored when unresolved_only=true (fetches all pages).
per_pageNoNumber of results per page (max 100)
project_idYesProject ID or path
unresolved_onlyNoIf true, fetches all discussions and returns only unresolved ones. This reduces tokens sent to the LLM by filtering server-side.
merge_request_iidYesMerge request internal ID
list_mr_notesA

List all notes (comments) on a merge request

NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
sortNoSort order (asc or desc)desc
order_byNoField to order bycreated_at
per_pageNoNumber of results per page (max 100)
project_idYesProject ID or path
merge_request_iidYesMerge request internal ID
list_mr_templatesA

List available merge request description templates in a project

NameRequiredDescriptionDefault
project_idYesProject ID or path
list_pipeline_jobsB

List jobs in a pipeline

NameRequiredDescriptionDefault
scopeNoFilter jobs by status
project_idYesProject ID or path
pipeline_idYesPipeline ID
include_retriedNoInclude retried jobs
list_pipelinesB

List pipelines in a project

NameRequiredDescriptionDefault
refNoFilter by branch or tag name
shaNoFilter by commit SHA
nameNoFilter by pipeline name
sortNoSort orderdesc
statusNoFilter by pipeline status
order_byNoOrder pipelines by fieldid
per_pageNoNumber of results per page (max 100)
usernameNoFilter by username of the user who triggered the pipeline
project_idYesProject ID or path
yaml_errorsNoFilter pipelines with YAML errors
updated_afterNoFilter pipelines updated after this date (ISO 8601 format)
updated_beforeNoFilter pipelines updated before this date (ISO 8601 format)
list_project_branchesB

List branches in a project

NameRequiredDescriptionDefault
searchNoSearch branches by name
per_pageNoNumber of results per page (max 100)
project_idYesProject ID or path
list_project_labelsA

List all labels available in a project. Useful for discovering valid label names before adding them to issues or merge requests.

NameRequiredDescriptionDefault
searchNoSearch labels by name
project_idYesProject ID or path
with_countsNoInclude issue and merge request counts (default: false)
include_ancestor_groupsNoInclude labels from ancestor groups (default: true)
list_projectsA

List GitLab projects with minimal info by default (to reduce token usage from 40k+ to much less). Use simple=false for full project details when needed.

NameRequiredDescriptionDefault
ownedNoShow only owned projects (default: true for privacy)
searchNoSearch projects by name
simpleNoUse simplified project info to reduce response size (default: true). Set to false for full project details.
per_pageNoNumber of results per page (max 100)
visibilityNoFilter by visibility level
list_project_uploadsB

List files that have been uploaded to a project

NameRequiredDescriptionDefault
project_idYesProject ID or path
mark_mr_as_draftA

Mark a merge request as draft (work in progress, not ready for review)

NameRequiredDescriptionDefault
project_idYesProject ID or path
merge_request_iidYesMerge request internal ID
mark_mr_as_readyA

Mark a merge request as ready (remove draft status, ready for review)

NameRequiredDescriptionDefault
project_idYesProject ID or path
merge_request_iidYesMerge request internal ID
reply_to_mr_discussionB

Reply to an existing discussion thread on a merge request

NameRequiredDescriptionDefault
bodyYesThe content of the reply (supports Markdown)
project_idYesProject ID or path
discussion_idYesThe ID of the discussion to reply to
merge_request_iidYesMerge request internal ID
resolve_mr_discussionB

Mark a discussion on a merge request as resolved

NameRequiredDescriptionDefault
project_idYesProject ID or path
discussion_idYesThe ID of the discussion to resolve
merge_request_iidYesMerge request internal ID
retry_pipelineB

Retry a failed pipeline

NameRequiredDescriptionDefault
project_idYesProject ID or path
pipeline_idYesPipeline ID
unapprove_mrB

Remove your approval from a merge request.

NameRequiredDescriptionDefault
project_idYesProject ID or path
merge_request_iidYesMerge request internal ID
unresolve_mr_discussionA

Mark a discussion on a merge request as unresolved

NameRequiredDescriptionDefault
project_idYesProject ID or path
discussion_idYesThe ID of the discussion to unresolve
merge_request_iidYesMerge request internal ID
update_merge_requestA

Update an existing merge request. Either merge_request_iid or source_branch must be provided.

NameRequiredDescriptionDefault
titleNoUpdate merge request title
labelsNoUpdate labels (comma-separated)
squashNoToggle squash commits on merge
project_idYesProject ID or path
assignee_idNoAssign a user to the merge request (use 0 to unassign)
descriptionNoUpdate merge request description (max 1,048,576 characters)
state_eventNoChange the state (close or reopen the MR)
assignee_idsNoAssign multiple users to the merge request
milestone_idNoAssign a milestone (use 0 to remove)
reviewer_idsNoSet reviewers for the merge request
source_branchNoSource branch name (alternative to merge_request_iid)
target_branchNoChange the target branch
merge_request_iidNoMerge request internal ID
allow_collaborationNoAllow commits from members who can merge
remove_source_branchNoFlag to remove source branch after merging
merge_when_pipeline_succeedsNoSet MR to merge when pipeline succeeds
update_mr_discussion_noteB

Modify an existing merge request discussion note

NameRequiredDescriptionDefault
bodyYesThe new content of the note (supports Markdown)
note_idYesThe ID of the note to update
project_idYesProject ID or path
discussion_idYesThe ID of the discussion
merge_request_iidYesMerge request internal ID
update_mr_labelsA

Add or remove labels from a merge request. More convenient than update_merge_request for label-only changes.

NameRequiredDescriptionDefault
add_labelsNoLabels to add to the merge request
project_idYesProject ID or path
remove_labelsNoLabels to remove from the merge request
merge_request_iidYesMerge request internal ID
update_mr_noteA

Update the content of an existing top-level note (comment) on a merge request. Supports embedding images/files via attachments parameter.

NameRequiredDescriptionDefault
bodyYesNew content for the note (supports Markdown). Use {{placeholderName}} syntax to embed attachments.
note_idYesThe ID of the note to update
project_idYesProject ID or path
attachmentsNoMap of placeholder names to local file paths. Each file is uploaded and {{placeholderName}} in body is replaced with the GitLab markdown. Example: {"screenshot": "/tmp/screenshot.png"} replaces {{screenshot}} with ![screenshot](/uploads/...)
merge_request_iidYesMerge request internal ID
upload_project_fileA

Upload a file to a GitLab project. Returns a markdown string and URL that can be embedded in MR comments, issue descriptions, etc.

NameRequiredDescriptionDefault
fileYesLocal file path to upload (e.g., "/tmp/screenshot.png")
project_idYesProject ID or path

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 50 tool updatesv1.6.0
    • Addedapprove_mr
    • Addedcancel_pipeline
    • Addedcreate_issue
    • Addedcreate_merge_request
    • Addedcreate_mr_discussion
    • Addedcreate_mr_discussion_note
    • Addedcreate_mr_note
    • Addedcreate_pipeline
    • Addeddelete_mr_discussion_note
    • Addeddelete_mr_note
    • Addeddelete_pipeline
    • Addedget_branch_diffs
    • Addedget_commit
    • Addedget_commit_diff
    • Addedget_issue
    • Addedget_job_logs
    • Addedget_job_trace
    • Addedget_merge_request
    • Addedget_merge_request_diffs
    • Addedget_mr_approvals
    • Addedget_mr_template
    • Addedget_pipeline
    • Addedget_pipeline_variables
    • Addedget_project
    • Addedget_project_commits
    • Addedget_user
    • Addedlist_issues
    • Addedlist_merge_request_diffs
    • Addedlist_merge_requests
    • Addedlist_mr_discussions
    • Addedlist_mr_notes
    • Addedlist_mr_templates
    • Addedlist_pipeline_jobs
    • Addedlist_pipelines
    • Addedlist_project_branches
    • Addedlist_project_labels
    • Addedlist_project_uploads
    • Addedlist_projects
    • Addedmark_mr_as_draft
    • Addedmark_mr_as_ready
    • Addedreply_to_mr_discussion
    • Addedresolve_mr_discussion
    • Addedretry_pipeline
    • Addedunapprove_mr
    • Addedunresolve_mr_discussion
    • Addedupdate_merge_request
    • Addedupdate_mr_discussion_note
    • Addedupdate_mr_labels
    • Addedupdate_mr_note
    • Addedupload_project_file
  2. 41 tool updatesv1.5.0
    • Removedcancel_pipeline
    • Removedcreate_issue
    • Removedcreate_merge_request
    • Removedcreate_mr_discussion
    • Removedcreate_mr_discussion_note
    • Removedcreate_mr_note
    • Removedcreate_pipeline
    • Removeddelete_mr_discussion_note
    • Removeddelete_pipeline
    • Removedget_branch_diffs
    • Removedget_commit
    • Removedget_commit_diff
    • Removedget_issue
    • Removedget_job_logs
    • Removedget_job_trace
    • Removedget_merge_request
    • Removedget_merge_request_diffs
    • Removedget_mr_template
    • Removedget_pipeline
    • Removedget_pipeline_variables
    • Removedget_project
    • Removedget_project_commits
    • Removedget_user
    • Removedlist_issues
    • Removedlist_merge_request_diffs
    • Removedlist_merge_requests
    • Removedlist_mr_discussions
    • Removedlist_mr_notes
    • Removedlist_mr_templates
    • Removedlist_pipeline_jobs
    • Removedlist_pipelines
    • Removedlist_project_branches
    • Removedlist_projects
    • Removedmark_mr_as_draft
    • Removedmark_mr_as_ready
    • Removedreply_to_mr_discussion
    • Removedresolve_mr_discussion
    • Removedretry_pipeline
    • Removedunresolve_mr_discussion
    • Removedupdate_merge_request
    • Removedupdate_mr_discussion_note
  3. 23 tool updatesv1.0.0
    • Addedcreate_mr_discussion
    • Addedcreate_mr_discussion_note
    • Addedcreate_mr_note
    • Addeddelete_mr_discussion_note
    • Addedget_branch_diffs
    • Addedget_commit
    • Addedget_commit_diff
    • Changedget_merge_request2 fields changed
      • addedInput schema / properties / source_branch
        Added value: +{
        +  "description": "Source branch name (alternative to merge_request_iid)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "project_id",
        -  "merge_request_iid"
        -]New value: +[
        +  "project_id"
        +]
    • Addedget_merge_request_diffs
    • Addedget_mr_template
    • Changedget_project_commits10 fields changed
      • addedInput schema / properties / all
        Added value: +{
        +  "description": "Retrieve every commit from the repository",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / author / description
        Previous value: -"Filter by author name"New value: +"Filter commits by author name"
      • addedInput schema / properties / first_parent
        Added value: +{
        +  "description": "Follow only the first parent commit on merge commits",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / order
        Added value: +{
        +  "description": "List commits in order (default or topological)",
        +  "enum": [
        +    "default",
        +    "topo"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "Page number for pagination (default: 1)",
        +  "type": "number"
        +}
      • addedInput schema / properties / path
        Added value: +{
        +  "description": "Filter commits by file path",
        +  "type": "string"
        +}
      • changedInput schema / properties / since / description
        Previous value: -"ISO 8601 date format (YYYY-MM-DDTHH:MM:SSZ)"New value: +"ISO 8601 date format (YYYY-MM-DDTHH:MM:SSZ) - commits after this date"
      • addedInput schema / properties / trailers
        Added value: +{
        +  "description": "Parse and include Git trailers for every commit",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / until / description
        Previous value: -"ISO 8601 date format (YYYY-MM-DDTHH:MM:SSZ)"New value: +"ISO 8601 date format (YYYY-MM-DDTHH:MM:SSZ) - commits before this date"
      • addedInput schema / properties / with_stats
        Added value: +{
        +  "description": "Include commit stats (additions, deletions)",
        +  "type": "boolean"
        +}
    • Addedlist_merge_request_diffs
    • Changedlist_merge_requests2 fields changed
      • addedInput schema / properties / reviewer_id
        Added value: +{
        +  "description": "Filter by reviewer user ID",
        +  "type": "number"
        +}
      • addedInput schema / properties / reviewer_username
        Added value: +{
        +  "description": "Filter by reviewer username",
        +  "type": "string"
        +}
    • Addedlist_mr_discussions
    • Addedlist_mr_notes
    • Addedlist_mr_templates
    • Addedmark_mr_as_draft
    • Addedmark_mr_as_ready
    • Addedreply_to_mr_discussion
    • Addedresolve_mr_discussion
    • Addedunresolve_mr_discussion
    • Changedupdate_merge_request2 fields changed
      • addedInput schema / properties / source_branch
        Added value: +{
        +  "description": "Source branch name (alternative to merge_request_iid)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "project_id",
        -  "merge_request_iid"
        -]New value: +[
        +  "project_id"
        +]
    • Addedupdate_mr_discussion_note
  4. 22 tool updates
    • First observedcancel_pipeline
    • First observedcreate_issue
    • First observedcreate_merge_request
    • First observedcreate_pipeline
    • First observeddelete_pipeline
    • First observedget_issue
    • First observedget_job_logs
    • First observedget_job_trace
    • First observedget_merge_request
    • First observedget_pipeline
    • First observedget_pipeline_variables
    • First observedget_project
    • First observedget_project_commits
    • First observedget_user
    • First observedlist_issues
    • First observedlist_merge_requests
    • First observedlist_pipeline_jobs
    • First observedlist_pipelines
    • First observedlist_project_branches
    • First observedlist_projects
    • First observedretry_pipeline
    • First observedupdate_merge_request

TDQS

B3/5.0

Scored across 50 tools

Disambiguation4/5

Most tools are clearly separated by resource (projects, issues, MRs, pipelines, commits). However, there is some overlap between get_merge_request_diffs and list_merge_request_diffs, and between get_job_logs and get_job_trace, which could cause confusion.

Naming Consistency4/5

The naming mostly follows a consistent verb_noun pattern (list_, get_, create_, update_, delete_). Minor deviations include mark_mr_as_draft/mark_mr_as_ready and approve_mr/unapprove_mr, which are still readable but slightly inconsistent with the dominant pattern.

Tool Count3/5

50 tools is on the heavy side, but the server covers a broad GitLab domain (projects, issues, MRs, branches, commits, pipelines, users). The count is justified by the scope, though it borders on overwhelming and could benefit from consolidation.

Completeness4/5

The tool surface is quite comprehensive for GitLab workflows: project listing/creation, issue CRUD, MR lifecycle with discussions/approvals, pipelines, commits, and branches. Minor gaps include no project deletion/update, no issue update/delete, and no branch creation/deletion, but core workflows are well covered.

Maintenance

ActivityInactive
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers