@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,137 @@
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 StrategyName = z.enum([
6
+ 'default',
7
+ 'gradualRolloutUserId',
8
+ 'flexibleRollout',
9
+ 'userWithId',
10
+ 'gitlabUserList',
11
+ ]);
12
+ const Strategy = z.object({
13
+ name: StrategyName,
14
+ parameters: z.record(z.string()).optional(),
15
+ scopes: z
16
+ .array(z.object({ environment_scope: z.string() }))
17
+ .optional(),
18
+ user_list: z.object({ id: z.number().int() }).optional(),
19
+ });
20
+ export function registerFeatureFlagTools(server, ctx) {
21
+ server.tool('feature_flag_list', 'List feature flags in a project.', {
22
+ ...ProjectIdArg,
23
+ scope: z.enum(['enabled', 'disabled']).optional(),
24
+ ...PaginationArgs,
25
+ }, async (args) => safe(async () => {
26
+ const projectId = resolveProjectId(ctx.config, args.project_id);
27
+ const { project_id: _p, ...rest } = args;
28
+ const res = await ctx.rest.request({
29
+ path: `/projects/${projectId}/feature_flags`,
30
+ query: rest,
31
+ });
32
+ return res.data;
33
+ }));
34
+ server.tool('feature_flag_get', 'Get a single feature flag by name.', { ...ProjectIdArg, feature_flag_name: z.string() }, async (args) => safe(async () => {
35
+ const projectId = resolveProjectId(ctx.config, args.project_id);
36
+ const res = await ctx.rest.request({
37
+ path: `/projects/${projectId}/feature_flags/${encodeURIComponent(args.feature_flag_name)}`,
38
+ });
39
+ return res.data;
40
+ }));
41
+ server.tool('feature_flag_create', 'Create a feature flag.', {
42
+ ...ProjectIdArg,
43
+ name: z.string(),
44
+ description: z.string().optional(),
45
+ version: z.enum(['new_version_flag']).optional().describe('Always "new_version_flag" on current API.'),
46
+ active: z.boolean().optional(),
47
+ strategies: z.array(Strategy).optional(),
48
+ }, async (args) => safe(async () => {
49
+ const projectId = resolveProjectId(ctx.config, args.project_id);
50
+ const { project_id: _p, ...body } = args;
51
+ const res = await ctx.rest.request({
52
+ method: 'POST',
53
+ path: `/projects/${projectId}/feature_flags`,
54
+ body,
55
+ });
56
+ return res.data;
57
+ }));
58
+ server.tool('feature_flag_update', 'Update a feature flag by name.', {
59
+ ...ProjectIdArg,
60
+ feature_flag_name: z.string(),
61
+ description: z.string().optional(),
62
+ active: z.boolean().optional(),
63
+ strategies: z.array(Strategy).optional(),
64
+ }, async (args) => safe(async () => {
65
+ const projectId = resolveProjectId(ctx.config, args.project_id);
66
+ const { project_id: _p, feature_flag_name, ...body } = args;
67
+ const res = await ctx.rest.request({
68
+ method: 'PUT',
69
+ path: `/projects/${projectId}/feature_flags/${encodeURIComponent(feature_flag_name)}`,
70
+ body,
71
+ });
72
+ return res.data;
73
+ }));
74
+ server.tool('feature_flag_delete', 'Delete a feature flag by name.', { ...ProjectIdArg, feature_flag_name: z.string() }, async (args) => safe(async () => {
75
+ const projectId = resolveProjectId(ctx.config, args.project_id);
76
+ const res = await ctx.rest.request({
77
+ method: 'DELETE',
78
+ path: `/projects/${projectId}/feature_flags/${encodeURIComponent(args.feature_flag_name)}`,
79
+ });
80
+ return res.data ?? { ok: true };
81
+ }));
82
+ // -- user lists (used by gitlabUserList strategy) -------------------
83
+ server.tool('feature_flag_user_list_list', 'List user lists usable with the gitlabUserList strategy.', { ...ProjectIdArg, search: z.string().optional(), ...PaginationArgs }, async (args) => safe(async () => {
84
+ const projectId = resolveProjectId(ctx.config, args.project_id);
85
+ const { project_id: _p, ...rest } = args;
86
+ const res = await ctx.rest.request({
87
+ path: `/projects/${projectId}/feature_flags_user_lists`,
88
+ query: rest,
89
+ });
90
+ return res.data;
91
+ }));
92
+ server.tool('feature_flag_user_list_get', 'Get a single user list by iid.', { ...ProjectIdArg, iid: 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
+ path: `/projects/${projectId}/feature_flags_user_lists/${args.iid}`,
96
+ });
97
+ return res.data;
98
+ }));
99
+ server.tool('feature_flag_user_list_create', 'Create a user list. `user_xids` is a comma-separated list of external user IDs.', {
100
+ ...ProjectIdArg,
101
+ name: z.string(),
102
+ user_xids: z.string().describe('Comma-separated external user IDs.'),
103
+ }, async (args) => safe(async () => {
104
+ const projectId = resolveProjectId(ctx.config, args.project_id);
105
+ const { project_id: _p, ...body } = args;
106
+ const res = await ctx.rest.request({
107
+ method: 'POST',
108
+ path: `/projects/${projectId}/feature_flags_user_lists`,
109
+ body,
110
+ });
111
+ return res.data;
112
+ }));
113
+ server.tool('feature_flag_user_list_update', 'Update a user list (replaces name and/or user_xids).', {
114
+ ...ProjectIdArg,
115
+ iid: z.number().int().positive(),
116
+ name: z.string().optional(),
117
+ user_xids: z.string().optional(),
118
+ }, async (args) => safe(async () => {
119
+ const projectId = resolveProjectId(ctx.config, args.project_id);
120
+ const { project_id: _p, iid, ...body } = args;
121
+ const res = await ctx.rest.request({
122
+ method: 'PUT',
123
+ path: `/projects/${projectId}/feature_flags_user_lists/${iid}`,
124
+ body,
125
+ });
126
+ return res.data;
127
+ }));
128
+ server.tool('feature_flag_user_list_delete', 'Delete a user list.', { ...ProjectIdArg, iid: z.number().int().positive() }, async (args) => safe(async () => {
129
+ const projectId = resolveProjectId(ctx.config, args.project_id);
130
+ const res = await ctx.rest.request({
131
+ method: 'DELETE',
132
+ path: `/projects/${projectId}/feature_flags_user_lists/${args.iid}`,
133
+ });
134
+ return res.data ?? { ok: true };
135
+ }));
136
+ }
137
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/feature_flags/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,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC;IAC1B,SAAS;IACT,sBAAsB;IACtB,iBAAiB;IACjB,YAAY;IACZ,gBAAgB;CACjB,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;IACxB,IAAI,EAAE,YAAY;IAClB,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3C,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;SAClD,QAAQ,EAAE;IACb,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzD,CAAC,CAAC;AAEH,MAAM,UAAU,wBAAwB,CAAC,MAAiB,EAAE,GAAgB;IAC1E,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,kCAAkC,EAClC;QACE,GAAG,YAAY;QACf,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;QACjD,GAAG,cAAc;KAClB,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,IAAI,EAAE,aAAa,SAAS,gBAAgB;YAC5C,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,oCAAoC,EACpC,EAAE,GAAG,YAAY,EAAE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAClD,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,kBAAkB,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;SAC3F,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,wBAAwB,EACxB;QACE,GAAG,YAAY;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACtG,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAC9B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;KACzC,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,gBAAgB;YAC5C,IAAI;SACL,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,gCAAgC,EAChC;QACE,GAAG,YAAY;QACf,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;QAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAC9B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;KACzC,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,iBAAiB,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YACjC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,aAAa,SAAS,kBAAkB,kBAAkB,CAAC,iBAAiB,CAAC,EAAE;YACrF,IAAI;SACL,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,gCAAgC,EAChC,EAAE,GAAG,YAAY,EAAE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAClD,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,kBAAkB,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;SAC3F,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAClC,CAAC,CAAC,CACL,CAAC;IAEF,sEAAsE;IAEtE,MAAM,CAAC,IAAI,CACT,6BAA6B,EAC7B,0DAA0D,EAC1D,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,cAAc,EAAE,EACrE,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,2BAA2B;YACvD,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,gCAAgC,EAChC,EAAE,GAAG,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,EACrD,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,6BAA6B,IAAI,CAAC,GAAG,EAAE;SACpE,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,+BAA+B,EAC/B,iFAAiF,EACjF;QACE,GAAG,YAAY;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KACrE,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,2BAA2B;YACvD,IAAI;SACL,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,+BAA+B,EAC/B,sDAAsD,EACtD;QACE,GAAG,YAAY;QACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,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,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QAC9C,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YACjC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,aAAa,SAAS,6BAA6B,GAAG,EAAE;YAC9D,IAAI;SACL,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,+BAA+B,EAC/B,qBAAqB,EACrB,EAAE,GAAG,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,EACrD,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,6BAA6B,IAAI,CAAC,GAAG,EAAE;SACpE,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 registerGroupTools(server: McpServer, ctx: ToolContext): void;
@@ -0,0 +1,145 @@
1
+ import { z } from 'zod';
2
+ import { GroupIdArg, IdOrPath, PaginationArgs } from '../../shared/args.js';
3
+ import { safe } from '../../shared/handlers.js';
4
+ import { encodeId, resolveGroupId } from '../../shared/ids.js';
5
+ const Visibility = z.enum(['private', 'internal', 'public']);
6
+ const GroupListFilters = {
7
+ search: z.string().optional(),
8
+ owned: z.boolean().optional(),
9
+ min_access_level: z.number().int().optional(),
10
+ top_level_only: z.boolean().optional(),
11
+ statistics: z.boolean().optional(),
12
+ with_custom_attributes: z.boolean().optional(),
13
+ all_available: z.boolean().optional(),
14
+ order_by: z.enum(['name', 'path', 'id', 'similarity']).optional(),
15
+ sort: z.enum(['asc', 'desc']).optional(),
16
+ ...PaginationArgs,
17
+ };
18
+ export function registerGroupTools(server, ctx) {
19
+ server.tool('group_list', 'List groups visible to the current user.', GroupListFilters, async (args) => safe(async () => {
20
+ const res = await ctx.rest.request({ path: '/groups', query: args });
21
+ return res.data;
22
+ }));
23
+ server.tool('group_get', 'Get a single group by id or path.', {
24
+ ...GroupIdArg,
25
+ with_projects: z.boolean().optional(),
26
+ with_custom_attributes: z.boolean().optional(),
27
+ }, async (args) => safe(async () => {
28
+ const groupId = resolveGroupId(ctx.config, args.group_id);
29
+ const { group_id: _g, ...rest } = args;
30
+ const res = await ctx.rest.request({
31
+ path: `/groups/${groupId}`,
32
+ query: rest,
33
+ });
34
+ return res.data;
35
+ }));
36
+ server.tool('group_create', 'Create a new group (or subgroup when parent_id is provided).', {
37
+ name: z.string(),
38
+ path: z.string(),
39
+ description: z.string().optional(),
40
+ visibility: Visibility.optional(),
41
+ parent_id: z.number().int().optional(),
42
+ auto_devops_enabled: z.boolean().optional(),
43
+ lfs_enabled: z.boolean().optional(),
44
+ request_access_enabled: z.boolean().optional(),
45
+ project_creation_level: z.enum(['noone', 'maintainer', 'developer']).optional(),
46
+ subgroup_creation_level: z.enum(['owner', 'maintainer']).optional(),
47
+ require_two_factor_authentication: z.boolean().optional(),
48
+ two_factor_grace_period: z.number().int().optional(),
49
+ }, async (args) => safe(async () => {
50
+ const res = await ctx.rest.request({ method: 'POST', path: '/groups', body: args });
51
+ return res.data;
52
+ }));
53
+ server.tool('group_update', 'Update group settings.', {
54
+ ...GroupIdArg,
55
+ name: z.string().optional(),
56
+ path: z.string().optional(),
57
+ description: z.string().optional(),
58
+ visibility: Visibility.optional(),
59
+ auto_devops_enabled: z.boolean().optional(),
60
+ lfs_enabled: z.boolean().optional(),
61
+ request_access_enabled: z.boolean().optional(),
62
+ project_creation_level: z.enum(['noone', 'maintainer', 'developer']).optional(),
63
+ subgroup_creation_level: z.enum(['owner', 'maintainer']).optional(),
64
+ shared_runners_setting: z
65
+ .enum(['enabled', 'disabled_and_overridable', 'disabled_and_unoverridable'])
66
+ .optional(),
67
+ }, async (args) => safe(async () => {
68
+ const groupId = resolveGroupId(ctx.config, args.group_id);
69
+ const { group_id: _g, ...body } = args;
70
+ const res = await ctx.rest.request({
71
+ method: 'PUT',
72
+ path: `/groups/${groupId}`,
73
+ body,
74
+ });
75
+ return res.data;
76
+ }));
77
+ server.tool('group_delete', 'Delete a group (with subgroups and projects). On gitlab.com this enters delayed delete.', { ...GroupIdArg, permanently_remove: z.boolean().optional(), full_path: z.string().optional() }, async (args) => safe(async () => {
78
+ const groupId = resolveGroupId(ctx.config, args.group_id);
79
+ const { group_id: _g, ...body } = args;
80
+ const res = await ctx.rest.request({
81
+ method: 'DELETE',
82
+ path: `/groups/${groupId}`,
83
+ body: Object.keys(body).length > 0 ? body : undefined,
84
+ });
85
+ return res.data ?? { ok: true };
86
+ }));
87
+ server.tool('group_subgroups', 'List direct subgroups of a group.', { ...GroupIdArg, ...GroupListFilters }, async (args) => safe(async () => {
88
+ const groupId = resolveGroupId(ctx.config, args.group_id);
89
+ const { group_id: _g, ...rest } = args;
90
+ const res = await ctx.rest.request({
91
+ path: `/groups/${groupId}/subgroups`,
92
+ query: rest,
93
+ });
94
+ return res.data;
95
+ }));
96
+ server.tool('group_descendants', 'List all descendant groups (recursive).', { ...GroupIdArg, ...GroupListFilters }, async (args) => safe(async () => {
97
+ const groupId = resolveGroupId(ctx.config, args.group_id);
98
+ const { group_id: _g, ...rest } = args;
99
+ const res = await ctx.rest.request({
100
+ path: `/groups/${groupId}/descendant_groups`,
101
+ query: rest,
102
+ });
103
+ return res.data;
104
+ }));
105
+ server.tool('group_projects', 'List projects in a group.', {
106
+ ...GroupIdArg,
107
+ archived: z.boolean().optional(),
108
+ visibility: Visibility.optional(),
109
+ search: z.string().optional(),
110
+ include_subgroups: z.boolean().optional(),
111
+ with_issues_enabled: z.boolean().optional(),
112
+ with_merge_requests_enabled: z.boolean().optional(),
113
+ simple: z.boolean().optional(),
114
+ starred: z.boolean().optional(),
115
+ order_by: z.enum(['id', 'name', 'path', 'created_at', 'updated_at', 'last_activity_at']).optional(),
116
+ sort: z.enum(['asc', 'desc']).optional(),
117
+ ...PaginationArgs,
118
+ }, async (args) => safe(async () => {
119
+ const groupId = resolveGroupId(ctx.config, args.group_id);
120
+ const { group_id: _g, ...rest } = args;
121
+ const res = await ctx.rest.request({
122
+ path: `/groups/${groupId}/projects`,
123
+ query: rest,
124
+ });
125
+ return res.data;
126
+ }));
127
+ server.tool('group_shared_projects', 'List projects that are shared into this group.', { ...GroupIdArg, ...PaginationArgs }, async (args) => safe(async () => {
128
+ const groupId = resolveGroupId(ctx.config, args.group_id);
129
+ const { group_id: _g, ...rest } = args;
130
+ const res = await ctx.rest.request({
131
+ path: `/groups/${groupId}/projects/shared`,
132
+ query: rest,
133
+ });
134
+ return res.data;
135
+ }));
136
+ server.tool('group_transfer_project', 'Transfer an existing project into this group.', { ...GroupIdArg, project_id: IdOrPath }, async (args) => safe(async () => {
137
+ const groupId = resolveGroupId(ctx.config, args.group_id);
138
+ const res = await ctx.rest.request({
139
+ method: 'POST',
140
+ path: `/groups/${groupId}/projects/${encodeId(args.project_id)}`,
141
+ });
142
+ return res.data;
143
+ }));
144
+ }
145
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/groups/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 registerIntegrationTools(server: McpServer, ctx: ToolContext): void;
@@ -0,0 +1,143 @@
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
+ const NotificationTriggers = {
6
+ push_events: z.boolean().optional(),
7
+ issues_events: z.boolean().optional(),
8
+ confidential_issues_events: z.boolean().optional(),
9
+ merge_requests_events: z.boolean().optional(),
10
+ tag_push_events: z.boolean().optional(),
11
+ note_events: z.boolean().optional(),
12
+ confidential_note_events: z.boolean().optional(),
13
+ pipeline_events: z.boolean().optional(),
14
+ wiki_page_events: z.boolean().optional(),
15
+ deployment_events: z.boolean().optional(),
16
+ };
17
+ export function registerIntegrationTools(server, ctx) {
18
+ server.tool('integration_list_project', 'List the active integrations configured on a project.', { ...ProjectIdArg }, async (args) => safe(async () => {
19
+ const projectId = resolveProjectId(ctx.config, args.project_id);
20
+ const res = await ctx.rest.request({
21
+ path: `/projects/${projectId}/integrations`,
22
+ });
23
+ return res.data;
24
+ }));
25
+ server.tool('integration_get', 'Get the configuration of a single integration on a project.', {
26
+ ...ProjectIdArg,
27
+ slug: z.string().describe('Integration slug, e.g. "slack", "jira", "mattermost".'),
28
+ }, async (args) => safe(async () => {
29
+ const projectId = resolveProjectId(ctx.config, args.project_id);
30
+ const res = await ctx.rest.request({
31
+ path: `/projects/${projectId}/integrations/${args.slug}`,
32
+ });
33
+ return res.data;
34
+ }));
35
+ server.tool('integration_set', 'Generic: activate or update any integration by slug. Pass integration-specific fields under `config`.', {
36
+ ...ProjectIdArg,
37
+ slug: z.string(),
38
+ config: z.record(z.unknown()).describe('Integration-specific configuration (see integration docs).'),
39
+ }, async (args) => safe(async () => {
40
+ const projectId = resolveProjectId(ctx.config, args.project_id);
41
+ const res = await ctx.rest.request({
42
+ method: 'PUT',
43
+ path: `/projects/${projectId}/integrations/${args.slug}`,
44
+ body: args.config,
45
+ });
46
+ return res.data;
47
+ }));
48
+ server.tool('integration_delete', 'Disable (delete) an integration on a project.', { ...ProjectIdArg, slug: z.string() }, async (args) => safe(async () => {
49
+ const projectId = resolveProjectId(ctx.config, args.project_id);
50
+ const res = await ctx.rest.request({
51
+ method: 'DELETE',
52
+ path: `/projects/${projectId}/integrations/${args.slug}`,
53
+ });
54
+ return res.data ?? { ok: true };
55
+ }));
56
+ // -- shortcuts for popular integrations ----------------------------------
57
+ server.tool('integration_set_slack', 'Configure the Slack notifications integration.', {
58
+ ...ProjectIdArg,
59
+ webhook: z.string().url(),
60
+ username: z.string().optional(),
61
+ channel: z.string().optional().describe('Default channel; per-event channels possible via *_channel.'),
62
+ branches_to_be_notified: z
63
+ .enum(['all', 'default', 'protected', 'default_and_protected'])
64
+ .optional(),
65
+ notify_only_broken_pipelines: z.boolean().optional(),
66
+ notify_only_default_branch: z.boolean().optional(),
67
+ ...NotificationTriggers,
68
+ }, async (args) => safe(async () => {
69
+ const projectId = resolveProjectId(ctx.config, args.project_id);
70
+ const { project_id: _p, ...body } = args;
71
+ const res = await ctx.rest.request({
72
+ method: 'PUT',
73
+ path: `/projects/${projectId}/integrations/slack`,
74
+ body,
75
+ });
76
+ return res.data;
77
+ }));
78
+ server.tool('integration_set_mattermost', 'Configure the Mattermost notifications integration.', {
79
+ ...ProjectIdArg,
80
+ webhook: z.string().url(),
81
+ username: z.string().optional(),
82
+ channel: z.string().optional(),
83
+ branches_to_be_notified: z
84
+ .enum(['all', 'default', 'protected', 'default_and_protected'])
85
+ .optional(),
86
+ notify_only_broken_pipelines: z.boolean().optional(),
87
+ ...NotificationTriggers,
88
+ }, async (args) => safe(async () => {
89
+ const projectId = resolveProjectId(ctx.config, args.project_id);
90
+ const { project_id: _p, ...body } = args;
91
+ const res = await ctx.rest.request({
92
+ method: 'PUT',
93
+ path: `/projects/${projectId}/integrations/mattermost`,
94
+ body,
95
+ });
96
+ return res.data;
97
+ }));
98
+ server.tool('integration_set_jira', 'Configure the Jira issue tracker integration.', {
99
+ ...ProjectIdArg,
100
+ url: z.string().url(),
101
+ api_url: z.string().url().optional(),
102
+ jira_auth_type: z.number().int().min(0).max(1).optional().describe('0=basic, 1=PAT'),
103
+ username: z.string().optional(),
104
+ password: z.string().describe('API token (Atlassian Cloud) or password.'),
105
+ project_keys: z.array(z.string()).optional(),
106
+ jira_issue_prefix: z.string().optional(),
107
+ jira_issue_regex: z.string().optional(),
108
+ jira_issue_transition_automatic: z.boolean().optional(),
109
+ jira_issue_transition_id: z.string().optional(),
110
+ comment_on_event_enabled: z.boolean().optional(),
111
+ issues_events: z.boolean().optional(),
112
+ commit_events: z.boolean().optional(),
113
+ merge_requests_events: z.boolean().optional(),
114
+ }, async (args) => safe(async () => {
115
+ const projectId = resolveProjectId(ctx.config, args.project_id);
116
+ const { project_id: _p, ...body } = args;
117
+ const res = await ctx.rest.request({
118
+ method: 'PUT',
119
+ path: `/projects/${projectId}/integrations/jira`,
120
+ body,
121
+ });
122
+ return res.data;
123
+ }));
124
+ server.tool('integration_set_microsoft_teams', 'Configure the Microsoft Teams notifications integration.', {
125
+ ...ProjectIdArg,
126
+ webhook: z.string().url(),
127
+ branches_to_be_notified: z
128
+ .enum(['all', 'default', 'protected', 'default_and_protected'])
129
+ .optional(),
130
+ notify_only_broken_pipelines: z.boolean().optional(),
131
+ ...NotificationTriggers,
132
+ }, async (args) => safe(async () => {
133
+ const projectId = resolveProjectId(ctx.config, args.project_id);
134
+ const { project_id: _p, ...body } = args;
135
+ const res = await ctx.rest.request({
136
+ method: 'PUT',
137
+ path: `/projects/${projectId}/integrations/microsoft-teams`,
138
+ body,
139
+ });
140
+ return res.data;
141
+ }));
142
+ }
143
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/groups/integrations/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 registerJobTools(server: McpServer, ctx: ToolContext): void;