Agent skill · Audited from source

gitlab-mcp-skill

skill · zereight/gitlab-mcpMIT licenceAudited 21 Oct 2026 · source 42b8d1d892d9

★ 2,055pushed today
!CAUTIONGrade F · 48/100 · 25 findings · 42b8d1d
2,055repo stars · whole zereight/gitlab-mcp

Is it safe? With care — CAUTION, grade F (48/100). We read this skill's source at commit 42b8d1d892d9 and observed filesystem and network access and a hard-coded secret (see the findings). The audit raised 25 findings, 0 critical or high. What it does: Use this skill when working with the GitLab MCP server tools for merge requests, issues, repositories, pipelines, work items, variables, dependency proxy, vulnerabilities, webhooks, search, CI catalog, and related…

Ask an AI about this pageGChatGPTCClaudePPerplexityGeGeminiXGrok
More
Cite

Cite this page

ModelsAtlas. “gitlab-mcp-skill (zereight/gitlab-mcp)”. Retrieved 21 Oct 2026. https://modelsatlas.com/skills/zereight/gitlab-mcp-skill

Trust audit

Audit 0.4.1 · source read 21 Oct 2026

Trust score48/100!CAUTION F
0 critical0 high11 medium42 low0 info

CAUTION means the audit found things worth knowing before you trust this skill. Grade F is shared by 105 of 14,816 audited skills.

What the source does

  • FilesystemDeclared3 observations
  • NetworkDeclared9 observations
  • ShellNone observedNo commands run in the source
  • DependenciesNot pinnedSome versions float
  • SecretsFoundSee the findings; values are never shown

Five audit layers

LayerWhat we checkResultFindings
L0 ProvenanceRepo owner, licence, archive status, activityPASS5
L1 Static sourceSecrets, path traversal, supply chain, hidden codeWARN20
L2 InstructionsPrompt injection, authority framing, hidden directivesPASS0
L3 InventoryThe files and declarations match the sourcePASS0
L4 SandboxRun in isolation and watch behaviourSKIPPED why0

Gates applied: no behavioural pass.

Findings (25)

MEDIUMInformation disclosuredisclose.log_secret · oauth-proxy.ts:703
F-12 Information disclosureCWE-209 · CWE-532Layer L1
logger.error(`Token exchange failed (${response.status}): ${body}`);
Why
No further detail recorded for this rule.
Fix
—
MEDIUMInformation disclosuredisclose.log_secret · oauth-proxy.ts:828
F-12 Information disclosureCWE-209 · CWE-532Layer L1
logger.error(`Token refresh failed (${response.status}): ${body}`);
Why
No further detail recorded for this rule.
Fix
—
MEDIUMInformation disclosuredisclose.log_secret · oauth-proxy.ts:997
F-12 Information disclosureCWE-209 · CWE-532Layer L1
logger.error(`Callback token exchange failed (${tokenResponse.status}): ${body}`);
Why
No further detail recorded for this rule.
Fix
—
MEDIUMInformation disclosuredisclose.log_secret · oauth.ts:440
F-12 Information disclosureCWE-209 · CWE-532Layer L1
logger.info(`Token saved to ${this.tokenStoragePath}`);
Why
No further detail recorded for this rule.
Fix
—
MEDIUMNetwork egressnet.raw_ip · .env.example:22
F-04 Network egressCWE-200 · CWE-319Layer L1
# GITLAB_OAUTH_REDIRECT_URI=http://127.0.0.1:8888/callback
Why
No further detail recorded for this rule.
Fix
—
MEDIUMNetwork egressnet.raw_ip · Makefile:25
F-04 Network egressCWE-200 · CWE-319Layer L1
serve: install ## Preview docs at http://127.0.0.1:8000 (auto-reload)
Why
No further detail recorded for this rule.
Fix
—
MEDIUMHard-coded secretssecret.generic · test/stateless/session-id.test.ts:38
F-03 Hard-coded secretsCWE-798 · CWE-321Layer L1
token: "…",
Why
No further detail recorded for this rule.
Fix
—
MEDIUMHard-coded secretssecret.generic · test/stateless/session-id.test.ts:52
F-03 Hard-coded secretsCWE-798 · CWE-321Layer L1
token: "…",
Why
No further detail recorded for this rule.
Fix
—
MEDIUMHard-coded secretssecret.generic · test/stateless/session-id.test.ts:66
F-03 Hard-coded secretsCWE-798 · CWE-321Layer L1
token: "…",
Why
No further detail recorded for this rule.
Fix
—
MEDIUMHard-coded secretssecret.generic · test/stateless/session-id.test.ts:82
F-03 Hard-coded secretsCWE-798 · CWE-321Layer L1
token: "…",
Why
No further detail recorded for this rule.
Fix
—
MEDIUMHard-coded secretssecret.generic · test/test-gitlab-api-request.ts:13
F-03 Hard-coded secretsCWE-798 · CWE-321Layer L1
const TOKEN = "…";
Why
No further detail recorded for this rule.
Fix
—
LOWInventory / provenanceinv.hidden_file · .envrc
F-13 Inventory / provenanceCWE-1104Layer L0
.envrc
Why
hidden member outside the usual dotfiles
Fix
review its purpose
LOWInventory / provenanceinv.hidden_file · .gitlab-mcp-managed-policy.example.json
F-13 Inventory / provenanceCWE-1104Layer L0
.gitlab-mcp-managed-policy.example.json
Why
hidden member outside the usual dotfiles
Fix
review its purpose
LOWInventory / provenanceinv.hidden_file · .gitlab-mcp-mask.example.json
F-13 Inventory / provenanceCWE-1104Layer L0
.gitlab-mcp-mask.example.json
Why
hidden member outside the usual dotfiles
Fix
review its purpose
LOWInventory / provenanceinv.hidden_file · .prettierignore
F-13 Inventory / provenanceCWE-1104Layer L0
.prettierignore
Why
hidden member outside the usual dotfiles
Fix
review its purpose
LOWInventory / provenanceinv.hidden_file · docker/masking-config/.gitlab-mcp-mask.json
F-13 Inventory / provenanceCWE-1104Layer L0
.gitlab-mcp-mask.json
Why
hidden member outside the usual dotfiles
Fix
review its purpose
LOWInformation disclosuredisclose.log_secret · test/mcp-oauth-tests.ts:363
F-12 Information disclosureCWE-209 · CWE-532Layer L1
console.log(`  ✓ Valid token accepted (status: ${res.status})`);
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · mcp-server/test/run-tests.mjs:32
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
assert.throws(() => validateMode("../../etc"), /Invalid mode name/);
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · mcp-server/test/run-tests.mjs:150
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
assert.throws(() => getStatePath("../../etc"), /Invalid mode name/);
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · server/version.ts:12
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
path.resolve(__dirname, "../../package.json"),
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · test/callback-proxy-redirect-policy.test.ts:282
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
"https://claude.ai/api/mcp/auth_callback/../../steal",
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · test/cli/args.test.ts:3
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
import { allTools } from "../../tools/registry.js";
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.beacon_words · test/oauth-consent.test.ts:21
F-04 Network egressCWE-200 · CWE-319Layer L1
const CALLBACK_URL = "https://mcp.example.com/callback";
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.beacon_words · test/oauth-consent.test.ts:108
F-04 Network egressCWE-200 · CWE-319Layer L1
const { stateless = null, callbackProxy = true, allowed, callbackUrl = CALLBACK_URL } = options;
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.beacon_words · test/stateless/callback-proxy.test.ts:38
F-04 Network egressCWE-200 · CWE-319Layer L1
const CALLBACK_URL = "https://mcp.example.com/callback";
Why
No further detail recorded for this rule.
Fix
—

Audit 0.4.1 · source sha 42b8d1d892d9 · 21 Oct 2026Report an issue or request a re-scan

Provenance

Who published it, and what the verdict is pinned to

  • Publisherzereight GitHub userOwner of the repository this skill is read from
  • Source folderzereight/gitlab-mcpThe exact folder we audited
  • LicenceMITAs the repository states it
  • Commit pinned for this verdict42b8d1d892d9A new audit runs when the source changes
  • Repository statusNot archivedPushed today
  • Sandboxed runNot runSkills are read, not executed; layer L4 is skipped

What it tells the agent

Full source on GitHub ↗

Its description: Use this skill when working with the GitLab MCP server tools for merge requests, issues, repositories, pipelines, work items, variables, dependency proxy, vulnerabilities, webhooks, search, CI catalog, and related…

---
name: gitlab-mcp-skill
description: Use this skill when working with the GitLab MCP server tools for merge requests, issues, repositories, pipelines, work items, variables, dependency proxy, vulnerabilities, webhooks, search, CI catalog, and related GitLab workflows.
---

# gitlab-mcp

GitLab MCP server providing 276 tools: 274 tools across 24 toolsets, plus `execute_graphql` and the always-available `discover_tools` meta-tool.

For exact generated parameter tables, see `docs/tools/`. Use this file for workflow shape and high-signal parameter hints.

## Toolsets

| Toolset | Default | Enable with |
|---|---|---|
| core (38 tools) | yes | default lean starter set |
| merge_requests (46 tools) | no | `GITLAB_TOOLSETS=merge_requests` |
| issues (24 tools) | no | `GITLAB_TOOLSETS=issues` |
| repositories (7 tools) | no | `GITLAB_TOOLSETS=repositories` |
| branches (15 tools) | no | `GITLAB_TOOLSETS=branches` |
| projects (11 tools) | no | `GITLAB_TOOLSETS=projects` |
| labels (5 tools) | no | `GITLAB_TOOLSETS=labels` |
| ci (4 tools) | no | `GITLAB_TOOLSETS=ci` |
| groups (1 tool) | no | `GITLAB_TOOLSETS=groups` |
| users (7 tools) | no | `GITLAB_TOOLSETS=users` |
| pipelines (58 tools) | no | `GITLAB_TOOLSETS=core,pipelines` (deprecated `USE_PIPELINE`; if `GITLAB_TOOLS` is unset, set `GITLAB_TOOLS=validate_ci_lint,validate_project_ci_lint`, otherwise append those tools instead of replacing the list) |
| milestones (17 tools) | no | `GITLAB_TOOLSETS=core,milestones` (deprecated `USE_MILESTONE`) |
| wiki (10 tools) | no | `GITLAB_TOOLSETS=core,wiki` (deprecated `USE_GITLAB_WIKI`) |
| releases (7 tools) | no | `GITLAB_TOOLSETS=releases` |
| tags (9 tools) | no | `GITLAB_TOOLSETS=tags` |
| snippets (5 tools) | no | `GITLAB_TOOLSETS=snippets` |
| workitems (18 tools) | no | `GITLAB_TOOLSETS=workitems` |
| webhooks (6 tools) | no | `GITLAB_TOOLSETS=webhooks` |
| search (3 tools) | no | `GITLAB_TOOLSETS=search` |
| variables (10 tools) | no | `GITLAB_TOOLSETS=variables` |
| dependency_proxy (4 tools) | no | `GITLAB_TOOLSETS=dependency_proxy` |
| vulnerabilities (4 tools) | no | `GITLAB_TOOLSETS=vulnerabilities` |
| orbit (4 tools) | no | `GITLAB_TOOLSETS=orbit` |
| api (1 tool) | no | `GITLAB_TOOLSETS=api` only (not `all`, not `discover_tools`, not `GITLAB_TOOLS`) |

Enable all discoverable toolsets: `GITLAB_TOOLSETS=all` (does **not** enable `api`). Restore the pre-lean default with `GITLAB_TOOLSETS=merge_requests,issues,repositories,branches,projects,labels,ci,groups,users`. Use `GITLAB_TOOLS` to enable individual tools outside their toolset, except explicit-only tools such as `gitlab_api_request`. `discover_tools` can list and activate opt-in categories for the current session, except `api`. `execute_graphql` is not in a toolset; enable it explicitly with `GITLAB_TOOLS=execute_graphql`. `USE_GITLAB_WIKI`, `USE_MILESTONE`, and `USE_PIPELINE` are deprecated (removed in next major (v3.0.0)). If you already set `GITLAB_TOOLSETS`, append the toolset to your existing list instead of replacing it. If `GITLAB_TOOLS` is unset, set `GITLAB_TOOLS=validate_ci_lint,validate_project_ci_lint`. If it is already set, append those two tools instead of replacing that list.

`gitlab_api_request` bypasses `GITLAB_ALLOWED_GROUPS` and other group restrictions, project allowlists, tool-level restrictions (`GITLAB_TOOLS`, `GITLAB_DENIED_TOOLS_REGEX` on other tools), and individual tool safety checks. The full token permission scope is exposed. Prompt injection can drive this tool. Operators who rely on these restrictions must NOT enable it. `GITLAB_ALLOWED_PROJECT_IDS` is checked only for `/projects/:id` paths; `/search`, `/users`, `/groups/:id`, and `/runners` are not constrained. `GITLAB_PROJECT_ID` and OAuth group allowlists are not enforced.

The per-toolset counts above sum to 314 because the 38 `core` tools are each also listed
in their full category (`get_branch` and `list_branches` additionally appear in both
`merge_requests` and `branches`); the unique tool count across all toolsets is 274.

## Key Workflows

### Code Review (see reference/code-review.md)

1. `list_merge_request_changed_files` - get file paths only (no diffs)
2. `get_merge_request_file_diff` - get diffs for 3-5 files per call (batch)
3. `create_merge_request_thread` or `create_draft_note` - leave review comments
4. `bulk_publish_draft_notes` - publish all drafts at once

### MR Lifecycle (see reference/merge-requests.md)

`create_merge_request` -> review -> `approve_merge_request` -> `merge_merge_request`

### Issue Management (see reference/issues.md)

`create_issue` -> `create_issue_link` -> `create_issue_note` -> `update_issue`

Use `update_issue_description_patch` for small edits to long issue descriptions instead of resending the full body.

### Projects & Namespaces

- `get_project`, `list_projects`, `update_project` - inspect or change project settings
- `list_project_members`, `list_group_members` - search members by name or username within a project or group
- `list_namespaces`, `get_namespace`, `verify_namespace` - find target namespaces before creating projects/groups
- `verify_namespace.parent_id` scopes nested namespace checks
- `create_repository.namespace_id` creates a project under a group namespace

### Branches & Commits

- `create_branch`, `list_branches`, `get_branch`, `delete_branch`
- Protected branches: `list_protected_branches`, `get_protected_branch`, `protect_branch`, `unprotect_branch`, `update_default_branch`
- Commits: `list_commits`, `get_commit`, `get_commit_diff`, `get_file_blame`, `list_commit_statuses`, `create_commit_status`

### Tags

- `list_tags`, `get_tag`, `create_tag`, `delete_tag`, `get_tag_signature`
- Protected tags: `list_protected_tags`, `get_protected_tag`, `protect_tag`, `unprotect_tag` (`create_access_level` is 0, 30, or 40; wildcards such as `v*` are supported)

### CI

- Lint configs: `validate_ci_lint`, `validate_project_ci_lint`
- Catalog: `list_ci_catalog_resources`, `get_ci_catalog_res

Excerpt, first 6,000 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.

Install

Pinned to the audited commit 42b8d1d

Download folder ↗
git clone https://github.com/zereight/gitlab-mcp.git
npm install
npm install -g @zereight/mcp-gitlab
npx skills add zereight/gitlab-mcp --skill gitlab-mcp-skill

Commands as the repository documents them: shown, never run by us. Our verdict covers commit 42b8d1d892d9 only.

Works in which agents?

What its own text says, not a test

AgentStatusMore
Claude CodeMentioned in its text, not testedSkills for Claude Code · About Claude Code
Claude DesktopMentioned in its text, not testedSkills for Claude Desktop · About Claude Desktop
CodexMentioned in its text, not testedSkills for Codex · About Codex
GitHub CopilotMentioned in its text, not testedSkills for GitHub Copilot · About GitHub Copilot
CursorMentioned in its text, not testedSkills for Cursor · About Cursor
Gemini CLIMentioned in its text, not testedSkills for Gemini CLI · About Gemini CLI
OpenClawMentioned in its text, not testedSkills for OpenClaw · About OpenClaw
“Mentioned” means the skill’s text names the agent. We have not run it there.

Audit history

Every audit, every source change

  1. !CAUTION F 48 / 100

    first audit · source 42b8d1d892d9

README badge

For maintainers · shows the latest audit

ModelsAtlas: CAUTION FMODELSATLASCAUTION · F
[![ModelsAtlas: CAUTION F](https://modelsatlas.com/skills/zereight/gitlab-mcp-skill/badge.svg)](https://modelsatlas.com/skills/zereight/gitlab-mcp-skill/)

The badge shows our verdict and grade for this skill, and links back to this page. It changes when the audit does.

continuous-learning✓SAFE

affaan-m/everything-claude-code

[DEPRECATED - use continuous-learning-v2] Legacy v1 stop-hook skill extractor. v2 is a strict superset with instinct-based, project-scoped, hook-reliable learning. Do not invoke v1: when continuous learning, session…

★ 292kGrade B
continuous-learning-v2✓SAFE

affaan-m/everything-claude-code

Instinct-based learning system that observes sessions via hooks, creates atomic instincts with confidence scoring, and evolves them into skills/commands/agents. v2.1 adds project-scoped instincts to prevent…

★ 292kGrade B
configure-ecc✓SAFE

affaan-m/everything-claude-code

Run the conversational ECC setup wizard inside the current harness: inventory the install, collect scope (user/project/local) and hook mode (off/minimal/standard/strict) in Claude Code, use Codex's native plugin…

★ 291kGrade B
config-gc✓SAFE

affaan-m/everything-claude-code

Garbage collection for your Claude Code configuration. Periodically scans ~/.claude (skills, memory, hooks, permissions, MCP servers, caches) for redundant, stale, orphaned, or low-value items, then walks the user…

★ 291kGrade B
competitive-report-structure✓SAFE

affaan-m/everything-claude-code

Assemble scored competitor profile cards (from benchmark-methodology) into a decision-grade competitive report with landscape map, competitor tiers, benchmarking matrix, white-space analysis, strategic recommendations,…

★ 291kGrade B
competitive-platform-analysis✓SAFE

affaan-m/everything-claude-code

Use when scoping a competitive landscape — identifying, categorising, and score-filtering a competitor set before any benchmarking begins. Decides who counts as a competitor, which tier they belong to, and which sources…

★ 290kGrade B

Add this badge to your README

[![ModelsAtlas: CAUTION F](https://modelsatlas.com/skills/zereight/gitlab-mcp-skill/badge.svg)](https://modelsatlas.com/skills/zereight/gitlab-mcp-skill/)

Questions about gitlab-mcp-skill

What does the gitlab-mcp-skill skill do?
MCP server for GitLab: 100+ tools for projects, MRs, issues, pipelines, wikis and more via the GitLab REST/GraphQL API
Is gitlab-mcp-skill safe to install?
With care. The audit graded it F (48/100) and found 25 things worth knowing before you trust this skill, listed below with the exact line each was found on.
What can gitlab-mcp-skill access on my machine?
The audit observed that it reaches the network and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: found — see the findings.
Which assistants does gitlab-mcp-skill work with?
Its documentation mentions claude-code, claude-desktop, codex, copilot, cursor, gemini-cli and openclaw. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (42b8d1d892d9), read on 2026-10-21. The repository is watched, and a new audit runs when it changes — this is the first audit.

Sources

Spotted something wrong? Report a correction · Methodology

Keep going in your AI

Opens with this page as the source. We add nothing else to the prompt.