mcp4openapi 0.3.1 → 0.3.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.
Files changed (152) hide show
  1. package/README.md +7 -0
  2. package/dist/src/core/cli-config.d.ts.map +1 -1
  3. package/dist/src/core/cli-config.js +2 -0
  4. package/dist/src/core/cli-config.js.map +1 -1
  5. package/dist/src/core/index.d.ts.map +1 -1
  6. package/dist/src/core/index.js +18 -3
  7. package/dist/src/core/index.js.map +1 -1
  8. package/dist/src/index.js +0 -0
  9. package/dist/src/profile/profile-allowlist.d.ts +18 -0
  10. package/dist/src/profile/profile-allowlist.d.ts.map +1 -0
  11. package/dist/src/profile/profile-allowlist.js +68 -0
  12. package/dist/src/profile/profile-allowlist.js.map +1 -0
  13. package/dist/src/profile/profile-registry.d.ts +5 -0
  14. package/dist/src/profile/profile-registry.d.ts.map +1 -1
  15. package/dist/src/profile/profile-registry.js +38 -14
  16. package/dist/src/profile/profile-registry.js.map +1 -1
  17. package/package.json +2 -2
  18. package/profiles/gitlab/developer-profile-oauth.json +243 -41
  19. package/profiles/gitlab/developer-profile-oauth.test.json +1009 -5
  20. package/profiles/gitlab/openapi.yaml +1419 -164
  21. package/profiles/gitlab/profile-optimized-oauth.json +785 -0
  22. package/profiles/gitlab/profile-optimized-oauth.test.json +1566 -0
  23. package/profiles/grafana/openapi.json +28078 -0
  24. package/profiles/grafana/profile.json +1083 -0
  25. package/profiles/grafana/profile.test.json +235 -0
  26. package/profiles/mattermost/openapi.yaml +27434 -0
  27. package/profiles/mattermost/profile.json +463 -0
  28. package/profiles/mattermost/profile.test.json +607 -0
  29. package/profiles/n8n/profile-optimized.json +1002 -364
  30. package/profiles/n8n/profile-optimized.test.json +43 -43
  31. package/dist/src/argument-normalizer.d.ts +0 -5
  32. package/dist/src/argument-normalizer.d.ts.map +0 -1
  33. package/dist/src/argument-normalizer.js +0 -61
  34. package/dist/src/argument-normalizer.js.map +0 -1
  35. package/dist/src/cli-config.d.ts +0 -9
  36. package/dist/src/cli-config.d.ts.map +0 -1
  37. package/dist/src/cli-config.js +0 -111
  38. package/dist/src/cli-config.js.map +0 -1
  39. package/dist/src/composite-executor.d.ts +0 -77
  40. package/dist/src/composite-executor.d.ts.map +0 -1
  41. package/dist/src/composite-executor.js +0 -193
  42. package/dist/src/composite-executor.js.map +0 -1
  43. package/dist/src/constants.d.ts +0 -85
  44. package/dist/src/constants.d.ts.map +0 -1
  45. package/dist/src/constants.js +0 -85
  46. package/dist/src/constants.js.map +0 -1
  47. package/dist/src/dag-executor.d.ts +0 -49
  48. package/dist/src/dag-executor.d.ts.map +0 -1
  49. package/dist/src/dag-executor.js +0 -138
  50. package/dist/src/dag-executor.js.map +0 -1
  51. package/dist/src/errors.d.ts +0 -59
  52. package/dist/src/errors.d.ts.map +0 -1
  53. package/dist/src/errors.js +0 -119
  54. package/dist/src/errors.js.map +0 -1
  55. package/dist/src/filtering.d.ts +0 -19
  56. package/dist/src/filtering.d.ts.map +0 -1
  57. package/dist/src/filtering.js +0 -292
  58. package/dist/src/filtering.js.map +0 -1
  59. package/dist/src/http-client-factory.d.ts +0 -62
  60. package/dist/src/http-client-factory.d.ts.map +0 -1
  61. package/dist/src/http-client-factory.js +0 -133
  62. package/dist/src/http-client-factory.js.map +0 -1
  63. package/dist/src/http-transport-config.d.ts +0 -6
  64. package/dist/src/http-transport-config.d.ts.map +0 -1
  65. package/dist/src/http-transport-config.js +0 -47
  66. package/dist/src/http-transport-config.js.map +0 -1
  67. package/dist/src/http-transport.d.ts +0 -316
  68. package/dist/src/http-transport.d.ts.map +0 -1
  69. package/dist/src/http-transport.js +0 -2412
  70. package/dist/src/http-transport.js.map +0 -1
  71. package/dist/src/interceptors.d.ts +0 -116
  72. package/dist/src/interceptors.d.ts.map +0 -1
  73. package/dist/src/interceptors.js +0 -392
  74. package/dist/src/interceptors.js.map +0 -1
  75. package/dist/src/jsonrpc-validator.d.ts +0 -27
  76. package/dist/src/jsonrpc-validator.d.ts.map +0 -1
  77. package/dist/src/jsonrpc-validator.js +0 -58
  78. package/dist/src/jsonrpc-validator.js.map +0 -1
  79. package/dist/src/logger.d.ts +0 -59
  80. package/dist/src/logger.d.ts.map +0 -1
  81. package/dist/src/logger.js +0 -177
  82. package/dist/src/logger.js.map +0 -1
  83. package/dist/src/mcp-server-manager.d.ts +0 -20
  84. package/dist/src/mcp-server-manager.d.ts.map +0 -1
  85. package/dist/src/mcp-server-manager.js +0 -38
  86. package/dist/src/mcp-server-manager.js.map +0 -1
  87. package/dist/src/mcp-server.d.ts +0 -203
  88. package/dist/src/mcp-server.d.ts.map +0 -1
  89. package/dist/src/mcp-server.js +0 -1369
  90. package/dist/src/mcp-server.js.map +0 -1
  91. package/dist/src/metrics.d.ts +0 -97
  92. package/dist/src/metrics.d.ts.map +0 -1
  93. package/dist/src/metrics.js +0 -273
  94. package/dist/src/metrics.js.map +0 -1
  95. package/dist/src/naming-warnings.d.ts +0 -23
  96. package/dist/src/naming-warnings.d.ts.map +0 -1
  97. package/dist/src/naming-warnings.js +0 -83
  98. package/dist/src/naming-warnings.js.map +0 -1
  99. package/dist/src/naming.d.ts +0 -58
  100. package/dist/src/naming.d.ts.map +0 -1
  101. package/dist/src/naming.js +0 -510
  102. package/dist/src/naming.js.map +0 -1
  103. package/dist/src/oauth-provider.d.ts +0 -131
  104. package/dist/src/oauth-provider.d.ts.map +0 -1
  105. package/dist/src/oauth-provider.js +0 -836
  106. package/dist/src/oauth-provider.js.map +0 -1
  107. package/dist/src/openapi-parser.d.ts +0 -70
  108. package/dist/src/openapi-parser.d.ts.map +0 -1
  109. package/dist/src/openapi-parser.js +0 -436
  110. package/dist/src/openapi-parser.js.map +0 -1
  111. package/dist/src/profile-loader.d.ts +0 -78
  112. package/dist/src/profile-loader.d.ts.map +0 -1
  113. package/dist/src/profile-loader.js +0 -483
  114. package/dist/src/profile-loader.js.map +0 -1
  115. package/dist/src/profile-registry.d.ts +0 -18
  116. package/dist/src/profile-registry.d.ts.map +0 -1
  117. package/dist/src/profile-registry.js +0 -26
  118. package/dist/src/profile-registry.js.map +0 -1
  119. package/dist/src/profile-resolver.d.ts +0 -19
  120. package/dist/src/profile-resolver.d.ts.map +0 -1
  121. package/dist/src/profile-resolver.js +0 -167
  122. package/dist/src/profile-resolver.js.map +0 -1
  123. package/dist/src/proxy-executor.d.ts +0 -86
  124. package/dist/src/proxy-executor.d.ts.map +0 -1
  125. package/dist/src/proxy-executor.js +0 -497
  126. package/dist/src/proxy-executor.js.map +0 -1
  127. package/dist/src/schema-validator.d.ts +0 -30
  128. package/dist/src/schema-validator.d.ts.map +0 -1
  129. package/dist/src/schema-validator.js +0 -128
  130. package/dist/src/schema-validator.js.map +0 -1
  131. package/dist/src/startup-profile.d.ts +0 -17
  132. package/dist/src/startup-profile.d.ts.map +0 -1
  133. package/dist/src/startup-profile.js +0 -30
  134. package/dist/src/startup-profile.js.map +0 -1
  135. package/dist/src/startup-validation.d.ts +0 -11
  136. package/dist/src/startup-validation.d.ts.map +0 -1
  137. package/dist/src/startup-validation.js +0 -21
  138. package/dist/src/startup-validation.js.map +0 -1
  139. package/dist/src/tool-filter.d.ts +0 -65
  140. package/dist/src/tool-filter.d.ts.map +0 -1
  141. package/dist/src/tool-filter.js +0 -471
  142. package/dist/src/tool-filter.js.map +0 -1
  143. package/dist/src/tool-generator.d.ts +0 -67
  144. package/dist/src/tool-generator.d.ts.map +0 -1
  145. package/dist/src/tool-generator.js +0 -182
  146. package/dist/src/tool-generator.js.map +0 -1
  147. package/dist/src/validation-utils.d.ts +0 -49
  148. package/dist/src/validation-utils.d.ts.map +0 -1
  149. package/dist/src/validation-utils.js +0 -138
  150. package/dist/src/validation-utils.js.map +0 -1
  151. package/profiles/gitlab/developer-profile.json +0 -1508
  152. package/profiles/gitlab/developer-profile.test.json +0 -3432
@@ -1,1508 +0,0 @@
1
- {
2
- "$schema": "../../profile-schema.json",
3
- "profile_name": "gitlab-pat",
4
- "profile_id": "gitlab-pat",
5
- "profile_aliases": ["gitlab-pat"],
6
- "openapi_spec_path": "./openapi.yaml",
7
- "description": "Comprehensive operation-style tool set (manage_merge_requests, manage_issues, manage_projects, ...).",
8
-
9
- "parameter_aliases": {
10
- "id": ["project_id", "group_id", "resource_id"],
11
- "badge_id": ["badge_id"],
12
- "branch": ["branch"],
13
- "user_id": ["user_id"],
14
- "job_id": ["job_id"],
15
- "merge_request_iid": ["iid", "mr_iid"],
16
- "issue_iid": ["iid"],
17
- "note_id": ["comment_id"],
18
- "file_path": ["path", "filepath"],
19
- "path": ["file_path", "filepath"],
20
- "pipeline_id": ["pipeline"],
21
- "discussion_id": ["discussion"],
22
- "hook_id": ["webhook_id"],
23
- "snippet_id": ["snippet"],
24
- "tag_name": ["tag"]
25
- },
26
-
27
- "tools": [
28
- {
29
- "name": "manage_groups",
30
- "description": "Work with GitLab groups. Actions: 'list' (all groups), 'get' (group details), 'list_projects' (projects in group), 'list_subgroups' (subgroups of group). Use 'list' to discover groups, 'list_projects' to see projects in a specific group. For 'get', 'list_projects', and 'list_subgroups', pass 'group_id'.",
31
- "metadata_params": ["action", "group_id"],
32
- "operations": {
33
- "list": "getApiV4Groups",
34
- "get": "getApiV4GroupsId",
35
- "list_projects": "getApiV4GroupsIdProjects",
36
- "list_subgroups": "getApiV4GroupsIdSubgroups"
37
- },
38
- "response_fields": {
39
- "list": ["id", "name", "path", "full_path", "description", "visibility", "web_url"],
40
- "list_projects": ["id", "name", "path", "path_with_namespace", "description", "visibility", "web_url", "last_activity_at", "star_count", "forks_count", "avatar_url"],
41
- "list_subgroups": ["id", "name", "path", "full_path", "description", "visibility", "web_url"]
42
- },
43
- "parameters": {
44
- "action": {
45
- "type": "string",
46
- "enum": ["list", "get", "list_projects", "list_subgroups"],
47
- "description": "Action to perform",
48
- "required": true
49
- },
50
- "group_id": {
51
- "type": "string",
52
- "description": "Group ID (numeric like '36173' or short name like 'davidruzicka')",
53
- "required_for": ["get", "list_projects", "list_subgroups"],
54
- "example": "davidruzicka"
55
- },
56
- "page": {
57
- "type": "integer",
58
- "description": "Page number for pagination",
59
- "default": 1
60
- },
61
- "per_page": {
62
- "type": "integer",
63
- "description": "Items per page (recommended max 100)",
64
- "default": 50
65
- },
66
- "search": {
67
- "type": "string",
68
- "description": "Search for groups/projects by name"
69
- },
70
- "owned": {
71
- "type": "boolean",
72
- "description": "Limit to groups owned by current user (for list action)"
73
- },
74
- "archived": {
75
- "type": "boolean",
76
- "description": "Limit by archived status (for list_projects action)"
77
- }
78
- }
79
- },
80
-
81
- {
82
- "name": "manage_pipelines_jobs",
83
- "description": "Run and inspect pipelines/jobs. Actions: 'run_pipeline', 'get_pipeline', 'get_job', 'retry_job', 'cancel_job', 'play_job', 'download_job_artifacts' (proxy download). For 'run_pipeline', pass 'ref'. For 'get_pipeline', pass 'pipeline_id'. For job actions, pass 'job_id'.",
84
- "metadata_params": ["action", "project_id", "pipeline_id", "job_id"],
85
- "operations": {
86
- "run_pipeline": "postApiV4ProjectsIdPipeline",
87
- "get_pipeline": "getApiV4ProjectsIdPipelinesPipelineId",
88
- "get_job": "getSingleJob",
89
- "retry_job": "postApiV4ProjectsIdJobsJobIdRetry",
90
- "play_job": "triggerManualJob",
91
- "cancel_job": "postApiV4ProjectsIdJobsJobIdCancel",
92
- "download_job_artifacts": {
93
- "type": "proxy_download",
94
- "metadata_endpoint": "getSingleJob",
95
- "download_endpoint": "getApiV4ProjectsIdJobsJobIdArtifacts"
96
- }
97
- },
98
- "response_fields": {
99
- "run_pipeline": ["id", "status", "ref", "web_url"],
100
- "get_pipeline": ["id", "status", "ref", "web_url"],
101
- "get_job": ["id", "status", "stage", "name", "ref", "web_url"]
102
- },
103
- "parameters": {
104
- "action": {
105
- "type": "string",
106
- "enum": ["run_pipeline", "get_pipeline", "get_job", "retry_job", "cancel_job", "play_job", "download_job_artifacts"],
107
- "description": "Pipeline/job action to perform",
108
- "required": true
109
- },
110
- "project_id": {
111
- "type": "string",
112
- "description": "Project ID (numeric or URL-encoded path)",
113
- "required": true
114
- },
115
- "pipeline_id": {
116
- "type": "integer",
117
- "description": "Pipeline ID",
118
- "required_for": ["get_pipeline"]
119
- },
120
- "job_id": {
121
- "type": "integer",
122
- "description": "Job ID",
123
- "required_for": ["get_job", "retry_job", "cancel_job", "play_job", "download_job_artifacts"]
124
- },
125
- "ref": {
126
- "type": "string",
127
- "description": "Branch or tag to run pipeline on",
128
- "required_for": ["run_pipeline"]
129
- }
130
- }
131
- },
132
-
133
- {
134
- "name": "manage_labels_milestones",
135
- "description": "Manage project labels and milestones. Actions: 'list_labels', 'create_label', 'delete_label', 'list_milestones', 'create_milestone', 'update_milestone'. For 'create_label', pass 'name' and 'color'. For 'delete_label', pass 'name'. For 'create_milestone' and 'update_milestone', pass 'title'. For 'update_milestone', also pass 'milestone_id'.",
136
- "metadata_params": ["action", "project_id", "milestone_id"],
137
- "operations": {
138
- "list_labels": "getApiV4ProjectsIdLabels",
139
- "create_label": "postApiV4ProjectsIdLabels",
140
- "delete_label": "deleteApiV4ProjectsIdLabels",
141
- "list_milestones": "getApiV4ProjectsIdMilestones",
142
- "create_milestone": "postApiV4ProjectsIdMilestones",
143
- "update_milestone": "putApiV4ProjectsIdMilestonesMilestoneId"
144
- },
145
- "response_fields": {
146
- "list_labels": ["id", "name", "color", "description"],
147
- "create_label": ["id", "name", "color", "description"],
148
- "list_milestones": ["id", "iid", "title", "state"],
149
- "create_milestone": ["id", "iid", "title", "state"],
150
- "update_milestone": ["id", "iid", "title", "state"]
151
- },
152
- "parameters": {
153
- "action": {
154
- "type": "string",
155
- "enum": ["list_labels", "create_label", "delete_label", "list_milestones", "create_milestone", "update_milestone"],
156
- "description": "Action to perform",
157
- "required": true
158
- },
159
- "project_id": {
160
- "type": "string",
161
- "description": "Project ID",
162
- "required": true
163
- },
164
- "name": {
165
- "type": "string",
166
- "description": "Label name",
167
- "required_for": ["create_label", "delete_label"]
168
- },
169
- "color": {
170
- "type": "string",
171
- "description": "Label color in hex",
172
- "required_for": ["create_label"]
173
- },
174
- "title": {
175
- "type": "string",
176
- "description": "Milestone title",
177
- "required_for": ["create_milestone", "update_milestone"]
178
- },
179
- "milestone_id": {
180
- "type": "integer",
181
- "description": "Milestone ID",
182
- "required_for": ["update_milestone"]
183
- },
184
- "state_event": {
185
- "type": "string",
186
- "enum": ["close", "activate"],
187
- "description": "Change milestone state",
188
- "required_for": []
189
- }
190
- }
191
- },
192
-
193
- {
194
- "name": "manage_releases_tags",
195
- "description": "Manage releases and tags. Actions: 'list_releases', 'create_release', 'list_tags', 'create_tag', 'delete_tag'. For 'create_release', pass 'name' and 'tag_name'. For 'create_tag', pass 'tag_name' and 'ref'. For 'delete_tag', pass 'tag_name'.",
196
- "metadata_params": ["action", "project_id"],
197
- "operations": {
198
- "list_releases": "getApiV4ProjectsIdReleases",
199
- "create_release": "postApiV4ProjectsIdReleases",
200
- "list_tags": "getApiV4ProjectsIdRepositoryTags",
201
- "create_tag": "postApiV4ProjectsIdRepositoryTags",
202
- "delete_tag": "deleteApiV4ProjectsIdRepositoryTagsTagName"
203
- },
204
- "response_fields": {
205
- "list_releases": ["name", "tag_name", "description", "released_at"],
206
- "create_release": ["name", "tag_name", "description", "released_at"],
207
- "list_tags": ["name", "message", "target"],
208
- "create_tag": ["name", "message", "target"]
209
- },
210
- "parameters": {
211
- "action": {
212
- "type": "string",
213
- "enum": ["list_releases", "create_release", "list_tags", "create_tag", "delete_tag"],
214
- "description": "Action to perform",
215
- "required": true
216
- },
217
- "project_id": {
218
- "type": "string",
219
- "description": "Project ID",
220
- "required": true
221
- },
222
- "tag_name": {
223
- "type": "string",
224
- "description": "Tag name",
225
- "required_for": ["create_release", "create_tag", "delete_tag"]
226
- },
227
- "name": {
228
- "type": "string",
229
- "description": "Release or tag name",
230
- "required_for": ["create_release"]
231
- },
232
- "ref": {
233
- "type": "string",
234
- "description": "Ref to create tag from",
235
- "required_for": ["create_tag"]
236
- },
237
- "description": {
238
- "type": "string",
239
- "description": "Release description"
240
- }
241
- }
242
- },
243
-
244
- {
245
- "name": "manage_project_members",
246
- "description": "Manage project members. Actions: 'list_members', 'add_member', 'remove_member'. For 'add_member', pass 'user_id' and 'access_level'. For 'remove_member', pass 'user_id'.",
247
- "metadata_params": ["action", "project_id"],
248
- "operations": {
249
- "list_members": "getApiV4ProjectsIdMembers",
250
- "add_member": "postApiV4ProjectsIdMembers",
251
- "remove_member": "deleteApiV4ProjectsIdMembersUserId"
252
- },
253
- "response_fields": {
254
- "list_members": ["id", "username", "name", "access_level"],
255
- "add_member": ["id", "username", "name", "access_level"]
256
- },
257
- "parameters": {
258
- "action": {
259
- "type": "string",
260
- "enum": ["list_members", "add_member", "remove_member"],
261
- "description": "Action to perform",
262
- "required": true
263
- },
264
- "project_id": {
265
- "type": "string",
266
- "description": "Project ID",
267
- "required": true
268
- },
269
- "user_id": {
270
- "type": "integer",
271
- "description": "User ID to add or remove",
272
- "required_for": ["add_member", "remove_member"]
273
- },
274
- "access_level": {
275
- "type": "integer",
276
- "description": "Access level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner)",
277
- "required_for": ["add_member"],
278
- "default": 30
279
- }
280
- }
281
- },
282
-
283
- {
284
- "name": "manage_project_hooks",
285
- "description": "Manage project webhooks. Actions: 'list_hooks', 'create_hook', 'delete_hook'. For 'create_hook', pass 'url'. For 'delete_hook', pass 'hook_id'.",
286
- "metadata_params": ["action", "project_id", "hook_id"],
287
- "operations": {
288
- "list_hooks": "getApiV4ProjectsIdHooks",
289
- "create_hook": "postApiV4ProjectsIdHooks",
290
- "delete_hook": "deleteApiV4ProjectsIdHooksHookId"
291
- },
292
- "response_fields": {
293
- "list_hooks": ["id", "url", "push_events", "issues_events", "merge_requests_events"],
294
- "create_hook": ["id", "url", "push_events", "issues_events", "merge_requests_events"]
295
- },
296
- "parameters": {
297
- "action": {
298
- "type": "string",
299
- "enum": ["list_hooks", "create_hook", "delete_hook"],
300
- "description": "Action to perform",
301
- "required": true
302
- },
303
- "project_id": {
304
- "type": "string",
305
- "description": "Project ID",
306
- "required": true
307
- },
308
- "hook_id": {
309
- "type": "integer",
310
- "description": "Hook ID",
311
- "required_for": ["delete_hook"]
312
- },
313
- "url": {
314
- "type": "string",
315
- "description": "Hook URL",
316
- "required_for": ["create_hook"]
317
- },
318
- "push_events": {
319
- "type": "boolean",
320
- "description": "Enable push events"
321
- },
322
- "issues_events": {
323
- "type": "boolean",
324
- "description": "Enable issues events"
325
- },
326
- "merge_requests_events": {
327
- "type": "boolean",
328
- "description": "Enable merge requests events"
329
- }
330
- }
331
- },
332
-
333
- {
334
- "name": "manage_snippets",
335
- "description": "Read project snippets and download raw content via proxy. Actions: 'list_snippets', 'get_snippet', 'download_snippet'. For 'get_snippet' and 'download_snippet', pass 'snippet_id'.",
336
- "metadata_params": ["action", "project_id", "snippet_id"],
337
- "operations": {
338
- "list_snippets": "getApiV4ProjectsIdSnippets",
339
- "get_snippet": "getApiV4ProjectsIdSnippetsSnippetId",
340
- "download_snippet": {
341
- "type": "proxy_download",
342
- "metadata_endpoint": "getApiV4ProjectsIdSnippetsSnippetId",
343
- "download_endpoint": "getApiV4ProjectsIdSnippetsSnippetIdRaw"
344
- }
345
- },
346
- "response_fields": {
347
- "list_snippets": ["id", "title", "file_name", "visibility"],
348
- "get_snippet": ["id", "title", "file_name", "description", "visibility"]
349
- },
350
- "parameters": {
351
- "action": {
352
- "type": "string",
353
- "enum": ["list_snippets", "get_snippet", "download_snippet"],
354
- "description": "Action to perform",
355
- "required": true
356
- },
357
- "project_id": {
358
- "type": "string",
359
- "description": "Project ID",
360
- "required": true
361
- },
362
- "snippet_id": {
363
- "type": "integer",
364
- "description": "Snippet ID",
365
- "required_for": ["get_snippet", "download_snippet"]
366
- }
367
- }
368
- },
369
-
370
- {
371
- "name": "manage_projects",
372
- "description": "Work with GitLab projects. Actions: 'list' (all projects), 'get' (project details), 'search' (search projects). Use 'list' to discover projects, 'search' to find specific ones. For 'get', pass 'project_id'.",
373
- "metadata_params": ["action", "project_id"],
374
- "operations": {
375
- "list": "getApiV4Projects",
376
- "get": "getApiV4ProjectsId"
377
- },
378
- "response_fields": {
379
- "list": ["id", "name", "path", "path_with_namespace", "description", "visibility", "web_url", "last_activity_at", "star_count", "forks_count", "avatar_url", "namespace"]
380
- },
381
- "parameters": {
382
- "action": {
383
- "type": "string",
384
- "enum": ["list", "get"],
385
- "description": "Action to perform",
386
- "required": true
387
- },
388
- "project_id": {
389
- "type": "string",
390
- "description": "Project ID. Use numeric ID (e.g. '123') or URL-encoded path (e.g. 'group%2Fproject').",
391
- "required_for": ["get"],
392
- "example": "123"
393
- },
394
- "page": {
395
- "type": "integer",
396
- "description": "Page number for pagination",
397
- "default": 1
398
- },
399
- "per_page": {
400
- "type": "integer",
401
- "description": "Items per page (recommended max 100)",
402
- "default": 50
403
- },
404
- "search": {
405
- "type": "string",
406
- "description": "Search for projects by name or description"
407
- },
408
- "owned": {
409
- "type": "boolean",
410
- "description": "Limit to projects owned by current user"
411
- },
412
- "membership": {
413
- "type": "boolean",
414
- "description": "Limit to projects current user is a member of"
415
- }
416
- }
417
- },
418
-
419
- {
420
- "name": "manage_merge_requests",
421
- "description": "Work with merge requests. Actions: 'list' (all MRs in project), 'get' (single MR details), 'create' (create new MR), 'update' (update MR), 'delete' (delete MR - admins only), 'list_notes' (get all comments), 'get_note' (single comment), 'create_note' (add comment), 'update_note' (edit comment), 'delete_note' (remove comment), 'download_note_attachment' (download note attachment via proxy), 'list_discussions', 'get_discussion', 'create_discussion', 'reply_discussion', 'delete_discussion', 'set_discussion_resolved', 'get_approvals', 'approve', 'unapprove', 'get_changes' (file diffs), 'list_versions' (list diff versions), 'get_version' (specific diff version), 'list_award_emoji', 'get_award_emoji', 'create_award_emoji', 'delete_award_emoji', 'list_note_award_emoji', 'get_note_award_emoji', 'create_note_award_emoji', 'delete_note_award_emoji'. Use 'list' to see all merge requests, filter by state (opened, closed, merged, all). For all actions that target a specific MR (including 'get_changes', 'list_versions', 'get_version'), pass 'merge_request_iid'.",
422
- "metadata_params": ["action", "project_id", "merge_request_iid", "note_id", "award_id", "discussion_id", "version_id"],
423
- "operations": {
424
- "list": "getApiV4ProjectsIdMergeRequests",
425
- "get": "getApiV4ProjectsIdMergeRequestsMergeRequestIid",
426
- "create": "postApiV4ProjectsIdMergeRequests",
427
- "update": "putApiV4ProjectsIdMergeRequestsMergeRequestIid",
428
- "delete": "deleteApiV4ProjectsIdMergeRequestsMergeRequestIid",
429
- "list_notes": "getApiV4ProjectsIdMergeRequestsMergeRequestIidNotes",
430
- "get_note": "getApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteId",
431
- "create_note": "postApiV4ProjectsIdMergeRequestsMergeRequestIidNotes",
432
- "update_note": "putApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteId",
433
- "delete_note": "deleteApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteId",
434
- "download_note_attachment": {
435
- "type": "proxy_download",
436
- "metadata_endpoint": "getApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteId",
437
- "url_field": "attachment"
438
- },
439
- "list_discussions": "getApiV4ProjectsIdMergeRequestsMergeRequestIidDiscussions",
440
- "create_discussion": "postApiV4ProjectsIdMergeRequestsMergeRequestIidDiscussions",
441
- "get_discussion": "getApiV4ProjectsIdMergeRequestsMergeRequestIidDiscussionsDiscussionId",
442
- "reply_discussion": "postApiV4ProjectsIdMergeRequestsMergeRequestIidDiscussionsDiscussionIdNotes",
443
- "delete_discussion": "deleteApiV4ProjectsIdMergeRequestsMergeRequestIidDiscussionsDiscussionId",
444
- "set_discussion_resolved": "putApiV4ProjectsIdMergeRequestsMergeRequestIidDiscussionsDiscussionId",
445
- "get_approvals": "getApiV4ProjectsIdMergeRequestsMergeRequestIidApprovals",
446
- "approve": "postApiV4ProjectsIdMergeRequestsMergeRequestIidApprove",
447
- "unapprove": "postApiV4ProjectsIdMergeRequestsMergeRequestIidUnapprove",
448
- "get_changes": "getApiV4ProjectsIdMergeRequestsMergeRequestIidChanges",
449
- "list_versions": "getApiV4ProjectsIdMergeRequestsMergeRequestIidVersions",
450
- "get_version": "getApiV4ProjectsIdMergeRequestsMergeRequestIidVersionsVersionId",
451
- "list_award_emoji": "getApiV4ProjectsIdMergeRequestsMergeRequestIidAwardEmoji",
452
- "create_award_emoji": "postApiV4ProjectsIdMergeRequestsMergeRequestIidAwardEmoji",
453
- "get_award_emoji": "getApiV4ProjectsIdMergeRequestsMergeRequestIidAwardEmojiAwardId",
454
- "delete_award_emoji": "deleteApiV4ProjectsIdMergeRequestsMergeRequestIidAwardEmojiAwardId",
455
- "list_note_award_emoji": "getApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteIdAwardEmoji",
456
- "create_note_award_emoji": "postApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteIdAwardEmoji",
457
- "get_note_award_emoji": "getApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteIdAwardEmojiAwardId",
458
- "delete_note_award_emoji": "deleteApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteIdAwardEmojiAwardId"
459
- },
460
- "response_fields": {
461
- "list": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at", "updated_at"],
462
- "create": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at"],
463
- "update": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at", "updated_at"],
464
- "list_notes": ["id", "body", "author", "created_at", "updated_at", "system", "confidential"],
465
- "get_note": ["id", "body", "author", "created_at", "updated_at", "system", "confidential", "attachment"],
466
- "create_note": ["id", "body", "author", "created_at", "system", "confidential"],
467
- "update_note": ["id", "body", "author", "created_at", "updated_at", "system", "confidential"],
468
- "list_discussions": ["id", "notes", "resolved"],
469
- "get_discussion": ["id", "notes", "resolved"],
470
- "create_discussion": ["id", "notes", "resolved"],
471
- "reply_discussion": ["id", "notes", "resolved"],
472
- "set_discussion_resolved": ["id", "notes", "resolved"],
473
- "get_approvals": ["approvals_required", "approvals_left", "approved_by"],
474
- "approve": ["approvals_required", "approvals_left", "approved_by"],
475
- "unapprove": ["approvals_required", "approvals_left", "approved_by"],
476
- "get_changes": ["id", "iid", "title", "state", "changes"],
477
- "list_versions": ["id", "short_commit_id", "created_at", "real_size", "commits_count", "head_commit_sha", "base_commit_sha", "start_commit_sha"],
478
- "get_version": ["id", "head_commit_sha", "base_commit_sha", "start_commit_sha", "real_size", "created_at", "diffs"],
479
- "list_award_emoji": ["id", "name", "user", "created_at", "updated_at", "awardable_id", "awardable_type"],
480
- "create_award_emoji": ["id", "name", "user", "created_at", "updated_at", "awardable_id", "awardable_type"],
481
- "get_award_emoji": ["id", "name", "user", "created_at", "updated_at", "awardable_id", "awardable_type"],
482
- "list_note_award_emoji": ["id", "name", "user", "created_at", "updated_at", "awardable_id", "awardable_type"],
483
- "create_note_award_emoji": ["id", "name", "user", "created_at", "updated_at", "awardable_id", "awardable_type"],
484
- "get_note_award_emoji": ["id", "name", "user", "created_at", "updated_at", "awardable_id", "awardable_type"]
485
- },
486
- "parameters": {
487
- "action": {
488
- "type": "string",
489
- "enum": ["list", "get", "create", "update", "delete", "list_notes", "get_note", "create_note", "update_note", "delete_note", "download_note_attachment", "list_discussions", "get_discussion", "create_discussion", "reply_discussion", "delete_discussion", "set_discussion_resolved", "get_approvals", "approve", "unapprove", "get_changes", "list_versions", "get_version", "list_award_emoji", "get_award_emoji", "create_award_emoji", "delete_award_emoji", "list_note_award_emoji", "get_note_award_emoji", "create_note_award_emoji", "delete_note_award_emoji"],
490
- "description": "Action to perform",
491
- "required": true
492
- },
493
- "project_id": {
494
- "type": "string",
495
- "description": "Project ID. Use numeric ID (e.g. '123') or URL-encoded path (e.g. 'group%2Fproject').",
496
- "required": true,
497
- "example": "123"
498
- },
499
- "merge_request_iid": {
500
- "type": "integer",
501
- "description": "The internal ID of the merge request",
502
- "required_for": ["get", "update", "delete", "list_notes", "get_note", "create_note", "update_note", "delete_note", "download_note_attachment", "list_discussions", "get_discussion", "create_discussion", "reply_discussion", "delete_discussion", "set_discussion_resolved", "get_approvals", "approve", "unapprove", "get_changes", "list_versions", "get_version", "list_award_emoji", "get_award_emoji", "create_award_emoji", "delete_award_emoji", "list_note_award_emoji", "get_note_award_emoji", "create_note_award_emoji", "delete_note_award_emoji"]
503
- },
504
- "discussion_id": {
505
- "type": "string",
506
- "description": "The ID of the discussion",
507
- "required_for": ["get_discussion", "reply_discussion", "delete_discussion", "set_discussion_resolved"]
508
- },
509
- "resolved": {
510
- "type": "boolean",
511
- "description": "Resolve or unresolve discussion",
512
- "required_for": ["set_discussion_resolved"]
513
- },
514
- "version_id": {
515
- "type": "integer",
516
- "description": "The ID of the merge request version",
517
- "required_for": ["get_version"]
518
- },
519
- "source_branch": {
520
- "type": "string",
521
- "description": "The source branch name (required for create)",
522
- "required_for": ["create"],
523
- "example": "feature/new-feature"
524
- },
525
- "target_branch": {
526
- "type": "string",
527
- "description": "The target branch name (required for create, optional for update)",
528
- "required_for": ["create"],
529
- "example": "main"
530
- },
531
- "title": {
532
- "type": "string",
533
- "description": "The title of the merge request (required for create, optional for update)",
534
- "required_for": ["create"],
535
- "example": "Implement new feature"
536
- },
537
- "description": {
538
- "type": "string",
539
- "description": "The description of the merge request (optional for create and update)",
540
- "example": "This implements the new feature requested by the team."
541
- },
542
- "assignee_id": {
543
- "type": "integer",
544
- "description": "The ID of the user to assign the merge request to (optional for create and update)",
545
- "example": 123
546
- },
547
- "assignee_ids": {
548
- "type": "array",
549
- "items": {
550
- "type": "integer"
551
- },
552
- "description": "The IDs of the users to assign the merge request to (optional for create and update)",
553
- "example": [123, 456]
554
- },
555
- "reviewer_ids": {
556
- "type": "array",
557
- "items": {
558
- "type": "integer"
559
- },
560
- "description": "The IDs of the users to review the merge request (optional for create and update)",
561
- "example": [789, 101]
562
- },
563
- "labels": {
564
- "type": "string",
565
- "description": "Labels to be added to the merge request (comma-separated, optional for create and update)",
566
- "example": "bug,feature,frontend"
567
- },
568
- "milestone_id": {
569
- "type": "integer",
570
- "description": "The ID of the milestone to assign the merge request to (optional for create and update)",
571
- "example": 42
572
- },
573
- "allow_collaboration": {
574
- "type": "boolean",
575
- "description": "Allow commits from the target branch to be pushed to the source branch (optional for create)",
576
- "default": false,
577
- "example": true
578
- },
579
- "allow_maintainer_to_push": {
580
- "type": "boolean",
581
- "description": "Allow maintainers to push to the source branch (optional for create)",
582
- "default": false,
583
- "example": true
584
- },
585
- "squash": {
586
- "type": "boolean",
587
- "description": "Squash commits when merge request is accepted (optional for create)",
588
- "default": false,
589
- "example": true
590
- },
591
- "target_project_id": {
592
- "type": "integer",
593
- "description": "The target project ID (when creating merge request across projects, optional for create)",
594
- "example": 789
595
- },
596
- "remove_source_branch": {
597
- "type": "boolean",
598
- "description": "Remove the source branch when the merge request is accepted (optional for create and update)",
599
- "default": false,
600
- "example": true
601
- },
602
- "draft": {
603
- "type": "boolean",
604
- "description": "Mark the merge request as a draft (optional for create)",
605
- "default": false,
606
- "example": false
607
- },
608
- "state": {
609
- "type": "string",
610
- "enum": ["opened", "closed", "merged", "all"],
611
- "description": "Filter by merge request state",
612
- "default": "opened"
613
- },
614
- "page": {
615
- "type": "integer",
616
- "description": "Page number for pagination",
617
- "default": 1
618
- },
619
- "per_page": {
620
- "type": "integer",
621
- "description": "Items per page (recommended max 100)",
622
- "default": 50
623
- },
624
- "note_id": {
625
- "type": "integer",
626
- "description": "The ID of the note",
627
- "required_for": ["update_note", "delete_note", "download_note_attachment", "list_note_award_emoji", "get_note_award_emoji", "create_note_award_emoji", "delete_note_award_emoji"]
628
- },
629
- "award_id": {
630
- "type": "integer",
631
- "description": "The ID of the emoji reaction",
632
- "required_for": ["get_award_emoji", "delete_award_emoji", "get_note_award_emoji", "delete_note_award_emoji"]
633
- },
634
- "name": {
635
- "type": "string",
636
- "description": "Name of the emoji without colons",
637
- "required_for": ["create_award_emoji", "create_note_award_emoji"],
638
- "example": "thumbsup"
639
- },
640
- "body": {
641
- "type": "string",
642
- "description": "The content of the note or discussion",
643
- "required_for": ["create_note", "update_note", "create_discussion", "reply_discussion"],
644
- "minLength": 1,
645
- "example": "This looks good to me!"
646
- },
647
- "confidential": {
648
- "type": "boolean",
649
- "description": "Whether the note should be confidential",
650
- "default": false,
651
- "example": false
652
- },
653
- "sort": {
654
- "type": "string",
655
- "enum": ["asc", "desc"],
656
- "description": "Return notes sorted in created order",
657
- "default": "desc"
658
- },
659
- "state_event": {
660
- "type": "string",
661
- "enum": ["close", "reopen"],
662
- "description": "New state for the merge request (for update action)",
663
- "example": "close"
664
- },
665
- "discussion_locked": {
666
- "type": "boolean",
667
- "description": "Whether the merge request discussion is locked (for update action)",
668
- "default": false,
669
- "example": false
670
- }
671
- }
672
- },
673
-
674
- {
675
- "name": "get_merge_request_with_details",
676
- "description": "Get merge request with discussions and award emoji in a single call. Fetches MR details, discussions, and MR award emoji. Discussions are paginated - use page/per_page (default 50, max 100).",
677
- "composite": true,
678
- "partial_results": true,
679
- "metadata_params": ["project_id", "merge_request_iid"],
680
- "steps": [
681
- {
682
- "call": "GET /projects/{id}/merge_requests/{merge_request_iid}",
683
- "store_as": "merge_request"
684
- },
685
- {
686
- "call": "GET /projects/{id}/merge_requests/{merge_request_iid}/discussions",
687
- "store_as": "merge_request.discussions",
688
- "depends_on": ["merge_request"]
689
- },
690
- {
691
- "call": "GET /projects/{id}/merge_requests/{merge_request_iid}/award_emoji",
692
- "store_as": "merge_request.award_emoji",
693
- "depends_on": ["merge_request"]
694
- }
695
- ],
696
- "parameters": {
697
- "project_id": {
698
- "type": "string",
699
- "description": "Project ID. Use numeric ID (e.g. '123') or URL-encoded path (e.g. 'group%2Fproject').",
700
- "required": true,
701
- "example": "123"
702
- },
703
- "merge_request_iid": {
704
- "type": "integer",
705
- "description": "The internal ID of the merge request",
706
- "required": true
707
- },
708
- "sort": {
709
- "type": "string",
710
- "enum": ["asc", "desc"],
711
- "description": "Return notes sorted in created order",
712
- "default": "desc"
713
- },
714
- "page": {
715
- "type": "integer",
716
- "description": "Page number for discussions pagination",
717
- "default": 1
718
- },
719
- "per_page": {
720
- "type": "integer",
721
- "description": "Number of discussions per page (max 100)",
722
- "default": 50
723
- }
724
- }
725
- },
726
-
727
- {
728
- "name": "manage_deploy_keys",
729
- "description": "List deploy keys available to the authenticated user. Actions: 'list'.",
730
- "metadata_params": ["action"],
731
- "operations": {
732
- "list": "getApiV4DeployKeys"
733
- },
734
- "response_fields": {
735
- "list": ["id", "title", "key", "created_at"]
736
- },
737
- "parameters": {
738
- "action": {
739
- "type": "string",
740
- "enum": ["list"],
741
- "description": "Action to perform",
742
- "required": true
743
- },
744
- "page": {
745
- "type": "integer",
746
- "description": "Page number for pagination",
747
- "default": 1
748
- },
749
- "per_page": {
750
- "type": "integer",
751
- "description": "Items per page (recommended max 100)",
752
- "default": 50
753
- }
754
- }
755
- },
756
-
757
- {
758
- "name": "manage_deploy_tokens",
759
- "description": "List deploy tokens available to the authenticated user. Actions: 'list'.",
760
- "metadata_params": ["action"],
761
- "operations": {
762
- "list": "getApiV4DeployTokens"
763
- },
764
- "response_fields": {
765
- "list": ["id", "name", "username", "expires_at"]
766
- },
767
- "parameters": {
768
- "action": {
769
- "type": "string",
770
- "enum": ["list"],
771
- "description": "Action to perform",
772
- "required": true
773
- },
774
- "page": {
775
- "type": "integer",
776
- "description": "Page number for pagination",
777
- "default": 1
778
- },
779
- "per_page": {
780
- "type": "integer",
781
- "description": "Items per page (recommended max 100)",
782
- "default": 50
783
- }
784
- }
785
- },
786
-
787
- {
788
- "name": "manage_group_deploy_tokens",
789
- "description": "Manage deploy tokens at group level. Actions: 'list', 'create'.",
790
- "metadata_params": ["action", "group_id"],
791
- "operations": {
792
- "list": "getApiV4GroupsIdDeployTokens",
793
- "create": "postApiV4GroupsIdDeployTokens"
794
- },
795
- "response_fields": {
796
- "list": ["id", "name", "username", "expires_at"],
797
- "create": ["id", "name", "username", "expires_at"]
798
- },
799
- "parameters": {
800
- "action": {
801
- "type": "string",
802
- "enum": ["list", "create"],
803
- "description": "Action to perform",
804
- "required": true
805
- },
806
- "group_id": {
807
- "type": "string",
808
- "description": "Group ID (numeric like '36173' or short name like 'davidruzicka')",
809
- "required": true,
810
- "example": "davidruzicka"
811
- },
812
- "name": {
813
- "type": "string",
814
- "description": "Deploy token name",
815
- "required_for": ["create"],
816
- "example": "ci-token"
817
- },
818
- "scopes": {
819
- "type": "array",
820
- "items": {
821
- "type": "string"
822
- },
823
- "description": "Scopes for the deploy token",
824
- "example": ["read_repository", "read_registry"]
825
- },
826
- "expires_at": {
827
- "type": "string",
828
- "format": "date",
829
- "description": "Expiration date for the deploy token",
830
- "example": "2025-12-31"
831
- },
832
- "page": {
833
- "type": "integer",
834
- "description": "Page number for pagination",
835
- "default": 1
836
- },
837
- "per_page": {
838
- "type": "integer",
839
- "description": "Items per page (recommended max 100)",
840
- "default": 50
841
- }
842
- }
843
- },
844
-
845
- {
846
- "name": "manage_events",
847
- "description": "List recent events accessible to the authenticated user. Actions: 'list'.",
848
- "metadata_params": ["action"],
849
- "operations": {
850
- "list": "getApiV4Events"
851
- },
852
- "response_fields": {
853
- "list": ["id", "action_name", "target_type", "target_id", "created_at"]
854
- },
855
- "parameters": {
856
- "action": {
857
- "type": "string",
858
- "enum": ["list"],
859
- "description": "Action to perform",
860
- "required": true
861
- },
862
- "page": {
863
- "type": "integer",
864
- "description": "Page number for pagination",
865
- "default": 1
866
- },
867
- "per_page": {
868
- "type": "integer",
869
- "description": "Items per page (recommended max 100)",
870
- "default": 50
871
- }
872
- }
873
- },
874
-
875
- {
876
- "name": "manage_feature_flags",
877
- "description": "Manage instance feature flags. Actions: 'list', 'list_definitions', 'set', 'get', 'update', 'delete'.",
878
- "metadata_params": ["action", "name"],
879
- "operations": {
880
- "list": "getApiV4Features",
881
- "list_definitions": "getApiV4FeaturesDefinitions",
882
- "set": "postApiV4Features",
883
- "get": "getApiV4FeaturesName",
884
- "update": "postApiV4FeaturesName",
885
- "delete": "deleteApiV4FeaturesName"
886
- },
887
- "response_fields": {
888
- "list": ["name", "state", "gates"],
889
- "list_definitions": ["name", "description"],
890
- "set": ["name", "state"],
891
- "get": ["name", "state", "gates"],
892
- "update": ["name", "state"]
893
- },
894
- "parameters": {
895
- "action": {
896
- "type": "string",
897
- "enum": ["list", "list_definitions", "set", "get", "update", "delete"],
898
- "description": "Action to perform",
899
- "required": true
900
- },
901
- "name": {
902
- "type": "string",
903
- "description": "Feature flag name",
904
- "required_for": ["set", "get", "update", "delete"],
905
- "example": "new_navigation"
906
- },
907
- "state": {
908
- "type": "string",
909
- "description": "Feature flag state",
910
- "example": "on"
911
- }
912
- }
913
- },
914
-
915
- {
916
- "name": "manage_unleash_feature_flags",
917
- "description": "Work with Unleash feature flags for a project. Actions: 'get_config', 'list_features', 'list_client_features', 'report_client_metrics', 'register_client'.",
918
- "metadata_params": ["action", "project_id"],
919
- "operations": {
920
- "get_config": "getApiV4FeatureFlagsUnleashProjectId",
921
- "list_features": "getApiV4FeatureFlagsUnleashProjectIdFeatures",
922
- "list_client_features": "getApiV4FeatureFlagsUnleashProjectIdClientFeatures",
923
- "report_client_metrics": "postApiV4FeatureFlagsUnleashProjectIdClientMetrics",
924
- "register_client": "postApiV4FeatureFlagsUnleashProjectIdClientRegister"
925
- },
926
- "response_fields": {
927
- "get_config": ["version", "project"],
928
- "list_features": ["features"],
929
- "list_client_features": ["features"],
930
- "report_client_metrics": ["status"],
931
- "register_client": ["status"]
932
- },
933
- "parameters": {
934
- "action": {
935
- "type": "string",
936
- "enum": ["get_config", "list_features", "list_client_features", "report_client_metrics", "register_client"],
937
- "description": "Action to perform",
938
- "required": true
939
- },
940
- "project_id": {
941
- "type": "integer",
942
- "description": "Project ID",
943
- "required": true,
944
- "example": 12345
945
- },
946
- "metrics": {
947
- "type": "object",
948
- "properties": {},
949
- "description": "Client metrics payload",
950
- "required_for": ["report_client_metrics"]
951
- },
952
- "client": {
953
- "type": "object",
954
- "properties": {},
955
- "description": "Client registration payload",
956
- "required_for": ["register_client"]
957
- }
958
- }
959
- },
960
-
961
- {
962
- "name": "manage_dependency_proxy_cache",
963
- "description": "Manage dependency proxy cache for a group. Actions: 'purge'.",
964
- "metadata_params": ["action", "group_id"],
965
- "operations": {
966
- "purge": "deleteApiV4GroupsIdDependencyProxyCache"
967
- },
968
- "parameters": {
969
- "action": {
970
- "type": "string",
971
- "enum": ["purge"],
972
- "description": "Action to perform",
973
- "required": true
974
- },
975
- "group_id": {
976
- "type": "string",
977
- "description": "Group ID (numeric like '36173' or short name like 'davidruzicka')",
978
- "required": true,
979
- "example": "davidruzicka"
980
- }
981
- }
982
- },
983
-
984
- {
985
- "name": "manage_group_custom_attributes",
986
- "description": "Manage custom attributes for a group. Actions: 'list', 'get', 'set', 'delete'.",
987
- "metadata_params": ["action", "group_id", "key"],
988
- "operations": {
989
- "list": "getApiV4GroupsIdCustomAttributes",
990
- "get": "getApiV4GroupsIdCustomAttributesKey",
991
- "set": "putApiV4GroupsIdCustomAttributesKey",
992
- "delete": "deleteApiV4GroupsIdCustomAttributesKey"
993
- },
994
- "response_fields": {
995
- "list": ["key", "value"],
996
- "get": ["key", "value"],
997
- "set": ["key", "value"]
998
- },
999
- "parameters": {
1000
- "action": {
1001
- "type": "string",
1002
- "enum": ["list", "get", "set", "delete"],
1003
- "description": "Action to perform",
1004
- "required": true
1005
- },
1006
- "group_id": {
1007
- "type": "string",
1008
- "description": "Group ID (numeric like '36173' or short name like 'davidruzicka')",
1009
- "required": true,
1010
- "example": "davidruzicka"
1011
- },
1012
- "key": {
1013
- "type": "string",
1014
- "description": "Custom attribute key",
1015
- "required_for": ["get", "set", "delete"],
1016
- "example": "team"
1017
- },
1018
- "value": {
1019
- "type": "string",
1020
- "description": "Custom attribute value",
1021
- "required_for": ["set"],
1022
- "example": "core"
1023
- }
1024
- }
1025
- },
1026
-
1027
- {
1028
- "name": "run_glql",
1029
- "description": "Execute a GLQL query. Actions: 'query'.",
1030
- "metadata_params": ["action"],
1031
- "operations": {
1032
- "query": "postApiV4Glql"
1033
- },
1034
- "parameters": {
1035
- "action": {
1036
- "type": "string",
1037
- "enum": ["query"],
1038
- "description": "Action to perform",
1039
- "required": true
1040
- },
1041
- "query": {
1042
- "type": "string",
1043
- "description": "GLQL query string",
1044
- "required_for": ["query"],
1045
- "example": "{ projects { nodes { id name } } }"
1046
- }
1047
- }
1048
- },
1049
-
1050
- {
1051
- "name": "manage_issues",
1052
- "description": "Work with issues. Actions: 'list' (all issues in project), 'get' (single issue details), 'create' (create new issue), 'delete' (delete issue - admins only), 'list_notes' (get all comments), 'get_note' (single comment), 'create_note' (add comment), 'update_note' (edit comment), 'delete_note' (remove comment). Use 'list' to see all issues, filter by state (opened, closed, all). For actions that target a specific issue, pass 'issue_iid'. For 'create', pass 'title'. For note actions, pass 'body' and/or 'note_id' as required.",
1053
- "metadata_params": ["action", "project_id", "issue_iid", "note_id"],
1054
- "operations": {
1055
- "list": "getApiV4ProjectsIdIssues",
1056
- "get": "getApiV4ProjectsIdIssuesIssueIid",
1057
- "create": "postApiV4ProjectsIdIssues",
1058
- "delete": "deleteApiV4ProjectsIdIssuesIssueIid",
1059
- "list_notes": "getApiV4ProjectsIdIssuesIssueIidNotes",
1060
- "get_note": "getApiV4ProjectsIdIssuesIssueIidNotesNoteId",
1061
- "create_note": "postApiV4ProjectsIdIssuesIssueIidNotes",
1062
- "update_note": "putApiV4ProjectsIdIssuesIssueIidNotesNoteId",
1063
- "delete_note": "deleteApiV4ProjectsIdIssuesIssueIidNotesNoteId"
1064
- },
1065
- "response_fields": {
1066
- "list": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at", "updated_at"],
1067
- "create": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at"],
1068
- "list_notes": ["id", "body", "author", "created_at", "updated_at", "system", "confidential"],
1069
- "get_note": ["id", "body", "author", "created_at", "updated_at", "system", "confidential", "attachment"],
1070
- "create_note": ["id", "body", "author", "created_at", "system", "confidential"],
1071
- "update_note": ["id", "body", "author", "created_at", "updated_at", "system", "confidential"]
1072
- },
1073
- "parameters": {
1074
- "action": {
1075
- "type": "string",
1076
- "enum": ["list", "get", "create", "delete", "list_notes", "get_note", "create_note", "update_note", "delete_note"],
1077
- "description": "Action to perform",
1078
- "required": true
1079
- },
1080
- "project_id": {
1081
- "type": "string",
1082
- "description": "Project ID. Use numeric ID (e.g. '123') or URL-encoded path (e.g. 'group%2Fproject').",
1083
- "required": true,
1084
- "example": "123"
1085
- },
1086
- "issue_iid": {
1087
- "type": "integer",
1088
- "description": "The internal ID of the issue",
1089
- "required_for": ["get", "delete", "list_notes", "get_note", "create_note", "update_note", "delete_note"]
1090
- },
1091
- "note_id": {
1092
- "type": "integer",
1093
- "description": "The ID of the note",
1094
- "required_for": ["get_note", "update_note", "delete_note"]
1095
- },
1096
- "state": {
1097
- "type": "string",
1098
- "enum": ["opened", "closed", "all"],
1099
- "description": "Filter by issue state",
1100
- "default": "opened"
1101
- },
1102
- "page": {
1103
- "type": "integer",
1104
- "description": "Page number for pagination",
1105
- "default": 1
1106
- },
1107
- "per_page": {
1108
- "type": "integer",
1109
- "description": "Items per page (recommended max 100)",
1110
- "default": 50
1111
- },
1112
- "title": {
1113
- "type": "string",
1114
- "description": "The title of the issue (required for create)",
1115
- "required_for": ["create"],
1116
- "example": "Implement new feature"
1117
- },
1118
- "description": {
1119
- "type": "string",
1120
- "description": "The description of the issue (optional for create)",
1121
- "example": "This implements the new feature requested by the team."
1122
- },
1123
- "body": {
1124
- "type": "string",
1125
- "description": "The content of the note",
1126
- "required_for": ["create_note", "update_note"],
1127
- "example": "Looks good to me."
1128
- },
1129
- "assignee_id": {
1130
- "type": "integer",
1131
- "description": "The ID of the user to assign the issue to (optional for create)",
1132
- "example": 123
1133
- },
1134
- "assignee_ids": {
1135
- "type": "array",
1136
- "items": {
1137
- "type": "integer"
1138
- },
1139
- "description": "The IDs of the users to assign the issue to (optional for create)",
1140
- "example": [123, 456]
1141
- },
1142
- "labels": {
1143
- "type": "string",
1144
- "description": "Labels to be added to the issue (comma-separated, optional for create)",
1145
- "example": "bug,feature,frontend"
1146
- },
1147
- "milestone_id": {
1148
- "type": "integer",
1149
- "description": "The ID of the milestone to assign the issue to (optional for create)",
1150
- "example": 42
1151
- },
1152
- "due_date": {
1153
- "type": "string",
1154
- "format": "date",
1155
- "description": "The due date of the issue (optional for create)",
1156
- "example": "2024-12-31"
1157
- },
1158
- "confidential": {
1159
- "type": "boolean",
1160
- "description": "Whether the issue should be confidential (optional for create). For notes, use with create_note.",
1161
- "default": false,
1162
- "example": false
1163
- },
1164
- "weight": {
1165
- "type": "integer",
1166
- "description": "The weight of the issue (optional for create)",
1167
- "minimum": 0,
1168
- "example": 5
1169
- },
1170
- "sort": {
1171
- "type": "string",
1172
- "enum": ["asc", "desc"],
1173
- "description": "Return notes sorted in created order",
1174
- "default": "desc"
1175
- }
1176
- }
1177
- },
1178
-
1179
- {
1180
- "name": "manage_project_badges",
1181
- "description": "Manage badges for a project. Actions: 'list' (get all badges), 'get' (single badge by ID), 'create' (new badge with link_url and image_url), 'update' (modify existing badge), 'delete' (remove badge). Use 'list' when you want to see what badges exist, 'create' to add new ones. For 'get', 'update', and 'delete', pass 'badge_id'. For 'create', pass 'link_url' and 'image_url'.",
1182
- "metadata_params": ["action", "project_id", "badge_id"],
1183
- "operations": {
1184
- "list": "getApiV4ProjectsIdBadges",
1185
- "get": "getApiV4ProjectsIdBadgesBadgeId",
1186
- "create": "postApiV4ProjectsIdBadges",
1187
- "update": "putApiV4ProjectsIdBadgesBadgeId",
1188
- "delete": "deleteApiV4ProjectsIdBadgesBadgeId"
1189
- },
1190
- "parameters": {
1191
- "project_id": {
1192
- "type": "string",
1193
- "description": "Project ID. Use numeric ID (e.g. '123') or URL-encoded path (e.g. 'group%2Fproject').",
1194
- "required": true,
1195
- "example": "123"
1196
- },
1197
- "action": {
1198
- "type": "string",
1199
- "enum": ["list", "get", "create", "update", "delete"],
1200
- "description": "Action to perform",
1201
- "required": true
1202
- },
1203
- "badge_id": {
1204
- "type": "integer",
1205
- "description": "Badge ID",
1206
- "required_for": ["get", "update", "delete"]
1207
- },
1208
- "link_url": {
1209
- "type": "string",
1210
- "description": "URL the badge links to",
1211
- "required_for": ["create"]
1212
- },
1213
- "image_url": {
1214
- "type": "string",
1215
- "description": "URL of the badge image",
1216
- "required_for": ["create"]
1217
- },
1218
- "name": {
1219
- "type": "string",
1220
- "description": "Human-readable badge name"
1221
- },
1222
- "page": {
1223
- "type": "integer",
1224
- "description": "Page number for pagination",
1225
- "default": 1
1226
- },
1227
- "per_page": {
1228
- "type": "integer",
1229
- "description": "Items per page (recommended max 100)",
1230
- "default": 50
1231
- }
1232
- }
1233
- },
1234
-
1235
- {
1236
- "name": "manage_branches",
1237
- "description": "Manage repository branches. Actions: 'list' (all branches, supports search/sort), 'get' (single branch details), 'create' (new branch from ref), 'delete' (remove branch), 'protect' (make protected), 'unprotect' (remove protection), 'exists' (check if branch exists). Use 'list' to see all branches, 'create' to make a new feature branch from main. For 'get', 'delete', 'protect', 'unprotect', and 'exists', pass 'branch'. For 'create', pass 'ref'.",
1238
- "operations": {
1239
- "list": "getApiV4ProjectsIdRepositoryBranches",
1240
- "get": "getApiV4ProjectsIdRepositoryBranchesBranch",
1241
- "create": "postApiV4ProjectsIdRepositoryBranches",
1242
- "delete": "deleteApiV4ProjectsIdRepositoryBranchesBranch",
1243
- "protect": "putApiV4ProjectsIdRepositoryBranchesBranchProtect",
1244
- "unprotect": "putApiV4ProjectsIdRepositoryBranchesBranchUnprotect",
1245
- "exists": "headApiV4ProjectsIdRepositoryBranchesBranch"
1246
- },
1247
- "parameters": {
1248
- "project_id": {
1249
- "type": "string",
1250
- "description": "Project ID. Use numeric ID (e.g. '123') or URL-encoded path (e.g. 'group%2Fproject').",
1251
- "required": true,
1252
- "example": "123"
1253
- },
1254
- "action": {
1255
- "type": "string",
1256
- "enum": ["list", "get", "create", "delete", "protect", "unprotect", "exists"],
1257
- "description": "Operation to perform on branches",
1258
- "required": true
1259
- },
1260
- "branch": {
1261
- "type": "string",
1262
- "description": "Branch name",
1263
- "required_for": ["get", "delete", "protect", "unprotect", "exists"]
1264
- },
1265
- "ref": {
1266
- "type": "string",
1267
- "description": "Source branch or commit SHA for new branch",
1268
- "required_for": ["create"]
1269
- },
1270
- "search": {
1271
- "type": "string",
1272
- "description": "Search branches by name (for list action)"
1273
- },
1274
- "sort": {
1275
- "type": "string",
1276
- "enum": ["name_asc", "updated_asc", "updated_desc"],
1277
- "description": "Sort order (for list action)"
1278
- },
1279
- "developers_can_push": {
1280
- "type": "boolean",
1281
- "description": "Allow developers to push (for protect action)"
1282
- },
1283
- "developers_can_merge": {
1284
- "type": "boolean",
1285
- "description": "Allow developers to merge (for protect action)"
1286
- }
1287
- }
1288
- },
1289
-
1290
- {
1291
- "name": "repository_commits",
1292
- "description": "List repository commits with optional filters like ref and file path. Actions: 'list'.",
1293
- "metadata_params": ["action", "project_id"],
1294
- "operations": {
1295
- "list": "getApiV4ProjectsIdRepositoryCommits"
1296
- },
1297
- "response_fields": {
1298
- "list": ["id", "short_id", "title", "message", "author_name", "author_email", "authored_date", "committed_date", "web_url"]
1299
- },
1300
- "parameters": {
1301
- "action": {
1302
- "type": "string",
1303
- "enum": ["list"],
1304
- "description": "Action to perform",
1305
- "required": true
1306
- },
1307
- "project_id": {
1308
- "type": "string",
1309
- "description": "Project ID (numeric or URL-encoded path)",
1310
- "required": true
1311
- },
1312
- "ref_name": {
1313
- "type": "string",
1314
- "description": "Branch, tag, or commit SHA to list commits from"
1315
- },
1316
- "path": {
1317
- "type": "string",
1318
- "description": "File path to filter commits, use URL-encoded slashes for nested paths"
1319
- },
1320
- "since": {
1321
- "type": "string",
1322
- "description": "Only commits after this date in ISO 8601 format"
1323
- },
1324
- "until": {
1325
- "type": "string",
1326
- "description": "Only commits before this date in ISO 8601 format"
1327
- },
1328
- "all": {
1329
- "type": "boolean",
1330
- "description": "Return all commits, including those not in the default branch"
1331
- },
1332
- "with_stats": {
1333
- "type": "boolean",
1334
- "description": "Include commit stats in the response"
1335
- },
1336
- "first_parent": {
1337
- "type": "boolean",
1338
- "description": "Return only the first parent of merge commits"
1339
- },
1340
- "page": {
1341
- "type": "integer",
1342
- "description": "Page number for pagination",
1343
- "default": 1
1344
- },
1345
- "per_page": {
1346
- "type": "integer",
1347
- "description": "Items per page (recommended max 100)",
1348
- "default": 50
1349
- },
1350
- "order": {
1351
- "type": "string",
1352
- "description": "Order commits, for example default or topo"
1353
- }
1354
- }
1355
- },
1356
-
1357
- {
1358
- "name": "repository_files",
1359
- "description": "Fetch repository file contents. Actions: 'get_file' (metadata + base64 content) and 'get_raw' (raw content as text/binary). Use 'get_file' when you need encoding and metadata, 'get_raw' for direct file contents.",
1360
- "metadata_params": ["action", "project_id", "file_path"],
1361
- "operations": {
1362
- "get_file": "getApiV4ProjectsIdRepositoryFilesFilePath",
1363
- "get_raw": "getApiV4ProjectsIdRepositoryFilesFilePathRaw"
1364
- },
1365
- "response_fields": {
1366
- "get_file": ["file_name", "file_path", "size", "encoding", "content", "ref", "blob_id", "commit_id", "last_commit_id"]
1367
- },
1368
- "parameters": {
1369
- "action": {
1370
- "type": "string",
1371
- "enum": ["get_file", "get_raw"],
1372
- "description": "Action to perform",
1373
- "required": true
1374
- },
1375
- "project_id": {
1376
- "type": "string",
1377
- "description": "Project ID. Use numeric ID (e.g. '123') or URL-encoded path (e.g. 'group%2Fproject').",
1378
- "required": true,
1379
- "example": "123"
1380
- },
1381
- "file_path": {
1382
- "type": "string",
1383
- "description": "URL-encoded full path to the file, e.g., 'src%2Findex.js'. Use %2F instead of '/'.",
1384
- "required": true
1385
- },
1386
- "ref": {
1387
- "type": "string",
1388
- "description": "Branch name, tag, or commit SHA to read from",
1389
- "required": true,
1390
- "example": "main"
1391
- }
1392
- }
1393
- },
1394
-
1395
- {
1396
- "name": "manage_access_requests",
1397
- "description": "Manage access requests for projects or groups. Actions: 'list' (pending requests), 'approve' (grant access with access_level), 'deny' (reject request), 'request' (request access as current user). Use 'list' to see who requested access, 'approve' to grant it with specified access level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner). For 'approve' and 'deny', pass 'user_id'.",
1398
- "operations": {
1399
- "list_project": "getApiV4ProjectsIdAccessRequests",
1400
- "list_group": "getApiV4GroupsIdAccessRequests",
1401
- "approve_project": "putApiV4ProjectsIdAccessRequestsUserIdApprove",
1402
- "approve_group": "putApiV4GroupsIdAccessRequestsUserIdApprove",
1403
- "deny_project": "deleteApiV4ProjectsIdAccessRequestsUserId",
1404
- "deny_group": "deleteApiV4GroupsIdAccessRequestsUserId",
1405
- "request_project": "postApiV4ProjectsIdAccessRequests",
1406
- "request_group": "postApiV4GroupsIdAccessRequests"
1407
- },
1408
- "parameters": {
1409
- "resource_type": {
1410
- "type": "string",
1411
- "enum": ["project", "group"],
1412
- "description": "Whether to operate on project or group",
1413
- "required": true
1414
- },
1415
- "resource_id": {
1416
- "type": "string",
1417
- "description": "Project ID (numeric like '123' or URL-encoded path like 'group%2Fproject') or Group ID (numeric or short name like 'davidruzicka'). Note: For project paths, use URL-encoded format (e.g., 'group%2Fproject').",
1418
- "required": true,
1419
- "example": "davidruzicka"
1420
- },
1421
- "action": {
1422
- "type": "string",
1423
- "enum": ["list", "approve", "deny", "request"],
1424
- "description": "Access request operation to perform",
1425
- "required": true
1426
- },
1427
- "user_id": {
1428
- "type": "integer",
1429
- "description": "User ID of requester",
1430
- "required_for": ["approve", "deny"]
1431
- },
1432
- "access_level": {
1433
- "type": "integer",
1434
- "description": "Access level to grant: 10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner",
1435
- "default": 30
1436
- }
1437
- }
1438
- },
1439
-
1440
- {
1441
- "name": "list_project_jobs",
1442
- "description": "List all CI/CD jobs for a project with optional status filtering. Use 'scope' parameter to filter by job status like ['failed', 'canceled', 'success', 'running', 'pending']. Useful for finding failed jobs or monitoring pipeline progress.",
1443
- "operations": {
1444
- "list": "listProjectJobs"
1445
- },
1446
- "parameters": {
1447
- "project_id": {
1448
- "type": "string",
1449
- "description": "Project ID. Use numeric ID (e.g. '123') or URL-encoded path (e.g. 'group%2Fproject').",
1450
- "required": true,
1451
- "example": "123"
1452
- },
1453
- "scope": {
1454
- "type": "array",
1455
- "items": { "type": "string" },
1456
- "description": "Filter by job status (can specify multiple)"
1457
- }
1458
- }
1459
- }
1460
- ],
1461
-
1462
- "interceptors": {
1463
- "array_format": "brackets",
1464
- "auth": [
1465
- {
1466
- "type": "bearer",
1467
- "priority": 0,
1468
- "value_from_env": "GITLAB_TOKEN",
1469
- "validation_endpoint": "personal_access_tokens/self"
1470
- }
1471
- ],
1472
- "base_url": {
1473
- "value_from_env": "GITLAB_API_BASE_URL",
1474
- "default": "https://gitlab.com/api/v4"
1475
- },
1476
- "rate_limit": {
1477
- "max_requests_per_minute": 600,
1478
- "overrides": {
1479
- "postApiV4ProjectsIdIssues": {
1480
- "max_requests_per_minute": 10
1481
- },
1482
- "deleteApiV4ProjectsIdIssuesIssueIid": {
1483
- "max_requests_per_minute": 5
1484
- },
1485
- "postApiV4ProjectsIdMergeRequests": {
1486
- "max_requests_per_minute": 10
1487
- },
1488
- "deleteApiV4ProjectsIdMergeRequestsMergeRequestIid": {
1489
- "max_requests_per_minute": 5
1490
- },
1491
- "postApiV4ProjectsIdMergeRequestsMergeRequestIidNotes": {
1492
- "max_requests_per_minute": 30
1493
- },
1494
- "putApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteId": {
1495
- "max_requests_per_minute": 30
1496
- },
1497
- "deleteApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteId": {
1498
- "max_requests_per_minute": 10
1499
- }
1500
- }
1501
- },
1502
- "retry": {
1503
- "max_attempts": 3,
1504
- "backoff_ms": [1000, 2000, 4000],
1505
- "retry_on_status": [429, 502, 503, 504]
1506
- }
1507
- }
1508
- }