@zereight/mcp-gitlab 2.2.1 → 2.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ko.md CHANGED
@@ -1,12 +1,25 @@
1
1
  # GitLab MCP Server
2
2
 
3
3
  [![npm](https://img.shields.io/npm/v/@zereight/mcp-gitlab.svg)](https://www.npmjs.com/package/@zereight/mcp-gitlab)
4
- [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_GitLab_MCP-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](vscode:mcp/install?%7B%22name%22%3A%22zereight.gitlab-mcp%22%2C%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40zereight%2Fmcp-gitlab%40latest%22%5D%2C%22env%22%3A%7B%22GITLAB_PERSONAL_ACCESS_TOKEN%22%3A%22%24%7Binput%3Agitlab-token%7D%22%2C%22GITLAB_API_URL%22%3A%22https%3A%2F%2Fgitlab.com%2Fapi%2Fv4%22%2C%22GITLAB_PERMISSION_MODE%22%3A%22full%22%7D%7D)
4
+ [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_GitLab_MCP-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect/mcp/install?name=zereight.gitlab-mcp&config=%7B%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40zereight%2Fmcp-gitlab%40latest%22%5D%2C%22env%22%3A%7B%22GITLAB_PERSONAL_ACCESS_TOKEN%22%3A%22%24%7Binput%3Agitlab-token%7D%22%2C%22GITLAB_API_URL%22%3A%22https%3A%2F%2Fgitlab.com%2Fapi%2Fv4%22%2C%22GITLAB_PERMISSION_MODE%22%3A%22full%22%7D%7D)
5
+ [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=zereight.gitlab-mcp&config=eyJ0eXBlIjoic3RkaW8iLCJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkB6ZXJlaWdodC9tY3AtZ2l0bGFiQGxhdGVzdCJdLCJlbnYiOnsiR0lUTEFCX1BFUlNPTkFMX0FDQ0VTU19UT0tFTiI6IiR7ZW52OkdJVExBQl9QRVJTT05BTF9BQ0NFU1NfVE9LRU59IiwiR0lUTEFCX0FQSV9VUkwiOiJodHRwczovL2dpdGxhYi5jb20vYXBpL3Y0IiwiR0lUTEFCX1BFUk1JU1NJT05fTU9ERSI6ImZ1bGwifX0%3D)
5
6
 
6
7
  [English](./README.md) | [한국어](./README.ko.md) | [简体中文](./README.zh-CN.md) | [Português (Brasil)](./README.pt-BR.md)
7
8
 
8
9
  📖 **[문서 →](https://zereight.github.io/gitlab-mcp/)** 설정 가이드, 환경 변수, 전체 도구 레퍼런스는 호스팅된 문서 사이트에서 확인할 수 있습니다.
9
10
 
11
+ `@zereight/mcp-gitlab`의 권장 로컬 PAT 설치입니다. 명령 인자는 [Claude Code](./docs/clients/claude-code.md)와 [Codex](./docs/clients/codex.md) 가이드와 같습니다.
12
+
13
+ `zereight-mcp-gitlab` 바이너리를 먼저 설치하세요. `npm install -g @zereight/mcp-gitlab`, 또는 Homebrew `brew tap zereight/gitlab-mcp https://github.com/zereight/gitlab-mcp` 다음 `brew install zereight/gitlab-mcp/zereight-mcp-gitlab`.
14
+
15
+ | 클라이언트 | 설치 |
16
+ | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
17
+ | Claude Code | `claude mcp add gitlab --transport stdio --scope local --env GITLAB_PERSONAL_ACCESS_TOKEN=glpat-your-token --env GITLAB_API_URL=https://gitlab.com/api/v4 -- zereight-mcp-gitlab` |
18
+ | Codex | `codex mcp add gitlab --env GITLAB_PERSONAL_ACCESS_TOKEN=glpat-your-token --env GITLAB_API_URL=https://gitlab.com/api/v4 -- zereight-mcp-gitlab` |
19
+ | Cursor | [Cursor 설정 가이드](./docs/clients/cursor.md) |
20
+ | VS Code | [VS Code 설정 가이드](./docs/clients/vscode.md) |
21
+ | JSON 클라이언트 | [JSON 기반 MCP 클라이언트 설정 가이드](./docs/clients/json-clients.md) |
22
+
10
23
  [![Star History Chart](./assets/star-history.png)](https://www.star-history.com/?repos=zereight%2Fgitlab-mcp&type=date&legend=top-left)
11
24
 
12
25
  ## @zereight/mcp-gitlab
@@ -17,7 +30,7 @@ PAT, OAuth, 읽기 전용 모드, 동적 API URL, 원격 인증을 지원하며
17
30
 
18
31
  ### 왜 이 GitLab MCP를 사용하나요?
19
32
 
20
- - **268개 도구: toolset 266개 + `execute_graphql` + `discover_tools`** — 작은 toolset으로 시작하고, 런타임에 카테고리 활성화
33
+ - **274개 도구: toolset 272개 + `execute_graphql` + `discover_tools`** — 작은 toolset으로 시작하고, 런타임에 카테고리 활성화
21
34
  - **MR 2단계 리뷰** — `list_merge_request_changed_files` → 배치 `get_merge_request_file_diff`
22
35
  - **Agent Skill 내장** — `skills/gitlab-mcp/` 워크플로우 가이드
23
36
  - **유연한 인증** — Personal Access Token, 로컬 OAuth2 브라우저 플로우, MCP OAuth 프록시, 요청별 원격 인증
@@ -28,15 +41,23 @@ PAT, OAuth, 읽기 전용 모드, 동적 API URL, 원격 인증을 지원하며
28
41
 
29
42
  ### 비교 요약
30
43
 
31
- | | @zereight/mcp-gitlab | GitLab MCP A (커뮤니티 CQRS형) |
32
- |---|----------------------|--------------------------------|
33
- | **적합한 경우** | AI 에이전트 워크플로우 | 엔터프라이즈 멀티 인스턴스 / 그룹형 도구 |
34
- | **도구 모델** | 268개 도구: toolset 266개 + `execute_graphql` + `discover_tools` | ~50–60개 `browse_*` / `manage_*` 그룹 도구 |
35
- | **MR 리뷰** | 2단계 배치 diff | 서버마다 다름 |
36
- | **Node.js** | >=18.17 | 보통 >=24 |
37
- | **라이선스** | MIT | 서버마다 다름 |
44
+ | | @zereight/mcp-gitlab | GitLab MCP A (커뮤니티 CQRS형) | GitLab 공식 MCP 서버 |
45
+ | --------------- | ---------------------------------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
46
+ | **적합한 경우** | AI 에이전트 워크플로우 | 엔터프라이즈 멀티 인스턴스 / 그룹형 도구 | GitLab에 내장, 별도 설치 없음 |
47
+ | **도구 모델** | 274개 도구: toolset 272개 + `execute_graphql` + `discover_tools` | ~50–60개 `browse_*` / `manage_*` 그룹 도구 | HTTP 헤더로 고르는 toolset |
48
+ | **MR 리뷰** | 2단계 배치 diff | 서버마다 다름 | `get_merge_request`에 diffs |
49
+ | **Node.js** | >=18.17 | 보통 >=24 | stdio는 `mcp-remote`, Node.js 20+ |
50
+ | **라이선스** | MIT | 서버마다 다름 | GitLab의 일부 |
38
51
 
39
- [전체 비교 →](./docs/comparison/community-gitlab-mcp-a.md)
52
+ [GitLab MCP A 전체 비교 →](./docs/comparison/community-gitlab-mcp-a.md)
53
+
54
+ GitLab은 [공식 MCP 서버](https://docs.gitlab.com/user/model_context_protocol/mcp_server/)도 제공합니다.
55
+
56
+ - Free, Premium, Ultimate. GitLab 19.2에서 Premium에서 Free로 옮겨졌고, GitLab 19.5에서 GA입니다.
57
+ - GitLab.com에서는 최상위 그룹 Owner가 MCP 서버 접근을 허용합니다. GitLab Self-Managed와 GitLab Dedicated는 인스턴스 설정입니다. 기본값 규칙은 공식 페이지에 있습니다.
58
+ - 원격 클라이언트는 HTTP `https://<gitlab.example.com>/api/v4/mcp`와 OAuth 2.0 동적 클라이언트 등록을 사용합니다.
59
+ - stdio는 `mcp-remote`를 거치며 Node.js 20 이상이 필요합니다.
60
+ - Toolset은 `X-Gitlab-Enabled-Mcp-Server-Toolsets` 헤더를 사용합니다. 선택 헤더 `X-Gitlab-Mcp-Server-Tool-Name-Prefix`는 도구 이름 접두사의 앞 32자만 유지합니다.
40
61
 
41
62
  빠른 시작: 아래에서 Personal Access Token 또는 OAuth2 설정 중 하나를 선택하고 `@zereight/mcp-gitlab`을 설치한 뒤 MCP 클라이언트 설정에서 `zereight-mcp-gitlab`을 사용하세요.
42
63
 
@@ -111,7 +132,7 @@ command = lib.getExe inputs.gitlab-mcp.packages.${system}.default;
111
132
 
112
133
  예시는 기존 `mcp-gitlab`보다 충돌 가능성이 낮은 `zereight-mcp-gitlab` 별칭을 사용합니다. MCP 클라이언트가 찾지 못하면 `which zereight-mcp-gitlab`의 절대 경로를 사용하세요.
113
134
 
114
- 전역 설치를 쓰지 않으려면 `npx -y @zereight/mcp-gitlab@2.2.0`처럼 직전 안정 버전(문서가 권장하는 버전)으로 고정하세요. 항상 최신 버전을 원하면 `npx -y @zereight/mcp-gitlab@latest`를 사용하세요. 새 버전이 나오면 서버가 시작 시 stderr로 알려줍니다(`GITLAB_DISABLE_VERSION_CHECK=true`로 비활성화 가능).
135
+ 전역 설치를 쓰지 않으려면 `npx -y @zereight/mcp-gitlab@2.2.2`처럼 직전 안정 버전(문서가 권장하는 버전)으로 고정하세요. 항상 최신 버전을 원하면 `npx -y @zereight/mcp-gitlab@latest`를 사용하세요. 새 버전이 나오면 서버가 시작 시 stderr로 알려줍니다(`GITLAB_DISABLE_VERSION_CHECK=true`로 비활성화 가능).
115
136
 
116
137
  #### CLI 인자 사용하기(환경 변수 문제가 있는 클라이언트용)
117
138
 
@@ -133,13 +154,13 @@ command = lib.getExe inputs.gitlab-mcp.packages.${system}.default;
133
154
 
134
155
  - `--token` - GitLab Personal Access Token (`GITLAB_PERSONAL_ACCESS_TOKEN` 대체)
135
156
  - `--api-url` - GitLab API URL (`GITLAB_API_URL` 대체)
136
- - `--read-only=true` - 읽기 전용 모드 활성화 (`GITLAB_READ_ONLY_MODE` 대체, deprecated — `--permission-mode=readonly` 권장)
157
+ - `--read-only=true` - Deprecated (removed in next major (v3.0.0)); `--permission-mode=readonly`를 사용 (`GITLAB_READ_ONLY_MODE` 대체)
137
158
  - `--permission-mode` - 권한 수준: `readonly`, `modify`(삭제/중단 도구 비활성), `full` (`GITLAB_PERMISSION_MODE` 대체, 기본값 `full`)
138
159
  - `--toolsets=all` - 지정한 툴셋 활성화 (`GITLAB_TOOLSETS` 대체, 미설정 시 lean `core` 기본값 사용)
139
160
  - `--tools=list_issues` - 개별 도구 추가 (`GITLAB_TOOLS` 대체)
140
- - `--use-wiki=true` - 위키 API 활성화 (`USE_GITLAB_WIKI` 대체, 레거시 — `GITLAB_TOOLSETS=wiki` 권장)
141
- - `--use-milestone=true` - 마일스톤 API 활성화 (`USE_MILESTONE` 대체, 레거시 — `GITLAB_TOOLSETS=milestones` 권장)
142
- - `--use-pipeline=true` - 파이프라인 API 활성화 (`USE_PIPELINE` 대체, 레거시 — `GITLAB_TOOLSETS=pipelines` 권장)
161
+ - `--use-wiki=true` - Deprecated (removed in next major (v3.0.0)); `--toolsets=core,wiki`를 사용 (`USE_GITLAB_WIKI` 대체)
162
+ - `--use-milestone=true` - Deprecated (removed in next major (v3.0.0)); `--toolsets=core,milestones`를 사용 (`USE_MILESTONE` 대체)
163
+ - `--use-pipeline=true` - Deprecated (removed in next major (v3.0.0)); `--toolsets=core,pipelines`를 사용하고, 기존 `--tools` 목록에 `validate_ci_lint,validate_project_ci_lint`를 추가하세요. 목록이 없으면 `--tools=validate_ci_lint,validate_project_ci_lint`를 설정하세요 (`USE_PIPELINE` 대체)
143
164
  - `--disable-version-check=true` - 시작 시 신규 버전 알림 비활성화 (`GITLAB_DISABLE_VERSION_CHECK` 대체)
144
165
  - `--masking-enabled=true` - 텍스트 응답 마스킹 활성화 (`GITLAB_MASKING_ENABLED` 대체)
145
166
  - `--masking-config` - 마스킹 설정 파일 경로 (`GITLAB_MASKING_CONFIG` 대체)
@@ -150,6 +171,8 @@ command = lib.getExe inputs.gitlab-mcp.packages.${system}.default;
150
171
  - `--compact-tools` - 전역 compact를 켜지 않고, 응답이 클 때 compact할 도구 이름을 쉼표로 지정 (`GITLAB_MCP_COMPACT_TOOLS` 대체)
151
172
  - `--tool-profile` - `full`(기본값) 또는 `slim`. `slim`은 draft note, 이모지 반응, 라벨, CI 카탈로그 도구와 `create_group`을 초기 목록에서 뺌. `GITLAB_TOOLSETS`에 공백이 아닌 값이 설정된 경우에만 무시됨 (`GITLAB_TOOL_PROFILE` 대체)
152
173
 
174
+ 이미 `GITLAB_TOOLSETS` 또는 `--toolsets`를 설정했다면 목록을 바꾸지 말고 `wiki`, `milestones`, `pipelines`를 기존 목록에 추가하세요. 이미 `GITLAB_TOOLS` 또는 `--tools`를 설정했다면 `validate_ci_lint`와 `validate_project_ci_lint`를 그 목록에 추가하세요. 명시적 목록은 기본 `core` toolset을 대체하며, 합쳐지지 않습니다.
175
+
153
176
  CLI 인자는 환경 변수보다 우선합니다.
154
177
 
155
178
  `zereight-mcp-gitlab auth`는 MCP 서버 플래그가 아니라 서브커맨드입니다. GitLab device flow를 실행한 뒤 종료합니다. [CLI 인자](./docs/getting-started/cli-arguments.md#auth)를 참고하세요.
@@ -158,14 +181,19 @@ CLI 인자는 환경 변수보다 우선합니다.
158
181
 
159
182
  > **세밀한 도구 필터링:** `GITLAB_PERMISSION_MODE=modify`로 생성/수정은 허용하고 모든 삭제 도구와
160
183
  > 파괴적인 중단(teardown) 도구(`cancel_pipeline`, `cancel_pipeline_job`, `stop_environment`,
161
- > `stop_stale_environments`, `unprotect_branch`)를 차단하거나(`execute_graphql`을 통한 파괴적
184
+ > `stop_stale_environments`, `unprotect_branch`, `unprotect_tag`)를 차단하거나(`execute_graphql`을 통한 파괴적
162
185
  > mutation — 삭제·중단 동사 — 과 `push_files`의 `delete`/`move` 포함),
163
186
  > `GITLAB_PERMISSION_MODE=readonly`로 읽기 전용으로 운영할 수
164
187
  > 있습니다. 또한
165
188
  > `GITLAB_TOOLSETS=<group,…>`로 도구 그룹을 활성화하고, `GITLAB_TOOLS=<tool,…>`로 개별 도구만
166
189
  > 허용하며(예: 읽기 도구 + 특정 쓰기 도구 몇 개), `GITLAB_DENIED_TOOLS_REGEX`로 패턴 차단할 수
167
- > 있습니다. 레거시 `USE_GITLAB_WIKI` / `USE_MILESTONE` / `USE_PIPELINE` 플래그는 하위 호환용으로만
168
- > 유지됩니다. [Tools Reference](./docs/tools/index.md#feature-toggles)와
190
+ > 있습니다. 레거시 `USE_GITLAB_WIKI` / `USE_MILESTONE` / `USE_PIPELINE` 플래그는
191
+ > deprecated (removed in next major (v3.0.0))입니다.
192
+ > `GITLAB_TOOLSETS=core,wiki`, `core,milestones`, `core,pipelines`를 사용하세요
193
+ > (`USE_PIPELINE`은 기존 `GITLAB_TOOLS` 목록에 `validate_ci_lint,validate_project_ci_lint`를 추가해야 하며, 그 목록을 통째로 바꾸면 안 됩니다).
194
+ > 이미 `GITLAB_TOOLSETS`를 설정했다면 toolset을 기존 목록에 추가하고, 목록 전체를 바꾸지 마세요.
195
+ > `GITLAB_TOOLS`가 없으면 `GITLAB_TOOLS=validate_ci_lint,validate_project_ci_lint`로 설정하세요. 이미 있으면 `validate_ci_lint,validate_project_ci_lint`를 기존 목록에 추가하고, 목록 전체를 바꾸지 마세요.
196
+ > [Tools Reference](./docs/tools/index.md#feature-toggles)와
169
197
  > [Environment Variables](./docs/configuration/environment-variables.md)를 참고하세요.
170
198
 
171
199
  - sse
@@ -176,7 +204,7 @@ docker run -i --rm \
176
204
  -e GITLAB_PERSONAL_ACCESS_TOKEN=your_gitlab_token \
177
205
  -e GITLAB_API_URL="https://gitlab.com/api/v4" \
178
206
  -e GITLAB_PERMISSION_MODE=readonly \
179
- -e GITLAB_TOOLSETS=wiki,milestones,pipelines \
207
+ -e GITLAB_TOOLSETS=core,wiki,milestones,pipelines \
180
208
  -e SSE=true \
181
209
  -e SSE_AUTH_TOKEN=your_mcp_sse_token \
182
210
  -p 3333:3002 \
@@ -205,7 +233,7 @@ docker run -i --rm \
205
233
  -e REMOTE_AUTHORIZATION=true \
206
234
  -e GITLAB_API_URL="https://gitlab.com/api/v4" \
207
235
  -e GITLAB_PERMISSION_MODE=readonly \
208
- -e GITLAB_TOOLSETS=wiki,milestones,pipelines \
236
+ -e GITLAB_TOOLSETS=core,wiki,milestones,pipelines \
209
237
  -e STREAMABLE_HTTP=true \
210
238
  -p 3333:3002 \
211
239
  zereight050/gitlab-mcp
@@ -525,7 +553,7 @@ node build/index.js
525
553
  | `MCP_SERVER_URL` | 예 | MCP 서버의 공개 HTTPS URL |
526
554
  | `GITLAB_API_URL` | 예 | GitLab 인스턴스 API URL(예: `https://gitlab.com/api/v4`) |
527
555
  | `STREAMABLE_HTTP` | 예 | 반드시 `true`(SSE 미지원) |
528
- | `GITLAB_OAUTH_SCOPES` | 아니오 | 요청할 GitLab scope 목록(쉼표 구분). 기본값은 `api` 또는 `GITLAB_READ_ONLY_MODE=true`일 때 `read_api`입니다. 사전 등록 애플리케이션에 해당 scope가 설정되어 있어야 합니다. |
556
+ | `GITLAB_OAUTH_SCOPES` | 아니오 | 요청할 GitLab scope 목록(쉼표 구분). 기본값은 `api`이며, 유효 permission mode가 `readonly`일 때 `read_api`입니다. 사전 등록 애플리케이션에 해당 scope가 설정되어 있어야 합니다. |
529
557
  | `OAUTH_REGISTER_RATE_LIMIT_PER_HOUR` | 아니오 | Dynamic Client Registration(`POST /register`)의 클라이언트 IP당 rolling 한도. 기본 `20`/시간, 범위 `1`–`1000`. IDE 창 여러 개 등으로 등록이 막히면 올리세요. GitLab API 한도와 무관합니다. |
530
558
  | `MCP_DANGEROUSLY_ALLOW_INSECURE_ISSUER_URL` | 아니오 | 로컬 HTTP 개발에서만 `true` |
531
559
 
package/README.md CHANGED
@@ -4,14 +4,27 @@
4
4
  [![npm downloads](https://img.shields.io/npm/dm/@zereight/mcp-gitlab.svg)](https://www.npmjs.com/package/@zereight/mcp-gitlab)
5
5
  [![npm](https://img.shields.io/npm/v/@zereight/mcp-gitlab.svg)](https://www.npmjs.com/package/@zereight/mcp-gitlab)
6
6
  [![GitHub License](https://img.shields.io/github/license/zereight/gitlab-mcp.svg)](https://github.com/zereight/gitlab-mcp/blob/main/LICENSE)
7
- [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_GitLab_MCP-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](vscode:mcp/install?%7B%22name%22%3A%22zereight.gitlab-mcp%22%2C%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40zereight%2Fmcp-gitlab%40latest%22%5D%2C%22env%22%3A%7B%22GITLAB_PERSONAL_ACCESS_TOKEN%22%3A%22%24%7Binput%3Agitlab-token%7D%22%2C%22GITLAB_API_URL%22%3A%22https%3A%2F%2Fgitlab.com%2Fapi%2Fv4%22%2C%22GITLAB_PERMISSION_MODE%22%3A%22full%22%7D%7D)
8
- [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/zereight/gitlab-mcp)
7
+ [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_GitLab_MCP-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect/mcp/install?name=zereight.gitlab-mcp&config=%7B%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40zereight%2Fmcp-gitlab%40latest%22%5D%2C%22env%22%3A%7B%22GITLAB_PERSONAL_ACCESS_TOKEN%22%3A%22%24%7Binput%3Agitlab-token%7D%22%2C%22GITLAB_API_URL%22%3A%22https%3A%2F%2Fgitlab.com%2Fapi%2Fv4%22%2C%22GITLAB_PERMISSION_MODE%22%3A%22full%22%7D%7D)
8
+ [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=zereight.gitlab-mcp&config=eyJ0eXBlIjoic3RkaW8iLCJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkB6ZXJlaWdodC9tY3AtZ2l0bGFiQGxhdGVzdCJdLCJlbnYiOnsiR0lUTEFCX1BFUlNPTkFMX0FDQ0VTU19UT0tFTiI6IiR7ZW52OkdJVExBQl9QRVJTT05BTF9BQ0NFU1NfVE9LRU59IiwiR0lUTEFCX0FQSV9VUkwiOiJodHRwczovL2dpdGxhYi5jb20vYXBpL3Y0IiwiR0lUTEFCX1BFUk1JU1NJT05fTU9ERSI6ImZ1bGwifX0%3D)
9
+ [![Ask DeepWiki](https://img.shields.io/badge/DeepWiki-Ask-blue)](https://deepwiki.com/zereight/gitlab-mcp)
9
10
  [![MCP Toplist](https://mcptoplist.com/badge/io.github.zereight%2Fgitlab-mcp.svg)](https://mcptoplist.com/server/io.github.zereight%2Fgitlab-mcp) [![mcpindex](https://mcpindex.ai/api/v1/badge/io-github-zereight-gitlab-mcp)](https://mcpindex.ai/server/io-github-zereight-gitlab-mcp)
10
11
 
11
12
  [English](./README.md) | [한국어](./README.ko.md) | [简体中文](./README.zh-CN.md) | [Português (Brasil)](./README.pt-BR.md)
12
13
 
13
14
  📖 **[Documentation →](https://zereight.github.io/gitlab-mcp/)** Setup guides, environment variables, and the full tool reference live on the hosted docs site.
14
15
 
16
+ Install `@zereight/mcp-gitlab` with the recommended local personal-access-token setup. These commands use the same arguments as the [Claude Code](./docs/clients/claude-code.md) and [Codex](./docs/clients/codex.md) guides.
17
+
18
+ Install the `zereight-mcp-gitlab` binary first with `npm install -g @zereight/mcp-gitlab`, or Homebrew `brew tap zereight/gitlab-mcp https://github.com/zereight/gitlab-mcp` and `brew install zereight/gitlab-mcp/zereight-mcp-gitlab`.
19
+
20
+ | Client | Install |
21
+ | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
22
+ | Claude Code | `claude mcp add gitlab --transport stdio --scope local --env GITLAB_PERSONAL_ACCESS_TOKEN=glpat-your-token --env GITLAB_API_URL=https://gitlab.com/api/v4 -- zereight-mcp-gitlab` |
23
+ | Codex | `codex mcp add gitlab --env GITLAB_PERSONAL_ACCESS_TOKEN=glpat-your-token --env GITLAB_API_URL=https://gitlab.com/api/v4 -- zereight-mcp-gitlab` |
24
+ | Cursor | [Cursor setup guide](./docs/clients/cursor.md) |
25
+ | VS Code | [VS Code setup guide](./docs/clients/vscode.md) |
26
+ | JSON clients | [JSON-based MCP clients setup guide](./docs/clients/json-clients.md) |
27
+
15
28
  [![Star History Chart](./assets/star-history.png)](https://www.star-history.com/?repos=zereight%2Fgitlab-mcp&type=date&legend=top-left)
16
29
 
17
30
  ## @zereight/mcp-gitlab
@@ -22,7 +35,7 @@ Supports PAT, OAuth, read-only mode, dynamic API URLs, and remote authorization
22
35
 
23
36
  ### Why use this GitLab MCP?
24
37
 
25
- - **268 tools: 266 in toolsets + `execute_graphql` + `discover_tools`** — start with a small toolset; activate more at runtime without CQRS-style grouping
38
+ - **274 tools: 272 in toolsets + `execute_graphql` + `discover_tools`** — start with a small toolset; activate more at runtime without CQRS-style grouping
26
39
  - **MR 2-step review** — `list_merge_request_changed_files` → batched `get_merge_request_file_diff`
27
40
  - **Agent Skill built in** — workflow guidance in `skills/gitlab-mcp/`
28
41
  - **Flexible auth** — Personal Access Token, local OAuth2 browser flow, MCP OAuth proxy, and per-request remote authorization
@@ -33,15 +46,23 @@ Supports PAT, OAuth, read-only mode, dynamic API URLs, and remote authorization
33
46
 
34
47
  ### How we compare
35
48
 
36
- | | @zereight/mcp-gitlab | GitLab MCP A (community CQRS-style) |
37
- |---|----------------------|-------------------------------------|
38
- | **Best for** | AI agent workflows | Enterprise multi-instance / grouped tools |
39
- | **Tool model** | 268 tools: 266 in toolsets + `execute_graphql` + `discover_tools` | ~50–60 grouped `browse_*` / `manage_*` tools |
40
- | **MR review** | 2-step batched diff | Varies |
41
- | **Node.js** | >=18.17 | Often >=24 |
42
- | **License** | MIT | Varies |
49
+ | | @zereight/mcp-gitlab | GitLab MCP A (community CQRS-style) | GitLab official MCP server |
50
+ | -------------- | ----------------------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
51
+ | **Best for** | AI agent workflows | Enterprise multi-instance / grouped tools | Built into GitLab, no separate install |
52
+ | **Tool model** | 274 tools: 272 in toolsets + `execute_graphql` + `discover_tools` | ~50–60 grouped `browse_*` / `manage_*` tools | Toolsets chosen with an HTTP header |
53
+ | **MR review** | 2-step batched diff | Varies | `get_merge_request` with diffs |
54
+ | **Node.js** | >=18.17 | Often >=24 | Node.js 20+ for stdio via `mcp-remote` |
55
+ | **License** | MIT | Varies | Part of GitLab |
43
56
 
44
- [Full comparison →](./docs/comparison/community-gitlab-mcp-a.md)
57
+ [Full comparison with GitLab MCP A →](./docs/comparison/community-gitlab-mcp-a.md)
58
+
59
+ GitLab also ships an [official MCP server](https://docs.gitlab.com/user/model_context_protocol/mcp_server/).
60
+
61
+ - Free, Premium, and Ultimate. Moved from Premium to Free in GitLab 19.2. Generally available in GitLab 19.5.
62
+ - On GitLab.com, a top-level group Owner allows access to the MCP server. On GitLab Self-Managed and GitLab Dedicated, an administrator controls the instance setting. Default rules are on the official page.
63
+ - Remote clients use HTTP `https://<gitlab.example.com>/api/v4/mcp` with OAuth 2.0 dynamic client registration.
64
+ - stdio goes through `mcp-remote` and needs Node.js 20 or later.
65
+ - Toolsets use the `X-Gitlab-Enabled-Mcp-Server-Toolsets` header. An optional `X-Gitlab-Mcp-Server-Tool-Name-Prefix` header keeps the first 32 characters of a tool-name prefix.
45
66
 
46
67
  Quick start: choose either Personal Access Token or OAuth2 setup below, install `@zereight/mcp-gitlab`, and use `zereight-mcp-gitlab` in your MCP client configuration.
47
68
 
@@ -116,7 +137,7 @@ The store path is pinned by your lock file; update it with `nix flake update git
116
137
 
117
138
  The examples use `zereight-mcp-gitlab`, a less collision-prone alias for the legacy `mcp-gitlab` binary. If your MCP client cannot find it, use the absolute path from `which zereight-mcp-gitlab`.
118
139
 
119
- No global install? Pin `npx` to the previous stable release (the version these docs recommend), for example `npx -y @zereight/mcp-gitlab@2.2.0`. If you always want the newest release, use `npx -y @zereight/mcp-gitlab@latest` instead. The server prints a notice to stderr on startup when a newer version is available (disable with `GITLAB_DISABLE_VERSION_CHECK=true`).
140
+ No global install? Pin `npx` to the previous stable release (the version these docs recommend), for example `npx -y @zereight/mcp-gitlab@2.2.2`. If you always want the newest release, use `npx -y @zereight/mcp-gitlab@latest` instead. The server prints a notice to stderr on startup when a newer version is available (disable with `GITLAB_DISABLE_VERSION_CHECK=true`).
120
141
 
121
142
  #### Using CLI Arguments (for clients with env var issues)
122
143
 
@@ -138,13 +159,13 @@ Some MCP clients (like GitHub Copilot CLI) have issues with environment variable
138
159
 
139
160
  - `--token` - GitLab Personal Access Token (replaces `GITLAB_PERSONAL_ACCESS_TOKEN`)
140
161
  - `--api-url` - GitLab API URL (replaces `GITLAB_API_URL`)
141
- - `--read-only=true` - Enable read-only mode (replaces `GITLAB_READ_ONLY_MODE`, deprecated — prefer `--permission-mode=readonly`)
162
+ - `--read-only=true` - Deprecated (removed in next major (v3.0.0)); use `--permission-mode=readonly` instead (replaces `GITLAB_READ_ONLY_MODE`)
142
163
  - `--permission-mode` - Permission level: `readonly`, `modify` (no delete or teardown tools), or `full` (replaces `GITLAB_PERMISSION_MODE`, default `full`)
143
164
  - `--toolsets=all` - Enable named toolsets (replaces `GITLAB_TOOLSETS`; unset uses the lean `core` default)
144
165
  - `--tools=list_issues` - Add individual tools (replaces `GITLAB_TOOLS`)
145
- - `--use-wiki=true` - Enable wiki API (replaces `USE_GITLAB_WIKI`, legacy — prefer `GITLAB_TOOLSETS=wiki`)
146
- - `--use-milestone=true` - Enable milestone API (replaces `USE_MILESTONE`, legacy — prefer `GITLAB_TOOLSETS=milestones`)
147
- - `--use-pipeline=true` - Enable pipeline API (replaces `USE_PIPELINE`, legacy — prefer `GITLAB_TOOLSETS=pipelines`)
166
+ - `--use-wiki=true` - Deprecated (removed in next major (v3.0.0)); use `--toolsets=core,wiki` instead (replaces `USE_GITLAB_WIKI`)
167
+ - `--use-milestone=true` - Deprecated (removed in next major (v3.0.0)); use `--toolsets=core,milestones` instead (replaces `USE_MILESTONE`)
168
+ - `--use-pipeline=true` - Deprecated (removed in next major (v3.0.0)); use `--toolsets=core,pipelines` and append `validate_ci_lint,validate_project_ci_lint` to the existing `--tools` list (or set `--tools=validate_ci_lint,validate_project_ci_lint` when that list is unset) (replaces `USE_PIPELINE`)
148
169
  - `--disable-version-check=true` - Disable the startup new-version notice (replaces `GITLAB_DISABLE_VERSION_CHECK`)
149
170
  - `--masking-enabled=true` - Enable text-response masking (replaces `GITLAB_MASKING_ENABLED`)
150
171
  - `--masking-config` - Path to a masking configuration file (replaces `GITLAB_MASKING_CONFIG`)
@@ -155,6 +176,8 @@ Some MCP clients (like GitHub Copilot CLI) have issues with environment variable
155
176
  - `--compact-tools` - Comma-separated tool names to compact when oversized, without turning global compact on (replaces `GITLAB_MCP_COMPACT_TOOLS`)
156
177
  - `--tool-profile` - `full` (default) or `slim`. `slim` drops draft notes, emoji reactions, labels, CI catalog tools, and `create_group` from the initial list. Ignored when `GITLAB_TOOLSETS` is set (replaces `GITLAB_TOOL_PROFILE`)
157
178
 
179
+ If you already set `GITLAB_TOOLSETS` or `--toolsets`, append `wiki`, `milestones`, or `pipelines` to that list instead of replacing it. If you already set `GITLAB_TOOLS` or `--tools`, append `validate_ci_lint` and `validate_project_ci_lint` to that list instead of replacing it. An explicit list replaces the default `core` toolset; it does not merge.
180
+
158
181
  CLI arguments take precedence over environment variables.
159
182
 
160
183
  `zereight-mcp-gitlab auth` is a subcommand (not an MCP server flag). It runs GitLab device flow and exits. See [CLI Arguments](./docs/getting-started/cli-arguments.md#auth).
@@ -163,14 +186,19 @@ The same binary is also a `gh`-style GitLab CLI (`tool <name>` or curated forms
163
186
 
164
187
  > **Fine-grained tool filtering:** use `GITLAB_PERMISSION_MODE=modify` to allow create/update while
165
188
  > blocking every delete tool and the destructive teardown tools (`cancel_pipeline`,
166
- > `cancel_pipeline_job`, `stop_environment`, `stop_stale_environments`, `unprotect_branch`) —
189
+ > `cancel_pipeline_job`, `stop_environment`, `stop_stale_environments`, `unprotect_branch`,
190
+ > `unprotect_tag`) —
167
191
  > including destructive mutations (deletion and teardown verbs) through `execute_graphql` and
168
192
  > `push_files` `delete`/`move` actions — or `GITLAB_PERMISSION_MODE=readonly` for read-only
169
193
  > access. You can also
170
194
  > enable toolset groups with `GITLAB_TOOLSETS=<group,…>`, allow-list individual tools with
171
195
  > `GITLAB_TOOLS=<tool,…>` (e.g. read-only groups plus a few specific write tools), and
172
196
  > deny-list by pattern with `GITLAB_DENIED_TOOLS_REGEX`. The legacy `USE_GITLAB_WIKI` /
173
- > `USE_MILESTONE` / `USE_PIPELINE` flags are kept for backward compatibility only.
197
+ > `USE_MILESTONE` / `USE_PIPELINE` flags are deprecated (removed in next major (v3.0.0)).
198
+ > Use `GITLAB_TOOLSETS=core,wiki`, `core,milestones`, or `core,pipelines`
199
+ > (`USE_PIPELINE` also needs `validate_ci_lint,validate_project_ci_lint` appended to an existing `GITLAB_TOOLS` list instead of replacing it).
200
+ > If you already set `GITLAB_TOOLSETS`, append the toolset to your existing list instead of replacing it.
201
+ > If `GITLAB_TOOLS` is unset, set `GITLAB_TOOLS=validate_ci_lint,validate_project_ci_lint`. If it is already set, append `validate_ci_lint,validate_project_ci_lint` instead of replacing that list.
174
202
  > See [Tools Reference](./docs/tools/index.md#feature-toggles) and
175
203
  > [Environment Variables](./docs/configuration/environment-variables.md).
176
204
 
@@ -182,7 +210,7 @@ docker run -i --rm \
182
210
  -e GITLAB_PERSONAL_ACCESS_TOKEN=your_gitlab_token \
183
211
  -e GITLAB_API_URL="https://gitlab.com/api/v4" \
184
212
  -e GITLAB_PERMISSION_MODE=readonly \
185
- -e GITLAB_TOOLSETS=wiki,milestones,pipelines \
213
+ -e GITLAB_TOOLSETS=core,wiki,milestones,pipelines \
186
214
  -e SSE=true \
187
215
  -e SSE_AUTH_TOKEN=your_mcp_sse_token \
188
216
  -p 3333:3002 \
@@ -211,7 +239,7 @@ docker run -i --rm \
211
239
  -e REMOTE_AUTHORIZATION=true \
212
240
  -e GITLAB_API_URL="https://gitlab.com/api/v4" \
213
241
  -e GITLAB_PERMISSION_MODE=readonly \
214
- -e GITLAB_TOOLSETS=wiki,milestones,pipelines \
242
+ -e GITLAB_TOOLSETS=core,wiki,milestones,pipelines \
215
243
  -e STREAMABLE_HTTP=true \
216
244
  -p 3333:3002 \
217
245
  zereight050/gitlab-mcp
@@ -567,7 +595,7 @@ No `headers` field is needed — Claude.ai obtains the token via OAuth automatic
567
595
  | `MCP_SERVER_URL` | Yes | Public HTTPS URL of your MCP server; also allowed for `/mcp` Host/Origin checks |
568
596
  | `GITLAB_API_URL` | Yes | Your GitLab instance API URL (e.g. `https://gitlab.com/api/v4`) |
569
597
  | `STREAMABLE_HTTP` | Yes | Must be `true` (SSE is not supported) |
570
- | `GITLAB_OAUTH_SCOPES` | No | Comma-separated GitLab scopes to request (e.g. `api,read_user`). Defaults to `api` (or `read_api` when `GITLAB_READ_ONLY_MODE=true`). The pre-registered application must be configured with at least these scopes. |
598
+ | `GITLAB_OAUTH_SCOPES` | No | Comma-separated GitLab scopes to request (e.g. `api,read_user`). Defaults to `api` (or `read_api` when the effective permission mode is `readonly`). The pre-registered application must be configured with at least these scopes. |
571
599
  | `OAUTH_REGISTER_RATE_LIMIT_PER_HOUR` | No | Per-IP rolling limit for Dynamic Client Registration (`POST /register`). Default `20`/hour; range `1`–`1000`. Raise when clients (e.g. multiple IDE windows) hit registration throttling. Not a GitLab API limit. |
572
600
  | `MCP_DANGEROUSLY_ALLOW_INSECURE_ISSUER_URL` | No | Set `true` for local HTTP dev only |
573
601
 
@@ -822,61 +850,67 @@ Register the skill directory in your AI client to get optimal tool usage guidanc
822
850
  211. `create_tag` - Create a new repository tag
823
851
  212. `delete_tag` - Delete a repository tag
824
852
  213. `get_tag_signature` - Get the X.509 signature of a signed tag (404 if unsigned)
825
- 214. `get_work_item` - Get a work item with full details including status, hierarchy, type, and widgets
826
- 215. `list_work_items` - List work items with filters (type, state, search, assignees, labels)
827
- 216. `create_work_item` - Create a work item (issue, task, incident, epic, etc.) with full field support
828
- 217. `update_work_item` - Update a work item (title, description, labels, assignees, state, parent, custom fields, etc.)
829
- 218. `convert_work_item_type` - Convert a work item to a different type
830
- 219. `list_work_item_statuses` - List available statuses for a work item type (Premium/Ultimate)
831
- 220. `list_custom_field_definitions` - List custom field definitions for a work item type
832
- 221. `move_work_item` - Move a work item to a different project
833
- 222. `list_work_item_notes` - List notes and discussions on a work item
834
- 223. `create_work_item_note` - Add a note to a work item (supports Markdown, internal notes, threads)
835
- 224. `list_work_item_emoji_reactions` - List all emoji reactions on a work item
836
- 225. `list_work_item_note_emoji_reactions` - List all emoji reactions on a work item note (comment, thread, or thread reply)
837
- 226. `create_work_item_emoji_reaction` - Add an emoji reaction to a work item (e.g. thumbsup, rocket, eyes)
838
- 227. `delete_work_item_emoji_reaction` - Remove an emoji reaction from a work item
839
- 228. `create_work_item_note_emoji_reaction` - Add an emoji reaction to a work item note (comment, thread, or thread reply)
840
- 229. `delete_work_item_note_emoji_reaction` - Remove an emoji reaction from a work item note (comment, thread, or thread reply)
841
- 230. `get_timeline_events` - List timeline events for an incident
842
- 231. `create_timeline_event` - Create a timeline event on an incident
843
- 232. `list_webhooks` - List webhooks for a project or group
844
- 233. `create_webhook` - Create a webhook on a project or group
845
- 234. `update_webhook` - Update an existing project or group webhook
846
- 235. `delete_webhook` - Delete a project or group webhook
847
- 236. `list_webhook_events` - List recent webhook events (past 7 days)
848
- 237. `get_webhook_event` - Get full details of a specific webhook event
849
- 238. `search_code` - Search for code across all projects (requires advanced search or Zoekt)
850
- 239. `search_project_code` - Search for code within a specific project (requires advanced search or Zoekt)
851
- 240. `search_group_code` - Search for code within a specific group (requires advanced search or Zoekt)
852
- 241. `list_project_variables` - List CI/CD variables for a project
853
- 242. `get_project_variable` - Get a single CI/CD variable from a project
854
- 243. `create_project_variable` - Create a CI/CD variable for a project
855
- 244. `update_project_variable` - Update an existing CI/CD variable in a project
856
- 245. `delete_project_variable` - Delete a CI/CD variable from a project
857
- 246. `list_group_variables` - List CI/CD variables for a group
858
- 247. `get_group_variable` - Get a single CI/CD variable from a group
859
- 248. `create_group_variable` - Create a CI/CD variable for a group
860
- 249. `update_group_variable` - Update an existing CI/CD variable in a group
861
- 250. `delete_group_variable` - Delete a CI/CD variable from a group
862
- 251. `get_dependency_proxy_settings` - Get dependency proxy settings for a group
863
- 252. `update_dependency_proxy_settings` - Update dependency proxy settings for a group (enable/disable, credentials for authenticated Docker Hub pulls)
864
- 253. `list_dependency_proxy_blobs` - List cached dependency proxy blobs for a group
865
- 254. `purge_dependency_proxy_cache` - Schedule purge of all cached dependency proxy blobs for a group
866
- 255. `list_project_vulnerabilities` - List vulnerabilities for a project with optional state, severity, and report type filters (GraphQL-backed, cursor pagination)
867
- 256. `get_vulnerability` - Get full details of a specific vulnerability
868
- 257. `dismiss_vulnerability` - Dismiss a vulnerability with a reason (acceptable_risk, false_positive, used_in_tests, mitigating_control, not_applicable) and optional comment
869
- 258. `confirm_vulnerability` - Confirm a vulnerability as a real finding requiring remediation
870
- 259. `orbit_query` - Execute a GitLab Orbit graph query over the indexed SDLC knowledge graph
871
- 260. `orbit_get_schema` - Fetch the current GitLab Orbit graph schema (node and edge types)
872
- 261. `orbit_get_status` - Check GitLab Orbit indexing status for the enabled scope
873
- 262. `orbit_list_tools` - List the MCP tool definitions exposed by GitLab Orbit
874
- 263. `list_snippets` - List snippets — project snippets when project_id is given, otherwise personal snippets
875
- 264. `get_snippet` - Get a snippet's metadata. Set include_content=true to also fetch the raw file content.
876
- 265. `create_snippet` - Create a snippet — project-scoped when project_id is given, otherwise a personal snippet. Requires title plus either file_name + content (single file) or files[] (multi-file); the two shapes cannot be mixed.
877
- 266. `update_snippet` - Update an existing snippet (provide at least one field to change). For multi-file edits — renames, deletions, additions — pass files[] with action (create/update/delete/move) and previous_path. The file_name + content shortcut still works for single-file content replacement.
878
- 267. `delete_snippet` - Delete a snippet
879
- 268. `discover_tools` - Discover and activate additional tool categories for this session. Available categories: core, merge_requests, issues, repositories, branches, projects, labels, ci, groups, pipelines, milestones, wiki, releases, tags, snippets, users, workitems, webhooks, search, variables, dependency_proxy, vulnerabilities, orbit. Already-active categories are listed in the response.
853
+ 214. `list_protected_tags` - List protected tags in a project
854
+ 215. `get_protected_tag` - Get details of a single protected tag or wildcard (create access levels)
855
+ 216. `protect_tag` - Protect a repository tag or wildcard (set who can create it)
856
+ 217. `unprotect_tag` - Remove protection from a previously protected tag or wildcard
857
+ 218. `get_work_item` - Get a work item with full details including status, hierarchy, type, and widgets
858
+ 219. `list_work_items` - List work items with filters (type, state, search, assignees, labels)
859
+ 220. `create_work_item` - Create a work item (issue, task, incident, epic, etc.) with full field support
860
+ 221. `update_work_item` - Update a work item (title, description, labels, assignees, state, parent, custom fields, etc.)
861
+ 222. `convert_work_item_type` - Convert a work item to a different type
862
+ 223. `list_work_item_statuses` - List available statuses for a work item type (Premium/Ultimate)
863
+ 224. `list_custom_field_definitions` - List custom field definitions for a work item type
864
+ 225. `move_work_item` - Move a work item to a different project
865
+ 226. `list_work_item_notes` - List notes and discussions on a work item
866
+ 227. `create_work_item_note` - Add a note to a work item (supports Markdown, internal notes, threads)
867
+ 228. `list_work_item_emoji_reactions` - List all emoji reactions on a work item
868
+ 229. `list_work_item_note_emoji_reactions` - List all emoji reactions on a work item note (comment, thread, or thread reply)
869
+ 230. `create_work_item_emoji_reaction` - Add an emoji reaction to a work item (e.g. thumbsup, rocket, eyes)
870
+ 231. `delete_work_item_emoji_reaction` - Remove an emoji reaction from a work item
871
+ 232. `create_work_item_note_emoji_reaction` - Add an emoji reaction to a work item note (comment, thread, or thread reply)
872
+ 233. `delete_work_item_note_emoji_reaction` - Remove an emoji reaction from a work item note (comment, thread, or thread reply)
873
+ 234. `get_timeline_events` - List timeline events for an incident
874
+ 235. `create_timeline_event` - Create a timeline event on an incident
875
+ 236. `list_webhooks` - List webhooks for a project or group
876
+ 237. `create_webhook` - Create a webhook on a project or group
877
+ 238. `update_webhook` - Update an existing project or group webhook
878
+ 239. `delete_webhook` - Delete a project or group webhook
879
+ 240. `list_webhook_events` - List recent webhook events (past 7 days)
880
+ 241. `get_webhook_event` - Get full details of a specific webhook event
881
+ 242. `search_code` - Search for code across all projects (requires advanced search or Zoekt)
882
+ 243. `search_project_code` - Search for code within a specific project (requires advanced search or Zoekt)
883
+ 244. `search_group_code` - Search for code within a specific group (requires advanced search or Zoekt)
884
+ 245. `list_project_variables` - List CI/CD variables for a project
885
+ 246. `get_project_variable` - Get a single CI/CD variable from a project
886
+ 247. `create_project_variable` - Create a CI/CD variable for a project
887
+ 248. `update_project_variable` - Update an existing CI/CD variable in a project
888
+ 249. `delete_project_variable` - Delete a CI/CD variable from a project
889
+ 250. `list_group_variables` - List CI/CD variables for a group
890
+ 251. `get_group_variable` - Get a single CI/CD variable from a group
891
+ 252. `create_group_variable` - Create a CI/CD variable for a group
892
+ 253. `update_group_variable` - Update an existing CI/CD variable in a group
893
+ 254. `delete_group_variable` - Delete a CI/CD variable from a group
894
+ 255. `get_dependency_proxy_settings` - Get dependency proxy settings for a group
895
+ 256. `update_dependency_proxy_settings` - Update dependency proxy settings for a group (enable/disable, credentials for authenticated Docker Hub pulls)
896
+ 257. `list_dependency_proxy_blobs` - List cached dependency proxy blobs for a group
897
+ 258. `purge_dependency_proxy_cache` - Schedule purge of all cached dependency proxy blobs for a group
898
+ 259. `list_project_vulnerabilities` - List vulnerabilities for a project with optional state, severity, and report type filters (GraphQL-backed, cursor pagination)
899
+ 260. `get_vulnerability` - Get full details of a specific vulnerability
900
+ 261. `dismiss_vulnerability` - Dismiss a vulnerability with a reason (acceptable_risk, false_positive, used_in_tests, mitigating_control, not_applicable) and optional comment
901
+ 262. `confirm_vulnerability` - Confirm a vulnerability as a real finding requiring remediation
902
+ 263. `orbit_query` - Execute a GitLab Orbit graph query over the indexed SDLC knowledge graph
903
+ 264. `orbit_get_schema` - Fetch the current GitLab Orbit graph schema (node and edge types)
904
+ 265. `orbit_get_status` - Check GitLab Orbit indexing status for the enabled scope
905
+ 266. `orbit_list_tools` - List the MCP tool definitions exposed by GitLab Orbit
906
+ 267. `list_snippets` - List snippets — project snippets when project_id is given, otherwise personal snippets
907
+ 268. `get_snippet` - Get a snippet's metadata. Set include_content=true to also fetch the raw file content.
908
+ 269. `create_snippet` - Create a snippet — project-scoped when project_id is given, otherwise a personal snippet. Requires title plus either file_name + content (single file) or files[] (multi-file); the two shapes cannot be mixed.
909
+ 270. `update_snippet` - Update an existing snippet (provide at least one field to change). For multi-file edits — renames, deletions, additions — pass files[] with action (create/update/delete/move) and previous_path. The file_name + content shortcut still works for single-file content replacement.
910
+ 271. `delete_snippet` - Delete a snippet
911
+ 272. `list_project_runners` - List runners available to a project (type, status, paused, tag_list). Omits registration and authentication tokens.
912
+ 273. `get_runner` - Get a runner's tag_list, run_untagged, locked, and access_level. When a project allowlist is active, the runner must be available to an allowed project. Omits registration and authentication tokens.
913
+ 274. `discover_tools` - Discover and activate additional tool categories for this session. Available categories: core, merge_requests, issues, repositories, branches, projects, labels, ci, groups, pipelines, milestones, wiki, releases, tags, snippets, users, workitems, webhooks, search, variables, dependency_proxy, vulnerabilities, orbit. Already-active categories are listed in the response.
880
914
 
881
915
  <!-- TOOLS-END -->
882
916