@ekho/gitlab-mcp 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/LICENSE +21 -0
  2. package/PLAN.md +517 -0
  3. package/README.md +429 -0
  4. package/dist/config.d.ts +35 -0
  5. package/dist/config.js +59 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/groups/access_tokens/tools.d.ts +3 -0
  8. package/dist/groups/access_tokens/tools.js +198 -0
  9. package/dist/groups/access_tokens/tools.js.map +1 -0
  10. package/dist/groups/admin/tools.d.ts +3 -0
  11. package/dist/groups/admin/tools.js +136 -0
  12. package/dist/groups/admin/tools.js.map +1 -0
  13. package/dist/groups/ai_catalog/queries.d.ts +3 -0
  14. package/dist/groups/ai_catalog/queries.js +75 -0
  15. package/dist/groups/ai_catalog/queries.js.map +1 -0
  16. package/dist/groups/ai_catalog/tools.d.ts +3 -0
  17. package/dist/groups/ai_catalog/tools.js +40 -0
  18. package/dist/groups/ai_catalog/tools.js.map +1 -0
  19. package/dist/groups/analytics/queries.d.ts +1 -0
  20. package/dist/groups/analytics/queries.js +28 -0
  21. package/dist/groups/analytics/queries.js.map +1 -0
  22. package/dist/groups/analytics/tools.d.ts +3 -0
  23. package/dist/groups/analytics/tools.js +110 -0
  24. package/dist/groups/analytics/tools.js.map +1 -0
  25. package/dist/groups/audit_events/tools.d.ts +3 -0
  26. package/dist/groups/audit_events/tools.js +112 -0
  27. package/dist/groups/audit_events/tools.js.map +1 -0
  28. package/dist/groups/boards/tools.d.ts +3 -0
  29. package/dist/groups/boards/tools.js +46 -0
  30. package/dist/groups/boards/tools.js.map +1 -0
  31. package/dist/groups/branches/tools.d.ts +3 -0
  32. package/dist/groups/branches/tools.js +122 -0
  33. package/dist/groups/branches/tools.js.map +1 -0
  34. package/dist/groups/ci_catalog/queries.d.ts +2 -0
  35. package/dist/groups/ci_catalog/queries.js +63 -0
  36. package/dist/groups/ci_catalog/queries.js.map +1 -0
  37. package/dist/groups/ci_catalog/tools.d.ts +3 -0
  38. package/dist/groups/ci_catalog/tools.js +45 -0
  39. package/dist/groups/ci_catalog/tools.js.map +1 -0
  40. package/dist/groups/ci_lint/tools.d.ts +3 -0
  41. package/dist/groups/ci_lint/tools.js +36 -0
  42. package/dist/groups/ci_lint/tools.js.map +1 -0
  43. package/dist/groups/ci_variables/tools.d.ts +3 -0
  44. package/dist/groups/ci_variables/tools.js +201 -0
  45. package/dist/groups/ci_variables/tools.js.map +1 -0
  46. package/dist/groups/code_search/tools.d.ts +3 -0
  47. package/dist/groups/code_search/tools.js +70 -0
  48. package/dist/groups/code_search/tools.js.map +1 -0
  49. package/dist/groups/commits/tools.d.ts +3 -0
  50. package/dist/groups/commits/tools.js +192 -0
  51. package/dist/groups/commits/tools.js.map +1 -0
  52. package/dist/groups/compliance/queries.d.ts +1 -0
  53. package/dist/groups/compliance/queries.js +22 -0
  54. package/dist/groups/compliance/queries.js.map +1 -0
  55. package/dist/groups/compliance/tools.d.ts +3 -0
  56. package/dist/groups/compliance/tools.js +104 -0
  57. package/dist/groups/compliance/tools.js.map +1 -0
  58. package/dist/groups/container_registry/tools.d.ts +3 -0
  59. package/dist/groups/container_registry/tools.js +113 -0
  60. package/dist/groups/container_registry/tools.js.map +1 -0
  61. package/dist/groups/custom_roles/queries.d.ts +5 -0
  62. package/dist/groups/custom_roles/queries.js +69 -0
  63. package/dist/groups/custom_roles/queries.js.map +1 -0
  64. package/dist/groups/custom_roles/tools.d.ts +3 -0
  65. package/dist/groups/custom_roles/tools.js +84 -0
  66. package/dist/groups/custom_roles/tools.js.map +1 -0
  67. package/dist/groups/deployments/tools.d.ts +3 -0
  68. package/dist/groups/deployments/tools.js +98 -0
  69. package/dist/groups/deployments/tools.js.map +1 -0
  70. package/dist/groups/discussions/tools.d.ts +3 -0
  71. package/dist/groups/discussions/tools.js +144 -0
  72. package/dist/groups/discussions/tools.js.map +1 -0
  73. package/dist/groups/duo_chat/queries.d.ts +4 -0
  74. package/dist/groups/duo_chat/queries.js +76 -0
  75. package/dist/groups/duo_chat/queries.js.map +1 -0
  76. package/dist/groups/duo_chat/tools.d.ts +3 -0
  77. package/dist/groups/duo_chat/tools.js +95 -0
  78. package/dist/groups/duo_chat/tools.js.map +1 -0
  79. package/dist/groups/environments/tools.d.ts +3 -0
  80. package/dist/groups/environments/tools.js +105 -0
  81. package/dist/groups/environments/tools.js.map +1 -0
  82. package/dist/groups/events/tools.d.ts +3 -0
  83. package/dist/groups/events/tools.js +64 -0
  84. package/dist/groups/events/tools.js.map +1 -0
  85. package/dist/groups/feature_flags/tools.d.ts +3 -0
  86. package/dist/groups/feature_flags/tools.js +137 -0
  87. package/dist/groups/feature_flags/tools.js.map +1 -0
  88. package/dist/groups/groups/tools.d.ts +3 -0
  89. package/dist/groups/groups/tools.js +145 -0
  90. package/dist/groups/groups/tools.js.map +1 -0
  91. package/dist/groups/integrations/tools.d.ts +3 -0
  92. package/dist/groups/integrations/tools.js +143 -0
  93. package/dist/groups/integrations/tools.js.map +1 -0
  94. package/dist/groups/jobs/tools.d.ts +3 -0
  95. package/dist/groups/jobs/tools.js +209 -0
  96. package/dist/groups/jobs/tools.js.map +1 -0
  97. package/dist/groups/keys/tools.d.ts +3 -0
  98. package/dist/groups/keys/tools.js +140 -0
  99. package/dist/groups/keys/tools.js.map +1 -0
  100. package/dist/groups/labels/tools.d.ts +3 -0
  101. package/dist/groups/labels/tools.js +110 -0
  102. package/dist/groups/labels/tools.js.map +1 -0
  103. package/dist/groups/members/tools.d.ts +3 -0
  104. package/dist/groups/members/tools.js +136 -0
  105. package/dist/groups/members/tools.js.map +1 -0
  106. package/dist/groups/merge_requests/tools.d.ts +3 -0
  107. package/dist/groups/merge_requests/tools.js +288 -0
  108. package/dist/groups/merge_requests/tools.js.map +1 -0
  109. package/dist/groups/milestones/tools.d.ts +3 -0
  110. package/dist/groups/milestones/tools.js +143 -0
  111. package/dist/groups/milestones/tools.js.map +1 -0
  112. package/dist/groups/packages/tools.d.ts +3 -0
  113. package/dist/groups/packages/tools.js +157 -0
  114. package/dist/groups/packages/tools.js.map +1 -0
  115. package/dist/groups/pipeline_schedules/tools.d.ts +3 -0
  116. package/dist/groups/pipeline_schedules/tools.js +127 -0
  117. package/dist/groups/pipeline_schedules/tools.js.map +1 -0
  118. package/dist/groups/pipeline_triggers/tools.d.ts +3 -0
  119. package/dist/groups/pipeline_triggers/tools.js +74 -0
  120. package/dist/groups/pipeline_triggers/tools.js.map +1 -0
  121. package/dist/groups/pipelines/tools.d.ts +3 -0
  122. package/dist/groups/pipelines/tools.js +140 -0
  123. package/dist/groups/pipelines/tools.js.map +1 -0
  124. package/dist/groups/projects/tools.d.ts +3 -0
  125. package/dist/groups/projects/tools.js +189 -0
  126. package/dist/groups/projects/tools.js.map +1 -0
  127. package/dist/groups/protected_environments/tools.d.ts +3 -0
  128. package/dist/groups/protected_environments/tools.js +77 -0
  129. package/dist/groups/protected_environments/tools.js.map +1 -0
  130. package/dist/groups/releases/tools.d.ts +3 -0
  131. package/dist/groups/releases/tools.js +153 -0
  132. package/dist/groups/releases/tools.js.map +1 -0
  133. package/dist/groups/repository_files/tools.d.ts +3 -0
  134. package/dist/groups/repository_files/tools.js +163 -0
  135. package/dist/groups/repository_files/tools.js.map +1 -0
  136. package/dist/groups/runners/tools.d.ts +3 -0
  137. package/dist/groups/runners/tools.js +108 -0
  138. package/dist/groups/runners/tools.js.map +1 -0
  139. package/dist/groups/search/tools.d.ts +3 -0
  140. package/dist/groups/search/tools.js +58 -0
  141. package/dist/groups/search/tools.js.map +1 -0
  142. package/dist/groups/secrets/queries.d.ts +10 -0
  143. package/dist/groups/secrets/queries.js +121 -0
  144. package/dist/groups/secrets/queries.js.map +1 -0
  145. package/dist/groups/secrets/tools.d.ts +8 -0
  146. package/dist/groups/secrets/tools.js +167 -0
  147. package/dist/groups/secrets/tools.js.map +1 -0
  148. package/dist/groups/security_policies/queries.d.ts +3 -0
  149. package/dist/groups/security_policies/queries.js +75 -0
  150. package/dist/groups/security_policies/queries.js.map +1 -0
  151. package/dist/groups/security_policies/tools.d.ts +3 -0
  152. package/dist/groups/security_policies/tools.js +40 -0
  153. package/dist/groups/security_policies/tools.js.map +1 -0
  154. package/dist/groups/security_reports/queries.d.ts +1 -0
  155. package/dist/groups/security_reports/queries.js +75 -0
  156. package/dist/groups/security_reports/queries.js.map +1 -0
  157. package/dist/groups/security_reports/tools.d.ts +3 -0
  158. package/dist/groups/security_reports/tools.js +51 -0
  159. package/dist/groups/security_reports/tools.js.map +1 -0
  160. package/dist/groups/snippets/tools.d.ts +3 -0
  161. package/dist/groups/snippets/tools.js +148 -0
  162. package/dist/groups/snippets/tools.js.map +1 -0
  163. package/dist/groups/statistics/queries.d.ts +2 -0
  164. package/dist/groups/statistics/queries.js +32 -0
  165. package/dist/groups/statistics/queries.js.map +1 -0
  166. package/dist/groups/statistics/tools.d.ts +3 -0
  167. package/dist/groups/statistics/tools.js +35 -0
  168. package/dist/groups/statistics/tools.js.map +1 -0
  169. package/dist/groups/tags/tools.d.ts +3 -0
  170. package/dist/groups/tags/tools.js +97 -0
  171. package/dist/groups/tags/tools.js.map +1 -0
  172. package/dist/groups/todos/tools.d.ts +3 -0
  173. package/dist/groups/todos/tools.js +93 -0
  174. package/dist/groups/todos/tools.js.map +1 -0
  175. package/dist/groups/users/tools.d.ts +3 -0
  176. package/dist/groups/users/tools.js +121 -0
  177. package/dist/groups/users/tools.js.map +1 -0
  178. package/dist/groups/vulnerabilities/queries.d.ts +3 -0
  179. package/dist/groups/vulnerabilities/queries.js +104 -0
  180. package/dist/groups/vulnerabilities/queries.js.map +1 -0
  181. package/dist/groups/vulnerabilities/tools.d.ts +3 -0
  182. package/dist/groups/vulnerabilities/tools.js +131 -0
  183. package/dist/groups/vulnerabilities/tools.js.map +1 -0
  184. package/dist/groups/webhooks/tools.d.ts +3 -0
  185. package/dist/groups/webhooks/tools.js +213 -0
  186. package/dist/groups/webhooks/tools.js.map +1 -0
  187. package/dist/groups/wiki/tools.d.ts +3 -0
  188. package/dist/groups/wiki/tools.js +142 -0
  189. package/dist/groups/wiki/tools.js.map +1 -0
  190. package/dist/groups/work_items/queries.d.ts +16 -0
  191. package/dist/groups/work_items/queries.js +181 -0
  192. package/dist/groups/work_items/queries.js.map +1 -0
  193. package/dist/groups/work_items/tools.d.ts +3 -0
  194. package/dist/groups/work_items/tools.js +250 -0
  195. package/dist/groups/work_items/tools.js.map +1 -0
  196. package/dist/http/errors.d.ts +21 -0
  197. package/dist/http/errors.js +62 -0
  198. package/dist/http/errors.js.map +1 -0
  199. package/dist/http/graphql.d.ts +29 -0
  200. package/dist/http/graphql.js +93 -0
  201. package/dist/http/graphql.js.map +1 -0
  202. package/dist/http/rest.d.ts +96 -0
  203. package/dist/http/rest.js +369 -0
  204. package/dist/http/rest.js.map +1 -0
  205. package/dist/index.d.ts +2 -0
  206. package/dist/index.js +25 -0
  207. package/dist/index.js.map +1 -0
  208. package/dist/shared/args.d.ts +51 -0
  209. package/dist/shared/args.js +46 -0
  210. package/dist/shared/args.js.map +1 -0
  211. package/dist/shared/handlers.d.ts +6 -0
  212. package/dist/shared/handlers.js +14 -0
  213. package/dist/shared/handlers.js.map +1 -0
  214. package/dist/shared/ids.d.ts +18 -0
  215. package/dist/shared/ids.js +43 -0
  216. package/dist/shared/ids.js.map +1 -0
  217. package/dist/tools/meta.d.ts +3 -0
  218. package/dist/tools/meta.js +22 -0
  219. package/dist/tools/meta.js.map +1 -0
  220. package/dist/tools/registry.d.ts +3 -0
  221. package/dist/tools/registry.js +117 -0
  222. package/dist/tools/registry.js.map +1 -0
  223. package/dist/tools/types.d.ts +18 -0
  224. package/dist/tools/types.js +20 -0
  225. package/dist/tools/types.js.map +1 -0
  226. package/package.json +72 -0
@@ -0,0 +1,213 @@
1
+ import { z } from 'zod';
2
+ import { GroupIdArg, PaginationArgs, ProjectIdArg } from '../../shared/args.js';
3
+ import { safe } from '../../shared/handlers.js';
4
+ import { resolveGroupId, resolveProjectId } from '../../shared/ids.js';
5
+ const HookEventFields = {
6
+ push_events: z.boolean().optional(),
7
+ push_events_branch_filter: z.string().optional(),
8
+ tag_push_events: z.boolean().optional(),
9
+ merge_requests_events: z.boolean().optional(),
10
+ issues_events: z.boolean().optional(),
11
+ confidential_issues_events: z.boolean().optional(),
12
+ note_events: z.boolean().optional(),
13
+ confidential_note_events: z.boolean().optional(),
14
+ pipeline_events: z.boolean().optional(),
15
+ job_events: z.boolean().optional(),
16
+ wiki_page_events: z.boolean().optional(),
17
+ deployment_events: z.boolean().optional(),
18
+ releases_events: z.boolean().optional(),
19
+ feature_flag_events: z.boolean().optional(),
20
+ emoji_events: z.boolean().optional(),
21
+ resource_access_token_events: z.boolean().optional(),
22
+ enable_ssl_verification: z.boolean().optional(),
23
+ custom_webhook_template: z.string().optional(),
24
+ description: z.string().optional(),
25
+ name: z.string().optional(),
26
+ };
27
+ const HookTrigger = z.enum([
28
+ 'push_events',
29
+ 'tag_push_events',
30
+ 'note_events',
31
+ 'issues_events',
32
+ 'confidential_issues_events',
33
+ 'merge_requests_events',
34
+ 'job_events',
35
+ 'pipeline_events',
36
+ 'wiki_page_events',
37
+ 'deployment_events',
38
+ 'releases_events',
39
+ 'feature_flag_events',
40
+ 'emoji_events',
41
+ 'resource_access_token_events',
42
+ ]);
43
+ export function registerWebhookTools(server, ctx) {
44
+ // -- project hooks ----------------------------------------------------
45
+ server.tool('hook_list_project', 'List webhooks configured on a project.', { ...ProjectIdArg, ...PaginationArgs }, async (args) => safe(async () => {
46
+ const projectId = resolveProjectId(ctx.config, args.project_id);
47
+ const { project_id: _p, ...rest } = args;
48
+ const res = await ctx.rest.request({
49
+ path: `/projects/${projectId}/hooks`,
50
+ query: rest,
51
+ });
52
+ return res.data;
53
+ }));
54
+ server.tool('hook_get_project', 'Get a single project webhook.', { ...ProjectIdArg, hook_id: z.number().int().positive() }, async (args) => safe(async () => {
55
+ const projectId = resolveProjectId(ctx.config, args.project_id);
56
+ const res = await ctx.rest.request({
57
+ path: `/projects/${projectId}/hooks/${args.hook_id}`,
58
+ });
59
+ return res.data;
60
+ }));
61
+ server.tool('hook_create_project', 'Create a webhook on a project.', {
62
+ ...ProjectIdArg,
63
+ url: z.string().url(),
64
+ token: z.string().optional().describe('Sent as X-Gitlab-Token header for verification.'),
65
+ ...HookEventFields,
66
+ }, async (args) => safe(async () => {
67
+ const projectId = resolveProjectId(ctx.config, args.project_id);
68
+ const { project_id: _p, ...body } = args;
69
+ const res = await ctx.rest.request({
70
+ method: 'POST',
71
+ path: `/projects/${projectId}/hooks`,
72
+ body,
73
+ });
74
+ return res.data;
75
+ }));
76
+ server.tool('hook_update_project', 'Update a project webhook.', {
77
+ ...ProjectIdArg,
78
+ hook_id: z.number().int().positive(),
79
+ url: z.string().url().optional(),
80
+ token: z.string().optional(),
81
+ ...HookEventFields,
82
+ }, async (args) => safe(async () => {
83
+ const projectId = resolveProjectId(ctx.config, args.project_id);
84
+ const { project_id: _p, hook_id, ...body } = args;
85
+ const res = await ctx.rest.request({
86
+ method: 'PUT',
87
+ path: `/projects/${projectId}/hooks/${hook_id}`,
88
+ body,
89
+ });
90
+ return res.data;
91
+ }));
92
+ server.tool('hook_delete_project', 'Delete a project webhook.', { ...ProjectIdArg, hook_id: z.number().int().positive() }, async (args) => safe(async () => {
93
+ const projectId = resolveProjectId(ctx.config, args.project_id);
94
+ const res = await ctx.rest.request({
95
+ method: 'DELETE',
96
+ path: `/projects/${projectId}/hooks/${args.hook_id}`,
97
+ });
98
+ return res.data ?? { ok: true };
99
+ }));
100
+ server.tool('hook_test_project', 'Send a test payload to a project webhook for a given trigger type.', {
101
+ ...ProjectIdArg,
102
+ hook_id: z.number().int().positive(),
103
+ trigger: HookTrigger,
104
+ }, async (args) => safe(async () => {
105
+ const projectId = resolveProjectId(ctx.config, args.project_id);
106
+ const res = await ctx.rest.request({
107
+ method: 'POST',
108
+ path: `/projects/${projectId}/hooks/${args.hook_id}/test/${args.trigger}`,
109
+ });
110
+ return res.data ?? { ok: true };
111
+ }));
112
+ // -- group hooks ------------------------------------------------------
113
+ server.tool('hook_list_group', 'List webhooks configured on a group.', { ...GroupIdArg, ...PaginationArgs }, async (args) => safe(async () => {
114
+ const groupId = resolveGroupId(ctx.config, args.group_id);
115
+ const { group_id: _g, ...rest } = args;
116
+ const res = await ctx.rest.request({
117
+ path: `/groups/${groupId}/hooks`,
118
+ query: rest,
119
+ });
120
+ return res.data;
121
+ }));
122
+ server.tool('hook_get_group', 'Get a single group webhook.', { ...GroupIdArg, hook_id: z.number().int().positive() }, async (args) => safe(async () => {
123
+ const groupId = resolveGroupId(ctx.config, args.group_id);
124
+ const res = await ctx.rest.request({
125
+ path: `/groups/${groupId}/hooks/${args.hook_id}`,
126
+ });
127
+ return res.data;
128
+ }));
129
+ server.tool('hook_create_group', 'Create a webhook on a group (applies to all child projects).', {
130
+ ...GroupIdArg,
131
+ url: z.string().url(),
132
+ token: z.string().optional(),
133
+ subgroup_events: z.boolean().optional(),
134
+ ...HookEventFields,
135
+ }, async (args) => safe(async () => {
136
+ const groupId = resolveGroupId(ctx.config, args.group_id);
137
+ const { group_id: _g, ...body } = args;
138
+ const res = await ctx.rest.request({
139
+ method: 'POST',
140
+ path: `/groups/${groupId}/hooks`,
141
+ body,
142
+ });
143
+ return res.data;
144
+ }));
145
+ server.tool('hook_update_group', 'Update a group webhook.', {
146
+ ...GroupIdArg,
147
+ hook_id: z.number().int().positive(),
148
+ url: z.string().url().optional(),
149
+ token: z.string().optional(),
150
+ subgroup_events: z.boolean().optional(),
151
+ ...HookEventFields,
152
+ }, async (args) => safe(async () => {
153
+ const groupId = resolveGroupId(ctx.config, args.group_id);
154
+ const { group_id: _g, hook_id, ...body } = args;
155
+ const res = await ctx.rest.request({
156
+ method: 'PUT',
157
+ path: `/groups/${groupId}/hooks/${hook_id}`,
158
+ body,
159
+ });
160
+ return res.data;
161
+ }));
162
+ server.tool('hook_delete_group', 'Delete a group webhook.', { ...GroupIdArg, hook_id: z.number().int().positive() }, async (args) => safe(async () => {
163
+ const groupId = resolveGroupId(ctx.config, args.group_id);
164
+ const res = await ctx.rest.request({
165
+ method: 'DELETE',
166
+ path: `/groups/${groupId}/hooks/${args.hook_id}`,
167
+ });
168
+ return res.data ?? { ok: true };
169
+ }));
170
+ server.tool('hook_test_group', 'Send a test payload to a group webhook for a given trigger type.', {
171
+ ...GroupIdArg,
172
+ hook_id: z.number().int().positive(),
173
+ trigger: HookTrigger,
174
+ }, async (args) => safe(async () => {
175
+ const groupId = resolveGroupId(ctx.config, args.group_id);
176
+ const res = await ctx.rest.request({
177
+ method: 'POST',
178
+ path: `/groups/${groupId}/hooks/${args.hook_id}/test/${args.trigger}`,
179
+ });
180
+ return res.data ?? { ok: true };
181
+ }));
182
+ // -- system hooks (admin) --------------------------------------------
183
+ server.tool('hook_list_system', 'List system hooks (admin only).', PaginationArgs, async (args) => safe(async () => {
184
+ const res = await ctx.rest.request({ path: '/hooks', query: args });
185
+ return res.data;
186
+ }));
187
+ server.tool('hook_create_system', 'Create a system hook (admin only).', {
188
+ url: z.string().url(),
189
+ token: z.string().optional(),
190
+ push_events: z.boolean().optional(),
191
+ tag_push_events: z.boolean().optional(),
192
+ merge_requests_events: z.boolean().optional(),
193
+ repository_update_events: z.boolean().optional(),
194
+ enable_ssl_verification: z.boolean().optional(),
195
+ name: z.string().optional(),
196
+ description: z.string().optional(),
197
+ }, async (args) => safe(async () => {
198
+ const res = await ctx.rest.request({ method: 'POST', path: '/hooks', body: args });
199
+ return res.data;
200
+ }));
201
+ server.tool('hook_delete_system', 'Delete a system hook (admin only).', { hook_id: z.number().int().positive() }, async (args) => safe(async () => {
202
+ const res = await ctx.rest.request({
203
+ method: 'DELETE',
204
+ path: `/hooks/${args.hook_id}`,
205
+ });
206
+ return res.data ?? { ok: true };
207
+ }));
208
+ server.tool('hook_test_system', 'Test a system hook (admin only). Returns the test result.', { hook_id: z.number().int().positive() }, async (args) => safe(async () => {
209
+ const res = await ctx.rest.request({ path: `/hooks/${args.hook_id}` });
210
+ return res.data;
211
+ }));
212
+ }
213
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/webhooks/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { ToolContext } from '../../tools/types.js';
3
+ export declare function registerWikiTools(server: McpServer, ctx: ToolContext): void;
@@ -0,0 +1,142 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { basename } from 'node:path';
3
+ import { z } from 'zod';
4
+ import { GroupIdArg, IdOrPath, PaginationArgs, ProjectIdArg } from '../../shared/args.js';
5
+ import { safe } from '../../shared/handlers.js';
6
+ import { resolveGroupId, resolveProjectId } from '../../shared/ids.js';
7
+ const WikiFormat = z.enum(['markdown', 'rdoc', 'asciidoc', 'org']);
8
+ function wikiPath(scope, scopeId, slug) {
9
+ const root = `/${scope === 'project' ? 'projects' : 'groups'}/${scopeId}/wikis`;
10
+ return slug === undefined ? root : `${root}/${encodeURIComponent(slug)}`;
11
+ }
12
+ function resolveScopeId(ctx, scope, id) {
13
+ return scope === 'project'
14
+ ? resolveProjectId(ctx.config, id)
15
+ : resolveGroupId(ctx.config, id);
16
+ }
17
+ export function registerWikiTools(server, ctx) {
18
+ server.tool('wiki_list_project', 'List wiki pages in a project.', {
19
+ ...ProjectIdArg,
20
+ with_content: z.boolean().optional(),
21
+ ...PaginationArgs,
22
+ }, async (args) => safe(async () => {
23
+ const projectId = resolveProjectId(ctx.config, args.project_id);
24
+ const { project_id: _p, ...rest } = args;
25
+ const res = await ctx.rest.request({
26
+ path: wikiPath('project', projectId),
27
+ query: rest,
28
+ });
29
+ return res.data;
30
+ }));
31
+ server.tool('wiki_list_group', 'List wiki pages in a group.', {
32
+ ...GroupIdArg,
33
+ with_content: z.boolean().optional(),
34
+ ...PaginationArgs,
35
+ }, async (args) => safe(async () => {
36
+ const groupId = resolveGroupId(ctx.config, args.group_id);
37
+ const { group_id: _g, ...rest } = args;
38
+ const res = await ctx.rest.request({
39
+ path: wikiPath('group', groupId),
40
+ query: rest,
41
+ });
42
+ return res.data;
43
+ }));
44
+ server.tool('wiki_get', 'Get a single wiki page by slug.', {
45
+ scope: z.enum(['project', 'group']),
46
+ scope_id: IdOrPath.optional(),
47
+ slug: z.string(),
48
+ render_html: z.boolean().optional(),
49
+ version: z.string().optional().describe('Revision SHA to fetch a historic version.'),
50
+ }, async (args) => safe(async () => {
51
+ const scopeId = resolveScopeId(ctx, args.scope, args.scope_id);
52
+ const res = await ctx.rest.request({
53
+ path: wikiPath(args.scope, scopeId, args.slug),
54
+ query: {
55
+ ...(args.render_html !== undefined ? { render_html: args.render_html } : {}),
56
+ ...(args.version ? { version: args.version } : {}),
57
+ },
58
+ });
59
+ return res.data;
60
+ }));
61
+ server.tool('wiki_create', 'Create a new wiki page.', {
62
+ scope: z.enum(['project', 'group']),
63
+ scope_id: IdOrPath.optional(),
64
+ title: z.string(),
65
+ content: z.string(),
66
+ format: WikiFormat.optional(),
67
+ }, async (args) => safe(async () => {
68
+ const scopeId = resolveScopeId(ctx, args.scope, args.scope_id);
69
+ const { scope, scope_id: _s, ...body } = args;
70
+ const res = await ctx.rest.request({
71
+ method: 'POST',
72
+ path: wikiPath(scope, scopeId),
73
+ body,
74
+ });
75
+ return res.data;
76
+ }));
77
+ server.tool('wiki_update', 'Update an existing wiki page. Renaming via title replaces the slug.', {
78
+ scope: z.enum(['project', 'group']),
79
+ scope_id: IdOrPath.optional(),
80
+ slug: z.string(),
81
+ title: z.string().optional(),
82
+ content: z.string().optional(),
83
+ format: WikiFormat.optional(),
84
+ }, async (args) => safe(async () => {
85
+ const scopeId = resolveScopeId(ctx, args.scope, args.scope_id);
86
+ const { scope, scope_id: _s, slug, ...body } = args;
87
+ const res = await ctx.rest.request({
88
+ method: 'PUT',
89
+ path: wikiPath(scope, scopeId, slug),
90
+ body,
91
+ });
92
+ return res.data;
93
+ }));
94
+ server.tool('wiki_delete', 'Delete a wiki page.', {
95
+ scope: z.enum(['project', 'group']),
96
+ scope_id: IdOrPath.optional(),
97
+ slug: z.string(),
98
+ }, async (args) => safe(async () => {
99
+ const scopeId = resolveScopeId(ctx, args.scope, args.scope_id);
100
+ const res = await ctx.rest.request({
101
+ method: 'DELETE',
102
+ path: wikiPath(args.scope, scopeId, args.slug),
103
+ });
104
+ return res.data ?? { ok: true };
105
+ }));
106
+ server.tool('wiki_attachment_upload', 'Upload a file as a wiki attachment. Provide content via `content_base64` OR `local_path` (server-side file).', {
107
+ scope: z.enum(['project', 'group']),
108
+ scope_id: IdOrPath.optional(),
109
+ file_name: z.string().describe('Name of the file in the attachment.'),
110
+ content_base64: z.string().optional().describe('Base64-encoded file bytes.'),
111
+ local_path: z.string().optional().describe('Absolute path on the MCP host to read from.'),
112
+ content_type: z.string().optional().describe('MIME type (default application/octet-stream).'),
113
+ branch: z.string().optional().describe('Deprecated; ignored on recent GitLab versions.'),
114
+ }, async (args) => safe(async () => {
115
+ if (!args.content_base64 && !args.local_path) {
116
+ throw new Error('Provide either content_base64 or local_path.');
117
+ }
118
+ const scopeId = resolveScopeId(ctx, args.scope, args.scope_id);
119
+ let contentBase64 = args.content_base64;
120
+ let fileName = args.file_name;
121
+ if (!contentBase64 && args.local_path) {
122
+ const buf = await readFile(args.local_path);
123
+ contentBase64 = buf.toString('base64');
124
+ if (!fileName)
125
+ fileName = basename(args.local_path);
126
+ }
127
+ const res = await ctx.rest.requestMultipart({
128
+ path: `${wikiPath(args.scope, scopeId)}/attachments`,
129
+ fields: [
130
+ {
131
+ name: 'file',
132
+ fileName,
133
+ contentBase64: contentBase64 ?? '',
134
+ contentType: args.content_type ?? 'application/octet-stream',
135
+ },
136
+ ...(args.branch ? [{ name: 'branch', value: args.branch }] : []),
137
+ ],
138
+ });
139
+ return res.data;
140
+ }));
141
+ }
142
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/wiki/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * GraphQL operations for GitLab Work Items.
3
+ *
4
+ * Schema notes:
5
+ * - `namespace` resolves both groups and projects by fullPath.
6
+ * - `workItems` filter uses `types: [IssueType!]` (legacy name) and `state: IssuableState`.
7
+ * - WorkItem widgets are polymorphic; we unwrap a curated set inline.
8
+ * - For create/update, type-specific widgets are merged via `*Widget` input fields.
9
+ */
10
+ export declare const WORK_ITEM_FIELDS = "\n fragment WorkItemFields on WorkItem {\n id\n iid\n title\n state\n confidential\n createdAt\n updatedAt\n webUrl\n workItemType {\n id\n name\n }\n author {\n id\n username\n name\n }\n widgets {\n type\n ... on WorkItemWidgetDescription {\n description\n }\n ... on WorkItemWidgetAssignees {\n assignees {\n nodes {\n id\n username\n name\n }\n }\n }\n ... on WorkItemWidgetLabels {\n labels {\n nodes {\n id\n title\n color\n }\n }\n }\n ... on WorkItemWidgetMilestone {\n milestone {\n id\n title\n state\n dueDate\n }\n }\n ... on WorkItemWidgetStartAndDueDate {\n startDate\n dueDate\n }\n ... on WorkItemWidgetHierarchy {\n parent {\n id\n iid\n title\n }\n hasChildren\n }\n ... on WorkItemWidgetWeight {\n weight\n }\n ... on WorkItemWidgetIteration {\n iteration {\n id\n title\n }\n }\n ... on WorkItemWidgetHealthStatus {\n healthStatus\n }\n }\n }\n";
11
+ export declare const WORK_ITEMS_LIST = "\n \n fragment WorkItemFields on WorkItem {\n id\n iid\n title\n state\n confidential\n createdAt\n updatedAt\n webUrl\n workItemType {\n id\n name\n }\n author {\n id\n username\n name\n }\n widgets {\n type\n ... on WorkItemWidgetDescription {\n description\n }\n ... on WorkItemWidgetAssignees {\n assignees {\n nodes {\n id\n username\n name\n }\n }\n }\n ... on WorkItemWidgetLabels {\n labels {\n nodes {\n id\n title\n color\n }\n }\n }\n ... on WorkItemWidgetMilestone {\n milestone {\n id\n title\n state\n dueDate\n }\n }\n ... on WorkItemWidgetStartAndDueDate {\n startDate\n dueDate\n }\n ... on WorkItemWidgetHierarchy {\n parent {\n id\n iid\n title\n }\n hasChildren\n }\n ... on WorkItemWidgetWeight {\n weight\n }\n ... on WorkItemWidgetIteration {\n iteration {\n id\n title\n }\n }\n ... on WorkItemWidgetHealthStatus {\n healthStatus\n }\n }\n }\n\n query WorkItemsList(\n $namespace: ID!\n $first: Int\n $after: String\n $state: IssuableState\n $types: [IssueType!]\n $search: String\n $assigneeUsernames: [String!]\n $authorUsername: String\n $milestoneTitle: [String!]\n $iids: [ID!]\n $sort: WorkItemSort\n ) {\n namespace(fullPath: $namespace) {\n id\n workItems(\n first: $first\n after: $after\n state: $state\n types: $types\n search: $search\n assigneeUsernames: $assigneeUsernames\n authorUsername: $authorUsername\n milestoneTitle: $milestoneTitle\n iids: $iids\n sort: $sort\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n nodes {\n ...WorkItemFields\n }\n }\n }\n }\n";
12
+ export declare const WORK_ITEM_GET = "\n \n fragment WorkItemFields on WorkItem {\n id\n iid\n title\n state\n confidential\n createdAt\n updatedAt\n webUrl\n workItemType {\n id\n name\n }\n author {\n id\n username\n name\n }\n widgets {\n type\n ... on WorkItemWidgetDescription {\n description\n }\n ... on WorkItemWidgetAssignees {\n assignees {\n nodes {\n id\n username\n name\n }\n }\n }\n ... on WorkItemWidgetLabels {\n labels {\n nodes {\n id\n title\n color\n }\n }\n }\n ... on WorkItemWidgetMilestone {\n milestone {\n id\n title\n state\n dueDate\n }\n }\n ... on WorkItemWidgetStartAndDueDate {\n startDate\n dueDate\n }\n ... on WorkItemWidgetHierarchy {\n parent {\n id\n iid\n title\n }\n hasChildren\n }\n ... on WorkItemWidgetWeight {\n weight\n }\n ... on WorkItemWidgetIteration {\n iteration {\n id\n title\n }\n }\n ... on WorkItemWidgetHealthStatus {\n healthStatus\n }\n }\n }\n\n query WorkItemGet($namespace: ID!, $iid: String!) {\n namespace(fullPath: $namespace) {\n workItem(iid: $iid) {\n ...WorkItemFields\n }\n }\n }\n";
13
+ export declare const WORK_ITEM_TYPES = "\n query WorkItemTypes($namespace: ID!) {\n namespace(fullPath: $namespace) {\n workItemTypes {\n nodes {\n id\n name\n }\n }\n }\n }\n";
14
+ export declare const WORK_ITEM_CREATE = "\n \n fragment WorkItemFields on WorkItem {\n id\n iid\n title\n state\n confidential\n createdAt\n updatedAt\n webUrl\n workItemType {\n id\n name\n }\n author {\n id\n username\n name\n }\n widgets {\n type\n ... on WorkItemWidgetDescription {\n description\n }\n ... on WorkItemWidgetAssignees {\n assignees {\n nodes {\n id\n username\n name\n }\n }\n }\n ... on WorkItemWidgetLabels {\n labels {\n nodes {\n id\n title\n color\n }\n }\n }\n ... on WorkItemWidgetMilestone {\n milestone {\n id\n title\n state\n dueDate\n }\n }\n ... on WorkItemWidgetStartAndDueDate {\n startDate\n dueDate\n }\n ... on WorkItemWidgetHierarchy {\n parent {\n id\n iid\n title\n }\n hasChildren\n }\n ... on WorkItemWidgetWeight {\n weight\n }\n ... on WorkItemWidgetIteration {\n iteration {\n id\n title\n }\n }\n ... on WorkItemWidgetHealthStatus {\n healthStatus\n }\n }\n }\n\n mutation WorkItemCreate($input: WorkItemCreateInput!) {\n workItemCreate(input: $input) {\n workItem {\n ...WorkItemFields\n }\n errors\n }\n }\n";
15
+ export declare const WORK_ITEM_UPDATE = "\n \n fragment WorkItemFields on WorkItem {\n id\n iid\n title\n state\n confidential\n createdAt\n updatedAt\n webUrl\n workItemType {\n id\n name\n }\n author {\n id\n username\n name\n }\n widgets {\n type\n ... on WorkItemWidgetDescription {\n description\n }\n ... on WorkItemWidgetAssignees {\n assignees {\n nodes {\n id\n username\n name\n }\n }\n }\n ... on WorkItemWidgetLabels {\n labels {\n nodes {\n id\n title\n color\n }\n }\n }\n ... on WorkItemWidgetMilestone {\n milestone {\n id\n title\n state\n dueDate\n }\n }\n ... on WorkItemWidgetStartAndDueDate {\n startDate\n dueDate\n }\n ... on WorkItemWidgetHierarchy {\n parent {\n id\n iid\n title\n }\n hasChildren\n }\n ... on WorkItemWidgetWeight {\n weight\n }\n ... on WorkItemWidgetIteration {\n iteration {\n id\n title\n }\n }\n ... on WorkItemWidgetHealthStatus {\n healthStatus\n }\n }\n }\n\n mutation WorkItemUpdate($input: WorkItemUpdateInput!) {\n workItemUpdate(input: $input) {\n workItem {\n ...WorkItemFields\n }\n errors\n }\n }\n";
16
+ export declare const WORK_ITEM_DELETE = "\n mutation WorkItemDelete($input: WorkItemDeleteInput!) {\n workItemDelete(input: $input) {\n project {\n id\n }\n errors\n }\n }\n";
@@ -0,0 +1,181 @@
1
+ /**
2
+ * GraphQL operations for GitLab Work Items.
3
+ *
4
+ * Schema notes:
5
+ * - `namespace` resolves both groups and projects by fullPath.
6
+ * - `workItems` filter uses `types: [IssueType!]` (legacy name) and `state: IssuableState`.
7
+ * - WorkItem widgets are polymorphic; we unwrap a curated set inline.
8
+ * - For create/update, type-specific widgets are merged via `*Widget` input fields.
9
+ */
10
+ export const WORK_ITEM_FIELDS = /* GraphQL */ `
11
+ fragment WorkItemFields on WorkItem {
12
+ id
13
+ iid
14
+ title
15
+ state
16
+ confidential
17
+ createdAt
18
+ updatedAt
19
+ webUrl
20
+ workItemType {
21
+ id
22
+ name
23
+ }
24
+ author {
25
+ id
26
+ username
27
+ name
28
+ }
29
+ widgets {
30
+ type
31
+ ... on WorkItemWidgetDescription {
32
+ description
33
+ }
34
+ ... on WorkItemWidgetAssignees {
35
+ assignees {
36
+ nodes {
37
+ id
38
+ username
39
+ name
40
+ }
41
+ }
42
+ }
43
+ ... on WorkItemWidgetLabels {
44
+ labels {
45
+ nodes {
46
+ id
47
+ title
48
+ color
49
+ }
50
+ }
51
+ }
52
+ ... on WorkItemWidgetMilestone {
53
+ milestone {
54
+ id
55
+ title
56
+ state
57
+ dueDate
58
+ }
59
+ }
60
+ ... on WorkItemWidgetStartAndDueDate {
61
+ startDate
62
+ dueDate
63
+ }
64
+ ... on WorkItemWidgetHierarchy {
65
+ parent {
66
+ id
67
+ iid
68
+ title
69
+ }
70
+ hasChildren
71
+ }
72
+ ... on WorkItemWidgetWeight {
73
+ weight
74
+ }
75
+ ... on WorkItemWidgetIteration {
76
+ iteration {
77
+ id
78
+ title
79
+ }
80
+ }
81
+ ... on WorkItemWidgetHealthStatus {
82
+ healthStatus
83
+ }
84
+ }
85
+ }
86
+ `;
87
+ export const WORK_ITEMS_LIST = /* GraphQL */ `
88
+ ${WORK_ITEM_FIELDS}
89
+ query WorkItemsList(
90
+ $namespace: ID!
91
+ $first: Int
92
+ $after: String
93
+ $state: IssuableState
94
+ $types: [IssueType!]
95
+ $search: String
96
+ $assigneeUsernames: [String!]
97
+ $authorUsername: String
98
+ $milestoneTitle: [String!]
99
+ $iids: [ID!]
100
+ $sort: WorkItemSort
101
+ ) {
102
+ namespace(fullPath: $namespace) {
103
+ id
104
+ workItems(
105
+ first: $first
106
+ after: $after
107
+ state: $state
108
+ types: $types
109
+ search: $search
110
+ assigneeUsernames: $assigneeUsernames
111
+ authorUsername: $authorUsername
112
+ milestoneTitle: $milestoneTitle
113
+ iids: $iids
114
+ sort: $sort
115
+ ) {
116
+ pageInfo {
117
+ endCursor
118
+ hasNextPage
119
+ }
120
+ nodes {
121
+ ...WorkItemFields
122
+ }
123
+ }
124
+ }
125
+ }
126
+ `;
127
+ export const WORK_ITEM_GET = /* GraphQL */ `
128
+ ${WORK_ITEM_FIELDS}
129
+ query WorkItemGet($namespace: ID!, $iid: String!) {
130
+ namespace(fullPath: $namespace) {
131
+ workItem(iid: $iid) {
132
+ ...WorkItemFields
133
+ }
134
+ }
135
+ }
136
+ `;
137
+ export const WORK_ITEM_TYPES = /* GraphQL */ `
138
+ query WorkItemTypes($namespace: ID!) {
139
+ namespace(fullPath: $namespace) {
140
+ workItemTypes {
141
+ nodes {
142
+ id
143
+ name
144
+ }
145
+ }
146
+ }
147
+ }
148
+ `;
149
+ export const WORK_ITEM_CREATE = /* GraphQL */ `
150
+ ${WORK_ITEM_FIELDS}
151
+ mutation WorkItemCreate($input: WorkItemCreateInput!) {
152
+ workItemCreate(input: $input) {
153
+ workItem {
154
+ ...WorkItemFields
155
+ }
156
+ errors
157
+ }
158
+ }
159
+ `;
160
+ export const WORK_ITEM_UPDATE = /* GraphQL */ `
161
+ ${WORK_ITEM_FIELDS}
162
+ mutation WorkItemUpdate($input: WorkItemUpdateInput!) {
163
+ workItemUpdate(input: $input) {
164
+ workItem {
165
+ ...WorkItemFields
166
+ }
167
+ errors
168
+ }
169
+ }
170
+ `;
171
+ export const WORK_ITEM_DELETE = /* GraphQL */ `
172
+ mutation WorkItemDelete($input: WorkItemDeleteInput!) {
173
+ workItemDelete(input: $input) {
174
+ project {
175
+ id
176
+ }
177
+ errors
178
+ }
179
+ }
180
+ `;
181
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/groups/work_items/queries.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4E7C,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;IACzC,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCnB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;IACvC,gBAAgB;;;;;;;;CAQnB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;;;;;;;;;;;CAW5C,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAC1C,gBAAgB;;;;;;;;;CASnB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAC1C,gBAAgB;;;;;;;;;CASnB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;;;;;;;;;CAS7C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { ToolContext } from '../../tools/types.js';
3
+ export declare function registerWorkItemTools(server: McpServer, ctx: ToolContext): void;