@wanadev/mcp-gitlab
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GITLAB_TOKEN | Yes | GitLab Personal Access Token | |
| GITLAB_BASE_URL | No | GitLab instance URL (default: https://gitlab.com) | https://gitlab.com |
| GITLAB_READ_ONLY | No | Set to true to block all write operations | false |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_epicsA | Lister les epics d'un groupe GitLab. Filtrer par etat, recherche textuelle ou labels. |
| get_epicA | Obtenir les details complets d'un epic par son numero (IID). |
| create_epicA | Creer un nouvel epic dans un groupe GitLab. Par defaut dry_run=true : retourne un apercu sans creer. Passer dry_run=false apres confirmation. |
| update_epicA | Mettre a jour un epic existant. Par defaut dry_run=true : retourne un apercu sans modifier. Passer dry_run=false apres confirmation. |
| close_epicA | Fermer un epic. Par defaut dry_run=true : retourne un apercu sans fermer. Passer dry_run=false apres confirmation. |
| reopen_epicA | Reopen a closed epic. dry_run=true by default. |
| list_epic_issuesB | Lister les issues rattachees a un epic. Affiche l'ID global et le IID projet de chaque issue. |
| add_issue_to_epicA | Link an issue to an epic. dry_run=true by default. Requires project_id and issue_iid (not the global issue ID). |
| list_epic_notesA | Lister les commentaires d'un epic. |
| add_epic_noteA | Ajouter un commentaire sur un epic. Par defaut dry_run=true. |
| update_epic_noteA | Edit the body of an existing epic note. Get note_id from list_epic_notes. dry_run=true by default. |
| delete_epic_noteA | Delete an existing epic note. This is destructive and cannot be undone. dry_run=true by default. |
| get_epic_widgetsA | Get Work Item widgets for an epic: health status, progress, milestone, iteration, and linked items. |
| set_epic_milestoneA | Associate a milestone with an epic (uses Work Items API). dry_run=true by default. |
| set_epic_health_statusA | Set the health status of an epic (onTrack, needsAttention, atRisk, or null to clear). dry_run=true by default. |
| set_issue_health_statusB | Set the health status of an issue (onTrack, needsAttention, atRisk, or null to clear). dry_run=true by default. |
| set_epic_iterationB | Associate an iteration (sprint) with an epic (uses Work Items API). dry_run=true by default. |
| get_work_item_idA | Resolve the WorkItem global ID (gid://gitlab/WorkItem/N) for an epic or issue. Required as parent_work_item_id / child_work_item_ids on link_work_items and unlink_work_items. |
| link_work_itemsA | Attach one or more work items (issues or epics) as children of a parent work item (epic). Uses the Work Items hierarchy widget — the canonical GitLab 17+ replacement for add_issue_to_epic. Idempotent: existing children of the parent are preserved. Resolve GIDs via get_work_item_id. dry_run=true by default. |
| unlink_work_itemsA | Detach one or more work items from their current parent. Per-child operation: each child is unset from whatever parent it currently has (parent_work_item_id is accepted for symmetry but the unlink does not assert it). dry_run=true by default. |
| add_linked_itemA | Create a link between two work items (epics or issues). Link types: RELATED, BLOCKS, BLOCKED_BY. dry_run=true by default. |
| list_issuesA | Lister les issues d'un groupe GitLab. Filtrer par etat, recherche, labels, milestone ou assignee. |
| get_issueA | Obtenir les details d'une issue par son projet et son numero (IID). |
| create_issueA | Creer une nouvelle issue dans un projet. Par defaut dry_run=true : retourne un apercu sans creer. Passer dry_run=false apres confirmation. |
| update_issueA | Mettre a jour une issue existante. Par defaut dry_run=true : retourne un apercu sans modifier. Passer dry_run=false apres confirmation. |
| close_issueA | Fermer une issue. Par defaut dry_run=true : retourne un apercu sans fermer. Passer dry_run=false apres confirmation. |
| reopen_issueA | Reopen a closed issue. dry_run=true by default. |
| list_project_issuesA | List issues for a specific project (not group). Filter by state, labels, milestone, assignee, iteration. |
| list_issue_notesB | Lister les commentaires d'une issue. |
| add_issue_noteA | Ajouter un commentaire sur une issue. Par defaut dry_run=true. |
| update_issue_noteA | Edit the body of an existing issue note. Get note_id from list_issue_notes. dry_run=true by default. |
| delete_issue_noteA | Delete an existing issue note. This is destructive and cannot be undone. dry_run=true by default. |
| list_milestonesA | Lister les milestones d'un groupe GitLab. Filtrer par etat ou recherche textuelle. |
| get_milestoneA | Obtenir les details d'un milestone par son ID. |
| create_milestoneA | Creer un nouveau milestone. Par defaut dry_run=true : retourne un apercu sans creer. Passer dry_run=false apres confirmation. |
| update_milestoneA | Mettre a jour un milestone existant. Par defaut dry_run=true. |
| close_milestoneA | Fermer un milestone. Par defaut dry_run=true. |
| list_project_milestonesA | List milestones at the project level. On GitLab CE/Free, milestones are project-scoped and this is the only way to list them. |
| get_project_milestoneB | Get details of a project-level milestone. |
| create_project_milestoneA | Create a milestone on a project. dry_run=true by default. |
| update_project_milestoneB | Update a project-level milestone. dry_run=true by default. |
| close_project_milestoneB | Close a project-level milestone. dry_run=true by default. |
| list_merge_requestsA | Lister les merge requests d'un groupe GitLab. Filtrer par etat, auteur, reviewer, labels ou milestone. |
| get_merge_requestB | Obtenir les details d'une merge request par son projet et son numero (IID). |
| create_merge_requestA | Create a new merge request. dry_run=true by default. |
| update_merge_requestA | Update a merge request (title, description, labels, assignees, reviewers). dry_run=true by default. |
| merge_merge_requestB | Merge a merge request. dry_run=true by default. |
| approve_merge_requestA | Approve a merge request. dry_run=true by default. |
| rebase_merge_requestA | Trigger an asynchronous rebase of the MR's source branch on top of the target branch. Useful when CI requires a linear history before merge. dry_run=true by default. |
| list_mr_notesC | List comments on a merge request. |
| add_mr_noteA | Add a comment to a merge request. dry_run=true by default. |
| update_mr_noteA | Edit the body of an existing MR note. Get note_id from list_mr_notes. dry_run=true by default. |
| delete_mr_noteA | Delete an existing MR note. This is destructive and cannot be undone. dry_run=true by default. |
| get_mr_diffA | Get the file changes (diff summary) of a merge request. Returns diff_refs (base_sha/head_sha/start_sha) needed to create line-positioned discussions via create_mr_discussion. |
| list_mr_approval_rulesA | List the project-level MR approval rules: who must approve, how many approvals are required, applies-to-which-branches. |
| create_mr_approval_ruleA | Create a project-level MR approval rule. dry_run=true by default. |
| update_mr_approval_ruleB | Update an existing project-level MR approval rule. dry_run=true by default. |
| delete_mr_approval_ruleA | Delete a project-level MR approval rule. dry_run=true by default. This is destructive. |
| create_mr_discussionA | Create a code-review comment on a specific line in an MR's diff (a 'discussion' in GitLab terminology). Requires the diff_refs (base_sha, head_sha, start_sha) returned by get_mr_diff. Provide exactly one of new_line / old_line. dry_run=true by default. |
| resolve_mr_discussionA | Mark an MR discussion as resolved (or unresolved). dry_run=true by default. |
| list_pipelinesA | List recent pipelines for a project. Filter by branch (ref) or status (running, pending, success, failed, canceled). |
| get_pipelineA | Get details of a specific pipeline (status, duration, jobs). |
| get_job_logA | Get the log output of a CI job (last 2000 chars). |
| retry_pipelineA | Retry a failed pipeline. dry_run=true by default. |
| cancel_pipelineA | Cancel a running pipeline. dry_run=true by default. |
| list_branchesC | List branches of a project. Filter by search term. |
| create_branchA | Create a new branch from a ref. dry_run=true by default. |
| list_repository_treeC | List files and directories in a project repository. |
| get_fileA | Get the content of a file from the repository. |
| list_protected_branchesA | List protected branches for a project, with their push/merge/unprotect access levels. |
| protect_branchA | Protect a branch with given push/merge/unprotect access levels. Access levels: 0=NoAccess, 30=Developer, 40=Maintainer, 60=Admin. dry_run=true by default. |
| unprotect_branchA | Remove branch protection rules from a branch. dry_run=true by default. |
| create_fileA | Create a new file in a repository. Rejects if the file already exists. dry_run=true by default. |
| update_fileA | Update an existing file in a repository. Supports optimistic concurrency via last_commit_id. dry_run=true by default. |
| delete_fileA | Delete a file from a repository. dry_run=true by default. This is destructive on the branch. |
| commit_filesA | Atomically commit multiple file actions (create/update/delete/move/chmod) in a single commit. dry_run=true by default. |
| list_commitsA | List recent commits for a project. Filter by branch or file path. |
| list_groupsA | Lister les groupes GitLab accessibles. IMPORTANT : appelez ce tool en premier quand l'utilisateur mentionne un groupe par son nom, pour obtenir le group_id (ID ou full_path) a passer aux autres tools. |
| list_projectsA | Lister les projets d'un groupe GitLab. Filtrer par recherche ou statut d'archivage. |
| list_group_membersA | Lister les membres d'un groupe GitLab avec leur niveau d'acces. |
| list_labelsA | Lister les labels d'un groupe GitLab avec le nombre d'issues et MRs associees. |
| list_boardsA | Lister les boards (tableaux kanban) d'un groupe GitLab avec leurs colonnes. |
| list_iterationsA | List iterations (sprints) for a GitLab group. Filter by state (upcoming, current, closed) or search by title. Requires GitLab Premium/Ultimate. |
| create_iterationA | Create a new iteration (sprint) in a group. start_date and due_date are required (YYYY-MM-DD). dry_run=true by default. |
| update_iterationA | Update an existing iteration (sprint). The REST path uses iteration_iid (per-group), not the global id. dry_run=true by default. |
| get_work_item_type_idA | Discover the global ID of a Work Item type (e.g. EPIC, ISSUE, TASK) for a given namespace. Required as workItemTypeId on workItemCreate. IDs vary per GitLab instance and version, so call this once per (namespace, type) and cache the result. |
| list_workitem_statusesA | List allowed Status widget values for a Work Item type in a group (GitLab 17+). Returns global IDs to pass as status_id to update_issue / update_epic. |
| create_labelA | Create a label in a group. dry_run=true by default. |
| update_labelB | Update a label in a group. dry_run=true by default. |
| delete_labelA | Delete a label from a group. dry_run=true by default. This is destructive and cannot be undone. |
| add_group_memberA | Add a user to a group with a given access level. dry_run=true by default. |
| add_project_memberA | Add a user to a project with a given access level. dry_run=true by default. |
| update_member_access_levelA | Change a member's access level on a group or project. dry_run=true by default. |
| remove_memberA | Remove a user from a group or project. dry_run=true by default. This is destructive. |
| search_issuesB | Search issues by full-text query within a project or group. Maps to GET /:scope/:id/search?scope=issues. |
| search_merge_requestsB | Search merge requests by full-text query within a project or group. Maps to GET /:scope/:id/search?scope=merge_requests. |
| search_blobsA | Search code/file contents by full-text query within a project or group. Returns matching blobs with line context. Maps to GET /:scope/:id/search?scope=blobs. |
| upload_fileA | Upload a file to a project so it can be embedded in an issue, MR, or epic description. Returns the Markdown snippet GitLab expects (e.g. |
| search_usersA | Search for GitLab users globally by name or username. |
| get_current_userA | Obtenir les informations de l'utilisateur connecte (verifie que le token fonctionne). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/wanadev/gitlab-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server