GitLab MCP Server
The GitLab MCP Server is a TypeScript-based Model Context Protocol server that provides comprehensive GitLab integration for AI assistants, enabling management of projects, issues, merge requests, pipelines, and repositories through natural language commands.
Projects: List and search projects with filtering by ownership, visibility, and search terms; get detailed project information with optional simplified views for token efficiency
Issues: List, view, and create issues with filtering by state, scope, labels, author, and assignee; search by title and description; manage descriptions and milestones
Merge Requests: Complete lifecycle management including listing, creating, and updating MRs; filter by state, author, assignee, scope, and branches; manage title, description, labels, assignees, reviewers, and state (close/reopen); set merge options (auto-merge when pipeline succeeds, squash commits, remove source branch); mark as draft or ready for review
Code Review: Create comments, threaded discussions, and inline code comments; resolve/unresolve discussions
CI/CD Pipelines: List, create, retry, cancel, and delete pipelines with filtering by status, branch, SHA, username, and dates; manage pipeline variables
Jobs & Logs: List jobs within pipelines with status filtering; retrieve full job logs and traces with advanced options (partial logs, tail mode, line limits, raw format)
Repository: List branches with search capability; get commit history with filtering by date range, author, and branch/tag
User Management: Retrieve current authenticated user information
Additional Features: Supports both GitLab.com and self-hosted instances; fully typed TypeScript implementation; pagination support; token-optimized responses
Provides comprehensive integration with GitLab's REST API, enabling interaction with projects, issues, merge requests, pipelines, jobs, branches, commits, and user information. Allows listing, creating, and managing GitLab resources with complete type safety.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GitLab MCP Serverlist my open merge requests"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Installation Guide - Detailed installation options and setup
Available Tools - Complete list of tools and parameters
Configuration - Optional configuration file setup
Usage Examples - Real-world usage examples and workflows
TypeScript Guide - TypeScript usage and type definitions
Development - Contributing and development setup
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
Issues: GitHub Issues
GitLab API: GitLab API Documentation
MCP Protocol: Model Context Protocol
License
MIT License
Available Tools
50 toolsapprove_mrB
Approve a merge request. The authenticated user must have permission to approve.
| Name | Required | Description | Default |
|---|---|---|---|
| sha | No | SHA of the HEAD commit. Approval fails if this does not match the current HEAD. | |
| project_id | Yes | Project ID or path | |
| approval_password | No | Current password of the authenticated user. Required if "Require user re-authentication" is enabled. | |
| merge_request_iid | Yes | Merge request internal ID |
cancel_pipelineB
Cancel a running pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path | |
| pipeline_id | Yes | Pipeline ID |
create_issueC
Create a new issue
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Issue title | |
| labels | No | Comma-separated list of labels | |
| project_id | Yes | Project ID or path | |
| description | No | Issue description | |
| assignee_ids | No | Array of user IDs to assign | |
| milestone_id | No | Milestone ID |
create_merge_requestC
Create a new merge request
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Merge request title | |
| labels | No | Comma-separated list of labels | |
| project_id | Yes | Project ID or path | |
| description | No | Merge request description | |
| assignee_ids | No | Array of user IDs to assign | |
| milestone_id | No | Milestone ID | |
| reviewer_ids | No | Array of user IDs to review | |
| source_branch | Yes | Source branch name | |
| target_branch | Yes | Target 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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The content of the discussion (supports Markdown). Use {{placeholderName}} syntax to embed attachments. | |
| position | No | Position 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_id | Yes | Project ID or path | |
| attachments | No | Map 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  | |
| merge_request_iid | Yes | Merge request internal ID |
create_mr_discussion_noteB
Add a new note to an existing merge request discussion thread
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The content of the note (supports Markdown) | |
| project_id | Yes | Project ID or path | |
| discussion_id | Yes | The ID of the discussion to add the note to | |
| merge_request_iid | Yes | Merge request internal ID |
create_mr_noteA
Add a new top-level comment to a merge request. Supports embedding images/files via attachments parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The content of the comment (supports Markdown). Use {{placeholderName}} syntax to embed attachments. | |
| project_id | Yes | Project ID or path | |
| attachments | No | Map 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  | |
| merge_request_iid | Yes | Merge request internal ID |
create_pipelineD
Create a new pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Branch or tag name | |
| variables | No | Pipeline variables | |
| project_id | Yes | Project ID or path |
delete_mr_discussion_noteC
Delete a note from a merge request discussion
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | The ID of the note to delete | |
| project_id | Yes | Project ID or path | |
| discussion_id | Yes | The ID of the discussion | |
| merge_request_iid | Yes | Merge request internal ID |
delete_mr_noteA
Delete a top-level note (comment) from a merge request
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | Yes | The ID of the note to delete | |
| project_id | Yes | Project ID or path | |
| merge_request_iid | Yes | Merge request internal ID |
delete_pipelineC
Delete a pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path | |
| pipeline_id | Yes | Pipeline ID |
get_branch_diffsB
Get the changes/diffs between two branches or commits in a GitLab project
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The target branch or commit SHA to compare to | |
| from | Yes | The base branch or commit SHA to compare from | |
| straight | No | Comparison method: false for "..." (default), true for "--" | |
| project_id | Yes | Project ID or path |
get_commitB
Get details of a specific commit
| Name | Required | Description | Default |
|---|---|---|---|
| sha | Yes | The commit hash or name of a repository branch or tag | |
| stats | No | Include commit stats (additions, deletions) | |
| project_id | Yes | Project ID or path |
get_commit_diffB
Get changes/diffs of a specific commit
| Name | Required | Description | Default |
|---|---|---|---|
| sha | Yes | The commit hash or name of a repository branch or tag | |
| project_id | Yes | Project ID or path |
get_issueB
Get details of a specific issue
| Name | Required | Description | Default |
|---|---|---|---|
| issue_iid | Yes | Issue internal ID | |
| project_id | Yes | Project ID or path |
get_job_logsB
Get the log (trace) file of a specific job
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID | |
| project_id | Yes | Project ID or path |
get_job_traceB
Get job trace with options for partial logs, tail mode, and line limits
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | Return raw log without formatting | |
| tail | No | Get the last N lines instead of first N lines | |
| job_id | Yes | Job ID | |
| project_id | Yes | Project ID or path | |
| lines_limit | No | Maximum 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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path | |
| source_branch | No | Source branch name (alternative to merge_request_iid) | |
| merge_request_iid | No | Merge 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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Diff view type | |
| project_id | Yes | Project ID or path | |
| source_branch | No | Source branch name (alternative to merge_request_iid) | |
| merge_request_iid | No | Merge 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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path | |
| merge_request_iid | Yes | Merge request internal ID |
get_mr_templateB
Get a specific merge request description template by name
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Template name (without .md extension) | |
| project_id | Yes | Project ID or path |
get_pipelineB
Get details of a specific pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path | |
| pipeline_id | Yes | Pipeline ID |
get_pipeline_variablesB
Get variables of a pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path | |
| pipeline_id | Yes | Pipeline ID |
get_projectC
Get details of a specific project
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path (e.g., "1" or "group/project") |
get_project_commitsB
List repository commits with filtering options
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Retrieve every commit from the repository | |
| page | No | Page number for pagination (default: 1) | |
| path | No | Filter commits by file path | |
| order | No | List commits in order (default or topological) | |
| since | No | ISO 8601 date format (YYYY-MM-DDTHH:MM:SSZ) - commits after this date | |
| until | No | ISO 8601 date format (YYYY-MM-DDTHH:MM:SSZ) - commits before this date | |
| author | No | Filter commits by author name | |
| per_page | No | Number of results per page (max 100) | |
| ref_name | No | Branch, tag, or commit SHA | main |
| trailers | No | Parse and include Git trailers for every commit | |
| project_id | Yes | Project ID or path | |
| with_stats | No | Include commit stats (additions, deletions) | |
| first_parent | No | Follow only the first parent commit on merge commits |
get_userA
Get current user information
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_issuesC
List issues in a project
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Return issues with the given scope (optional) | |
| state | No | Filter by issue state | opened |
| labels | No | Comma-separated list of labels | |
| search | No | Search issues by title and description | |
| per_page | No | Number of results per page (max 100) | |
| author_id | No | Filter by author user ID | |
| project_id | Yes | Project ID or path | |
| assignee_id | No | Filter 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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination (default: 1) | |
| unidiff | No | Present diffs in unified diff format (GitLab 16.5+) | |
| per_page | No | Number of items per page (max: 100, default: 20) | |
| project_id | Yes | Project ID or path | |
| source_branch | No | Source branch name (alternative to merge_request_iid) | |
| merge_request_iid | No | Merge request internal ID |
list_merge_requestsC
List merge requests in a project
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Return merge requests with the given scope (optional) | |
| state | No | Filter by merge request state | opened |
| search | No | Search merge requests by title and description | |
| per_page | No | Number of results per page (max 100) | |
| author_id | No | Filter by author user ID | |
| project_id | Yes | Project ID or path | |
| assignee_id | No | Filter by assignee user ID | |
| reviewer_id | No | Filter by reviewer user ID | |
| source_branch | No | Filter by source branch | |
| target_branch | No | Filter by target branch | |
| reviewer_username | No | Filter 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).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination (default: 1). Ignored when unresolved_only=true (fetches all pages). | |
| per_page | No | Number of results per page (max 100) | |
| project_id | Yes | Project ID or path | |
| unresolved_only | No | If true, fetches all discussions and returns only unresolved ones. This reduces tokens sent to the LLM by filtering server-side. | |
| merge_request_iid | Yes | Merge request internal ID |
list_mr_notesA
List all notes (comments) on a merge request
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination (default: 1) | |
| sort | No | Sort order (asc or desc) | desc |
| order_by | No | Field to order by | created_at |
| per_page | No | Number of results per page (max 100) | |
| project_id | Yes | Project ID or path | |
| merge_request_iid | Yes | Merge request internal ID |
list_mr_templatesA
List available merge request description templates in a project
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path |
list_pipeline_jobsB
List jobs in a pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Filter jobs by status | |
| project_id | Yes | Project ID or path | |
| pipeline_id | Yes | Pipeline ID | |
| include_retried | No | Include retried jobs |
list_pipelinesB
List pipelines in a project
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Filter by branch or tag name | |
| sha | No | Filter by commit SHA | |
| name | No | Filter by pipeline name | |
| sort | No | Sort order | desc |
| status | No | Filter by pipeline status | |
| order_by | No | Order pipelines by field | id |
| per_page | No | Number of results per page (max 100) | |
| username | No | Filter by username of the user who triggered the pipeline | |
| project_id | Yes | Project ID or path | |
| yaml_errors | No | Filter pipelines with YAML errors | |
| updated_after | No | Filter pipelines updated after this date (ISO 8601 format) | |
| updated_before | No | Filter pipelines updated before this date (ISO 8601 format) |
list_project_branchesB
List branches in a project
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Search branches by name | |
| per_page | No | Number of results per page (max 100) | |
| project_id | Yes | Project 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.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Search labels by name | |
| project_id | Yes | Project ID or path | |
| with_counts | No | Include issue and merge request counts (default: false) | |
| include_ancestor_groups | No | Include 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.
| Name | Required | Description | Default |
|---|---|---|---|
| owned | No | Show only owned projects (default: true for privacy) | |
| search | No | Search projects by name | |
| simple | No | Use simplified project info to reduce response size (default: true). Set to false for full project details. | |
| per_page | No | Number of results per page (max 100) | |
| visibility | No | Filter by visibility level |
list_project_uploadsB
List files that have been uploaded to a project
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path |
mark_mr_as_draftA
Mark a merge request as draft (work in progress, not ready for review)
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path | |
| merge_request_iid | Yes | Merge request internal ID |
mark_mr_as_readyA
Mark a merge request as ready (remove draft status, ready for review)
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path | |
| merge_request_iid | Yes | Merge request internal ID |
reply_to_mr_discussionB
Reply to an existing discussion thread on a merge request
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The content of the reply (supports Markdown) | |
| project_id | Yes | Project ID or path | |
| discussion_id | Yes | The ID of the discussion to reply to | |
| merge_request_iid | Yes | Merge request internal ID |
resolve_mr_discussionB
Mark a discussion on a merge request as resolved
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path | |
| discussion_id | Yes | The ID of the discussion to resolve | |
| merge_request_iid | Yes | Merge request internal ID |
retry_pipelineB
Retry a failed pipeline
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path | |
| pipeline_id | Yes | Pipeline ID |
unapprove_mrB
Remove your approval from a merge request.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path | |
| merge_request_iid | Yes | Merge request internal ID |
unresolve_mr_discussionA
Mark a discussion on a merge request as unresolved
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or path | |
| discussion_id | Yes | The ID of the discussion to unresolve | |
| merge_request_iid | Yes | Merge request internal ID |
update_merge_requestA
Update an existing merge request. Either merge_request_iid or source_branch must be provided.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Update merge request title | |
| labels | No | Update labels (comma-separated) | |
| squash | No | Toggle squash commits on merge | |
| project_id | Yes | Project ID or path | |
| assignee_id | No | Assign a user to the merge request (use 0 to unassign) | |
| description | No | Update merge request description (max 1,048,576 characters) | |
| state_event | No | Change the state (close or reopen the MR) | |
| assignee_ids | No | Assign multiple users to the merge request | |
| milestone_id | No | Assign a milestone (use 0 to remove) | |
| reviewer_ids | No | Set reviewers for the merge request | |
| source_branch | No | Source branch name (alternative to merge_request_iid) | |
| target_branch | No | Change the target branch | |
| merge_request_iid | No | Merge request internal ID | |
| allow_collaboration | No | Allow commits from members who can merge | |
| remove_source_branch | No | Flag to remove source branch after merging | |
| merge_when_pipeline_succeeds | No | Set MR to merge when pipeline succeeds |
update_mr_discussion_noteB
Modify an existing merge request discussion note
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The new content of the note (supports Markdown) | |
| note_id | Yes | The ID of the note to update | |
| project_id | Yes | Project ID or path | |
| discussion_id | Yes | The ID of the discussion | |
| merge_request_iid | Yes | Merge request internal ID |
update_mr_labelsA
Add or remove labels from a merge request. More convenient than update_merge_request for label-only changes.
| Name | Required | Description | Default |
|---|---|---|---|
| add_labels | No | Labels to add to the merge request | |
| project_id | Yes | Project ID or path | |
| remove_labels | No | Labels to remove from the merge request | |
| merge_request_iid | Yes | Merge 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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | New content for the note (supports Markdown). Use {{placeholderName}} syntax to embed attachments. | |
| note_id | Yes | The ID of the note to update | |
| project_id | Yes | Project ID or path | |
| attachments | No | Map 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  | |
| merge_request_iid | Yes | Merge 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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Local file path to upload (e.g., "/tmp/screenshot.png") | |
| project_id | Yes | Project ID or path |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
50 tool updates
v1.6.0- Added
approve_mr - Added
cancel_pipeline - Added
create_issue - Added
create_merge_request - Added
create_mr_discussion - Added
create_mr_discussion_note - Added
create_mr_note - Added
create_pipeline - Added
delete_mr_discussion_note - Added
delete_mr_note - Added
delete_pipeline - Added
get_branch_diffs - Added
get_commit - Added
get_commit_diff - Added
get_issue - Added
get_job_logs - Added
get_job_trace - Added
get_merge_request - Added
get_merge_request_diffs - Added
get_mr_approvals - Added
get_mr_template - Added
get_pipeline - Added
get_pipeline_variables - Added
get_project - Added
get_project_commits - Added
get_user - Added
list_issues - Added
list_merge_request_diffs - Added
list_merge_requests - Added
list_mr_discussions - Added
list_mr_notes - Added
list_mr_templates - Added
list_pipeline_jobs - Added
list_pipelines - Added
list_project_branches - Added
list_project_labels - Added
list_project_uploads - Added
list_projects - Added
mark_mr_as_draft - Added
mark_mr_as_ready - Added
reply_to_mr_discussion - Added
resolve_mr_discussion - Added
retry_pipeline - Added
unapprove_mr - Added
unresolve_mr_discussion - Added
update_merge_request - Added
update_mr_discussion_note - Added
update_mr_labels - Added
update_mr_note - Added
upload_project_file
41 tool updates
v1.5.0- Removed
cancel_pipeline - Removed
create_issue - Removed
create_merge_request - Removed
create_mr_discussion - Removed
create_mr_discussion_note - Removed
create_mr_note - Removed
create_pipeline - Removed
delete_mr_discussion_note - Removed
delete_pipeline - Removed
get_branch_diffs - Removed
get_commit - Removed
get_commit_diff - Removed
get_issue - Removed
get_job_logs - Removed
get_job_trace - Removed
get_merge_request - Removed
get_merge_request_diffs - Removed
get_mr_template - Removed
get_pipeline - Removed
get_pipeline_variables - Removed
get_project - Removed
get_project_commits - Removed
get_user - Removed
list_issues - Removed
list_merge_request_diffs - Removed
list_merge_requests - Removed
list_mr_discussions - Removed
list_mr_notes - Removed
list_mr_templates - Removed
list_pipeline_jobs - Removed
list_pipelines - Removed
list_project_branches - Removed
list_projects - Removed
mark_mr_as_draft - Removed
mark_mr_as_ready - Removed
reply_to_mr_discussion - Removed
resolve_mr_discussion - Removed
retry_pipeline - Removed
unresolve_mr_discussion - Removed
update_merge_request - Removed
update_mr_discussion_note
23 tool updates
v1.0.0- Added
create_mr_discussion - Added
create_mr_discussion_note - Added
create_mr_note - Added
delete_mr_discussion_note - Added
get_branch_diffs - Added
get_commit - Added
get_commit_diff - Changed
get_merge_request2 fields changed- added
Input schema / properties / source_branchAdded value: +{ + "description": "Source branch name (alternative to merge_request_iid)", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "project_id", - "merge_request_iid" -]New value: +[ + "project_id" +]
- Added
get_merge_request_diffs - Added
get_mr_template - Changed
get_project_commits10 fields changed- added
Input schema / properties / allAdded value: +{ + "description": "Retrieve every commit from the repository", + "type": "boolean" +} - changed
Input schema / properties / author / descriptionPrevious value: -"Filter by author name"New value: +"Filter commits by author name" - added
Input schema / properties / first_parentAdded value: +{ + "description": "Follow only the first parent commit on merge commits", + "type": "boolean" +} - added
Input schema / properties / orderAdded value: +{ + "description": "List commits in order (default or topological)", + "enum": [ + "default", + "topo" + ], + "type": "string" +} - added
Input schema / properties / pageAdded value: +{ + "description": "Page number for pagination (default: 1)", + "type": "number" +} - added
Input schema / properties / pathAdded value: +{ + "description": "Filter commits by file path", + "type": "string" +} - changed
Input schema / properties / since / descriptionPrevious 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" - added
Input schema / properties / trailersAdded value: +{ + "description": "Parse and include Git trailers for every commit", + "type": "boolean" +} - changed
Input schema / properties / until / descriptionPrevious 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" - added
Input schema / properties / with_statsAdded value: +{ + "description": "Include commit stats (additions, deletions)", + "type": "boolean" +}
- Added
list_merge_request_diffs - Changed
list_merge_requests2 fields changed- added
Input schema / properties / reviewer_idAdded value: +{ + "description": "Filter by reviewer user ID", + "type": "number" +} - added
Input schema / properties / reviewer_usernameAdded value: +{ + "description": "Filter by reviewer username", + "type": "string" +}
- Added
list_mr_discussions - Added
list_mr_notes - Added
list_mr_templates - Added
mark_mr_as_draft - Added
mark_mr_as_ready - Added
reply_to_mr_discussion - Added
resolve_mr_discussion - Added
unresolve_mr_discussion - Changed
update_merge_request2 fields changed- added
Input schema / properties / source_branchAdded value: +{ + "description": "Source branch name (alternative to merge_request_iid)", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "project_id", - "merge_request_iid" -]New value: +[ + "project_id" +]
- Added
update_mr_discussion_note
22 tool updates
- First observed
cancel_pipeline - First observed
create_issue - First observed
create_merge_request - First observed
create_pipeline - First observed
delete_pipeline - First observed
get_issue - First observed
get_job_logs - First observed
get_job_trace - First observed
get_merge_request - First observed
get_pipeline - First observed
get_pipeline_variables - First observed
get_project - First observed
get_project_commits - First observed
get_user - First observed
list_issues - First observed
list_merge_requests - First observed
list_pipeline_jobs - First observed
list_pipelines - First observed
list_project_branches - First observed
list_projects - First observed
retry_pipeline - First observed
update_merge_request
TDQS
Scored across 50 tools
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.
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.
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.
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
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
A TypeScript MCP server for Home Assistant, enabling programmatic management of entities, automati…
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
Related MCP Servers
- -licenseAqualityBmaintenanceMCP Server for the GitLab API, enabling project management, file operations, and more.95,398 npm91,812MIT
- AlicenseCqualityDmaintenanceAn MCP server that enables communication with GitLab repositories, allowing interaction with GitLab's API to manage projects, issues, and repositories through natural language.45189,695 npm1MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server for the GitLab API that enables comprehensive project management, file operations, and issue tracking. It supports automated branch creation, batch file pushes, and interaction with merge requests and CI/CD logs.MIT
- FlicenseNot gradedqualityDmaintenanceHTTP-based MCP server for GitLab API, enabling project management, issue tracking, merge requests, and file operations through natural language.-