@wanadev/mcp-gitlab 1.0.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.
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { GitLabClient } from "../client.js";
3
+ export declare function registerEpicTools(server: McpServer, client: GitLabClient): void;
4
+ //# sourceMappingURL=epics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epics.d.ts","sourceRoot":"","sources":["../../src/tools/epics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAoDjD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CA6O/E"}
@@ -0,0 +1,279 @@
1
+ import { z } from "zod";
2
+ const groupIdSchema = z.string().describe("ID ou chemin URL du groupe GitLab (ex: '42' ou 'wanadev/kp1'). Si vous n'avez que le nom, appelez d'abord list_groups pour trouver le chemin exact.");
3
+ const dryRunSchema = z.boolean().default(true).describe("Dry run mode (default: true). When true, returns a preview of the action without executing it. Set to false only after user confirmation.");
4
+ function dryRunResponse(action, details) {
5
+ const lines = Object.entries(details)
6
+ .filter(([, v]) => v !== undefined)
7
+ .map(([k, v]) => ` - **${k}:** ${v}`);
8
+ const text = `[DRY RUN] ${action}\n\n${lines.join("\n")}\n\nThis is a preview. Ask the user to confirm in their language before re-calling with dry_run=false.`;
9
+ return { content: [{ type: "text", text }] };
10
+ }
11
+ function formatEpic(e) {
12
+ const labels = e.labels.length > 0 ? ` — Labels: ${e.labels.join(", ")}` : "";
13
+ const due = e.due_date ? ` — Echeance: ${e.due_date}` : "";
14
+ const start = e.start_date ? ` — Debut: ${e.start_date}` : "";
15
+ return `**${e.title}** (#${e.iid}) — ${e.state}${labels}${start}${due}\n ${e.web_url}`;
16
+ }
17
+ function formatEpics(epics) {
18
+ if (epics.length === 0)
19
+ return "Aucun epic trouve.";
20
+ return `${epics.length} epic(s) :\n\n${epics.map(formatEpic).join("\n\n")}`;
21
+ }
22
+ function formatEpicDetail(e) {
23
+ const parts = [
24
+ `# ${e.title} (#${e.iid})`,
25
+ `**Etat:** ${e.state}`,
26
+ `**Auteur:** ${e.author.name} (@${e.author.username})`,
27
+ e.labels.length > 0 ? `**Labels:** ${e.labels.join(", ")}` : null,
28
+ e.start_date ? `**Debut:** ${e.start_date}` : null,
29
+ e.due_date ? `**Echeance:** ${e.due_date}` : null,
30
+ `**Cree le:** ${e.created_at}`,
31
+ `**Mis a jour:** ${e.updated_at}`,
32
+ e.closed_at ? `**Ferme le:** ${e.closed_at}` : null,
33
+ `**Lien:** ${e.web_url}`,
34
+ e.description ? `\n---\n${e.description}` : null,
35
+ ];
36
+ return parts.filter(Boolean).join("\n");
37
+ }
38
+ function formatIssueInEpic(i) {
39
+ const assignees = i.assignees.length > 0
40
+ ? ` — Assignes: ${i.assignees.map((a) => `@${a.username}`).join(", ")}`
41
+ : "";
42
+ const labels = i.labels.length > 0 ? ` — Labels: ${i.labels.join(", ")}` : "";
43
+ return `**${i.title}** (project:${i.project_id} #${i.iid}, id:${i.id}) — ${i.state}${assignees}${labels}\n ${i.web_url}`;
44
+ }
45
+ export function registerEpicTools(server, client) {
46
+ server.registerTool("list_epics", {
47
+ description: "Lister les epics d'un groupe GitLab. Filtrer par etat, recherche textuelle ou labels.",
48
+ inputSchema: {
49
+ group_id: groupIdSchema,
50
+ state: z.enum(["opened", "closed", "all"]).optional().describe("Filtrer par etat (defaut: all)"),
51
+ search: z.string().optional().describe("Recherche textuelle dans le titre/description"),
52
+ labels: z.string().optional().describe("Filtrer par labels (separes par virgule)"),
53
+ order_by: z.enum(["created_at", "updated_at", "title"]).optional().describe("Trier par champ"),
54
+ sort: z.enum(["asc", "desc"]).optional().describe("Ordre de tri"),
55
+ },
56
+ annotations: { readOnlyHint: true },
57
+ }, async (args) => {
58
+ try {
59
+ const { group_id, ...params } = args;
60
+ const epics = await client.listEpics(group_id, params);
61
+ return { content: [{ type: "text", text: formatEpics(epics) }] };
62
+ }
63
+ catch (error) {
64
+ return {
65
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
66
+ isError: true,
67
+ };
68
+ }
69
+ });
70
+ server.registerTool("get_epic", {
71
+ description: "Obtenir les details complets d'un epic par son numero (IID).",
72
+ inputSchema: {
73
+ group_id: groupIdSchema,
74
+ epic_iid: z.number().describe("Numero de l'epic (IID affiche dans GitLab)"),
75
+ },
76
+ annotations: { readOnlyHint: true },
77
+ }, async (args) => {
78
+ try {
79
+ const epic = await client.getEpic(args.group_id, args.epic_iid);
80
+ return { content: [{ type: "text", text: formatEpicDetail(epic) }] };
81
+ }
82
+ catch (error) {
83
+ return {
84
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
85
+ isError: true,
86
+ };
87
+ }
88
+ });
89
+ server.registerTool("create_epic", {
90
+ description: "Creer un nouvel epic dans un groupe GitLab. Par defaut dry_run=true : retourne un apercu sans creer. Passer dry_run=false apres confirmation.",
91
+ inputSchema: {
92
+ group_id: groupIdSchema,
93
+ title: z.string().describe("Titre de l'epic"),
94
+ description: z.string().optional().describe("Description de l'epic (Markdown)"),
95
+ labels: z.string().optional().describe("Labels separes par virgule"),
96
+ start_date: z.string().optional().describe("Date de debut (YYYY-MM-DD)"),
97
+ due_date: z.string().optional().describe("Date d'echeance (YYYY-MM-DD)"),
98
+ dry_run: dryRunSchema,
99
+ },
100
+ annotations: { readOnlyHint: false },
101
+ }, async (args) => {
102
+ try {
103
+ const { group_id, dry_run, ...data } = args;
104
+ if (dry_run) {
105
+ return dryRunResponse("Creer un epic", { groupe: group_id, ...data });
106
+ }
107
+ const epic = await client.createEpic(group_id, data);
108
+ return {
109
+ content: [{ type: "text", text: `Epic cree avec succes !\n\n${formatEpicDetail(epic)}` }],
110
+ };
111
+ }
112
+ catch (error) {
113
+ return {
114
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
115
+ isError: true,
116
+ };
117
+ }
118
+ });
119
+ server.registerTool("update_epic", {
120
+ description: "Mettre a jour un epic existant. Par defaut dry_run=true : retourne un apercu sans modifier. Passer dry_run=false apres confirmation.",
121
+ inputSchema: {
122
+ group_id: groupIdSchema,
123
+ epic_iid: z.number().describe("Numero de l'epic (IID)"),
124
+ title: z.string().optional().describe("Nouveau titre"),
125
+ description: z.string().optional().describe("Nouvelle description (Markdown)"),
126
+ labels: z.string().optional().describe("Nouveaux labels (separes par virgule)"),
127
+ start_date: z.string().optional().describe("Nouvelle date de debut (YYYY-MM-DD)"),
128
+ due_date: z.string().optional().describe("Nouvelle date d'echeance (YYYY-MM-DD)"),
129
+ dry_run: dryRunSchema,
130
+ },
131
+ annotations: { readOnlyHint: false },
132
+ }, async (args) => {
133
+ try {
134
+ const { group_id, epic_iid, dry_run, ...data } = args;
135
+ if (dry_run) {
136
+ return dryRunResponse("Modifier l'epic", { groupe: group_id, epic_iid, ...data });
137
+ }
138
+ const epic = await client.updateEpic(group_id, epic_iid, data);
139
+ return {
140
+ content: [{ type: "text", text: `Epic mis a jour !\n\n${formatEpicDetail(epic)}` }],
141
+ };
142
+ }
143
+ catch (error) {
144
+ return {
145
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
146
+ isError: true,
147
+ };
148
+ }
149
+ });
150
+ server.registerTool("close_epic", {
151
+ description: "Fermer un epic. Par defaut dry_run=true : retourne un apercu sans fermer. Passer dry_run=false apres confirmation.",
152
+ inputSchema: {
153
+ group_id: groupIdSchema,
154
+ epic_iid: z.number().describe("Numero de l'epic (IID) a fermer"),
155
+ dry_run: dryRunSchema,
156
+ },
157
+ annotations: { readOnlyHint: false },
158
+ }, async (args) => {
159
+ try {
160
+ if (args.dry_run) {
161
+ return dryRunResponse("Fermer l'epic", { groupe: args.group_id, epic_iid: args.epic_iid });
162
+ }
163
+ const epic = await client.closeEpic(args.group_id, args.epic_iid);
164
+ return {
165
+ content: [{ type: "text", text: `Epic #${epic.iid} ferme.\n\n${formatEpicDetail(epic)}` }],
166
+ };
167
+ }
168
+ catch (error) {
169
+ return {
170
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
171
+ isError: true,
172
+ };
173
+ }
174
+ });
175
+ server.registerTool("list_epic_issues", {
176
+ description: "Lister les issues rattachees a un epic. Affiche l'ID global et le IID projet de chaque issue.",
177
+ inputSchema: {
178
+ group_id: groupIdSchema,
179
+ epic_iid: z.number().describe("Numero de l'epic (IID)"),
180
+ },
181
+ annotations: { readOnlyHint: true },
182
+ }, async (args) => {
183
+ try {
184
+ const issues = await client.listEpicIssues(args.group_id, args.epic_iid);
185
+ if (issues.length === 0) {
186
+ return { content: [{ type: "text", text: "Aucune issue rattachee a cet epic." }] };
187
+ }
188
+ const text = `${issues.length} issue(s) dans l'epic :\n\n${issues.map(formatIssueInEpic).join("\n\n")}`;
189
+ return { content: [{ type: "text", text }] };
190
+ }
191
+ catch (error) {
192
+ return {
193
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
194
+ isError: true,
195
+ };
196
+ }
197
+ });
198
+ server.registerTool("add_issue_to_epic", {
199
+ description: "Rattacher une issue a un epic. Par defaut dry_run=true. ATTENTION : utiliser l'ID global de l'issue (pas le IID projet).",
200
+ inputSchema: {
201
+ group_id: groupIdSchema,
202
+ epic_iid: z.number().describe("Numero de l'epic (IID)"),
203
+ issue_id: z.number().describe("ID global de l'issue (pas le IID projet)"),
204
+ dry_run: dryRunSchema,
205
+ },
206
+ annotations: { readOnlyHint: false },
207
+ }, async (args) => {
208
+ try {
209
+ if (args.dry_run) {
210
+ return dryRunResponse("Rattacher une issue a un epic", {
211
+ groupe: args.group_id,
212
+ epic_iid: args.epic_iid,
213
+ issue_id: args.issue_id,
214
+ });
215
+ }
216
+ await client.addIssueToEpic(args.group_id, args.epic_iid, args.issue_id);
217
+ return {
218
+ content: [{ type: "text", text: `Issue ${args.issue_id} rattachee a l'epic #${args.epic_iid}.` }],
219
+ };
220
+ }
221
+ catch (error) {
222
+ return {
223
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
224
+ isError: true,
225
+ };
226
+ }
227
+ });
228
+ server.registerTool("list_epic_notes", {
229
+ description: "Lister les commentaires d'un epic.",
230
+ inputSchema: {
231
+ group_id: groupIdSchema,
232
+ epic_iid: z.number().describe("Numero de l'epic (IID)"),
233
+ },
234
+ annotations: { readOnlyHint: true },
235
+ }, async (args) => {
236
+ try {
237
+ const notes = await client.listEpicNotes(args.group_id, args.epic_iid);
238
+ const userNotes = notes.filter((n) => !n.system);
239
+ if (userNotes.length === 0) {
240
+ return { content: [{ type: "text", text: "Aucun commentaire sur cet epic." }] };
241
+ }
242
+ const text = userNotes.map((n) => `**${n.author.name}** (@${n.author.username}) — ${n.created_at}\n${n.body}`).join("\n\n---\n\n");
243
+ return { content: [{ type: "text", text: `${userNotes.length} commentaire(s) :\n\n${text}` }] };
244
+ }
245
+ catch (error) {
246
+ return {
247
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
248
+ isError: true,
249
+ };
250
+ }
251
+ });
252
+ server.registerTool("add_epic_note", {
253
+ description: "Ajouter un commentaire sur un epic. Par defaut dry_run=true.",
254
+ inputSchema: {
255
+ group_id: groupIdSchema,
256
+ epic_iid: z.number().describe("Numero de l'epic (IID)"),
257
+ body: z.string().describe("Contenu du commentaire (Markdown)"),
258
+ dry_run: dryRunSchema,
259
+ },
260
+ annotations: { readOnlyHint: false },
261
+ }, async (args) => {
262
+ try {
263
+ if (args.dry_run) {
264
+ return dryRunResponse("Commenter l'epic", { groupe: args.group_id, epic_iid: args.epic_iid, body: args.body });
265
+ }
266
+ const note = await client.addEpicNote(args.group_id, args.epic_iid, args.body);
267
+ return {
268
+ content: [{ type: "text", text: `Commentaire ajoute sur l'epic #${args.epic_iid} par @${note.author.username}.` }],
269
+ };
270
+ }
271
+ catch (error) {
272
+ return {
273
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
274
+ isError: true,
275
+ };
276
+ }
277
+ });
278
+ }
279
+ //# sourceMappingURL=epics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epics.js","sourceRoot":"","sources":["../../src/tools/epics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { GitLabClient } from "../client.js";
3
+ export declare function registerIssueTools(server: McpServer, client: GitLabClient): void;
4
+ //# sourceMappingURL=issues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/tools/issues.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAuDjD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAiMhF"}
@@ -0,0 +1,239 @@
1
+ import { z } from "zod";
2
+ const dryRunSchema = z.boolean().default(true).describe("Dry run mode (default: true). When true, returns a preview of the action without executing it. Set to false only after user confirmation.");
3
+ function dryRunResponse(action, details) {
4
+ const lines = Object.entries(details)
5
+ .filter(([, v]) => v !== undefined)
6
+ .map(([k, v]) => ` - **${k}:** ${Array.isArray(v) ? v.join(", ") : v}`);
7
+ const text = `[DRY RUN] ${action}\n\n${lines.join("\n")}\n\nThis is a preview. Ask the user to confirm in their language before re-calling with dry_run=false.`;
8
+ return { content: [{ type: "text", text }] };
9
+ }
10
+ function formatIssue(i) {
11
+ const assignees = i.assignees.length > 0
12
+ ? ` — Assignes: ${i.assignees.map((a) => `@${a.username}`).join(", ")}`
13
+ : "";
14
+ const labels = i.labels.length > 0 ? ` — Labels: ${i.labels.join(", ")}` : "";
15
+ const milestone = i.milestone ? ` — Milestone: ${i.milestone.title}` : "";
16
+ const due = i.due_date ? ` — Echeance: ${i.due_date}` : "";
17
+ const epic = i.epic_iid ? ` — Epic #${i.epic_iid}` : "";
18
+ return `**${i.title}** (project:${i.project_id} #${i.iid}, id:${i.id}) — ${i.state}${assignees}${labels}${milestone}${due}${epic}\n ${i.web_url}`;
19
+ }
20
+ function formatIssues(issues) {
21
+ if (issues.length === 0)
22
+ return "Aucune issue trouvee.";
23
+ return `${issues.length} issue(s) :\n\n${issues.map(formatIssue).join("\n\n")}`;
24
+ }
25
+ function formatIssueDetail(i) {
26
+ const parts = [
27
+ `# ${i.title} (project:${i.project_id} #${i.iid})`,
28
+ `**ID global:** ${i.id}`,
29
+ `**Etat:** ${i.state}`,
30
+ `**Auteur:** ${i.author.name} (@${i.author.username})`,
31
+ i.assignees.length > 0
32
+ ? `**Assignes:** ${i.assignees.map((a) => `${a.name} (@${a.username})`).join(", ")}`
33
+ : null,
34
+ i.labels.length > 0 ? `**Labels:** ${i.labels.join(", ")}` : null,
35
+ i.milestone ? `**Milestone:** ${i.milestone.title}` : null,
36
+ i.epic_iid ? `**Epic:** #${i.epic_iid}` : null,
37
+ i.weight != null ? `**Poids:** ${i.weight}` : null,
38
+ i.due_date ? `**Echeance:** ${i.due_date}` : null,
39
+ i.time_stats?.human_time_estimate ? `**Temps estime:** ${i.time_stats.human_time_estimate}` : null,
40
+ i.time_stats?.human_total_time_spent ? `**Temps passe:** ${i.time_stats.human_total_time_spent}` : null,
41
+ `**Cree le:** ${i.created_at}`,
42
+ `**Mis a jour:** ${i.updated_at}`,
43
+ i.closed_at ? `**Ferme le:** ${i.closed_at}` : null,
44
+ `**Lien:** ${i.web_url}`,
45
+ i.description ? `\n---\n${i.description}` : null,
46
+ ];
47
+ return parts.filter(Boolean).join("\n");
48
+ }
49
+ export function registerIssueTools(server, client) {
50
+ server.registerTool("list_issues", {
51
+ description: "Lister les issues d'un groupe GitLab. Filtrer par etat, recherche, labels, milestone ou assignee.",
52
+ inputSchema: {
53
+ group_id: z.string().describe("ID ou chemin URL du groupe GitLab (ex: '42' ou 'wanadev/kp1'). Si vous n'avez que le nom, appelez d'abord list_groups pour trouver le chemin exact."),
54
+ state: z.enum(["opened", "closed", "all"]).optional().describe("Filtrer par etat"),
55
+ search: z.string().optional().describe("Recherche textuelle"),
56
+ labels: z.string().optional().describe("Labels (separes par virgule)"),
57
+ milestone: z.string().optional().describe("Nom du milestone"),
58
+ assignee_username: z.string().optional().describe("Nom d'utilisateur de l'assignee"),
59
+ order_by: z.enum(["created_at", "updated_at", "priority", "due_date", "label_priority", "weight"]).optional().describe("Trier par champ"),
60
+ sort: z.enum(["asc", "desc"]).optional().describe("Ordre de tri"),
61
+ },
62
+ annotations: { readOnlyHint: true },
63
+ }, async (args) => {
64
+ try {
65
+ const { group_id, ...params } = args;
66
+ const issues = await client.listGroupIssues(group_id, params);
67
+ return { content: [{ type: "text", text: formatIssues(issues) }] };
68
+ }
69
+ catch (error) {
70
+ return {
71
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
72
+ isError: true,
73
+ };
74
+ }
75
+ });
76
+ server.registerTool("get_issue", {
77
+ description: "Obtenir les details d'une issue par son projet et son numero (IID).",
78
+ inputSchema: {
79
+ project_id: z.number().describe("ID du projet"),
80
+ issue_iid: z.number().describe("Numero de l'issue dans le projet (IID)"),
81
+ },
82
+ annotations: { readOnlyHint: true },
83
+ }, async (args) => {
84
+ try {
85
+ const issue = await client.getIssue(args.project_id, args.issue_iid);
86
+ return { content: [{ type: "text", text: formatIssueDetail(issue) }] };
87
+ }
88
+ catch (error) {
89
+ return {
90
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
91
+ isError: true,
92
+ };
93
+ }
94
+ });
95
+ server.registerTool("create_issue", {
96
+ description: "Creer une nouvelle issue dans un projet. Par defaut dry_run=true : retourne un apercu sans creer. Passer dry_run=false apres confirmation.",
97
+ inputSchema: {
98
+ project_id: z.number().describe("ID du projet"),
99
+ title: z.string().describe("Titre de l'issue"),
100
+ description: z.string().optional().describe("Description (Markdown)"),
101
+ labels: z.string().optional().describe("Labels (separes par virgule)"),
102
+ milestone_id: z.number().optional().describe("ID du milestone"),
103
+ assignee_ids: z.array(z.number()).optional().describe("IDs des assignees"),
104
+ due_date: z.string().optional().describe("Date d'echeance (YYYY-MM-DD)"),
105
+ weight: z.number().optional().describe("Poids de l'issue"),
106
+ epic_id: z.number().optional().describe("ID global de l'epic a rattacher"),
107
+ iteration_id: z.number().optional().describe("ID de l'iteration (sprint) a associer"),
108
+ dry_run: dryRunSchema,
109
+ },
110
+ annotations: { readOnlyHint: false },
111
+ }, async (args) => {
112
+ try {
113
+ const { project_id, dry_run, ...data } = args;
114
+ if (dry_run) {
115
+ return dryRunResponse("Creer une issue", { project_id, ...data });
116
+ }
117
+ const issue = await client.createIssue(project_id, data);
118
+ return {
119
+ content: [{ type: "text", text: `Issue creee avec succes !\n\n${formatIssueDetail(issue)}` }],
120
+ };
121
+ }
122
+ catch (error) {
123
+ return {
124
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
125
+ isError: true,
126
+ };
127
+ }
128
+ });
129
+ server.registerTool("update_issue", {
130
+ description: "Mettre a jour une issue existante. Par defaut dry_run=true : retourne un apercu sans modifier. Passer dry_run=false apres confirmation.",
131
+ inputSchema: {
132
+ project_id: z.number().describe("ID du projet"),
133
+ issue_iid: z.number().describe("Numero de l'issue (IID)"),
134
+ title: z.string().optional().describe("Nouveau titre"),
135
+ description: z.string().optional().describe("Nouvelle description (Markdown)"),
136
+ labels: z.string().optional().describe("Nouveaux labels (separes par virgule)"),
137
+ milestone_id: z.number().optional().describe("ID du milestone"),
138
+ assignee_ids: z.array(z.number()).optional().describe("IDs des assignees"),
139
+ due_date: z.string().optional().describe("Nouvelle date d'echeance (YYYY-MM-DD)"),
140
+ weight: z.number().optional().describe("Nouveau poids"),
141
+ iteration_id: z.number().optional().describe("ID de l'iteration (sprint) a associer"),
142
+ dry_run: dryRunSchema,
143
+ },
144
+ annotations: { readOnlyHint: false },
145
+ }, async (args) => {
146
+ try {
147
+ const { project_id, issue_iid, dry_run, ...data } = args;
148
+ if (dry_run) {
149
+ return dryRunResponse("Modifier l'issue", { project_id, issue_iid, ...data });
150
+ }
151
+ const issue = await client.updateIssue(project_id, issue_iid, data);
152
+ return {
153
+ content: [{ type: "text", text: `Issue mise a jour !\n\n${formatIssueDetail(issue)}` }],
154
+ };
155
+ }
156
+ catch (error) {
157
+ return {
158
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
159
+ isError: true,
160
+ };
161
+ }
162
+ });
163
+ server.registerTool("close_issue", {
164
+ description: "Fermer une issue. Par defaut dry_run=true : retourne un apercu sans fermer. Passer dry_run=false apres confirmation.",
165
+ inputSchema: {
166
+ project_id: z.number().describe("ID du projet"),
167
+ issue_iid: z.number().describe("Numero de l'issue (IID) a fermer"),
168
+ dry_run: dryRunSchema,
169
+ },
170
+ annotations: { readOnlyHint: false },
171
+ }, async (args) => {
172
+ try {
173
+ if (args.dry_run) {
174
+ return dryRunResponse("Fermer l'issue", { project_id: args.project_id, issue_iid: args.issue_iid });
175
+ }
176
+ const issue = await client.closeIssue(args.project_id, args.issue_iid);
177
+ return {
178
+ content: [{ type: "text", text: `Issue #${issue.iid} fermee.\n\n${formatIssueDetail(issue)}` }],
179
+ };
180
+ }
181
+ catch (error) {
182
+ return {
183
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
184
+ isError: true,
185
+ };
186
+ }
187
+ });
188
+ server.registerTool("list_issue_notes", {
189
+ description: "Lister les commentaires d'une issue.",
190
+ inputSchema: {
191
+ project_id: z.number().describe("ID du projet"),
192
+ issue_iid: z.number().describe("Numero de l'issue (IID)"),
193
+ },
194
+ annotations: { readOnlyHint: true },
195
+ }, async (args) => {
196
+ try {
197
+ const notes = await client.listIssueNotes(args.project_id, args.issue_iid);
198
+ const userNotes = notes.filter((n) => !n.system);
199
+ if (userNotes.length === 0) {
200
+ return { content: [{ type: "text", text: "Aucun commentaire sur cette issue." }] };
201
+ }
202
+ const text = userNotes.map((n) => `**${n.author.name}** (@${n.author.username}) — ${n.created_at}\n${n.body}`).join("\n\n---\n\n");
203
+ return { content: [{ type: "text", text: `${userNotes.length} commentaire(s) :\n\n${text}` }] };
204
+ }
205
+ catch (error) {
206
+ return {
207
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
208
+ isError: true,
209
+ };
210
+ }
211
+ });
212
+ server.registerTool("add_issue_note", {
213
+ description: "Ajouter un commentaire sur une issue. Par defaut dry_run=true.",
214
+ inputSchema: {
215
+ project_id: z.number().describe("ID du projet"),
216
+ issue_iid: z.number().describe("Numero de l'issue (IID)"),
217
+ body: z.string().describe("Contenu du commentaire (Markdown)"),
218
+ dry_run: dryRunSchema,
219
+ },
220
+ annotations: { readOnlyHint: false },
221
+ }, async (args) => {
222
+ try {
223
+ if (args.dry_run) {
224
+ return dryRunResponse("Commenter l'issue", { project_id: args.project_id, issue_iid: args.issue_iid, body: args.body });
225
+ }
226
+ const note = await client.addIssueNote(args.project_id, args.issue_iid, args.body);
227
+ return {
228
+ content: [{ type: "text", text: `Commentaire ajoute sur l'issue #${args.issue_iid} par @${note.author.username}.` }],
229
+ };
230
+ }
231
+ catch (error) {
232
+ return {
233
+ content: [{ type: "text", text: `Erreur: ${error.message}` }],
234
+ isError: true,
235
+ };
236
+ }
237
+ });
238
+ }
239
+ //# sourceMappingURL=issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/tools/issues.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { GitLabClient } from "../client.js";
3
+ export declare function registerMergeRequestTools(server: McpServer, client: GitLabClient): void;
4
+ //# sourceMappingURL=merge_requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge_requests.d.ts","sourceRoot":"","sources":["../../src/tools/merge_requests.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAgDjD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CA+CvF"}