@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,209 @@
1
+ import { z } from 'zod';
2
+ import { PaginationArgs, ProjectIdArg } from '../../shared/args.js';
3
+ import { safe } from '../../shared/handlers.js';
4
+ import { resolveProjectId } from '../../shared/ids.js';
5
+ const JobScope = z.enum([
6
+ 'created',
7
+ 'pending',
8
+ 'running',
9
+ 'failed',
10
+ 'success',
11
+ 'canceled',
12
+ 'skipped',
13
+ 'waiting_for_resource',
14
+ 'manual',
15
+ ]);
16
+ const JobVariable = z.object({ key: z.string(), value: z.string() });
17
+ export function registerJobTools(server, ctx) {
18
+ server.tool('job_list_pipeline', 'List jobs in a specific pipeline.', {
19
+ ...ProjectIdArg,
20
+ pipeline_id: z.number().int().positive(),
21
+ scope: z.array(JobScope).optional(),
22
+ include_retried: z.boolean().optional(),
23
+ ...PaginationArgs,
24
+ }, async (args) => safe(async () => {
25
+ const projectId = resolveProjectId(ctx.config, args.project_id);
26
+ const { project_id: _p, pipeline_id, ...rest } = args;
27
+ const res = await ctx.rest.request({
28
+ path: `/projects/${projectId}/pipelines/${pipeline_id}/jobs`,
29
+ query: rest,
30
+ });
31
+ return res.data;
32
+ }));
33
+ server.tool('job_list_project', 'List all jobs in a project (newest first).', {
34
+ ...ProjectIdArg,
35
+ scope: z.array(JobScope).optional(),
36
+ ...PaginationArgs,
37
+ }, async (args) => safe(async () => {
38
+ const projectId = resolveProjectId(ctx.config, args.project_id);
39
+ const { project_id: _p, ...rest } = args;
40
+ const res = await ctx.rest.request({
41
+ path: `/projects/${projectId}/jobs`,
42
+ query: rest,
43
+ });
44
+ return res.data;
45
+ }));
46
+ server.tool('job_get', 'Get a single job by id (includes artifact metadata).', { ...ProjectIdArg, job_id: z.number().int().positive() }, async (args) => safe(async () => {
47
+ const projectId = resolveProjectId(ctx.config, args.project_id);
48
+ const res = await ctx.rest.request({
49
+ path: `/projects/${projectId}/jobs/${args.job_id}`,
50
+ });
51
+ return res.data;
52
+ }));
53
+ server.tool('job_log', 'Get the trace (raw log) of a job as plain text. Use tail to grab only the last N kilobytes.', {
54
+ ...ProjectIdArg,
55
+ job_id: z.number().int().positive(),
56
+ tail_kb: z
57
+ .number()
58
+ .int()
59
+ .positive()
60
+ .max(2048)
61
+ .optional()
62
+ .describe('If set, return only the last N kilobytes of the log.'),
63
+ }, async (args) => safe(async () => {
64
+ const projectId = resolveProjectId(ctx.config, args.project_id);
65
+ const res = await ctx.rest.request({
66
+ path: `/projects/${projectId}/jobs/${args.job_id}/trace`,
67
+ });
68
+ const text = typeof res.data === 'string' ? res.data : String(res.data ?? '');
69
+ if (args.tail_kb !== undefined) {
70
+ const maxBytes = args.tail_kb * 1024;
71
+ return text.length > maxBytes ? text.slice(-maxBytes) : text;
72
+ }
73
+ return text;
74
+ }));
75
+ server.tool('job_retry', 'Retry a single job.', { ...ProjectIdArg, job_id: z.number().int().positive() }, async (args) => safe(async () => {
76
+ const projectId = resolveProjectId(ctx.config, args.project_id);
77
+ const res = await ctx.rest.request({
78
+ method: 'POST',
79
+ path: `/projects/${projectId}/jobs/${args.job_id}/retry`,
80
+ });
81
+ return res.data;
82
+ }));
83
+ server.tool('job_cancel', 'Cancel a running job.', { ...ProjectIdArg, job_id: z.number().int().positive() }, async (args) => safe(async () => {
84
+ const projectId = resolveProjectId(ctx.config, args.project_id);
85
+ const res = await ctx.rest.request({
86
+ method: 'POST',
87
+ path: `/projects/${projectId}/jobs/${args.job_id}/cancel`,
88
+ });
89
+ return res.data;
90
+ }));
91
+ server.tool('job_play', 'Play a manual job, optionally with per-run variables.', {
92
+ ...ProjectIdArg,
93
+ job_id: z.number().int().positive(),
94
+ job_variables_attributes: z.array(JobVariable).optional(),
95
+ }, async (args) => safe(async () => {
96
+ const projectId = resolveProjectId(ctx.config, args.project_id);
97
+ const body = {};
98
+ if (args.job_variables_attributes) {
99
+ body['job_variables_attributes'] = args.job_variables_attributes;
100
+ }
101
+ const res = await ctx.rest.request({
102
+ method: 'POST',
103
+ path: `/projects/${projectId}/jobs/${args.job_id}/play`,
104
+ body: Object.keys(body).length > 0 ? body : undefined,
105
+ });
106
+ return res.data;
107
+ }));
108
+ server.tool('job_erase', 'Erase a job\'s log and downloadable artifacts.', { ...ProjectIdArg, job_id: z.number().int().positive() }, async (args) => safe(async () => {
109
+ const projectId = resolveProjectId(ctx.config, args.project_id);
110
+ const res = await ctx.rest.request({
111
+ method: 'POST',
112
+ path: `/projects/${projectId}/jobs/${args.job_id}/erase`,
113
+ });
114
+ return res.data;
115
+ }));
116
+ server.tool('job_artifacts_keep', 'Pin a job\'s artifacts so they are not deleted by expiration policy.', { ...ProjectIdArg, job_id: z.number().int().positive() }, async (args) => safe(async () => {
117
+ const projectId = resolveProjectId(ctx.config, args.project_id);
118
+ const res = await ctx.rest.request({
119
+ method: 'POST',
120
+ path: `/projects/${projectId}/jobs/${args.job_id}/artifacts/keep`,
121
+ });
122
+ return res.data;
123
+ }));
124
+ server.tool('job_artifacts_delete', 'Delete the artifacts attached to a job.', { ...ProjectIdArg, job_id: z.number().int().positive() }, async (args) => safe(async () => {
125
+ const projectId = resolveProjectId(ctx.config, args.project_id);
126
+ const res = await ctx.rest.request({
127
+ method: 'DELETE',
128
+ path: `/projects/${projectId}/jobs/${args.job_id}/artifacts`,
129
+ });
130
+ return res.data ?? { ok: true };
131
+ }));
132
+ server.tool('job_artifacts_download', 'Download the full artifacts archive of a job (ZIP). Saves to `save_to` if provided; otherwise returns base64 (capped by max_inline_bytes).', {
133
+ ...ProjectIdArg,
134
+ job_id: z.number().int().positive(),
135
+ save_to: z.string().optional().describe('Absolute path on the MCP host to write the ZIP.'),
136
+ max_inline_bytes: z
137
+ .number()
138
+ .int()
139
+ .positive()
140
+ .max(50 * 1024 * 1024)
141
+ .optional()
142
+ .describe('Default 1 MiB. Used only when save_to is omitted.'),
143
+ }, async (args) => safe(async () => {
144
+ const projectId = resolveProjectId(ctx.config, args.project_id);
145
+ const res = await ctx.rest.downloadBinary({
146
+ path: `/projects/${projectId}/jobs/${args.job_id}/artifacts`,
147
+ ...(args.save_to ? { saveTo: args.save_to } : {}),
148
+ ...(args.max_inline_bytes ? { maxInlineBytes: args.max_inline_bytes } : {}),
149
+ });
150
+ return res;
151
+ }));
152
+ server.tool('job_artifact_file_download', 'Download a single file from a job\'s artifacts by path within the archive.', {
153
+ ...ProjectIdArg,
154
+ job_id: z.number().int().positive(),
155
+ artifact_path: z.string().describe('Path inside the artifact archive, e.g. "dist/index.html".'),
156
+ save_to: z.string().optional(),
157
+ max_inline_bytes: z.number().int().positive().optional(),
158
+ }, async (args) => safe(async () => {
159
+ const projectId = resolveProjectId(ctx.config, args.project_id);
160
+ const encoded = args.artifact_path
161
+ .split('/')
162
+ .map((p) => encodeURIComponent(p))
163
+ .join('/');
164
+ const res = await ctx.rest.downloadBinary({
165
+ path: `/projects/${projectId}/jobs/${args.job_id}/artifacts/${encoded}`,
166
+ ...(args.save_to ? { saveTo: args.save_to } : {}),
167
+ ...(args.max_inline_bytes ? { maxInlineBytes: args.max_inline_bytes } : {}),
168
+ });
169
+ return res;
170
+ }));
171
+ server.tool('job_artifacts_download_by_ref', 'Download the artifacts archive of the latest successful build of job_name on ref_name.', {
172
+ ...ProjectIdArg,
173
+ ref_name: z.string(),
174
+ job_name: z.string(),
175
+ save_to: z.string().optional(),
176
+ max_inline_bytes: z.number().int().positive().optional(),
177
+ }, async (args) => safe(async () => {
178
+ const projectId = resolveProjectId(ctx.config, args.project_id);
179
+ const res = await ctx.rest.downloadBinary({
180
+ path: `/projects/${projectId}/jobs/artifacts/${encodeURIComponent(args.ref_name)}/download`,
181
+ query: { job: args.job_name },
182
+ ...(args.save_to ? { saveTo: args.save_to } : {}),
183
+ ...(args.max_inline_bytes ? { maxInlineBytes: args.max_inline_bytes } : {}),
184
+ });
185
+ return res;
186
+ }));
187
+ server.tool('job_artifact_file_download_by_ref', 'Download a single artifact file from the latest successful build of job_name on ref_name.', {
188
+ ...ProjectIdArg,
189
+ ref_name: z.string(),
190
+ job_name: z.string(),
191
+ artifact_path: z.string(),
192
+ save_to: z.string().optional(),
193
+ max_inline_bytes: z.number().int().positive().optional(),
194
+ }, async (args) => safe(async () => {
195
+ const projectId = resolveProjectId(ctx.config, args.project_id);
196
+ const encoded = args.artifact_path
197
+ .split('/')
198
+ .map((p) => encodeURIComponent(p))
199
+ .join('/');
200
+ const res = await ctx.rest.downloadBinary({
201
+ path: `/projects/${projectId}/jobs/artifacts/${encodeURIComponent(args.ref_name)}/raw/${encoded}`,
202
+ query: { job: args.job_name },
203
+ ...(args.save_to ? { saveTo: args.save_to } : {}),
204
+ ...(args.max_inline_bytes ? { maxInlineBytes: args.max_inline_bytes } : {}),
205
+ });
206
+ return res;
207
+ }));
208
+ }
209
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/jobs/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 registerKeyTools(server: McpServer, ctx: ToolContext): void;
@@ -0,0 +1,140 @@
1
+ import { z } from 'zod';
2
+ import { PaginationArgs, ProjectIdArg } from '../../shared/args.js';
3
+ import { safe } from '../../shared/handlers.js';
4
+ import { resolveProjectId } from '../../shared/ids.js';
5
+ export function registerKeyTools(server, ctx) {
6
+ // -- SSH keys ----------------------------------------------------------
7
+ server.tool('ssh_key_list', 'List SSH keys. Without user_id, lists the current user\'s; admin can list any.', {
8
+ user_id: z.number().int().optional(),
9
+ ...PaginationArgs,
10
+ }, async (args) => safe(async () => {
11
+ const { user_id, ...rest } = args;
12
+ const path = user_id === undefined ? '/user/keys' : `/users/${user_id}/keys`;
13
+ const res = await ctx.rest.request({ path, query: rest });
14
+ return res.data;
15
+ }));
16
+ server.tool('ssh_key_get', 'Get an SSH key by id (current user).', { key_id: z.number().int().positive() }, async (args) => safe(async () => {
17
+ const res = await ctx.rest.request({ path: `/user/keys/${args.key_id}` });
18
+ return res.data;
19
+ }));
20
+ server.tool('ssh_key_create', 'Add an SSH key. Without user_id, adds to the current user; admin can target a user.', {
21
+ title: z.string(),
22
+ key: z.string().describe('Full public key including type and comment.'),
23
+ expires_at: z.string().optional(),
24
+ usage_type: z.enum(['auth', 'signing', 'auth_and_signing']).optional(),
25
+ user_id: z.number().int().optional(),
26
+ }, async (args) => safe(async () => {
27
+ const { user_id, ...body } = args;
28
+ const path = user_id === undefined ? '/user/keys' : `/users/${user_id}/keys`;
29
+ const res = await ctx.rest.request({ method: 'POST', path, body });
30
+ return res.data;
31
+ }));
32
+ server.tool('ssh_key_delete', 'Delete an SSH key. Without user_id, deletes from the current user.', {
33
+ key_id: z.number().int().positive(),
34
+ user_id: z.number().int().optional(),
35
+ }, async (args) => safe(async () => {
36
+ const path = args.user_id === undefined
37
+ ? `/user/keys/${args.key_id}`
38
+ : `/users/${args.user_id}/keys/${args.key_id}`;
39
+ const res = await ctx.rest.request({ method: 'DELETE', path });
40
+ return res.data ?? { ok: true };
41
+ }));
42
+ // -- GPG keys ---------------------------------------------------------
43
+ server.tool('gpg_key_list', 'List GPG keys for the current user (or another user when admin).', { user_id: z.number().int().optional(), ...PaginationArgs }, async (args) => safe(async () => {
44
+ const { user_id, ...rest } = args;
45
+ const path = user_id === undefined ? '/user/gpg_keys' : `/users/${user_id}/gpg_keys`;
46
+ const res = await ctx.rest.request({ path, query: rest });
47
+ return res.data;
48
+ }));
49
+ server.tool('gpg_key_create', 'Add a GPG key (ASCII-armored public key).', {
50
+ key: z.string(),
51
+ user_id: z.number().int().optional(),
52
+ }, async (args) => safe(async () => {
53
+ const path = args.user_id === undefined ? '/user/gpg_keys' : `/users/${args.user_id}/gpg_keys`;
54
+ const res = await ctx.rest.request({
55
+ method: 'POST',
56
+ path,
57
+ body: { key: args.key },
58
+ });
59
+ return res.data;
60
+ }));
61
+ server.tool('gpg_key_delete', 'Delete a GPG key.', {
62
+ key_id: z.number().int().positive(),
63
+ user_id: z.number().int().optional(),
64
+ }, async (args) => safe(async () => {
65
+ const path = args.user_id === undefined
66
+ ? `/user/gpg_keys/${args.key_id}`
67
+ : `/users/${args.user_id}/gpg_keys/${args.key_id}`;
68
+ const res = await ctx.rest.request({ method: 'DELETE', path });
69
+ return res.data ?? { ok: true };
70
+ }));
71
+ // -- Deploy keys ------------------------------------------------------
72
+ server.tool('deploy_key_list_project', 'List deploy keys configured on a project.', { ...ProjectIdArg, ...PaginationArgs }, async (args) => safe(async () => {
73
+ const projectId = resolveProjectId(ctx.config, args.project_id);
74
+ const { project_id: _p, ...rest } = args;
75
+ const res = await ctx.rest.request({
76
+ path: `/projects/${projectId}/deploy_keys`,
77
+ query: rest,
78
+ });
79
+ return res.data;
80
+ }));
81
+ server.tool('deploy_key_list_all', 'Admin: list all deploy keys on the instance.', PaginationArgs, async (args) => safe(async () => {
82
+ const res = await ctx.rest.request({ path: '/deploy_keys', query: args });
83
+ return res.data;
84
+ }));
85
+ server.tool('deploy_key_get', 'Get a deploy key on a project.', { ...ProjectIdArg, key_id: z.number().int().positive() }, async (args) => safe(async () => {
86
+ const projectId = resolveProjectId(ctx.config, args.project_id);
87
+ const res = await ctx.rest.request({
88
+ path: `/projects/${projectId}/deploy_keys/${args.key_id}`,
89
+ });
90
+ return res.data;
91
+ }));
92
+ server.tool('deploy_key_add', 'Add a new deploy key to a project.', {
93
+ ...ProjectIdArg,
94
+ title: z.string(),
95
+ key: z.string(),
96
+ can_push: z.boolean().optional(),
97
+ expires_at: z.string().optional(),
98
+ }, async (args) => safe(async () => {
99
+ const projectId = resolveProjectId(ctx.config, args.project_id);
100
+ const { project_id: _p, ...body } = args;
101
+ const res = await ctx.rest.request({
102
+ method: 'POST',
103
+ path: `/projects/${projectId}/deploy_keys`,
104
+ body,
105
+ });
106
+ return res.data;
107
+ }));
108
+ server.tool('deploy_key_update', 'Update a deploy key (only title/can_push).', {
109
+ ...ProjectIdArg,
110
+ key_id: z.number().int().positive(),
111
+ title: z.string().optional(),
112
+ can_push: z.boolean().optional(),
113
+ }, async (args) => safe(async () => {
114
+ const projectId = resolveProjectId(ctx.config, args.project_id);
115
+ const { project_id: _p, key_id, ...body } = args;
116
+ const res = await ctx.rest.request({
117
+ method: 'PUT',
118
+ path: `/projects/${projectId}/deploy_keys/${key_id}`,
119
+ body,
120
+ });
121
+ return res.data;
122
+ }));
123
+ server.tool('deploy_key_enable', 'Enable an existing deploy key (from another project) on this project.', { ...ProjectIdArg, key_id: z.number().int().positive() }, async (args) => safe(async () => {
124
+ const projectId = resolveProjectId(ctx.config, args.project_id);
125
+ const res = await ctx.rest.request({
126
+ method: 'POST',
127
+ path: `/projects/${projectId}/deploy_keys/${args.key_id}/enable`,
128
+ });
129
+ return res.data;
130
+ }));
131
+ server.tool('deploy_key_delete', 'Delete a deploy key from a project.', { ...ProjectIdArg, key_id: z.number().int().positive() }, async (args) => safe(async () => {
132
+ const projectId = resolveProjectId(ctx.config, args.project_id);
133
+ const res = await ctx.rest.request({
134
+ method: 'DELETE',
135
+ path: `/projects/${projectId}/deploy_keys/${args.key_id}`,
136
+ });
137
+ return res.data ?? { ok: true };
138
+ }));
139
+ }
140
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/keys/tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,GAAgB;IAClE,yEAAyE;IAEzE,MAAM,CAAC,IAAI,CACT,cAAc,EACd,gFAAgF,EAChF;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QACpC,GAAG,cAAc;KAClB,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,OAAO,OAAO,CAAC;QAC7E,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,sCAAsC,EACtC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,EACvC,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1E,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,qFAAqF,EACrF;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC,QAAQ,EAAE;QACtE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KACrC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,OAAO,OAAO,CAAC;QAC7E,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,oEAAoE,EACpE;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KACrC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,IAAI,GACR,IAAI,CAAC,OAAO,KAAK,SAAS;YACxB,CAAC,CAAC,cAAc,IAAI,CAAC,MAAM,EAAE;YAC7B,CAAC,CAAC,UAAU,IAAI,CAAC,OAAO,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;QACnD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAClC,CAAC,CAAC,CACL,CAAC;IAEF,wEAAwE;IAExE,MAAM,CAAC,IAAI,CACT,cAAc,EACd,kEAAkE,EAClE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,cAAc,EAAE,EAC3D,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,OAAO,WAAW,CAAC;QACrF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,2CAA2C,EAC3C;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KACrC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,IAAI,GACR,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,OAAO,WAAW,CAAC;QACpF,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YACjC,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;SACxB,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,mBAAmB,EACnB;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KACrC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,IAAI,GACR,IAAI,CAAC,OAAO,KAAK,SAAS;YACxB,CAAC,CAAC,kBAAkB,IAAI,CAAC,MAAM,EAAE;YACjC,CAAC,CAAC,UAAU,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAClC,CAAC,CAAC,CACL,CAAC;IAEF,wEAAwE;IAExE,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,2CAA2C,EAC3C,EAAE,GAAG,YAAY,EAAE,GAAG,cAAc,EAAE,EACtC,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YACjC,IAAI,EAAE,aAAa,SAAS,cAAc;YAC1C,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,8CAA8C,EAC9C,cAAc,EACd,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,gCAAgC,EAChC,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,EACxD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YACjC,IAAI,EAAE,aAAa,SAAS,gBAAgB,IAAI,CAAC,MAAM,EAAE;SAC1D,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,oCAAoC,EACpC;QACE,GAAG,YAAY;QACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAClC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YACjC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,aAAa,SAAS,cAAc;YAC1C,IAAI;SACL,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,4CAA4C,EAC5C;QACE,GAAG,YAAY;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KACjC,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QACjD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YACjC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,aAAa,SAAS,gBAAgB,MAAM,EAAE;YACpD,IAAI;SACL,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,uEAAuE,EACvE,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,EACxD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YACjC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,aAAa,SAAS,gBAAgB,IAAI,CAAC,MAAM,SAAS;SACjE,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,qCAAqC,EACrC,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,EACxD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,KAAK,IAAI,EAAE;QACd,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YACjC,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,aAAa,SAAS,gBAAgB,IAAI,CAAC,MAAM,EAAE;SAC1D,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAClC,CAAC,CAAC,CACL,CAAC;AACJ,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 registerLabelTools(server: McpServer, ctx: ToolContext): void;
@@ -0,0 +1,110 @@
1
+ import { z } from 'zod';
2
+ import { GroupIdArg, IdOrPath, PaginationArgs, ProjectIdArg } from '../../shared/args.js';
3
+ import { safe } from '../../shared/handlers.js';
4
+ import { resolveGroupId, resolveProjectId } from '../../shared/ids.js';
5
+ function scopedLabelsPath(scope, scopeId, suffix = '') {
6
+ return `/${scope === 'project' ? 'projects' : 'groups'}/${scopeId}/labels${suffix}`;
7
+ }
8
+ function resolveScopeId(ctx, scope, scopeId) {
9
+ return scope === 'project'
10
+ ? resolveProjectId(ctx.config, scopeId)
11
+ : resolveGroupId(ctx.config, scopeId);
12
+ }
13
+ export function registerLabelTools(server, ctx) {
14
+ server.tool('label_list_project', 'List labels in a project. Set include_ancestor_groups=true to include inherited group labels.', {
15
+ ...ProjectIdArg,
16
+ with_counts: z.boolean().optional(),
17
+ include_ancestor_groups: z.boolean().optional(),
18
+ search: z.string().optional(),
19
+ ...PaginationArgs,
20
+ }, async (args) => safe(async () => {
21
+ const projectId = resolveProjectId(ctx.config, args.project_id);
22
+ const { project_id: _p, ...rest } = args;
23
+ const res = await ctx.rest.request({
24
+ path: scopedLabelsPath('project', projectId),
25
+ query: rest,
26
+ });
27
+ return res.data;
28
+ }));
29
+ server.tool('label_list_group', 'List labels in a group.', {
30
+ ...GroupIdArg,
31
+ with_counts: z.boolean().optional(),
32
+ include_ancestor_groups: z.boolean().optional(),
33
+ include_descendant_groups: z.boolean().optional(),
34
+ only_group_labels: z.boolean().optional(),
35
+ search: z.string().optional(),
36
+ ...PaginationArgs,
37
+ }, async (args) => safe(async () => {
38
+ const groupId = resolveGroupId(ctx.config, args.group_id);
39
+ const { group_id: _g, ...rest } = args;
40
+ const res = await ctx.rest.request({
41
+ path: scopedLabelsPath('group', groupId),
42
+ query: rest,
43
+ });
44
+ return res.data;
45
+ }));
46
+ server.tool('label_create', 'Create a label scoped to a project or group.', {
47
+ scope: z.enum(['project', 'group']),
48
+ scope_id: IdOrPath.optional(),
49
+ name: z.string(),
50
+ color: z.string().describe('Hex color, e.g. "#FF0000" or named CSS color.'),
51
+ description: z.string().optional(),
52
+ priority: z.number().int().optional(),
53
+ }, async (args) => safe(async () => {
54
+ const scopeId = resolveScopeId(ctx, args.scope, args.scope_id);
55
+ const { scope, scope_id: _s, ...body } = args;
56
+ const res = await ctx.rest.request({
57
+ method: 'POST',
58
+ path: scopedLabelsPath(scope, scopeId),
59
+ body,
60
+ });
61
+ return res.data;
62
+ }));
63
+ server.tool('label_update', 'Update a label by id (or numeric label_id) within project or group.', {
64
+ scope: z.enum(['project', 'group']),
65
+ scope_id: IdOrPath.optional(),
66
+ label_id: z.union([z.number().int(), z.string()]).describe('Label id or name.'),
67
+ new_name: z.string().optional(),
68
+ color: z.string().optional(),
69
+ description: z.string().optional(),
70
+ priority: z.number().int().nullable().optional(),
71
+ }, async (args) => safe(async () => {
72
+ const scopeId = resolveScopeId(ctx, args.scope, args.scope_id);
73
+ const { scope, scope_id: _s, label_id, ...body } = args;
74
+ const res = await ctx.rest.request({
75
+ method: 'PUT',
76
+ path: scopedLabelsPath(scope, scopeId, `/${encodeURIComponent(String(label_id))}`),
77
+ body,
78
+ });
79
+ return res.data;
80
+ }));
81
+ server.tool('label_delete', 'Delete a label by id or name.', {
82
+ scope: z.enum(['project', 'group']),
83
+ scope_id: IdOrPath.optional(),
84
+ label_id: z.union([z.number().int(), z.string()]),
85
+ }, async (args) => safe(async () => {
86
+ const scopeId = resolveScopeId(ctx, args.scope, args.scope_id);
87
+ const res = await ctx.rest.request({
88
+ method: 'DELETE',
89
+ path: scopedLabelsPath(args.scope, scopeId, `/${encodeURIComponent(String(args.label_id))}`),
90
+ });
91
+ return res.data ?? { ok: true };
92
+ }));
93
+ server.tool('label_subscribe', 'Subscribe the current user to label notifications (project labels only).', { ...ProjectIdArg, label_id: z.union([z.number().int(), z.string()]) }, async (args) => safe(async () => {
94
+ const projectId = resolveProjectId(ctx.config, args.project_id);
95
+ const res = await ctx.rest.request({
96
+ method: 'POST',
97
+ path: `/projects/${projectId}/labels/${encodeURIComponent(String(args.label_id))}/subscribe`,
98
+ });
99
+ return res.data;
100
+ }));
101
+ server.tool('label_unsubscribe', 'Unsubscribe the current user from a project label.', { ...ProjectIdArg, label_id: z.union([z.number().int(), z.string()]) }, async (args) => safe(async () => {
102
+ const projectId = resolveProjectId(ctx.config, args.project_id);
103
+ const res = await ctx.rest.request({
104
+ method: 'POST',
105
+ path: `/projects/${projectId}/labels/${encodeURIComponent(String(args.label_id))}/unsubscribe`,
106
+ });
107
+ return res.data;
108
+ }));
109
+ }
110
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/labels/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 registerMemberTools(server: McpServer, ctx: ToolContext): void;