@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 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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