@zereight/mcp-gitlab 1.0.75 → 2.0.0-beta.0

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.md CHANGED
@@ -25,6 +25,8 @@ When using with the Claude App, you need to set up your API key and URLs directl
25
25
  "env": {
26
26
  "GITLAB_PERSONAL_ACCESS_TOKEN": "your_gitlab_token",
27
27
  "GITLAB_API_URL": "your_gitlab_api_url",
28
+ "GITLAB_PROJECT_ID": "your_project_id", // Optional: default project
29
+ "GITLAB_ALLOWED_PROJECT_IDS": "", // Optional: comma-separated list of allowed project IDs
28
30
  "GITLAB_READ_ONLY_MODE": "false",
29
31
  "USE_GITLAB_WIKI": "false", // use wiki api?
30
32
  "USE_MILESTONE": "false", // use milestone api?
@@ -168,6 +170,9 @@ $ sh scripts/image_push.sh docker_user_name
168
170
  - `GITLAB_PERSONAL_ACCESS_TOKEN`: Your GitLab personal access token.
169
171
  - `GITLAB_API_URL`: Your GitLab API URL. (Default: `https://gitlab.com/api/v4`)
170
172
  - `GITLAB_PROJECT_ID`: Default project ID. If set, Overwrite this value when making an API request.
173
+ - `GITLAB_ALLOWED_PROJECT_IDS`: Optional comma-separated list of allowed project IDs. When set with a single value, acts as a default project (like the old "lock" mode). When set with multiple values, restricts access to only those projects. Examples:
174
+ - Single value `123`: MCP server can only access project 123 and uses it as default
175
+ - Multiple values `123,456,789`: MCP server can access projects 123, 456, and 789 but requires explicit project ID in requests
171
176
  - `GITLAB_READ_ONLY_MODE`: When set to 'true', restricts the server to only expose read-only operations. Useful for enhanced security or when write access is not needed. Also useful for using with Cursor and it's 40 tool limit.
172
177
  - `USE_GITLAB_WIKI`: When set to 'true', enables the wiki-related tools (list_wiki_pages, get_wiki_page, create_wiki_page, update_wiki_page, delete_wiki_page). By default, wiki features are disabled.
173
178
  - `USE_MILESTONE`: When set to 'true', enables the milestone-related tools (list_milestones, get_milestone, create_milestone, edit_milestone, delete_milestone, get_milestone_issue, get_milestone_merge_requests, promote_milestone, get_milestone_burndown_events). By default, milestone features are disabled.
@@ -181,71 +186,80 @@ $ sh scripts/image_push.sh docker_user_name
181
186
  ## Tools 🛠️
182
187
 
183
188
  +<!-- TOOLS-START -->
184
-
185
- 1. `create_or_update_file` - Create or update a single file in a GitLab project
186
- 2. `search_repositories` - Search for GitLab projects
187
- 3. `create_repository` - Create a new GitLab project
188
- 4. `get_file_contents` - Get the contents of a file or directory from a GitLab project
189
- 5. `push_files` - Push multiple files to a GitLab project in a single commit
190
- 6. `create_issue` - Create a new issue in a GitLab project
191
- 7. `create_merge_request` - Create a new merge request in a GitLab project
192
- 8. `fork_repository` - Fork a GitLab project to your account or specified namespace
193
- 9. `create_branch` - Create a new branch in a GitLab project
194
- 10. `get_merge_request` - Get details of a merge request (Either mergeRequestIid or branchName must be provided)
195
- 11. `get_merge_request_diffs` - Get the changes/diffs of a merge request (Either mergeRequestIid or branchName must be provided)
196
- 12. `list_merge_request_diffs` - List merge request diffs with pagination support (Either mergeRequestIid or branchName must be provided)
197
- 13. `get_branch_diffs` - Get the changes/diffs between two branches or commits in a GitLab project
198
- 14. `update_merge_request` - Update a merge request (Either mergeRequestIid or branchName must be provided)
199
- 15. `create_note` - Create a new note (comment) to an issue or merge request
200
- 16. `create_merge_request_thread` - Create a new thread on a merge request
201
- 17. `mr_discussions` - List discussion items for a merge request
202
- 18. `update_merge_request_note` - Modify an existing merge request thread note
203
- 19. `create_merge_request_note` - Add a new note to an existing merge request thread
204
- 20. `update_issue_note` - Modify an existing issue thread note
205
- 21. `create_issue_note` - Add a new note to an existing issue thread
206
- 22. `list_issues` - List issues in a GitLab project with filtering options
207
- 23. `get_issue` - Get details of a specific issue in a GitLab project
208
- 24. `update_issue` - Update an issue in a GitLab project
209
- 25. `delete_issue` - Delete an issue from a GitLab project
210
- 26. `list_issue_links` - List all issue links for a specific issue
211
- 27. `list_issue_discussions` - List discussions for an issue in a GitLab project
212
- 28. `get_issue_link` - Get a specific issue link
213
- 29. `create_issue_link` - Create an issue link between two issues
214
- 30. `delete_issue_link` - Delete an issue link
215
- 31. `list_namespaces` - List all namespaces available to the current user
216
- 32. `get_namespace` - Get details of a namespace by ID or path
217
- 33. `verify_namespace` - Verify if a namespace path exists
218
- 34. `get_project` - Get details of a specific project
219
- 35. `list_projects` - List projects accessible by the current user
220
- 36. `list_labels` - List labels for a project
221
- 37. `get_label` - Get a single label from a project
222
- 38. `create_label` - Create a new label in a project
223
- 39. `update_label` - Update an existing label in a project
224
- 40. `delete_label` - Delete a label from a project
225
- 41. `list_group_projects` - List projects in a GitLab group with filtering options
226
- 42. `list_wiki_pages` - List wiki pages in a GitLab project
227
- 43. `get_wiki_page` - Get details of a specific wiki page
228
- 44. `create_wiki_page` - Create a new wiki page in a GitLab project
229
- 45. `update_wiki_page` - Update an existing wiki page in a GitLab project
230
- 46. `delete_wiki_page` - Delete a wiki page from a GitLab project
231
- 47. `get_repository_tree` - Get the repository tree for a GitLab project (list files and directories)
232
- 48. `list_pipelines` - List pipelines in a GitLab project with filtering options
233
- 49. `get_pipeline` - Get details of a specific pipeline in a GitLab project
234
- 50. `list_pipeline_jobs` - List all jobs in a specific pipeline
235
- 51. `get_pipeline_job` - Get details of a GitLab pipeline job number
236
- 52. `get_pipeline_job_output` - Get the output/trace of a GitLab pipeline job number
237
- 53. `create_pipeline` - Create a new pipeline for a branch or tag
238
- 54. `retry_pipeline` - Retry a failed or canceled pipeline
239
- 55. `cancel_pipeline` - Cancel a running pipeline
240
- 56. `list_merge_requests` - List merge requests in a GitLab project with filtering options
241
- 57. `list_milestones` - List milestones in a GitLab project with filtering options
242
- 58. `get_milestone` - Get details of a specific milestone
243
- 59. `create_milestone` - Create a new milestone in a GitLab project
244
- 60. `edit_milestone` - Edit an existing milestone in a GitLab project
245
- 61. `delete_milestone` - Delete a milestone from a GitLab project
246
- 62. `get_milestone_issue` - Get issues associated with a specific milestone
247
- 63. `get_milestone_merge_requests` - Get merge requests associated with a specific milestone
248
- 64. `promote_milestone` - Promote a milestone to the next stage
249
- 65. `get_milestone_burndown_events` - Get burndown events for a specific milestone
250
- 66. `get_users` - Get GitLab user details by usernames
189
+ `verify_namespace` - Verify if a namespace path exists
190
+ `update_wiki_page` - Update an existing wiki page in a GitLab project
191
+ `update_merge_request` - Update a merge request (Either mergeRequestIid or branchName must be provided)
192
+ `update_merge_request_note` - Modify an existing merge request thread note
193
+ `update_label` - Update an existing label in a project
194
+ `update_issue` - Update an issue in a GitLab project
195
+ `update_issue_note` - Modify an existing issue thread note
196
+ `update_draft_note` - Update an existing draft note
197
+ `search_repositories` - Search for GitLab projects
198
+ `retry_pipeline` - Retry a failed or canceled pipeline
199
+ `push_files` - Push multiple files to a GitLab project in a single commit
200
+ `publish_draft_note` - Publish a single draft note
201
+ `promote_milestone` - Promote a milestone to the next stage
202
+ `my_issues` - List issues assigned to the authenticated user
203
+ `mr_discussions` - List discussion items for a merge request
204
+ `list_wiki_pages` - List wiki pages in a GitLab project
205
+ `list_projects` - List projects accessible by the current user
206
+ `list_project_members` - List members of a GitLab project
207
+ `list_pipelines` - List pipelines in a GitLab project with filtering options
208
+ `list_pipeline_trigger_jobs` - List all trigger jobs (bridges) in a specific pipeline that trigger downstream pipelines
209
+ `list_pipeline_jobs` - List all jobs in a specific pipeline
210
+ `list_namespaces` - List all namespaces available to the current user
211
+ `list_milestones` - List milestones in a GitLab project with filtering options
212
+ `list_merge_requests` - List merge requests in a GitLab project with filtering options
213
+ `list_merge_request_diffs` - List merge request diffs with pagination support (Either mergeRequestIid or branchName must be provided)
214
+ `list_labels` - List labels for a project
215
+ `list_issues` - List issues in a GitLab project with filtering options
216
+ `list_issue_links` - List all issue links for a specific issue
217
+ `list_issue_discussions` - List discussions for an issue in a GitLab project
218
+ `list_group_projects` - List projects in a GitLab group with filtering options
219
+ `list_draft_notes` - List draft notes for a merge request
220
+ `get_wiki_page` - Get details of a specific wiki page
221
+ `get_users` - Get GitLab user details by usernames
222
+ `get_repository_tree` - Get the repository tree for a GitLab project (list files and directories)
223
+ `get_project` - Get details of a specific project
224
+ `get_pipeline` - Get details of a specific pipeline in a GitLab project
225
+ `get_pipeline_job` - Get details of a GitLab pipeline job number
226
+ `get_pipeline_job_output` - Get the output/trace of a GitLab pipeline job number
227
+ `get_namespace` - Get details of a namespace by ID or path
228
+ `get_milestone` - Get details of a specific milestone
229
+ `get_milestone_merge_requests` - Get merge requests associated with a specific milestone
230
+ `get_milestone_issue` - Get issues associated with a specific milestone
231
+ `get_milestone_burndown_events` - Get burndown events for a specific milestone
232
+ `get_merge_request` - Get details of a merge request (Either mergeRequestIid or branchName must be provided)
233
+ `get_merge_request_diffs` - Get the changes/diffs of a merge request (Either mergeRequestIid or branchName must be provided)
234
+ `get_label` - Get a single label from a project
235
+ `get_issue` - Get details of a specific issue in a GitLab project
236
+ `get_issue_link` - Get a specific issue link
237
+ `get_file_contents` - Get the contents of a file or directory from a GitLab project
238
+ `get_branch_diffs` - Get the changes/diffs between two branches or commits in a GitLab project
239
+ `fork_repository` - Fork a GitLab project to your account or specified namespace
240
+ `edit_milestone` - Edit an existing milestone in a GitLab project
241
+ `delete_wiki_page` - Delete a wiki page from a GitLab project
242
+ `delete_milestone` - Delete a milestone from a GitLab project
243
+ `delete_label` - Delete a label from a project
244
+ `delete_issue` - Delete an issue from a GitLab project
245
+ `delete_issue_link` - Delete an issue link
246
+ `delete_draft_note` - Delete a draft note
247
+ `download_attachment` - Download an uploaded file from a GitLab project by secret and filename
248
+ `create_wiki_page` - Create a new wiki page in a GitLab project
249
+ `create_repository` - Create a new GitLab project
250
+ `create_pipeline` - Create a new pipeline for a branch or tag
251
+ `create_or_update_file` - Create or update a single file in a GitLab project
252
+ `create_note` - Create a new note (comment) to an issue or merge request
253
+ `create_milestone` - Create a new milestone in a GitLab project
254
+ `create_merge_request` - Create a new merge request in a GitLab project
255
+ `create_merge_request_thread` - Create a new thread on a merge request
256
+ `create_merge_request_note` - Add a new note to an existing merge request thread
257
+ `create_label` - Create a new label in a project
258
+ `create_issue` - Create a new issue in a GitLab project
259
+ `create_issue_note` - Add a new note to an existing issue thread
260
+ `create_issue_link` - Create an issue link between two issues
261
+ `create_draft_note` - Create a draft note for a merge request
262
+ `create_branch` - Create a new branch in a GitLab project
263
+ `cancel_pipeline` - Cancel a running pipeline
264
+ `bulk_publish_draft_notes` - Publish all draft notes for a merge request
251
265
  <!-- TOOLS-END -->
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { pino } from 'pino';
3
+ const DEFAULT_NULL = process.env.DEFAULT_NULL === "true";
3
4
  const logger = pino({
4
5
  level: process.env.LOG_LEVEL || 'info',
5
6
  transport: {
@@ -11,9 +12,17 @@ const logger = pino({
11
12
  },
12
13
  },
13
14
  });
14
- export const flexibleBoolean = z.preprocess((val) => {
15
- if (typeof val === 'string') {
16
- return val.toLowerCase() === 'true';
15
+ export const flexibleBoolean = z.preprocess(val => {
16
+ if (typeof val === "boolean") {
17
+ return val;
17
18
  }
18
- return val;
19
+ let result = "false";
20
+ try {
21
+ result = String(val).toLowerCase();
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ return ["true", "t", "1"].includes(result);
19
27
  }, z.boolean());
28
+ export const flexibleBooleanNullable = DEFAULT_NULL ? flexibleBoolean.nullable().default(null) : flexibleBoolean.nullable();