@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,157 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { z } from 'zod';
3
+ import { GroupIdArg, PaginationArgs, ProjectIdArg } from '../../shared/args.js';
4
+ import { safe } from '../../shared/handlers.js';
5
+ import { resolveGroupId, resolveProjectId } from '../../shared/ids.js';
6
+ const PackageType = z.enum([
7
+ 'conan',
8
+ 'maven',
9
+ 'npm',
10
+ 'pypi',
11
+ 'composer',
12
+ 'nuget',
13
+ 'helm',
14
+ 'terraform_module',
15
+ 'golang',
16
+ 'generic',
17
+ 'debian',
18
+ 'rpm',
19
+ 'rubygems',
20
+ 'ml_model',
21
+ ]);
22
+ const PackageStatus = z.enum(['default', 'hidden', 'processing', 'error', 'pending_destruction']);
23
+ export function registerPackageTools(server, ctx) {
24
+ server.tool('package_list_project', 'List packages in a project.', {
25
+ ...ProjectIdArg,
26
+ order_by: z.enum(['created_at', 'name', 'version', 'type']).optional(),
27
+ sort: z.enum(['asc', 'desc']).optional(),
28
+ package_type: PackageType.optional(),
29
+ package_name: z.string().optional(),
30
+ package_version: z.string().optional(),
31
+ include_versionless: z.boolean().optional(),
32
+ status: PackageStatus.optional(),
33
+ ...PaginationArgs,
34
+ }, async (args) => safe(async () => {
35
+ const projectId = resolveProjectId(ctx.config, args.project_id);
36
+ const { project_id: _p, ...rest } = args;
37
+ const res = await ctx.rest.request({
38
+ path: `/projects/${projectId}/packages`,
39
+ query: rest,
40
+ });
41
+ return res.data;
42
+ }));
43
+ server.tool('package_list_group', 'List packages within a group (and optionally its subgroups).', {
44
+ ...GroupIdArg,
45
+ exclude_subgroups: z.boolean().optional(),
46
+ order_by: z.enum(['created_at', 'name', 'version', 'type', 'project_path']).optional(),
47
+ sort: z.enum(['asc', 'desc']).optional(),
48
+ package_type: PackageType.optional(),
49
+ package_name: z.string().optional(),
50
+ include_versionless: z.boolean().optional(),
51
+ status: PackageStatus.optional(),
52
+ ...PaginationArgs,
53
+ }, async (args) => safe(async () => {
54
+ const groupId = resolveGroupId(ctx.config, args.group_id);
55
+ const { group_id: _g, ...rest } = args;
56
+ const res = await ctx.rest.request({
57
+ path: `/groups/${groupId}/packages`,
58
+ query: rest,
59
+ });
60
+ return res.data;
61
+ }));
62
+ server.tool('package_get', 'Get a single package by id.', { ...ProjectIdArg, package_id: z.number().int().positive() }, async (args) => safe(async () => {
63
+ const projectId = resolveProjectId(ctx.config, args.project_id);
64
+ const res = await ctx.rest.request({
65
+ path: `/projects/${projectId}/packages/${args.package_id}`,
66
+ });
67
+ return res.data;
68
+ }));
69
+ server.tool('package_files', 'List files within a package.', { ...ProjectIdArg, package_id: z.number().int().positive(), ...PaginationArgs }, async (args) => safe(async () => {
70
+ const projectId = resolveProjectId(ctx.config, args.project_id);
71
+ const { project_id: _p, package_id, ...rest } = args;
72
+ const res = await ctx.rest.request({
73
+ path: `/projects/${projectId}/packages/${package_id}/package_files`,
74
+ query: rest,
75
+ });
76
+ return res.data;
77
+ }));
78
+ server.tool('package_file_delete', 'Delete a single file within a package.', {
79
+ ...ProjectIdArg,
80
+ package_id: z.number().int().positive(),
81
+ package_file_id: z.number().int().positive(),
82
+ }, async (args) => safe(async () => {
83
+ const projectId = resolveProjectId(ctx.config, args.project_id);
84
+ const res = await ctx.rest.request({
85
+ method: 'DELETE',
86
+ path: `/projects/${projectId}/packages/${args.package_id}/package_files/${args.package_file_id}`,
87
+ });
88
+ return res.data ?? { ok: true };
89
+ }));
90
+ server.tool('package_delete', 'Delete a whole package.', { ...ProjectIdArg, package_id: z.number().int().positive() }, async (args) => safe(async () => {
91
+ const projectId = resolveProjectId(ctx.config, args.project_id);
92
+ const res = await ctx.rest.request({
93
+ method: 'DELETE',
94
+ path: `/projects/${projectId}/packages/${args.package_id}`,
95
+ });
96
+ return res.data ?? { ok: true };
97
+ }));
98
+ // -- generic package files (binary upload/download) -----------------
99
+ server.tool('package_file_download_generic', 'Download a generic package file (binary). Saves to `save_to` if provided, else returns base64 (capped).', {
100
+ ...ProjectIdArg,
101
+ package_name: z.string(),
102
+ package_version: z.string(),
103
+ file_name: z.string(),
104
+ save_to: z.string().optional(),
105
+ max_inline_bytes: z
106
+ .number()
107
+ .int()
108
+ .positive()
109
+ .max(50 * 1024 * 1024)
110
+ .optional(),
111
+ }, async (args) => safe(async () => {
112
+ const projectId = resolveProjectId(ctx.config, args.project_id);
113
+ const res = await ctx.rest.downloadBinary({
114
+ path: `/projects/${projectId}/packages/generic/${encodeURIComponent(args.package_name)}/${encodeURIComponent(args.package_version)}/${encodeURIComponent(args.file_name)}`,
115
+ ...(args.save_to ? { saveTo: args.save_to } : {}),
116
+ ...(args.max_inline_bytes ? { maxInlineBytes: args.max_inline_bytes } : {}),
117
+ });
118
+ return res;
119
+ }));
120
+ server.tool('package_file_upload_generic', 'Upload a file to the generic package registry. Provide content via `content_base64` OR `local_path`.', {
121
+ ...ProjectIdArg,
122
+ package_name: z.string(),
123
+ package_version: z.string(),
124
+ file_name: z.string(),
125
+ content_base64: z.string().optional(),
126
+ local_path: z.string().optional().describe('Absolute path on the MCP host to read from.'),
127
+ content_type: z.string().optional().describe('Default application/octet-stream.'),
128
+ status: z.enum(['default', 'hidden']).optional(),
129
+ select: z.enum(['package_file']).optional(),
130
+ }, async (args) => safe(async () => {
131
+ if (!args.content_base64 && !args.local_path) {
132
+ throw new Error('Provide either content_base64 or local_path.');
133
+ }
134
+ const projectId = resolveProjectId(ctx.config, args.project_id);
135
+ let body;
136
+ if (args.local_path) {
137
+ body = await readFile(args.local_path);
138
+ }
139
+ else {
140
+ body = Buffer.from(args.content_base64 ?? '', 'base64');
141
+ }
142
+ const query = {};
143
+ if (args.status)
144
+ query['status'] = args.status;
145
+ if (args.select)
146
+ query['select'] = args.select;
147
+ const res = await ctx.rest.uploadBinary({
148
+ method: 'PUT',
149
+ path: `/projects/${projectId}/packages/generic/${encodeURIComponent(args.package_name)}/${encodeURIComponent(args.package_version)}/${encodeURIComponent(args.file_name)}`,
150
+ body,
151
+ contentType: args.content_type ?? 'application/octet-stream',
152
+ ...(Object.keys(query).length > 0 ? { query } : {}),
153
+ });
154
+ return res.data;
155
+ }));
156
+ }
157
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/packages/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 registerPipelineScheduleTools(server: McpServer, ctx: ToolContext): void;
@@ -0,0 +1,127 @@
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 VariableType = z.enum(['env_var', 'file']);
6
+ export function registerPipelineScheduleTools(server, ctx) {
7
+ server.tool('schedule_list', 'List pipeline schedules in a project.', { ...ProjectIdArg, scope: z.enum(['active', 'inactive']).optional(), ...PaginationArgs }, async (args) => safe(async () => {
8
+ const projectId = resolveProjectId(ctx.config, args.project_id);
9
+ const { project_id: _p, ...rest } = args;
10
+ const res = await ctx.rest.request({
11
+ path: `/projects/${projectId}/pipeline_schedules`,
12
+ query: rest,
13
+ });
14
+ return res.data;
15
+ }));
16
+ server.tool('schedule_get', 'Get a single pipeline schedule with its variables.', { ...ProjectIdArg, pipeline_schedule_id: z.number().int().positive() }, async (args) => safe(async () => {
17
+ const projectId = resolveProjectId(ctx.config, args.project_id);
18
+ const res = await ctx.rest.request({
19
+ path: `/projects/${projectId}/pipeline_schedules/${args.pipeline_schedule_id}`,
20
+ });
21
+ return res.data;
22
+ }));
23
+ server.tool('schedule_create', 'Create a new pipeline schedule.', {
24
+ ...ProjectIdArg,
25
+ description: z.string(),
26
+ ref: z.string(),
27
+ cron: z.string().describe('Cron expression (5 fields).'),
28
+ cron_timezone: z.string().optional().describe('IANA timezone (default UTC).'),
29
+ active: z.boolean().optional(),
30
+ }, async (args) => safe(async () => {
31
+ const projectId = resolveProjectId(ctx.config, args.project_id);
32
+ const { project_id: _p, ...body } = args;
33
+ const res = await ctx.rest.request({
34
+ method: 'POST',
35
+ path: `/projects/${projectId}/pipeline_schedules`,
36
+ body,
37
+ });
38
+ return res.data;
39
+ }));
40
+ server.tool('schedule_update', 'Update a pipeline schedule.', {
41
+ ...ProjectIdArg,
42
+ pipeline_schedule_id: z.number().int().positive(),
43
+ description: z.string().optional(),
44
+ ref: z.string().optional(),
45
+ cron: z.string().optional(),
46
+ cron_timezone: z.string().optional(),
47
+ active: z.boolean().optional(),
48
+ }, async (args) => safe(async () => {
49
+ const projectId = resolveProjectId(ctx.config, args.project_id);
50
+ const { project_id: _p, pipeline_schedule_id, ...body } = args;
51
+ const res = await ctx.rest.request({
52
+ method: 'PUT',
53
+ path: `/projects/${projectId}/pipeline_schedules/${pipeline_schedule_id}`,
54
+ body,
55
+ });
56
+ return res.data;
57
+ }));
58
+ server.tool('schedule_delete', 'Delete a pipeline schedule.', { ...ProjectIdArg, pipeline_schedule_id: z.number().int().positive() }, async (args) => safe(async () => {
59
+ const projectId = resolveProjectId(ctx.config, args.project_id);
60
+ const res = await ctx.rest.request({
61
+ method: 'DELETE',
62
+ path: `/projects/${projectId}/pipeline_schedules/${args.pipeline_schedule_id}`,
63
+ });
64
+ return res.data ?? { ok: true };
65
+ }));
66
+ server.tool('schedule_play', 'Run a pipeline from a schedule immediately (out of cadence).', { ...ProjectIdArg, pipeline_schedule_id: z.number().int().positive() }, async (args) => safe(async () => {
67
+ const projectId = resolveProjectId(ctx.config, args.project_id);
68
+ const res = await ctx.rest.request({
69
+ method: 'POST',
70
+ path: `/projects/${projectId}/pipeline_schedules/${args.pipeline_schedule_id}/play`,
71
+ });
72
+ return res.data ?? { ok: true };
73
+ }));
74
+ server.tool('schedule_take_ownership', 'Take ownership of a pipeline schedule from another user.', { ...ProjectIdArg, pipeline_schedule_id: z.number().int().positive() }, async (args) => safe(async () => {
75
+ const projectId = resolveProjectId(ctx.config, args.project_id);
76
+ const res = await ctx.rest.request({
77
+ method: 'POST',
78
+ path: `/projects/${projectId}/pipeline_schedules/${args.pipeline_schedule_id}/take_ownership`,
79
+ });
80
+ return res.data;
81
+ }));
82
+ server.tool('schedule_variable_create', 'Add a variable to a pipeline schedule.', {
83
+ ...ProjectIdArg,
84
+ pipeline_schedule_id: z.number().int().positive(),
85
+ key: z.string(),
86
+ value: z.string(),
87
+ variable_type: VariableType.optional(),
88
+ }, async (args) => safe(async () => {
89
+ const projectId = resolveProjectId(ctx.config, args.project_id);
90
+ const { project_id: _p, pipeline_schedule_id, ...body } = args;
91
+ const res = await ctx.rest.request({
92
+ method: 'POST',
93
+ path: `/projects/${projectId}/pipeline_schedules/${pipeline_schedule_id}/variables`,
94
+ body,
95
+ });
96
+ return res.data;
97
+ }));
98
+ server.tool('schedule_variable_update', 'Update a schedule variable by key.', {
99
+ ...ProjectIdArg,
100
+ pipeline_schedule_id: z.number().int().positive(),
101
+ key: z.string(),
102
+ value: z.string().optional(),
103
+ variable_type: VariableType.optional(),
104
+ }, async (args) => safe(async () => {
105
+ const projectId = resolveProjectId(ctx.config, args.project_id);
106
+ const { project_id: _p, pipeline_schedule_id, key, ...body } = args;
107
+ const res = await ctx.rest.request({
108
+ method: 'PUT',
109
+ path: `/projects/${projectId}/pipeline_schedules/${pipeline_schedule_id}/variables/${encodeURIComponent(key)}`,
110
+ body,
111
+ });
112
+ return res.data;
113
+ }));
114
+ server.tool('schedule_variable_delete', 'Delete a schedule variable by key.', {
115
+ ...ProjectIdArg,
116
+ pipeline_schedule_id: z.number().int().positive(),
117
+ key: z.string(),
118
+ }, async (args) => safe(async () => {
119
+ const projectId = resolveProjectId(ctx.config, args.project_id);
120
+ const res = await ctx.rest.request({
121
+ method: 'DELETE',
122
+ path: `/projects/${projectId}/pipeline_schedules/${args.pipeline_schedule_id}/variables/${encodeURIComponent(args.key)}`,
123
+ });
124
+ return res.data ?? { ok: true };
125
+ }));
126
+ }
127
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/pipeline_schedules/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 registerPipelineTriggerTools(server: McpServer, ctx: ToolContext): void;
@@ -0,0 +1,74 @@
1
+ import { z } from 'zod';
2
+ import { ProjectIdArg } from '../../shared/args.js';
3
+ import { safe } from '../../shared/handlers.js';
4
+ import { resolveProjectId } from '../../shared/ids.js';
5
+ export function registerPipelineTriggerTools(server, ctx) {
6
+ server.tool('trigger_list', 'List pipeline trigger tokens for a project.', { ...ProjectIdArg }, async (args) => safe(async () => {
7
+ const projectId = resolveProjectId(ctx.config, args.project_id);
8
+ const res = await ctx.rest.request({
9
+ path: `/projects/${projectId}/triggers`,
10
+ });
11
+ return res.data;
12
+ }));
13
+ server.tool('trigger_get', 'Get a single trigger by id.', { ...ProjectIdArg, trigger_id: z.number().int().positive() }, async (args) => safe(async () => {
14
+ const projectId = resolveProjectId(ctx.config, args.project_id);
15
+ const res = await ctx.rest.request({
16
+ path: `/projects/${projectId}/triggers/${args.trigger_id}`,
17
+ });
18
+ return res.data;
19
+ }));
20
+ server.tool('trigger_create', 'Create a new trigger token. The token value is returned only once.', { ...ProjectIdArg, description: z.string() }, async (args) => safe(async () => {
21
+ const projectId = resolveProjectId(ctx.config, args.project_id);
22
+ const res = await ctx.rest.request({
23
+ method: 'POST',
24
+ path: `/projects/${projectId}/triggers`,
25
+ body: { description: args.description },
26
+ });
27
+ return res.data;
28
+ }));
29
+ server.tool('trigger_update', 'Update a trigger description.', {
30
+ ...ProjectIdArg,
31
+ trigger_id: z.number().int().positive(),
32
+ description: z.string(),
33
+ }, async (args) => safe(async () => {
34
+ const projectId = resolveProjectId(ctx.config, args.project_id);
35
+ const res = await ctx.rest.request({
36
+ method: 'PUT',
37
+ path: `/projects/${projectId}/triggers/${args.trigger_id}`,
38
+ body: { description: args.description },
39
+ });
40
+ return res.data;
41
+ }));
42
+ server.tool('trigger_delete', 'Delete (revoke) a trigger token.', { ...ProjectIdArg, trigger_id: z.number().int().positive() }, async (args) => safe(async () => {
43
+ const projectId = resolveProjectId(ctx.config, args.project_id);
44
+ const res = await ctx.rest.request({
45
+ method: 'DELETE',
46
+ path: `/projects/${projectId}/triggers/${args.trigger_id}`,
47
+ });
48
+ return res.data ?? { ok: true };
49
+ }));
50
+ server.tool('trigger_run_pipeline', 'Run a pipeline via a trigger token. Variables are sent as variables[KEY]=value.', {
51
+ ...ProjectIdArg,
52
+ token: z.string().describe('Trigger token value.'),
53
+ ref: z.string(),
54
+ variables: z
55
+ .record(z.string())
56
+ .optional()
57
+ .describe('Map of variable name → value (KEY=string).'),
58
+ }, async (args) => safe(async () => {
59
+ const projectId = resolveProjectId(ctx.config, args.project_id);
60
+ const query = { token: args.token, ref: args.ref };
61
+ if (args.variables) {
62
+ for (const [k, v] of Object.entries(args.variables)) {
63
+ query[`variables[${k}]`] = v;
64
+ }
65
+ }
66
+ const res = await ctx.rest.request({
67
+ method: 'POST',
68
+ path: `/projects/${projectId}/trigger/pipeline`,
69
+ query,
70
+ });
71
+ return res.data;
72
+ }));
73
+ }
74
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/pipeline_triggers/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 registerPipelineTools(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
+ const PipelineStatus = z.enum([
6
+ 'created',
7
+ 'waiting_for_resource',
8
+ 'preparing',
9
+ 'pending',
10
+ 'running',
11
+ 'success',
12
+ 'failed',
13
+ 'canceled',
14
+ 'skipped',
15
+ 'manual',
16
+ 'scheduled',
17
+ ]);
18
+ const PipelineSource = z.enum([
19
+ 'push',
20
+ 'web',
21
+ 'trigger',
22
+ 'schedule',
23
+ 'api',
24
+ 'external',
25
+ 'pipeline',
26
+ 'chat',
27
+ 'webide',
28
+ 'merge_request_event',
29
+ 'external_pull_request_event',
30
+ 'parent_pipeline',
31
+ 'ondemand_dast_scan',
32
+ 'ondemand_dast_validation',
33
+ ]);
34
+ const PipelineVariable = z.object({
35
+ key: z.string(),
36
+ value: z.string(),
37
+ variable_type: z.enum(['env_var', 'file']).optional(),
38
+ });
39
+ export function registerPipelineTools(server, ctx) {
40
+ server.tool('pipeline_list', 'List pipelines for a project with filters.', {
41
+ ...ProjectIdArg,
42
+ status: PipelineStatus.optional(),
43
+ ref: z.string().optional(),
44
+ sha: z.string().optional(),
45
+ source: PipelineSource.optional(),
46
+ username: z.string().optional(),
47
+ yaml_errors: z.boolean().optional(),
48
+ name: z.string().optional(),
49
+ updated_after: z.string().optional(),
50
+ updated_before: z.string().optional(),
51
+ order_by: z
52
+ .enum(['id', 'status', 'ref', 'updated_at', 'user_id'])
53
+ .optional(),
54
+ sort: z.enum(['asc', 'desc']).optional(),
55
+ scope: z.enum(['running', 'pending', 'finished', 'branches', 'tags']).optional(),
56
+ ...PaginationArgs,
57
+ }, async (args) => safe(async () => {
58
+ const projectId = resolveProjectId(ctx.config, args.project_id);
59
+ const { project_id: _p, ...rest } = args;
60
+ const res = await ctx.rest.request({
61
+ path: `/projects/${projectId}/pipelines`,
62
+ query: rest,
63
+ });
64
+ return res.data;
65
+ }));
66
+ server.tool('pipeline_get', 'Get a single pipeline by id.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
67
+ const projectId = resolveProjectId(ctx.config, args.project_id);
68
+ const res = await ctx.rest.request({
69
+ path: `/projects/${projectId}/pipelines/${args.pipeline_id}`,
70
+ });
71
+ return res.data;
72
+ }));
73
+ server.tool('pipeline_latest', 'Get the latest pipeline for a ref (default project default branch).', { ...ProjectIdArg, ref: z.string().optional() }, async (args) => safe(async () => {
74
+ const projectId = resolveProjectId(ctx.config, args.project_id);
75
+ const res = await ctx.rest.request({
76
+ path: `/projects/${projectId}/pipelines/latest`,
77
+ ...(args.ref !== undefined ? { query: { ref: args.ref } } : {}),
78
+ });
79
+ return res.data;
80
+ }));
81
+ server.tool('pipeline_create', 'Trigger a new pipeline on a ref with optional variables.', {
82
+ ...ProjectIdArg,
83
+ ref: z.string(),
84
+ variables: z.array(PipelineVariable).optional(),
85
+ }, async (args) => safe(async () => {
86
+ const projectId = resolveProjectId(ctx.config, args.project_id);
87
+ const res = await ctx.rest.request({
88
+ method: 'POST',
89
+ path: `/projects/${projectId}/pipeline`,
90
+ body: { ref: args.ref, ...(args.variables ? { variables: args.variables } : {}) },
91
+ });
92
+ return res.data;
93
+ }));
94
+ server.tool('pipeline_retry', 'Retry failed/canceled builds in a pipeline.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
95
+ const projectId = resolveProjectId(ctx.config, args.project_id);
96
+ const res = await ctx.rest.request({
97
+ method: 'POST',
98
+ path: `/projects/${projectId}/pipelines/${args.pipeline_id}/retry`,
99
+ });
100
+ return res.data;
101
+ }));
102
+ server.tool('pipeline_cancel', 'Cancel a running pipeline.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
103
+ const projectId = resolveProjectId(ctx.config, args.project_id);
104
+ const res = await ctx.rest.request({
105
+ method: 'POST',
106
+ path: `/projects/${projectId}/pipelines/${args.pipeline_id}/cancel`,
107
+ });
108
+ return res.data;
109
+ }));
110
+ server.tool('pipeline_delete', 'Delete a pipeline (Maintainer+). Removes jobs and artifacts.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
111
+ const projectId = resolveProjectId(ctx.config, args.project_id);
112
+ const res = await ctx.rest.request({
113
+ method: 'DELETE',
114
+ path: `/projects/${projectId}/pipelines/${args.pipeline_id}`,
115
+ });
116
+ return res.data ?? { ok: true };
117
+ }));
118
+ server.tool('pipeline_variables', 'List variables that were used to run the pipeline.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
119
+ const projectId = resolveProjectId(ctx.config, args.project_id);
120
+ const res = await ctx.rest.request({
121
+ path: `/projects/${projectId}/pipelines/${args.pipeline_id}/variables`,
122
+ });
123
+ return res.data;
124
+ }));
125
+ server.tool('pipeline_test_report', 'Get the full JUnit test report for a pipeline.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
126
+ const projectId = resolveProjectId(ctx.config, args.project_id);
127
+ const res = await ctx.rest.request({
128
+ path: `/projects/${projectId}/pipelines/${args.pipeline_id}/test_report`,
129
+ });
130
+ return res.data;
131
+ }));
132
+ server.tool('pipeline_test_report_summary', 'Get aggregate test counts (total, success, failed, skipped) for a pipeline.', { ...ProjectIdArg, pipeline_id: z.number().int().positive() }, async (args) => safe(async () => {
133
+ const projectId = resolveProjectId(ctx.config, args.project_id);
134
+ const res = await ctx.rest.request({
135
+ path: `/projects/${projectId}/pipelines/${args.pipeline_id}/test_report_summary`,
136
+ });
137
+ return res.data;
138
+ }));
139
+ }
140
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/pipelines/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 registerProjectTools(server: McpServer, ctx: ToolContext): void;