mcp4openapi 0.3.1 → 0.3.4

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 (160) hide show
  1. package/README.md +7 -0
  2. package/dist/src/auth/oauth-provider.d.ts +1 -0
  3. package/dist/src/auth/oauth-provider.d.ts.map +1 -1
  4. package/dist/src/auth/oauth-provider.js +17 -0
  5. package/dist/src/auth/oauth-provider.js.map +1 -1
  6. package/dist/src/core/cli-config.d.ts.map +1 -1
  7. package/dist/src/core/cli-config.js +2 -0
  8. package/dist/src/core/cli-config.js.map +1 -1
  9. package/dist/src/core/index.d.ts.map +1 -1
  10. package/dist/src/core/index.js +18 -3
  11. package/dist/src/core/index.js.map +1 -1
  12. package/dist/src/index.js +0 -0
  13. package/dist/src/profile/profile-allowlist.d.ts +18 -0
  14. package/dist/src/profile/profile-allowlist.d.ts.map +1 -0
  15. package/dist/src/profile/profile-allowlist.js +68 -0
  16. package/dist/src/profile/profile-allowlist.js.map +1 -0
  17. package/dist/src/profile/profile-registry.d.ts +5 -0
  18. package/dist/src/profile/profile-registry.d.ts.map +1 -1
  19. package/dist/src/profile/profile-registry.js +38 -14
  20. package/dist/src/profile/profile-registry.js.map +1 -1
  21. package/dist/src/security/ssrf-validator.d.ts +31 -0
  22. package/dist/src/security/ssrf-validator.d.ts.map +1 -0
  23. package/dist/src/security/ssrf-validator.js +190 -0
  24. package/dist/src/security/ssrf-validator.js.map +1 -0
  25. package/package.json +2 -2
  26. package/profiles/gitlab/developer-profile-oauth.json +445 -81
  27. package/profiles/gitlab/developer-profile-oauth.test.json +1037 -12
  28. package/profiles/gitlab/openapi.yaml +1420 -165
  29. package/profiles/gitlab/profile-optimized-oauth.json +928 -0
  30. package/profiles/gitlab/profile-optimized-oauth.test.json +1606 -0
  31. package/profiles/grafana/openapi.json +28078 -0
  32. package/profiles/grafana/profile.json +1083 -0
  33. package/profiles/grafana/profile.test.json +235 -0
  34. package/profiles/mattermost/openapi.yaml +27434 -0
  35. package/profiles/mattermost/profile.json +463 -0
  36. package/profiles/mattermost/profile.test.json +607 -0
  37. package/profiles/n8n/profile-optimized.json +1002 -364
  38. package/profiles/n8n/profile-optimized.test.json +43 -43
  39. package/dist/src/argument-normalizer.d.ts +0 -5
  40. package/dist/src/argument-normalizer.d.ts.map +0 -1
  41. package/dist/src/argument-normalizer.js +0 -61
  42. package/dist/src/argument-normalizer.js.map +0 -1
  43. package/dist/src/cli-config.d.ts +0 -9
  44. package/dist/src/cli-config.d.ts.map +0 -1
  45. package/dist/src/cli-config.js +0 -111
  46. package/dist/src/cli-config.js.map +0 -1
  47. package/dist/src/composite-executor.d.ts +0 -77
  48. package/dist/src/composite-executor.d.ts.map +0 -1
  49. package/dist/src/composite-executor.js +0 -193
  50. package/dist/src/composite-executor.js.map +0 -1
  51. package/dist/src/constants.d.ts +0 -85
  52. package/dist/src/constants.d.ts.map +0 -1
  53. package/dist/src/constants.js +0 -85
  54. package/dist/src/constants.js.map +0 -1
  55. package/dist/src/dag-executor.d.ts +0 -49
  56. package/dist/src/dag-executor.d.ts.map +0 -1
  57. package/dist/src/dag-executor.js +0 -138
  58. package/dist/src/dag-executor.js.map +0 -1
  59. package/dist/src/errors.d.ts +0 -59
  60. package/dist/src/errors.d.ts.map +0 -1
  61. package/dist/src/errors.js +0 -119
  62. package/dist/src/errors.js.map +0 -1
  63. package/dist/src/filtering.d.ts +0 -19
  64. package/dist/src/filtering.d.ts.map +0 -1
  65. package/dist/src/filtering.js +0 -292
  66. package/dist/src/filtering.js.map +0 -1
  67. package/dist/src/http-client-factory.d.ts +0 -62
  68. package/dist/src/http-client-factory.d.ts.map +0 -1
  69. package/dist/src/http-client-factory.js +0 -133
  70. package/dist/src/http-client-factory.js.map +0 -1
  71. package/dist/src/http-transport-config.d.ts +0 -6
  72. package/dist/src/http-transport-config.d.ts.map +0 -1
  73. package/dist/src/http-transport-config.js +0 -47
  74. package/dist/src/http-transport-config.js.map +0 -1
  75. package/dist/src/http-transport.d.ts +0 -316
  76. package/dist/src/http-transport.d.ts.map +0 -1
  77. package/dist/src/http-transport.js +0 -2412
  78. package/dist/src/http-transport.js.map +0 -1
  79. package/dist/src/interceptors.d.ts +0 -116
  80. package/dist/src/interceptors.d.ts.map +0 -1
  81. package/dist/src/interceptors.js +0 -392
  82. package/dist/src/interceptors.js.map +0 -1
  83. package/dist/src/jsonrpc-validator.d.ts +0 -27
  84. package/dist/src/jsonrpc-validator.d.ts.map +0 -1
  85. package/dist/src/jsonrpc-validator.js +0 -58
  86. package/dist/src/jsonrpc-validator.js.map +0 -1
  87. package/dist/src/logger.d.ts +0 -59
  88. package/dist/src/logger.d.ts.map +0 -1
  89. package/dist/src/logger.js +0 -177
  90. package/dist/src/logger.js.map +0 -1
  91. package/dist/src/mcp-server-manager.d.ts +0 -20
  92. package/dist/src/mcp-server-manager.d.ts.map +0 -1
  93. package/dist/src/mcp-server-manager.js +0 -38
  94. package/dist/src/mcp-server-manager.js.map +0 -1
  95. package/dist/src/mcp-server.d.ts +0 -203
  96. package/dist/src/mcp-server.d.ts.map +0 -1
  97. package/dist/src/mcp-server.js +0 -1369
  98. package/dist/src/mcp-server.js.map +0 -1
  99. package/dist/src/metrics.d.ts +0 -97
  100. package/dist/src/metrics.d.ts.map +0 -1
  101. package/dist/src/metrics.js +0 -273
  102. package/dist/src/metrics.js.map +0 -1
  103. package/dist/src/naming-warnings.d.ts +0 -23
  104. package/dist/src/naming-warnings.d.ts.map +0 -1
  105. package/dist/src/naming-warnings.js +0 -83
  106. package/dist/src/naming-warnings.js.map +0 -1
  107. package/dist/src/naming.d.ts +0 -58
  108. package/dist/src/naming.d.ts.map +0 -1
  109. package/dist/src/naming.js +0 -510
  110. package/dist/src/naming.js.map +0 -1
  111. package/dist/src/oauth-provider.d.ts +0 -131
  112. package/dist/src/oauth-provider.d.ts.map +0 -1
  113. package/dist/src/oauth-provider.js +0 -836
  114. package/dist/src/oauth-provider.js.map +0 -1
  115. package/dist/src/openapi-parser.d.ts +0 -70
  116. package/dist/src/openapi-parser.d.ts.map +0 -1
  117. package/dist/src/openapi-parser.js +0 -436
  118. package/dist/src/openapi-parser.js.map +0 -1
  119. package/dist/src/profile-loader.d.ts +0 -78
  120. package/dist/src/profile-loader.d.ts.map +0 -1
  121. package/dist/src/profile-loader.js +0 -483
  122. package/dist/src/profile-loader.js.map +0 -1
  123. package/dist/src/profile-registry.d.ts +0 -18
  124. package/dist/src/profile-registry.d.ts.map +0 -1
  125. package/dist/src/profile-registry.js +0 -26
  126. package/dist/src/profile-registry.js.map +0 -1
  127. package/dist/src/profile-resolver.d.ts +0 -19
  128. package/dist/src/profile-resolver.d.ts.map +0 -1
  129. package/dist/src/profile-resolver.js +0 -167
  130. package/dist/src/profile-resolver.js.map +0 -1
  131. package/dist/src/proxy-executor.d.ts +0 -86
  132. package/dist/src/proxy-executor.d.ts.map +0 -1
  133. package/dist/src/proxy-executor.js +0 -497
  134. package/dist/src/proxy-executor.js.map +0 -1
  135. package/dist/src/schema-validator.d.ts +0 -30
  136. package/dist/src/schema-validator.d.ts.map +0 -1
  137. package/dist/src/schema-validator.js +0 -128
  138. package/dist/src/schema-validator.js.map +0 -1
  139. package/dist/src/startup-profile.d.ts +0 -17
  140. package/dist/src/startup-profile.d.ts.map +0 -1
  141. package/dist/src/startup-profile.js +0 -30
  142. package/dist/src/startup-profile.js.map +0 -1
  143. package/dist/src/startup-validation.d.ts +0 -11
  144. package/dist/src/startup-validation.d.ts.map +0 -1
  145. package/dist/src/startup-validation.js +0 -21
  146. package/dist/src/startup-validation.js.map +0 -1
  147. package/dist/src/tool-filter.d.ts +0 -65
  148. package/dist/src/tool-filter.d.ts.map +0 -1
  149. package/dist/src/tool-filter.js +0 -471
  150. package/dist/src/tool-filter.js.map +0 -1
  151. package/dist/src/tool-generator.d.ts +0 -67
  152. package/dist/src/tool-generator.d.ts.map +0 -1
  153. package/dist/src/tool-generator.js +0 -182
  154. package/dist/src/tool-generator.js.map +0 -1
  155. package/dist/src/validation-utils.d.ts +0 -49
  156. package/dist/src/validation-utils.d.ts.map +0 -1
  157. package/dist/src/validation-utils.js +0 -138
  158. package/dist/src/validation-utils.js.map +0 -1
  159. package/profiles/gitlab/developer-profile.json +0 -1508
  160. package/profiles/gitlab/developer-profile.test.json +0 -3432
@@ -0,0 +1,928 @@
1
+ {
2
+ "$schema": "../../profile-schema.json",
3
+ "profile_name": "gitlab-optimized-oauth",
4
+ "profile_id": "gitlab-optimized",
5
+ "profile_aliases": ["gitlab-optimized-oauth"],
6
+ "openapi_spec_path": "./openapi.yaml",
7
+ "description": "Minimal CRUD-style tool set grouped by read/write actions. Special operations like GLQL are separate.",
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": "retrieve_content",
30
+ "description": "Read-only access to GitLab content (projects, issues, merge requests, snippets, repository, members, labels, milestones, pipelines, hooks, variables). Actions: 'list_projects', 'get_project', 'list_project_members', 'list_project_hooks', 'get_project_hook', 'list_project_variables', 'get_project_variable', 'list_issues', 'list_issues_global', 'get_issue', 'list_issue_notes', 'get_issue_note', 'list_issue_discussions', 'get_issue_discussion', 'list_issue_note_award_emoji', 'get_issue_note_award_emoji', 'list_merge_requests', 'get_merge_request', 'list_merge_request_notes', 'get_merge_request_note', 'list_merge_request_commits', 'list_merge_request_diffs', 'list_merge_request_raw_diffs', 'list_merge_request_pipelines', 'list_snippets', 'get_snippet', 'download_snippet', 'get_file', 'download_file', 'list_repository_tree', 'compare_refs', 'get_commit', 'list_pipelines', 'list_pipeline_jobs', 'get_job', 'download_job_artifacts', 'download_job_artifact', 'list_project_labels', 'list_group_labels', 'list_project_milestones', 'list_group_milestones'.",
31
+ "metadata_params": ["action", "project_id", "issue_iid", "merge_request_iid", "note_id", "snippet_id", "file_path", "pipeline_id", "job_id", "hook_id", "key"],
32
+ "operations": {
33
+ "list_projects": "getApiV4Projects",
34
+ "get_project": "getApiV4ProjectsId",
35
+ "list_project_members": "getApiV4ProjectsIdMembers",
36
+ "list_project_hooks": "getApiV4ProjectsIdHooks",
37
+ "get_project_hook": "getApiV4ProjectsIdHooksHookId",
38
+ "list_project_variables": "getApiV4ProjectsIdVariables",
39
+ "get_project_variable": "getApiV4ProjectsIdVariablesKey",
40
+ "list_issues": "getApiV4ProjectsIdIssues",
41
+ "list_issues_global": "getApiV4Issues",
42
+ "get_issue": "getApiV4ProjectsIdIssuesIssueIid",
43
+ "list_issue_notes": "getApiV4ProjectsIdIssuesIssueIidNotes",
44
+ "get_issue_note": "getApiV4ProjectsIdIssuesIssueIidNotesNoteId",
45
+ "list_issue_discussions": "getApiV4ProjectsIdIssuesIssueIidDiscussions",
46
+ "get_issue_discussion": "getApiV4ProjectsIdIssuesIssueIidDiscussionsDiscussionId",
47
+ "list_issue_note_award_emoji": "getApiV4ProjectsIdIssuesIssueIidNotesNoteIdAwardEmoji",
48
+ "get_issue_note_award_emoji": "getApiV4ProjectsIdIssuesIssueIidNotesNoteIdAwardEmojiAwardId",
49
+ "list_merge_requests": "getApiV4ProjectsIdMergeRequests",
50
+ "get_merge_request": "getApiV4ProjectsIdMergeRequestsMergeRequestIid",
51
+ "list_merge_request_notes": "getApiV4ProjectsIdMergeRequestsMergeRequestIidNotes",
52
+ "get_merge_request_note": "getApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteId",
53
+ "list_merge_request_commits": "getApiV4ProjectsIdMergeRequestsMergeRequestIidCommits",
54
+ "list_merge_request_diffs": "getApiV4ProjectsIdMergeRequestsMergeRequestIidDiffs",
55
+ "list_merge_request_raw_diffs": "getApiV4ProjectsIdMergeRequestsMergeRequestIidRawDiffs",
56
+ "list_merge_request_pipelines": "getApiV4ProjectsIdMergeRequestsMergeRequestIidPipelines",
57
+ "list_snippets": "getApiV4ProjectsIdSnippets",
58
+ "get_snippet": "getApiV4ProjectsIdSnippetsSnippetId",
59
+ "download_snippet": {
60
+ "type": "proxy_download",
61
+ "metadata_endpoint": "getApiV4ProjectsIdSnippetsSnippetId",
62
+ "download_endpoint": "getApiV4ProjectsIdSnippetsSnippetIdRaw"
63
+ },
64
+ "get_file": "getApiV4ProjectsIdRepositoryFilesFilePath",
65
+ "download_file": "getApiV4ProjectsIdRepositoryFilesFilePathRaw",
66
+ "list_repository_tree": "getApiV4ProjectsIdRepositoryTree",
67
+ "compare_refs": "getApiV4ProjectsIdRepositoryCompare",
68
+ "get_commit": "getApiV4ProjectsIdRepositoryCommitsSha",
69
+ "list_pipelines": "getApiV4ProjectsIdPipelines",
70
+ "list_pipeline_jobs": "getApiV4ProjectsIdPipelinesPipelineIdJobs",
71
+ "get_job": "getSingleJob",
72
+ "download_job_artifacts": {
73
+ "type": "proxy_download",
74
+ "metadata_endpoint": "getSingleJob",
75
+ "download_endpoint": "getApiV4ProjectsIdJobsJobIdArtifacts"
76
+ },
77
+ "download_job_artifact": {
78
+ "type": "proxy_download",
79
+ "metadata_endpoint": "getSingleJob",
80
+ "download_endpoint": "getApiV4ProjectsIdJobsJobIdArtifactsArtifactPath"
81
+ },
82
+ "list_project_labels": "getApiV4ProjectsIdLabels",
83
+ "list_group_labels": "getApiV4GroupsIdLabels",
84
+ "list_project_milestones": "getApiV4ProjectsIdMilestones",
85
+ "list_group_milestones": "getApiV4GroupsIdMilestones"
86
+ },
87
+ "response_fields": {
88
+ "list_projects": ["id", "name", "path", "path_with_namespace", "description", "visibility", "web_url", "last_activity_at", "star_count", "forks_count", "avatar_url", "namespace"],
89
+ "list_project_members": ["id", "name", "username", "access_level"],
90
+ "list_project_hooks": ["id", "url", "push_events", "issues_events", "merge_requests_events"],
91
+ "get_project_hook": ["id", "url", "push_events", "issues_events", "merge_requests_events"],
92
+ "list_project_variables": ["key", "value", "protected", "masked", "environment_scope"],
93
+ "get_project_variable": ["key", "value", "protected", "masked", "environment_scope"],
94
+ "list_issues": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at", "updated_at"],
95
+ "list_issues_global": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at", "updated_at"],
96
+ "get_issue": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at", "updated_at"],
97
+ "list_issue_notes": ["id", "body", "author", "created_at", "updated_at", "system", "confidential"],
98
+ "get_issue_note": ["id", "body", "author", "created_at", "updated_at", "system", "confidential", "attachment"],
99
+ "list_issue_discussions": ["id", "notes", "resolved"],
100
+ "get_issue_discussion": ["id", "notes", "resolved"],
101
+ "list_issue_note_award_emoji": ["id", "name", "user", "created_at"],
102
+ "get_issue_note_award_emoji": ["id", "name", "user", "created_at"],
103
+ "list_merge_requests": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at", "updated_at"],
104
+ "get_merge_request": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at", "updated_at"],
105
+ "list_merge_request_notes": ["id", "body", "author", "created_at", "updated_at", "system", "confidential"],
106
+ "get_merge_request_note": ["id", "body", "author", "created_at", "updated_at", "system", "confidential", "attachment"],
107
+ "list_merge_request_commits": ["id", "short_id", "title", "message", "author_name", "authored_date", "committed_date"],
108
+ "list_merge_request_diffs": ["old_path", "new_path", "new_file", "renamed_file", "deleted_file", "diff"],
109
+ "list_merge_request_pipelines": ["id", "status", "ref", "sha", "web_url"],
110
+ "list_snippets": ["id", "title", "file_name", "visibility"],
111
+ "get_snippet": ["id", "title", "file_name", "description", "visibility"],
112
+ "get_file": ["file_name", "file_path", "size", "encoding", "content", "ref", "blob_id", "commit_id", "last_commit_id"],
113
+ "list_pipelines": ["id", "status", "ref", "web_url"],
114
+ "list_pipeline_jobs": ["id", "status", "stage", "name", "ref", "web_url"],
115
+ "get_job": ["id", "status", "stage", "name", "ref", "web_url"],
116
+ "list_project_labels": ["id", "name", "color", "description"],
117
+ "list_group_labels": ["id", "name", "color", "description"],
118
+ "list_project_milestones": ["id", "iid", "title", "state"],
119
+ "list_group_milestones": ["id", "iid", "title", "state"]
120
+ },
121
+ "parameters": {
122
+ "action": {
123
+ "type": "string",
124
+ "enum": ["list_projects", "get_project", "list_project_members", "list_project_hooks", "get_project_hook", "list_project_variables", "get_project_variable", "list_issues", "list_issues_global", "get_issue", "list_issue_notes", "get_issue_note", "list_issue_discussions", "get_issue_discussion", "list_issue_note_award_emoji", "get_issue_note_award_emoji", "list_merge_requests", "get_merge_request", "list_merge_request_notes", "get_merge_request_note", "list_merge_request_commits", "list_merge_request_diffs", "list_merge_request_raw_diffs", "list_merge_request_pipelines", "list_snippets", "get_snippet", "download_snippet", "get_file", "download_file", "list_repository_tree", "compare_refs", "get_commit", "list_pipelines", "list_pipeline_jobs", "get_job", "download_job_artifacts", "download_job_artifact", "list_project_labels", "list_group_labels", "list_project_milestones", "list_group_milestones"],
125
+ "description": "Action to perform",
126
+ "required": true
127
+ },
128
+ "owned": {
129
+ "type": "boolean",
130
+ "description": "Limit by projects explicitly owned by the current user",
131
+ "required_for": ["list_projects"]
132
+ },
133
+ "membership": {
134
+ "type": "boolean",
135
+ "description": "Limit by projects that the current user is a member of",
136
+ "required_for": ["list_projects"]
137
+ },
138
+ "project_id": {
139
+ "type": "string",
140
+ "description": "Project ID. Use numeric ID (e.g. '123') or URL-encoded path (e.g. 'group%2Fproject').",
141
+ "required_for": ["get_project", "list_project_members", "list_project_hooks", "get_project_hook", "list_project_variables", "get_project_variable", "list_issues", "get_issue", "list_issue_notes", "get_issue_note", "list_issue_discussions", "get_issue_discussion", "list_issue_note_award_emoji", "get_issue_note_award_emoji", "list_merge_requests", "get_merge_request", "list_merge_request_notes", "get_merge_request_note", "list_merge_request_commits", "list_merge_request_diffs", "list_merge_request_raw_diffs", "list_merge_request_pipelines", "list_snippets", "get_snippet", "download_snippet", "get_file", "download_file", "list_repository_tree", "compare_refs", "get_commit", "list_pipelines", "list_pipeline_jobs", "get_job", "download_job_artifacts", "download_job_artifact", "list_project_labels", "list_project_milestones"],
142
+ "example": "123"
143
+ },
144
+ "issue_iid": {
145
+ "type": "integer",
146
+ "description": "The internal ID of the issue",
147
+ "required_for": ["get_issue", "list_issue_notes", "get_issue_note", "list_issue_discussions", "get_issue_discussion", "list_issue_note_award_emoji", "get_issue_note_award_emoji"]
148
+ },
149
+ "merge_request_iid": {
150
+ "type": "integer",
151
+ "description": "The internal ID of the merge request",
152
+ "required_for": ["get_merge_request", "list_merge_request_notes", "get_merge_request_note", "list_merge_request_commits", "list_merge_request_diffs", "list_merge_request_raw_diffs", "list_merge_request_pipelines"]
153
+ },
154
+ "note_id": {
155
+ "type": "integer",
156
+ "description": "The ID of the note",
157
+ "required_for": ["get_issue_note", "get_merge_request_note", "list_issue_note_award_emoji", "get_issue_note_award_emoji"]
158
+ },
159
+ "discussion_id": {
160
+ "type": "string",
161
+ "description": "The ID of the discussion",
162
+ "required_for": ["get_issue_discussion"]
163
+ },
164
+ "award_id": {
165
+ "type": "integer",
166
+ "description": "The ID of the award emoji",
167
+ "required_for": ["get_issue_note_award_emoji"]
168
+ },
169
+ "hook_id": {
170
+ "type": "integer",
171
+ "description": "The ID of the project hook",
172
+ "required_for": ["get_project_hook"]
173
+ },
174
+ "key": {
175
+ "type": "string",
176
+ "description": "Project variable key",
177
+ "required_for": ["get_project_variable"]
178
+ },
179
+ "group_id": {
180
+ "type": "string",
181
+ "description": "Group ID",
182
+ "required_for": ["list_group_labels", "list_group_milestones"]
183
+ },
184
+ "snippet_id": {
185
+ "type": "integer",
186
+ "description": "Snippet ID",
187
+ "required_for": ["get_snippet", "download_snippet"]
188
+ },
189
+ "file_path": {
190
+ "type": "string",
191
+ "description": "URL-encoded full path to the file, e.g., 'src%2Findex.js'. Use %2F instead of '/'.",
192
+ "required_for": ["get_file", "download_file"]
193
+ },
194
+ "ref": {
195
+ "type": "string",
196
+ "description": "Branch name, tag, or commit SHA to read from",
197
+ "required_for": ["get_file", "download_file"],
198
+ "example": "main"
199
+ },
200
+ "path": {
201
+ "type": "string",
202
+ "description": "Directory path within repository (for list_repository_tree)"
203
+ },
204
+ "from": {
205
+ "type": "string",
206
+ "description": "Source ref (for compare_refs)",
207
+ "required_for": ["compare_refs"]
208
+ },
209
+ "to": {
210
+ "type": "string",
211
+ "description": "Target ref (for compare_refs)",
212
+ "required_for": ["compare_refs"]
213
+ },
214
+ "sha": {
215
+ "type": "string",
216
+ "description": "Commit SHA (for get_commit)",
217
+ "required_for": ["get_commit"]
218
+ },
219
+ "pipeline_id": {
220
+ "type": "integer",
221
+ "description": "Pipeline ID (for list_pipeline_jobs)",
222
+ "required_for": ["list_pipeline_jobs"]
223
+ },
224
+ "job_id": {
225
+ "type": "integer",
226
+ "description": "Job ID (for get_job or artifact download)",
227
+ "required_for": ["get_job", "download_job_artifacts", "download_job_artifact"]
228
+ },
229
+ "artifact_path": {
230
+ "type": "string",
231
+ "description": "Path to a file inside the job artifacts archive",
232
+ "required_for": ["download_job_artifact"]
233
+ },
234
+ "state": {
235
+ "type": "string",
236
+ "enum": ["opened", "closed", "merged", "locked", "all"],
237
+ "description": "Filter by issue or merge request state",
238
+ "default": "opened",
239
+ "required_for": ["list_issues", "list_issues_global", "list_merge_requests"]
240
+ },
241
+ "scope": {
242
+ "type": "string",
243
+ "enum": ["created_by_me", "assigned_to_me", "reviews_for_me", "all"],
244
+ "description": "Filter by scope (issues or merge requests)",
245
+ "required_for": ["list_issues", "list_issues_global", "list_merge_requests"]
246
+ },
247
+ "search": {
248
+ "type": "string",
249
+ "description": "Search projects, issues, or merge requests by title or description",
250
+ "required_for": ["list_projects", "list_issues", "list_issues_global", "list_merge_requests"]
251
+ },
252
+ "in": {
253
+ "type": "string",
254
+ "description": "Search scope for issues or merge requests (title, description, or title,description)",
255
+ "required_for": ["list_issues", "list_issues_global", "list_merge_requests"]
256
+ },
257
+ "labels": {
258
+ "type": "string",
259
+ "description": "Filter by labels (comma-separated)",
260
+ "required_for": ["list_issues", "list_issues_global", "list_merge_requests"]
261
+ },
262
+ "milestone": {
263
+ "type": "string",
264
+ "description": "Filter by milestone title",
265
+ "required_for": ["list_issues", "list_issues_global", "list_merge_requests"]
266
+ },
267
+ "milestone_id": {
268
+ "type": "string",
269
+ "description": "Filter by milestone ID or special values like None/Any (issues)",
270
+ "required_for": ["list_issues", "list_issues_global"]
271
+ },
272
+ "assignee_id": {
273
+ "type": "integer",
274
+ "description": "Filter by assignee ID",
275
+ "required_for": ["list_issues", "list_issues_global", "list_merge_requests"]
276
+ },
277
+ "assignee_username": {
278
+ "type": "string",
279
+ "description": "Filter by assignee username (single or comma-separated)",
280
+ "required_for": ["list_merge_requests"]
281
+ },
282
+ "author_id": {
283
+ "type": "integer",
284
+ "description": "Filter by author ID",
285
+ "required_for": ["list_issues", "list_issues_global", "list_merge_requests"]
286
+ },
287
+ "author_username": {
288
+ "type": "string",
289
+ "description": "Filter by author username",
290
+ "required_for": ["list_merge_requests"]
291
+ },
292
+ "reviewer_id": {
293
+ "type": "integer",
294
+ "description": "Filter by reviewer ID (merge requests)",
295
+ "required_for": ["list_merge_requests"]
296
+ },
297
+ "reviewer_username": {
298
+ "type": "string",
299
+ "description": "Filter by reviewer username (merge requests)",
300
+ "required_for": ["list_merge_requests"]
301
+ },
302
+ "source_branch": {
303
+ "type": "string",
304
+ "description": "Filter by source branch (merge requests)",
305
+ "required_for": ["list_merge_requests"]
306
+ },
307
+ "target_branch": {
308
+ "type": "string",
309
+ "description": "Filter by target branch (merge requests)",
310
+ "required_for": ["list_merge_requests"]
311
+ },
312
+ "wip": {
313
+ "type": "string",
314
+ "description": "Filter draft merge requests (yes or no)",
315
+ "required_for": ["list_merge_requests"]
316
+ },
317
+ "view": {
318
+ "type": "string",
319
+ "description": "Return simplified merge request fields (simple)",
320
+ "required_for": ["list_merge_requests"]
321
+ },
322
+ "confidential": {
323
+ "type": "boolean",
324
+ "description": "Filter confidential issues",
325
+ "required_for": ["list_issues", "list_issues_global"]
326
+ },
327
+ "my_reaction_emoji": {
328
+ "type": "string",
329
+ "description": "Filter by your reaction emoji",
330
+ "required_for": ["list_issues", "list_issues_global", "list_merge_requests"]
331
+ },
332
+ "non_archived": {
333
+ "type": "boolean",
334
+ "description": "Return items only from non-archived projects",
335
+ "required_for": ["list_issues", "list_issues_global", "list_merge_requests"]
336
+ },
337
+ "order_by": {
338
+ "type": "string",
339
+ "description": "Order results by supported fields",
340
+ "required_for": ["list_projects", "list_merge_requests", "list_issue_notes", "list_merge_request_notes"]
341
+ },
342
+ "sort": {
343
+ "type": "string",
344
+ "description": "Sort results in asc or desc order",
345
+ "required_for": ["list_issues", "list_issues_global", "list_merge_requests", "list_issue_notes", "list_merge_request_notes"]
346
+ },
347
+ "updated_after": {
348
+ "type": "string",
349
+ "description": "Return items updated on or after the given time (ISO 8601)",
350
+ "required_for": ["list_issues", "list_issues_global", "list_merge_requests"]
351
+ },
352
+ "updated_before": {
353
+ "type": "string",
354
+ "description": "Return items updated on or before the given time (ISO 8601)",
355
+ "required_for": ["list_issues", "list_issues_global", "list_merge_requests"]
356
+ },
357
+ "with_labels_details": {
358
+ "type": "boolean",
359
+ "description": "Include extra label details in list responses",
360
+ "required_for": ["list_merge_requests"]
361
+ },
362
+ "activity_filter": {
363
+ "type": "string",
364
+ "description": "Filter issue notes by activity type (all_notes, only_comments, only_activity)",
365
+ "required_for": ["list_issue_notes"]
366
+ },
367
+ "page": {
368
+ "type": "integer",
369
+ "description": "Page number for pagination",
370
+ "default": 1
371
+ },
372
+ "per_page": {
373
+ "type": "integer",
374
+ "description": "Items per page (recommended max 100)",
375
+ "default": 50
376
+ },
377
+ "archived": {
378
+ "type": "boolean",
379
+ "description": "Limit by archived status",
380
+ "required_for": ["list_projects"]
381
+ },
382
+ "id_after": {
383
+ "type": "integer",
384
+ "description": "Limit results to projects with IDs greater than the specified ID",
385
+ "required_for": ["list_projects"]
386
+ },
387
+ "id_before": {
388
+ "type": "integer",
389
+ "description": "Limit results to projects with IDs less than the specified ID",
390
+ "required_for": ["list_projects"]
391
+ },
392
+ "min_access_level": {
393
+ "type": "integer",
394
+ "description": "Limit to projects with at least the specified access level",
395
+ "required_for": ["list_projects"]
396
+ },
397
+ "owned": {
398
+ "type": "boolean",
399
+ "description": "Limit to projects owned by current user",
400
+ "required_for": ["list_projects"]
401
+ },
402
+ "membership": {
403
+ "type": "boolean",
404
+ "description": "Limit to projects current user is a member of",
405
+ "required_for": ["list_projects"]
406
+ },
407
+ "simple": {
408
+ "type": "boolean",
409
+ "description": "Return only limited fields for each project",
410
+ "required_for": ["list_projects"]
411
+ }
412
+ }
413
+ },
414
+
415
+ {
416
+ "name": "create_content",
417
+ "description": "Create GitLab content. Actions: 'create_issue', 'create_merge_request', 'create_issue_note', 'create_merge_request_note', 'create_issue_discussion', 'reply_issue_discussion', 'create_issue_note_award_emoji', 'create_merge_request_pipeline', 'create_file', 'create_project_variable', 'create_project_hook'.",
418
+ "metadata_params": ["action", "project_id", "issue_iid", "merge_request_iid"],
419
+ "operations": {
420
+ "create_issue": "postApiV4ProjectsIdIssues",
421
+ "create_merge_request": "postApiV4ProjectsIdMergeRequests",
422
+ "create_issue_note": "postApiV4ProjectsIdIssuesIssueIidNotes",
423
+ "create_merge_request_note": "postApiV4ProjectsIdMergeRequestsMergeRequestIidNotes",
424
+ "create_issue_discussion": "postApiV4ProjectsIdIssuesIssueIidDiscussions",
425
+ "reply_issue_discussion": "postApiV4ProjectsIdIssuesIssueIidDiscussionsDiscussionIdNotes",
426
+ "create_issue_note_award_emoji": "postApiV4ProjectsIdIssuesIssueIidNotesNoteIdAwardEmoji",
427
+ "create_merge_request_pipeline": "postApiV4ProjectsIdMergeRequestsMergeRequestIidPipelines",
428
+ "create_file": "postApiV4ProjectsIdRepositoryFilesFilePath",
429
+ "create_project_variable": "postApiV4ProjectsIdVariables",
430
+ "create_project_hook": "postApiV4ProjectsIdHooks"
431
+ },
432
+ "response_fields": {
433
+ "create_issue": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at"],
434
+ "create_merge_request": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at"],
435
+ "create_issue_note": ["id", "body", "author", "created_at", "system", "confidential"],
436
+ "create_merge_request_note": ["id", "body", "author", "created_at", "system", "confidential"],
437
+ "create_issue_discussion": ["id", "notes", "resolved"],
438
+ "reply_issue_discussion": ["id", "notes", "resolved"],
439
+ "create_issue_note_award_emoji": ["id", "name", "user", "created_at"],
440
+ "create_merge_request_pipeline": ["id", "status", "ref", "sha", "web_url"],
441
+ "create_file": ["file_name", "file_path", "size", "encoding", "content", "ref", "blob_id", "commit_id", "last_commit_id"],
442
+ "create_project_variable": ["key", "value", "protected", "masked", "environment_scope"],
443
+ "create_project_hook": ["id", "url", "push_events", "issues_events", "merge_requests_events"]
444
+ },
445
+ "parameters": {
446
+ "action": {
447
+ "type": "string",
448
+ "enum": ["create_issue", "create_merge_request", "create_issue_note", "create_merge_request_note", "create_issue_discussion", "reply_issue_discussion", "create_issue_note_award_emoji", "create_merge_request_pipeline", "create_file", "create_project_variable", "create_project_hook"],
449
+ "description": "Action to perform",
450
+ "required": true
451
+ },
452
+ "project_id": {
453
+ "type": "string",
454
+ "description": "Project ID. Use numeric ID (e.g. '123') or URL-encoded path (e.g. 'group%2Fproject').",
455
+ "required": true,
456
+ "example": "123"
457
+ },
458
+ "issue_iid": {
459
+ "type": "integer",
460
+ "description": "The internal ID of the issue",
461
+ "required_for": ["create_issue_note", "create_issue_discussion", "reply_issue_discussion", "create_issue_note_award_emoji"]
462
+ },
463
+ "merge_request_iid": {
464
+ "type": "integer",
465
+ "description": "The internal ID of the merge request",
466
+ "required_for": ["create_merge_request_note", "create_merge_request_pipeline"]
467
+ },
468
+ "discussion_id": {
469
+ "type": "string",
470
+ "description": "The ID of the discussion",
471
+ "required_for": ["reply_issue_discussion"]
472
+ },
473
+ "note_id": {
474
+ "type": "integer",
475
+ "description": "The ID of the note",
476
+ "required_for": ["create_issue_note_award_emoji"]
477
+ },
478
+ "name": {
479
+ "type": "string",
480
+ "description": "Emoji name (for award emoji actions)",
481
+ "required_for": ["create_issue_note_award_emoji"]
482
+ },
483
+ "title": {
484
+ "type": "string",
485
+ "description": "Title",
486
+ "required_for": ["create_issue", "create_merge_request"],
487
+ "example": "Implement new feature"
488
+ },
489
+ "description": {
490
+ "type": "string",
491
+ "description": "Description",
492
+ "example": "This implements the new feature requested by the team."
493
+ },
494
+ "source_branch": {
495
+ "type": "string",
496
+ "description": "Source branch (required for create_merge_request)",
497
+ "required_for": ["create_merge_request"],
498
+ "example": "feature/new-feature"
499
+ },
500
+ "target_branch": {
501
+ "type": "string",
502
+ "description": "Target branch (required for create_merge_request)",
503
+ "required_for": ["create_merge_request"],
504
+ "example": "main"
505
+ },
506
+ "body": {
507
+ "type": "string",
508
+ "description": "Note body",
509
+ "required_for": ["create_issue_note", "create_merge_request_note", "create_issue_discussion", "reply_issue_discussion"],
510
+ "example": "Looks good to me."
511
+ },
512
+ "assignee_id": {
513
+ "type": "integer",
514
+ "description": "The ID of the user to assign the issue to (optional for create_issue)",
515
+ "example": 123
516
+ },
517
+ "assignee_ids": {
518
+ "type": "array",
519
+ "items": { "type": "integer" },
520
+ "description": "The IDs of the users to assign the issue to (optional for create_issue)",
521
+ "example": [123, 456]
522
+ },
523
+ "labels": {
524
+ "type": "string",
525
+ "description": "Labels to be added (comma-separated)",
526
+ "example": "bug,feature,frontend"
527
+ },
528
+ "reviewer_ids": {
529
+ "type": "array",
530
+ "items": { "type": "integer" },
531
+ "description": "The IDs of the users to review the merge request (optional for create_merge_request)"
532
+ },
533
+ "file_path": {
534
+ "type": "string",
535
+ "description": "URL-encoded full path to the file, e.g., 'src%2Findex.js'. Use %2F instead of '/'.",
536
+ "required_for": ["create_file"]
537
+ },
538
+ "branch": {
539
+ "type": "string",
540
+ "description": "Branch name for file operations",
541
+ "required_for": ["create_file"]
542
+ },
543
+ "content": {
544
+ "type": "string",
545
+ "description": "File content",
546
+ "required_for": ["create_file"]
547
+ },
548
+ "commit_message": {
549
+ "type": "string",
550
+ "description": "Commit message",
551
+ "required_for": ["create_file"]
552
+ },
553
+ "key": {
554
+ "type": "string",
555
+ "description": "Project variable key",
556
+ "required_for": ["create_project_variable"]
557
+ },
558
+ "value": {
559
+ "type": "string",
560
+ "description": "Project variable value",
561
+ "required_for": ["create_project_variable"]
562
+ },
563
+ "protected": {
564
+ "type": "boolean",
565
+ "description": "Whether the variable is protected"
566
+ },
567
+ "masked": {
568
+ "type": "boolean",
569
+ "description": "Whether the variable is masked"
570
+ },
571
+ "environment_scope": {
572
+ "type": "string",
573
+ "description": "Environment scope for the variable"
574
+ },
575
+ "url": {
576
+ "type": "string",
577
+ "description": "Hook URL",
578
+ "required_for": ["create_project_hook"]
579
+ },
580
+ "push_events": {
581
+ "type": "boolean",
582
+ "description": "Enable push events"
583
+ },
584
+ "issues_events": {
585
+ "type": "boolean",
586
+ "description": "Enable issues events"
587
+ },
588
+ "merge_requests_events": {
589
+ "type": "boolean",
590
+ "description": "Enable merge requests events"
591
+ }
592
+ }
593
+ },
594
+
595
+ {
596
+ "name": "update_content",
597
+ "description": "Update GitLab content. Actions: 'update_issue', 'update_merge_request', 'update_issue_note', 'update_merge_request_note', 'set_issue_discussion_resolved', 'update_file', 'retry_job', 'cancel_job', 'update_project_variable', 'update_project_hook'.",
598
+ "metadata_params": ["action", "project_id", "merge_request_iid", "issue_iid", "note_id", "job_id", "key", "hook_id"],
599
+ "operations": {
600
+ "update_issue": "putApiV4ProjectsIdIssuesIssueIid",
601
+ "update_merge_request": "putApiV4ProjectsIdMergeRequestsMergeRequestIid",
602
+ "update_issue_note": "putApiV4ProjectsIdIssuesIssueIidNotesNoteId",
603
+ "update_merge_request_note": "putApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteId",
604
+ "set_issue_discussion_resolved": "putApiV4ProjectsIdIssuesIssueIidDiscussionsDiscussionId",
605
+ "update_file": "putApiV4ProjectsIdRepositoryFilesFilePath",
606
+ "retry_job": "postApiV4ProjectsIdJobsJobIdRetry",
607
+ "cancel_job": "postApiV4ProjectsIdJobsJobIdCancel",
608
+ "update_project_variable": "putApiV4ProjectsIdVariablesKey",
609
+ "update_project_hook": "putApiV4ProjectsIdHooksHookId"
610
+ },
611
+ "response_fields": {
612
+ "update_issue": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at", "updated_at"],
613
+ "update_merge_request": ["id", "iid", "title", "description", "state", "web_url", "author", "created_at", "updated_at"],
614
+ "update_issue_note": ["id", "body", "author", "created_at", "updated_at", "system", "confidential"],
615
+ "update_merge_request_note": ["id", "body", "author", "created_at", "updated_at", "system", "confidential"],
616
+ "set_issue_discussion_resolved": ["id", "notes", "resolved"],
617
+ "update_file": ["file_name", "file_path", "size", "encoding", "content", "ref", "blob_id", "commit_id", "last_commit_id"],
618
+ "update_project_variable": ["key", "value", "protected", "masked", "environment_scope"],
619
+ "update_project_hook": ["id", "url", "push_events", "issues_events", "merge_requests_events"]
620
+ },
621
+ "parameters": {
622
+ "action": {
623
+ "type": "string",
624
+ "enum": ["update_issue", "update_merge_request", "update_issue_note", "update_merge_request_note", "set_issue_discussion_resolved", "update_file", "retry_job", "cancel_job", "update_project_variable", "update_project_hook"],
625
+ "description": "Action to perform",
626
+ "required": true
627
+ },
628
+ "project_id": {
629
+ "type": "string",
630
+ "description": "Project ID. Use numeric ID (e.g. '123') or URL-encoded path (e.g. 'group%2Fproject').",
631
+ "required": true,
632
+ "example": "123"
633
+ },
634
+ "merge_request_iid": {
635
+ "type": "integer",
636
+ "description": "The internal ID of the merge request",
637
+ "required_for": ["update_merge_request", "update_merge_request_note"]
638
+ },
639
+ "issue_iid": {
640
+ "type": "integer",
641
+ "description": "The internal ID of the issue",
642
+ "required_for": ["update_issue", "update_issue_note", "set_issue_discussion_resolved"]
643
+ },
644
+ "note_id": {
645
+ "type": "integer",
646
+ "description": "The ID of the note",
647
+ "required_for": ["update_issue_note", "update_merge_request_note"]
648
+ },
649
+ "discussion_id": {
650
+ "type": "string",
651
+ "description": "The ID of the discussion",
652
+ "required_for": ["set_issue_discussion_resolved"]
653
+ },
654
+ "job_id": {
655
+ "type": "integer",
656
+ "description": "Job ID (for retry or cancel)",
657
+ "required_for": ["retry_job", "cancel_job"]
658
+ },
659
+ "key": {
660
+ "type": "string",
661
+ "description": "Project variable key",
662
+ "required_for": ["update_project_variable"]
663
+ },
664
+ "hook_id": {
665
+ "type": "integer",
666
+ "description": "Hook ID",
667
+ "required_for": ["update_project_hook"]
668
+ },
669
+ "title": {
670
+ "type": "string",
671
+ "description": "Title",
672
+ "example": "Update title"
673
+ },
674
+ "description": {
675
+ "type": "string",
676
+ "description": "Description"
677
+ },
678
+ "state_event": {
679
+ "type": "string",
680
+ "enum": ["reopen", "close"],
681
+ "description": "State event (update_issue or update_merge_request)"
682
+ },
683
+ "assignee_id": {
684
+ "type": "integer",
685
+ "description": "The ID of the user to assign the merge request to (optional for update_merge_request)"
686
+ },
687
+ "assignee_ids": {
688
+ "type": "array",
689
+ "items": { "type": "integer" },
690
+ "description": "The IDs of the users to assign the merge request to (optional for update_merge_request)"
691
+ },
692
+ "reviewer_ids": {
693
+ "type": "array",
694
+ "items": { "type": "integer" },
695
+ "description": "The IDs of the users to review the merge request (optional for update_merge_request)"
696
+ },
697
+ "body": {
698
+ "type": "string",
699
+ "description": "Note body",
700
+ "required_for": ["update_issue_note", "update_merge_request_note"],
701
+ "example": "Updating the comment."
702
+ },
703
+ "resolved": {
704
+ "type": "boolean",
705
+ "description": "Resolve or unresolve discussion",
706
+ "required_for": ["set_issue_discussion_resolved"]
707
+ },
708
+ "file_path": {
709
+ "type": "string",
710
+ "description": "URL-encoded full path to the file, e.g., 'src%2Findex.js'. Use %2F instead of '/'.",
711
+ "required_for": ["update_file"]
712
+ },
713
+ "branch": {
714
+ "type": "string",
715
+ "description": "Branch name for file operations",
716
+ "required_for": ["update_file"]
717
+ },
718
+ "content": {
719
+ "type": "string",
720
+ "description": "File content",
721
+ "required_for": ["update_file"]
722
+ },
723
+ "commit_message": {
724
+ "type": "string",
725
+ "description": "Commit message",
726
+ "required_for": ["update_file"]
727
+ },
728
+ "value": {
729
+ "type": "string",
730
+ "description": "Project variable value",
731
+ "required_for": ["update_project_variable"]
732
+ },
733
+ "protected": {
734
+ "type": "boolean",
735
+ "description": "Whether the variable is protected"
736
+ },
737
+ "masked": {
738
+ "type": "boolean",
739
+ "description": "Whether the variable is masked"
740
+ },
741
+ "environment_scope": {
742
+ "type": "string",
743
+ "description": "Environment scope for the variable"
744
+ },
745
+ "url": {
746
+ "type": "string",
747
+ "description": "Hook URL",
748
+ "required_for": ["update_project_hook"]
749
+ },
750
+ "push_events": {
751
+ "type": "boolean",
752
+ "description": "Enable push events"
753
+ },
754
+ "issues_events": {
755
+ "type": "boolean",
756
+ "description": "Enable issues events"
757
+ },
758
+ "merge_requests_events": {
759
+ "type": "boolean",
760
+ "description": "Enable merge requests events"
761
+ }
762
+ }
763
+ },
764
+
765
+ {
766
+ "name": "delete_content",
767
+ "description": "Delete GitLab content. Actions: 'delete_issue', 'delete_merge_request', 'delete_issue_note', 'delete_merge_request_note', 'delete_issue_discussion', 'delete_issue_note_award_emoji', 'delete_file', 'delete_project_variable', 'delete_project_hook'.",
768
+ "metadata_params": ["action", "project_id", "issue_iid", "merge_request_iid", "note_id", "discussion_id", "award_id", "file_path", "key", "hook_id"],
769
+ "operations": {
770
+ "delete_issue": "deleteApiV4ProjectsIdIssuesIssueIid",
771
+ "delete_merge_request": "deleteApiV4ProjectsIdMergeRequestsMergeRequestIid",
772
+ "delete_issue_note": "deleteApiV4ProjectsIdIssuesIssueIidNotesNoteId",
773
+ "delete_merge_request_note": "deleteApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteId",
774
+ "delete_issue_discussion": "deleteApiV4ProjectsIdIssuesIssueIidDiscussionsDiscussionId",
775
+ "delete_issue_note_award_emoji": "deleteApiV4ProjectsIdIssuesIssueIidNotesNoteIdAwardEmojiAwardId",
776
+ "delete_file": "deleteApiV4ProjectsIdRepositoryFilesFilePath",
777
+ "delete_project_variable": "deleteApiV4ProjectsIdVariablesKey",
778
+ "delete_project_hook": "deleteApiV4ProjectsIdHooksHookId"
779
+ },
780
+ "parameters": {
781
+ "action": {
782
+ "type": "string",
783
+ "enum": ["delete_issue", "delete_merge_request", "delete_issue_note", "delete_merge_request_note", "delete_issue_discussion", "delete_issue_note_award_emoji", "delete_file", "delete_project_variable", "delete_project_hook"],
784
+ "description": "Action to perform",
785
+ "required": true
786
+ },
787
+ "project_id": {
788
+ "type": "string",
789
+ "description": "Project ID. Use numeric ID (e.g. '123') or URL-encoded path (e.g. 'group%2Fproject').",
790
+ "required": true,
791
+ "example": "123"
792
+ },
793
+ "issue_iid": {
794
+ "type": "integer",
795
+ "description": "The internal ID of the issue",
796
+ "required_for": ["delete_issue", "delete_issue_note"]
797
+ },
798
+ "merge_request_iid": {
799
+ "type": "integer",
800
+ "description": "The internal ID of the merge request",
801
+ "required_for": ["delete_merge_request", "delete_merge_request_note"]
802
+ },
803
+ "note_id": {
804
+ "type": "integer",
805
+ "description": "The ID of the note",
806
+ "required_for": ["delete_issue_note", "delete_merge_request_note", "delete_issue_note_award_emoji"]
807
+ },
808
+ "discussion_id": {
809
+ "type": "string",
810
+ "description": "The ID of the discussion",
811
+ "required_for": ["delete_issue_discussion"]
812
+ },
813
+ "award_id": {
814
+ "type": "integer",
815
+ "description": "The ID of the award emoji",
816
+ "required_for": ["delete_issue_note_award_emoji"]
817
+ },
818
+ "file_path": {
819
+ "type": "string",
820
+ "description": "URL-encoded full path to the file, e.g., 'src%2Findex.js'. Use %2F instead of '/'.",
821
+ "required_for": ["delete_file"]
822
+ },
823
+ "branch": {
824
+ "type": "string",
825
+ "description": "Branch name for file operations",
826
+ "required_for": ["delete_file"]
827
+ },
828
+ "commit_message": {
829
+ "type": "string",
830
+ "description": "Commit message",
831
+ "required_for": ["delete_file"]
832
+ },
833
+ "key": {
834
+ "type": "string",
835
+ "description": "Project variable key",
836
+ "required_for": ["delete_project_variable"]
837
+ },
838
+ "hook_id": {
839
+ "type": "integer",
840
+ "description": "Hook ID",
841
+ "required_for": ["delete_project_hook"]
842
+ }
843
+ }
844
+ },
845
+
846
+ {
847
+ "name": "run_glql",
848
+ "description": "Execute a GLQL query. Actions: 'query'.",
849
+ "metadata_params": ["action"],
850
+ "operations": {
851
+ "query": "postApiV4Glql"
852
+ },
853
+ "parameters": {
854
+ "action": {
855
+ "type": "string",
856
+ "enum": ["query"],
857
+ "description": "Action to perform",
858
+ "required": true
859
+ },
860
+ "glql_yaml": {
861
+ "type": "string",
862
+ "description": "GLQL YAML payload. Example:\nfields: id,title,author\ngroup: my-group\nlimit: 10\nsort: created desc\nquery: state = opened\nDocs: https://docs.gitlab.com/api/glql/",
863
+ "required_for": ["query"],
864
+ "example": "fields: id,title,author\ngroup: my-group\nlimit: 10\nsort: created desc\nquery: state = opened"
865
+ }
866
+ }
867
+ }
868
+ ],
869
+
870
+ "interceptors": {
871
+ "array_format": "brackets",
872
+ "auth": [
873
+ {
874
+ "type": "oauth",
875
+ "priority": 0,
876
+ "validation_endpoint": "user",
877
+ "oauth_config": {
878
+ "issuer": "${env:GITLAB_OAUTH_ISSUER}",
879
+ "client_id": "${env:GITLAB_OAUTH_CLIENT_ID}",
880
+ "client_secret": "${env:GITLAB_OAUTH_CLIENT_SECRET}",
881
+ "scopes": ["api", "read_repository"],
882
+ "redirect_uri": "${env:GITLAB_OAUTH_REDIRECT_URI}"
883
+ }
884
+ },
885
+ {
886
+ "type": "bearer",
887
+ "priority": 1,
888
+ "value_from_env": "GITLAB_TOKEN",
889
+ "validation_endpoint": "personal_access_tokens/self"
890
+ }
891
+ ],
892
+ "base_url": {
893
+ "value_from_env": "GITLAB_API_BASE_URL",
894
+ "default": "https://gitlab.com/api/v4"
895
+ },
896
+ "rate_limit": {
897
+ "max_requests_per_minute": 600,
898
+ "overrides": {
899
+ "postApiV4ProjectsIdIssues": {
900
+ "max_requests_per_minute": 10
901
+ },
902
+ "deleteApiV4ProjectsIdIssuesIssueIid": {
903
+ "max_requests_per_minute": 5
904
+ },
905
+ "postApiV4ProjectsIdMergeRequests": {
906
+ "max_requests_per_minute": 10
907
+ },
908
+ "deleteApiV4ProjectsIdMergeRequestsMergeRequestIid": {
909
+ "max_requests_per_minute": 5
910
+ },
911
+ "postApiV4ProjectsIdMergeRequestsMergeRequestIidNotes": {
912
+ "max_requests_per_minute": 30
913
+ },
914
+ "putApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteId": {
915
+ "max_requests_per_minute": 30
916
+ },
917
+ "deleteApiV4ProjectsIdMergeRequestsMergeRequestIidNotesNoteId": {
918
+ "max_requests_per_minute": 10
919
+ }
920
+ }
921
+ },
922
+ "retry": {
923
+ "max_attempts": 3,
924
+ "backoff_ms": [1000, 2000, 4000],
925
+ "retry_on_status": [429, 500, 502, 503, 504]
926
+ }
927
+ }
928
+ }