Mcp Gitlab

101 tools. 61 can modify or destroy data without limits.

8 destructive tools with no built-in limits. Policy required.

Last updated:

61 can modify or destroy data
40 read-only
101 tools total

Community server · catalogue entry verified 29/06/2026

How to control Mcp Gitlab ↓

What Mcp Gitlab exposes to your agents

Read (40) Write / Execute (53) Destructive / Financial (8)
Critical Risk

The most dangerous Mcp Gitlab tools

61 of Mcp Gitlab's 101 tools can modify, destroy, or commit something on every call — and an agent calls them with no built-in limits.

How to control Mcp Gitlab

PolicyLayer is an MCP gateway — it sits between your AI agents and Mcp Gitlab, and nothing reaches the server without passing your rules. These are the rules we recommend:

Deny destructive operations
{
  "delete_epic_note": {
    "deny_if": [
      {
        "conditions": [],
        "on_deny": "Blocked by default. Requires approval."
      }
    ]
  }
}

Destructive tools should never be available to autonomous agents without human approval.

Rate limit write operations
{
  "add_epic_note": {
    "limits": [
      {
        "counter": "add_epic_note_per_hour",
        "window": "hour",
        "max": 30,
        "scope": "grant"
      }
    ]
  }
}

Prevents bulk unintended modifications from agents caught in loops.

Cap read operations
{
  "get_current_user": {
    "limits": [
      {
        "counter": "get_current_user_per_minute",
        "window": "minute",
        "max": 60,
        "scope": "grant"
      }
    ]
  }
}

Controls API costs and prevents retry loops from exhausting upstream rate limits.

  1. Create a free account and register Mcp Gitlab — nothing to install.
  2. Add these rules — paste them, or build them visually. Tune the limits to your setup.
  3. Point your MCP client (Claude, Cursor, anything) at your gateway URL.
ENFORCE POLICY ON MCP GITLAB →

Instant setup, no code required.

All 101 Mcp Gitlab tools

WRITE 50 tools
Write add_epic_note Ajouter un commentaire sur un epic. Par defaut dry_run=true. Write add_group_member Add a user to a group with a given access level. dry_run=true by default. Write add_issue_note Ajouter un commentaire sur une issue. Par defaut dry_run=true. Write add_issue_to_epic Link an issue to an epic. dry_run=true by default. Requires project_id and issue_iid (not the global issue ID) Write add_linked_item Create a link between two work items (epics or issues). Link types: RELATED, BLOCKS, BLOCKED_BY. dry_run=true Write add_mr_note Add a comment to a merge request. dry_run=true by default. Write add_project_member Add a user to a project with a given access level. dry_run=true by default. Write approve_merge_request Approve a merge request. dry_run=true by default. Write close_epic Fermer un epic. Par defaut dry_run=true : retourne un apercu sans fermer. Passer dry_run=false apres confirmat Write close_issue Fermer une issue. Par defaut dry_run=true : retourne un apercu sans fermer. Passer dry_run=false apres confirm Write close_milestone Fermer un milestone. Par defaut dry_run=true. Write close_project_milestone Close a project-level milestone. dry_run=true by default. Write commit_files Atomically commit multiple file actions (create/update/delete/move/chmod) in a single commit. dry_run=true by Write create_branch Create a new branch from a ref. dry_run=true by default. Write create_epic Creer un nouvel epic dans un groupe GitLab. Par defaut dry_run=true : retourne un apercu sans creer. Passer dr Write create_file Create a new file in a repository. Rejects if the file already exists. dry_run=true by default. Write create_issue Creer une nouvelle issue dans un projet. Par defaut dry_run=true : retourne un apercu sans creer. Passer dry_r Write create_iteration Create a new iteration (sprint) in a group. start_date and due_date are required (YYYY-MM-DD). dry_run=true by Write create_label Create a label in a group. dry_run=true by default. Write create_merge_request Create a new merge request. dry_run=true by default. Write create_milestone Creer un nouveau milestone. Par defaut dry_run=true : retourne un apercu sans creer. Passer dry_run=false apre Write create_mr_approval_rule Create a project-level MR approval rule. dry_run=true by default. Write create_mr_discussion Create a code-review comment on a specific line in an MR Write create_project_milestone Create a milestone on a project. dry_run=true by default. Write gitlab_setup GitLab MCP is not configured yet. Call this tool to show the user how to set up their GitLab token. Write link_work_items Attach one or more work items (issues or epics) as children of a parent work item (epic). Uses the Work Items Write merge_merge_request Merge a merge request. dry_run=true by default. Write protect_branch Protect a branch with given push/merge/unprotect access levels. Access levels: 0=NoAccess, 30=Developer, 40=Ma Write reopen_epic Reopen a closed epic. dry_run=true by default. Write reopen_issue Reopen a closed issue. dry_run=true by default. Write resolve_mr_discussion Mark an MR discussion as resolved (or unresolved). dry_run=true by default. Write set_epic_health_status Set the health status of an epic (onTrack, needsAttention, atRisk, or null to clear). dry_run=true by default. Write set_epic_iteration Associate an iteration (sprint) with an epic (uses Work Items API). dry_run=true by default. Write set_epic_milestone Associate a milestone with an epic (uses Work Items API). dry_run=true by default. Write set_issue_health_status Set the health status of an issue (onTrack, needsAttention, atRisk, or null to clear). dry_run=true by default Write unlink_work_items Detach one or more work items from their current parent. Per-child operation: each child is unset from whateve Write update_epic Mettre a jour un epic existant. Par defaut dry_run=true : retourne un apercu sans modifier. Passer dry_run=fal Write update_epic_note Edit the body of an existing epic note. Get note_id from list_epic_notes. dry_run=true by default. Write update_file Update an existing file in a repository. Supports optimistic concurrency via last_commit_id. dry_run=true by d Write update_issue Mettre a jour une issue existante. Par defaut dry_run=true : retourne un apercu sans modifier. Passer dry_run= Write update_issue_note Edit the body of an existing issue note. Get note_id from list_issue_notes. dry_run=true by default. Write update_iteration Update an existing iteration (sprint). The REST path uses iteration_iid (per-group), not the global id. dry_ru Write update_label Update a label in a group. dry_run=true by default. Write update_member_access_level Change a member Write update_merge_request Update a merge request (title, description, labels, assignees, reviewers). dry_run=true by default. Write update_milestone Mettre a jour un milestone existant. Par defaut dry_run=true. Write update_mr_approval_rule Update an existing project-level MR approval rule. dry_run=true by default. Write update_mr_note Edit the body of an existing MR note. Get note_id from list_mr_notes. dry_run=true by default. Write update_project_milestone Update a project-level milestone. dry_run=true by default. Write upload_file Upload a file to a project so it can be embedded in an issue, MR, or epic description. Returns the Markdown sn
READ 40 tools
Read get_current_user Obtenir les informations de l Read get_epic Obtenir les details complets d Read get_epic_widgets Get Work Item widgets for an epic: health status, progress, milestone, iteration, and linked items. Read get_file Get the content of a file from the repository. Read get_issue Obtenir les details d Read get_job_log Get the log output of a CI job (last 2000 chars). Read get_merge_request Obtenir les details d Read get_milestone Obtenir les details d Read get_mr_diff Get the file changes (diff summary) of a merge request. Returns diff_refs (base_sha/head_sha/start_sha) needed Read get_pipeline Get details of a specific pipeline (status, duration, jobs). Read get_project_milestone Get details of a project-level milestone. Read get_work_item_id Resolve the WorkItem global ID (gid://gitlab/WorkItem/N) for an epic or issue. Required as parent_work_item_id Read get_work_item_type_id Discover the global ID of a Work Item type (e.g. EPIC, ISSUE, TASK) for a given namespace. Required as workIte Read list_boards Lister les boards (tableaux kanban) d Read list_branches List branches of a project. Filter by search term. Read list_commits List recent commits for a project. Filter by branch or file path. Read list_epic_issues Lister les issues rattachees a un epic. Affiche l Read list_epic_notes Lister les commentaires d Read list_epics Lister les epics d Read list_group_members Lister les membres d Read list_groups Lister les groupes GitLab accessibles. IMPORTANT : appelez ce tool en premier quand l Read list_issue_notes Lister les commentaires d Read list_issues Lister les issues d Read list_iterations List iterations (sprints) for a GitLab group. Filter by state (upcoming, current, closed) or search by title. Read list_labels Lister les labels d Read list_merge_requests Lister les merge requests d Read list_milestones Lister les milestones d Read list_mr_approval_rules List the project-level MR approval rules: who must approve, how many approvals are required, applies-to-which- Read list_mr_notes List comments on a merge request. Read list_pipelines List recent pipelines for a project. Filter by branch (ref) or status (running, pending, success, failed, canc Read list_project_issues List issues for a specific project (not group). Filter by state, labels, milestone, assignee, iteration. Read list_project_milestones List milestones at the project level. On GitLab CE/Free, milestones are project-scoped and this is the only wa Read list_projects Lister les projets d Read list_protected_branches List protected branches for a project, with their push/merge/unprotect access levels. Read list_repository_tree List files and directories in a project repository. Read list_workitem_statuses List allowed Status widget values for a Work Item type in a group (GitLab 17+). Returns global IDs to pass as Read search_blobs Search code/file contents by full-text query within a project or group. Returns matching blobs with line conte Read search_issues Search issues by full-text query within a project or group. Maps to GET /:scope/:id/search?scope=issues. Read search_merge_requests Search merge requests by full-text query within a project or group. Maps to GET /:scope/:id/search?scope=merge Read search_users Search for GitLab users globally by name or username.

Related servers

Other MCP servers with similar tools — same risk classification, starter policies for each.

Questions about Mcp Gitlab

Can an AI agent delete data through the Mcp Gitlab MCP server? +

Yes. The Mcp Gitlab server exposes 8 destructive tools including delete_epic_note, delete_file, delete_issue_note. These permanently remove resources with no undo. PolicyLayer blocks destructive tools by default so they never reach the upstream server.

How do I prevent bulk modifications through Mcp Gitlab? +

The Mcp Gitlab server has 50 write tools including add_epic_note, add_group_member, add_issue_note. Set a rate limit in your policy -- for example, 10 calls per hour prevents an agent from making more than 10 modifications per hour. PolicyLayer enforces this at the gateway, before calls reach Mcp Gitlab.

How many tools does the Mcp Gitlab MCP server expose? +

101 tools across 3 categories: Destructive, Read, Write. 40 are read-only. 61 can modify, create, or delete data.

How do I enforce a policy on Mcp Gitlab? +

Register the Mcp Gitlab MCP server in PolicyLayer, apply the suggested rules above (adjust the limits to your use case), and point your AI client at the PolicyLayer proxy URL instead of the server directly. Your agents keep the same tools; PolicyLayer evaluates every call against policy before it executes. Nothing to install, live in minutes.

Enforce policy on every Mcp Gitlab tool call.

Deterministic rules across all 101 Mcp Gitlab tools. Per-identity grants. Full audit log. Live in minutes. Nothing to install.

Instant setup, no code required.

101 Mcp Gitlab tools catalogued and risk-classified — across an index of 43,000+ MCP servers.

// GET IN TOUCH

Have a question or want to learn more? Send us a message.

Message sent.

We'll get back to you soon.