@geeveeh/atlassian-tools 0.2.0 → 0.4.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 (56) hide show
  1. package/README.md +156 -26
  2. package/dist/cli/confluence.d.ts.map +1 -1
  3. package/dist/cli/confluence.js +424 -9
  4. package/dist/cli/confluence.js.map +1 -1
  5. package/dist/cli/jira.d.ts.map +1 -1
  6. package/dist/cli/jira.js +518 -2
  7. package/dist/cli/jira.js.map +1 -1
  8. package/dist/confluence/client.d.ts +15 -1
  9. package/dist/confluence/client.d.ts.map +1 -1
  10. package/dist/confluence/client.js +114 -0
  11. package/dist/confluence/client.js.map +1 -1
  12. package/dist/confluence/index.d.ts +1 -0
  13. package/dist/confluence/index.d.ts.map +1 -1
  14. package/dist/confluence/index.js +1 -0
  15. package/dist/confluence/index.js.map +1 -1
  16. package/dist/confluence/markdown.d.ts +15 -0
  17. package/dist/confluence/markdown.d.ts.map +1 -0
  18. package/dist/confluence/markdown.js +83 -0
  19. package/dist/confluence/markdown.js.map +1 -0
  20. package/dist/confluence/types.d.ts +91 -0
  21. package/dist/confluence/types.d.ts.map +1 -1
  22. package/dist/core/auth.d.ts.map +1 -1
  23. package/dist/core/auth.js +54 -10
  24. package/dist/core/auth.js.map +1 -1
  25. package/dist/core/client.d.ts.map +1 -1
  26. package/dist/core/client.js +57 -18
  27. package/dist/core/client.js.map +1 -1
  28. package/dist/core/index.d.ts +1 -1
  29. package/dist/core/index.d.ts.map +1 -1
  30. package/dist/core/index.js +1 -1
  31. package/dist/core/index.js.map +1 -1
  32. package/dist/core/mime.d.ts +2 -0
  33. package/dist/core/mime.d.ts.map +1 -0
  34. package/dist/core/mime.js +21 -0
  35. package/dist/core/mime.js.map +1 -0
  36. package/dist/jira/client.d.ts +20 -1
  37. package/dist/jira/client.d.ts.map +1 -1
  38. package/dist/jira/client.js +127 -0
  39. package/dist/jira/client.js.map +1 -1
  40. package/dist/jira/types.d.ts +115 -0
  41. package/dist/jira/types.d.ts.map +1 -1
  42. package/dist/mcp/confluence.d.ts +3 -0
  43. package/dist/mcp/confluence.d.ts.map +1 -0
  44. package/dist/mcp/confluence.js +405 -0
  45. package/dist/mcp/confluence.js.map +1 -0
  46. package/dist/mcp/helpers.d.ts +3 -0
  47. package/dist/mcp/helpers.d.ts.map +1 -0
  48. package/dist/mcp/helpers.js +15 -0
  49. package/dist/mcp/helpers.js.map +1 -0
  50. package/dist/mcp/index.js +8 -354
  51. package/dist/mcp/index.js.map +1 -1
  52. package/dist/mcp/jira.d.ts +3 -0
  53. package/dist/mcp/jira.d.ts.map +1 -0
  54. package/dist/mcp/jira.js +479 -0
  55. package/dist/mcp/jira.js.map +1 -0
  56. package/package.json +3 -3
@@ -0,0 +1,479 @@
1
+ import { z } from "zod";
2
+ import { loadConfigFromEnv } from "../core/index.js";
3
+ import { JiraClient } from "../jira/client.js";
4
+ import { formatError, baseUrl } from "./helpers.js";
5
+ let _client = null;
6
+ function getClient() {
7
+ if (!_client)
8
+ _client = new JiraClient(loadConfigFromEnv());
9
+ return _client;
10
+ }
11
+ export function registerJiraTools(server) {
12
+ server.tool("jira_auth", "Verify the Jira connection and list accessible projects", {}, async () => {
13
+ try {
14
+ const projects = await getClient().verifyConnection();
15
+ const text = [
16
+ "Connected successfully.",
17
+ `Found ${projects.length} project(s):`,
18
+ ...projects.map((p) => `• ${p.name} [${p.key}] (id: ${p.id})`),
19
+ ].join("\n");
20
+ return { content: [{ type: "text", text }] };
21
+ }
22
+ catch (err) {
23
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
24
+ }
25
+ });
26
+ server.tool("jira_list_projects", "List available Jira projects", { limit: z.number().optional().describe("Max number of projects to return (default 25)") }, async ({ limit }) => {
27
+ try {
28
+ const projects = await getClient().listProjects(limit ?? 25);
29
+ const text = projects.map((p) => `${p.name} [${p.key}] (id: ${p.id})`).join("\n");
30
+ return { content: [{ type: "text", text: text || "No projects found." }] };
31
+ }
32
+ catch (err) {
33
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
34
+ }
35
+ });
36
+ server.tool("jira_get_issue", "Get a Jira issue by key, returning summary, status, assignee, and description", { issueKey: z.string().describe("The issue key (e.g. 'PROJ-123')") }, async ({ issueKey }) => {
37
+ try {
38
+ const client = getClient();
39
+ const issue = await client.getIssue(issueKey);
40
+ const desc = client.descriptionToText(issue);
41
+ const base = baseUrl();
42
+ const text = [
43
+ `Key: ${issue.key}`,
44
+ `Summary: ${issue.fields.summary}`,
45
+ `Type: ${issue.fields.issuetype.name}`,
46
+ `Status: ${issue.fields.status.name}`,
47
+ `Priority: ${issue.fields.priority?.name ?? "—"}`,
48
+ `Assignee: ${issue.fields.assignee?.displayName ?? "Unassigned"}`,
49
+ `Reporter: ${issue.fields.reporter?.displayName ?? "—"}`,
50
+ `Labels: ${issue.fields.labels?.join(", ") || "—"}`,
51
+ `Created: ${issue.fields.created}`,
52
+ `Updated: ${issue.fields.updated}`,
53
+ `URL: ${base}/browse/${issue.key}`,
54
+ "",
55
+ "--- Description ---",
56
+ desc || "(empty)",
57
+ ].join("\n");
58
+ return { content: [{ type: "text", text }] };
59
+ }
60
+ catch (err) {
61
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
62
+ }
63
+ });
64
+ server.tool("jira_search_issues", "Search for Jira issues using JQL or filters", {
65
+ jql: z.string().optional().describe("Raw JQL query (overrides other filters)"),
66
+ project: z.string().optional().describe("Filter by project key"),
67
+ status: z.string().optional().describe("Filter by status name"),
68
+ assignee: z.string().optional().describe("Filter by assignee name"),
69
+ type: z.string().optional().describe("Filter by issue type (Bug, Task, Story, etc.)"),
70
+ limit: z.number().optional().describe("Max results (default 25)"),
71
+ }, async ({ jql, project, status, assignee, type, limit }) => {
72
+ try {
73
+ const issues = await getClient().searchIssues({ jql, project, status, assignee, type, limit });
74
+ if (issues.length === 0) {
75
+ return { content: [{ type: "text", text: "No issues found." }] };
76
+ }
77
+ const text = issues
78
+ .map((i) => `${i.key} — ${i.fields.summary} [${i.fields.status.name}] (${i.fields.issuetype.name}, ${i.fields.assignee?.displayName ?? "Unassigned"})`)
79
+ .join("\n");
80
+ return { content: [{ type: "text", text }] };
81
+ }
82
+ catch (err) {
83
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
84
+ }
85
+ });
86
+ server.tool("jira_create_issue", "Create a new Jira issue. IMPORTANT: Ask the user for confirmation before calling this tool.", {
87
+ projectKey: z.string().describe("The project key (e.g. 'PROJ')"),
88
+ issueType: z.string().describe("Issue type (Bug, Task, Story, Epic, etc.)"),
89
+ summary: z.string().describe("Issue summary/title"),
90
+ description: z.string().optional().describe("Issue description (plain text)"),
91
+ priority: z.string().optional().describe("Priority (Highest, High, Medium, Low, Lowest)"),
92
+ labels: z.array(z.string()).optional().describe("Labels to apply"),
93
+ parentKey: z.string().optional().describe("Parent issue key for creating a subtask (e.g. 'PROJ-10')"),
94
+ }, async ({ projectKey, issueType, summary, description, priority, labels, parentKey }) => {
95
+ try {
96
+ const issue = await getClient().createIssue({ projectKey, issueType, summary, description, priority, labels, parentKey });
97
+ const base = baseUrl();
98
+ const text = [
99
+ `✓ Issue created successfully.`,
100
+ ` Key: ${issue.key}`,
101
+ ` Summary: ${issue.fields.summary}`,
102
+ ` Type: ${issue.fields.issuetype.name}`,
103
+ ` Status: ${issue.fields.status.name}`,
104
+ ` URL: ${base}/browse/${issue.key}`,
105
+ ].join("\n");
106
+ return { content: [{ type: "text", text }] };
107
+ }
108
+ catch (err) {
109
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
110
+ }
111
+ });
112
+ server.tool("jira_update_issue", "Update an existing Jira issue. IMPORTANT: Ask the user for confirmation before calling this tool.", {
113
+ issueKey: z.string().describe("The issue key to update (e.g. 'PROJ-123')"),
114
+ summary: z.string().optional().describe("New summary/title"),
115
+ description: z.string().optional().describe("New description (plain text)"),
116
+ priority: z.string().optional().describe("New priority"),
117
+ labels: z.array(z.string()).optional().describe("New labels (replaces existing)"),
118
+ }, async ({ issueKey, summary, description, priority, labels }) => {
119
+ try {
120
+ const issue = await getClient().updateIssue({ issueKey, summary, description, priority, labels });
121
+ const base = baseUrl();
122
+ const text = [
123
+ `✓ Issue updated successfully.`,
124
+ ` Key: ${issue.key}`,
125
+ ` Summary: ${issue.fields.summary}`,
126
+ ` Status: ${issue.fields.status.name}`,
127
+ ` URL: ${base}/browse/${issue.key}`,
128
+ ].join("\n");
129
+ return { content: [{ type: "text", text }] };
130
+ }
131
+ catch (err) {
132
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
133
+ }
134
+ });
135
+ server.tool("jira_transition_issue", "Transition a Jira issue to a new status. IMPORTANT: Ask the user for confirmation before calling this tool.", {
136
+ issueKey: z.string().describe("The issue key (e.g. 'PROJ-123')"),
137
+ transitionName: z.string().optional().describe("Target transition name (omit to list available transitions)"),
138
+ }, async ({ issueKey, transitionName }) => {
139
+ try {
140
+ const client = getClient();
141
+ const transitions = await client.getTransitions(issueKey);
142
+ if (!transitionName) {
143
+ const text = [
144
+ `Available transitions for ${issueKey}:`,
145
+ ...transitions.map((t) => `• ${t.name} → ${t.to.name} (id: ${t.id})`),
146
+ ].join("\n");
147
+ return { content: [{ type: "text", text }] };
148
+ }
149
+ const match = transitions.find((t) => t.name.toLowerCase() === transitionName.toLowerCase());
150
+ if (!match) {
151
+ const available = transitions.map((t) => `${t.name} → ${t.to.name}`).join(", ");
152
+ return {
153
+ content: [{ type: "text", text: `No transition named "${transitionName}". Available: ${available}` }],
154
+ isError: true,
155
+ };
156
+ }
157
+ await client.transitionIssue(issueKey, match.id);
158
+ return { content: [{ type: "text", text: `✓ Transitioned ${issueKey} → ${match.to.name}` }] };
159
+ }
160
+ catch (err) {
161
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
162
+ }
163
+ });
164
+ server.tool("jira_delete_issue", "Delete a Jira issue. IMPORTANT: Ask the user for confirmation before calling this tool.", { issueKey: z.string().describe("The issue key to delete (e.g. 'PROJ-123')") }, async ({ issueKey }) => {
165
+ try {
166
+ const client = getClient();
167
+ const issue = await client.getIssue(issueKey);
168
+ await client.deleteIssue(issueKey);
169
+ return { content: [{ type: "text", text: `✓ Deleted issue ${issueKey} "${issue.fields.summary}"` }] };
170
+ }
171
+ catch (err) {
172
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
173
+ }
174
+ });
175
+ server.tool("jira_list_epic_issues", "List all issues belonging to a Jira epic", {
176
+ epicKey: z.string().describe("The epic issue key (e.g. 'PROJ-5')"),
177
+ limit: z.number().optional().describe("Max results (default 50)"),
178
+ }, async ({ epicKey, limit }) => {
179
+ try {
180
+ const issues = await getClient().listEpicIssues(epicKey, limit ?? 50);
181
+ if (issues.length === 0) {
182
+ return { content: [{ type: "text", text: "No issues found in this epic." }] };
183
+ }
184
+ const text = issues
185
+ .map((i) => `${i.key} — ${i.fields.summary} [${i.fields.status.name}] (${i.fields.issuetype.name})`)
186
+ .join("\n");
187
+ return { content: [{ type: "text", text }] };
188
+ }
189
+ catch (err) {
190
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
191
+ }
192
+ });
193
+ server.tool("jira_list_boards", "List Jira boards (Scrum and Kanban)", { limit: z.number().optional().describe("Max results (default 25)") }, async ({ limit }) => {
194
+ try {
195
+ const boards = await getClient().listBoards(limit ?? 25);
196
+ if (boards.length === 0) {
197
+ return { content: [{ type: "text", text: "No boards found." }] };
198
+ }
199
+ const text = boards
200
+ .map((b) => `${b.name} (id: ${b.id}, ${b.type}${b.location ? `, project: ${b.location.projectKey}` : ""})`)
201
+ .join("\n");
202
+ return { content: [{ type: "text", text }] };
203
+ }
204
+ catch (err) {
205
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
206
+ }
207
+ });
208
+ server.tool("jira_list_sprints", "List sprints on a Jira board", {
209
+ boardId: z.number().describe("The board ID (from jira_list_boards)"),
210
+ state: z.enum(["active", "future", "closed"]).optional().describe("Filter by sprint state (omit to return all)"),
211
+ }, async ({ boardId, state }) => {
212
+ try {
213
+ const sprints = await getClient().listSprints(boardId, state);
214
+ if (sprints.length === 0) {
215
+ return { content: [{ type: "text", text: "No sprints found." }] };
216
+ }
217
+ const text = sprints.map((s) => {
218
+ const dates = s.startDate && s.endDate
219
+ ? ` (${new Date(s.startDate).toLocaleDateString()} – ${new Date(s.endDate).toLocaleDateString()})`
220
+ : "";
221
+ return `${s.name} — ${s.state}${dates} (id: ${s.id})`;
222
+ }).join("\n");
223
+ return { content: [{ type: "text", text }] };
224
+ }
225
+ catch (err) {
226
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
227
+ }
228
+ });
229
+ server.tool("jira_move_to_sprint", "Move one or more Jira issues to a sprint. IMPORTANT: Ask the user for confirmation before calling this tool.", {
230
+ sprintId: z.number().describe("The sprint ID (from jira_list_sprints)"),
231
+ issueKeys: z.array(z.string()).describe("Issue keys to move (e.g. ['PROJ-1', 'PROJ-2'])"),
232
+ }, async ({ sprintId, issueKeys }) => {
233
+ try {
234
+ await getClient().moveToSprint(sprintId, issueKeys);
235
+ return { content: [{ type: "text", text: `✓ Moved ${issueKeys.join(", ")} to sprint ${sprintId}.` }] };
236
+ }
237
+ catch (err) {
238
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
239
+ }
240
+ });
241
+ server.tool("jira_search_users", "Search for Jira users by name or email — useful for finding accountIds to use with assignee fields", {
242
+ query: z.string().describe("Name or email to search for"),
243
+ limit: z.number().optional().describe("Max results (default 10)"),
244
+ }, async ({ query, limit }) => {
245
+ try {
246
+ const users = await getClient().searchUsers(query, limit ?? 10);
247
+ if (users.length === 0) {
248
+ return { content: [{ type: "text", text: "No users found." }] };
249
+ }
250
+ const text = users
251
+ .map((u) => `${u.displayName}${u.emailAddress ? ` <${u.emailAddress}>` : ""} — accountId: ${u.accountId}${u.active ? "" : " (inactive)"}`)
252
+ .join("\n");
253
+ return { content: [{ type: "text", text }] };
254
+ }
255
+ catch (err) {
256
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
257
+ }
258
+ });
259
+ server.tool("jira_list_link_types", "List available Jira issue link types (e.g. Blocks, Clones, Relates)", {}, async () => {
260
+ try {
261
+ const types = await getClient().listIssueLinkTypes();
262
+ const text = types.map((t) => `${t.name} — outward: "${t.outward}", inward: "${t.inward}"`).join("\n");
263
+ return { content: [{ type: "text", text: text || "No link types found." }] };
264
+ }
265
+ catch (err) {
266
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
267
+ }
268
+ });
269
+ server.tool("jira_list_issue_links", "List links on a Jira issue", { issueKey: z.string().describe("The issue key (e.g. 'PROJ-123')") }, async ({ issueKey }) => {
270
+ try {
271
+ const links = await getClient().listIssueLinks(issueKey);
272
+ if (links.length === 0) {
273
+ return { content: [{ type: "text", text: "No issue links." }] };
274
+ }
275
+ const text = links.map((l) => {
276
+ if (l.outwardIssue) {
277
+ return `${l.type.outward}: ${l.outwardIssue.key} — ${l.outwardIssue.fields.summary} [${l.outwardIssue.fields.status.name}] (link id: ${l.id})`;
278
+ }
279
+ if (l.inwardIssue) {
280
+ return `${l.type.inward}: ${l.inwardIssue.key} — ${l.inwardIssue.fields.summary} [${l.inwardIssue.fields.status.name}] (link id: ${l.id})`;
281
+ }
282
+ return `${l.type.name} (link id: ${l.id})`;
283
+ }).join("\n");
284
+ return { content: [{ type: "text", text }] };
285
+ }
286
+ catch (err) {
287
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
288
+ }
289
+ });
290
+ server.tool("jira_link_issues", "Link two Jira issues together. IMPORTANT: Ask the user for confirmation before calling this tool.", {
291
+ issueKey: z.string().describe("The source issue key (outward side, e.g. 'PROJ-1')"),
292
+ linkType: z.string().describe("Link type name (e.g. 'Blocks', 'Clones', 'Relates to') — use jira_list_link_types to see options"),
293
+ targetIssueKey: z.string().describe("The target issue key (inward side, e.g. 'PROJ-2')"),
294
+ }, async ({ issueKey, linkType, targetIssueKey }) => {
295
+ try {
296
+ await getClient().linkIssues(issueKey, linkType, targetIssueKey);
297
+ return { content: [{ type: "text", text: `✓ Linked: ${issueKey} "${linkType}" ${targetIssueKey}` }] };
298
+ }
299
+ catch (err) {
300
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
301
+ }
302
+ });
303
+ server.tool("jira_remove_issue_link", "Remove a link between two Jira issues. IMPORTANT: Ask the user for confirmation before calling this tool.", { linkId: z.string().describe("The link ID to remove (from jira_list_issue_links)") }, async ({ linkId }) => {
304
+ try {
305
+ await getClient().removeIssueLink(linkId);
306
+ return { content: [{ type: "text", text: `✓ Link ${linkId} removed.` }] };
307
+ }
308
+ catch (err) {
309
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
310
+ }
311
+ });
312
+ server.tool("jira_list_comments", "List comments on a Jira issue", { issueKey: z.string().describe("The issue key (e.g. 'PROJ-123')") }, async ({ issueKey }) => {
313
+ try {
314
+ const client = getClient();
315
+ const comments = await client.listComments(issueKey);
316
+ if (comments.length === 0) {
317
+ return { content: [{ type: "text", text: "No comments." }] };
318
+ }
319
+ const text = comments.map((c) => {
320
+ const author = c.author?.displayName ?? "Unknown";
321
+ const date = new Date(c.created).toLocaleDateString();
322
+ const body = client.descriptionToText({ fields: { description: c.body } });
323
+ return `[${author} · ${date}]\n${body}`;
324
+ }).join("\n\n");
325
+ return { content: [{ type: "text", text }] };
326
+ }
327
+ catch (err) {
328
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
329
+ }
330
+ });
331
+ server.tool("jira_add_comment", "Add a comment to a Jira issue. IMPORTANT: Ask the user for confirmation before calling this tool.", {
332
+ issueKey: z.string().describe("The issue key (e.g. 'PROJ-123')"),
333
+ text: z.string().describe("Comment text (plain text)"),
334
+ }, async ({ issueKey, text }) => {
335
+ try {
336
+ await getClient().addComment(issueKey, text);
337
+ return { content: [{ type: "text", text: `✓ Comment added to ${issueKey}.` }] };
338
+ }
339
+ catch (err) {
340
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
341
+ }
342
+ });
343
+ server.tool("jira_list_worklogs", "List work log entries on a Jira issue", { issueKey: z.string().describe("The issue key (e.g. 'PROJ-123')") }, async ({ issueKey }) => {
344
+ try {
345
+ const worklogs = await getClient().listWorklogs(issueKey);
346
+ if (worklogs.length === 0) {
347
+ return { content: [{ type: "text", text: "No work logged." }] };
348
+ }
349
+ const text = worklogs.map((w) => {
350
+ const author = w.author?.displayName ?? "Unknown";
351
+ const date = new Date(w.started).toLocaleDateString();
352
+ return `${author} · ${date} · ${w.timeSpent}`;
353
+ }).join("\n");
354
+ return { content: [{ type: "text", text }] };
355
+ }
356
+ catch (err) {
357
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
358
+ }
359
+ });
360
+ server.tool("jira_log_work", "Log time worked on a Jira issue. IMPORTANT: Ask the user for confirmation before calling this tool.", {
361
+ issueKey: z.string().describe("The issue key (e.g. 'PROJ-123')"),
362
+ timeSpent: z.string().describe("Time spent, e.g. '2h', '30m', '1d 2h'"),
363
+ started: z.string().optional().describe("When work started (ISO datetime, defaults to now)"),
364
+ comment: z.string().optional().describe("Work description"),
365
+ }, async ({ issueKey, timeSpent, started, comment }) => {
366
+ try {
367
+ const log = await getClient().addWorklog({ issueKey, timeSpent, started, comment });
368
+ const text = [
369
+ `✓ Logged ${log.timeSpent} on ${issueKey}.`,
370
+ ` Started: ${new Date(log.started).toLocaleString()}`,
371
+ ].join("\n");
372
+ return { content: [{ type: "text", text }] };
373
+ }
374
+ catch (err) {
375
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
376
+ }
377
+ });
378
+ server.tool("jira_list_attachments", "List all attachments on a Jira issue", { issueKey: z.string().describe("The issue key (e.g. 'PROJ-123')") }, async ({ issueKey }) => {
379
+ try {
380
+ const attachments = await getClient().listAttachments(issueKey);
381
+ if (attachments.length === 0) {
382
+ return { content: [{ type: "text", text: "No attachments found." }] };
383
+ }
384
+ const text = attachments
385
+ .map((a) => `${a.filename} (id: ${a.id}, ${a.mimeType}, ${a.size} bytes)\n ${a.content}`)
386
+ .join("\n");
387
+ return { content: [{ type: "text", text }] };
388
+ }
389
+ catch (err) {
390
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
391
+ }
392
+ });
393
+ server.tool("jira_upload_attachment", "Upload a file as an attachment to a Jira issue. IMPORTANT: Ask the user for confirmation before calling this tool.", {
394
+ issueKey: z.string().describe("The issue key to attach the file to (e.g. 'PROJ-123')"),
395
+ filePath: z.string().describe("Absolute path to the file to upload"),
396
+ }, async ({ issueKey, filePath }) => {
397
+ try {
398
+ const att = await getClient().uploadAttachment({ issueKey, filePath });
399
+ const base = baseUrl();
400
+ const text = [
401
+ `✓ Attachment uploaded successfully.`,
402
+ ` File: ${att.filename}`,
403
+ ` ID: ${att.id}`,
404
+ ` Type: ${att.mimeType}`,
405
+ ` Size: ${att.size} bytes`,
406
+ ...(att.content ? [` Download: ${att.content}`] : []),
407
+ ` Issue: ${base}/browse/${issueKey}`,
408
+ ].join("\n");
409
+ return { content: [{ type: "text", text }] };
410
+ }
411
+ catch (err) {
412
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
413
+ }
414
+ });
415
+ server.tool("jira_list_subtasks", "List all subtasks of a Jira issue", {
416
+ issueKey: z.string().describe("The parent issue key (e.g. 'PROJ-42')"),
417
+ limit: z.number().optional().describe("Max results (default 50)"),
418
+ }, async ({ issueKey, limit }) => {
419
+ try {
420
+ const subtasks = await getClient().listSubtasks(issueKey, limit ?? 50);
421
+ if (subtasks.length === 0) {
422
+ return { content: [{ type: "text", text: "No subtasks found." }] };
423
+ }
424
+ const text = subtasks
425
+ .map((i) => `${i.key} — ${i.fields.summary} [${i.fields.status.name}]`)
426
+ .join("\n");
427
+ return { content: [{ type: "text", text }] };
428
+ }
429
+ catch (err) {
430
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
431
+ }
432
+ });
433
+ server.tool("jira_create_sprint", "Create a new sprint on a Jira board. IMPORTANT: Ask the user for confirmation before calling this tool.", {
434
+ boardId: z.number().describe("The board ID (from jira_list_boards)"),
435
+ name: z.string().describe("Sprint name"),
436
+ goal: z.string().optional().describe("Sprint goal"),
437
+ startDate: z.string().optional().describe("Start date (ISO 8601, e.g. '2024-06-01T00:00:00.000Z')"),
438
+ endDate: z.string().optional().describe("End date (ISO 8601)"),
439
+ }, async ({ boardId, name, goal, startDate, endDate }) => {
440
+ try {
441
+ const sprint = await getClient().createSprint({ boardId, name, goal, startDate, endDate });
442
+ const text = [
443
+ `✓ Sprint created.`,
444
+ ` Name: ${sprint.name}`,
445
+ ` ID: ${sprint.id}`,
446
+ ` State: ${sprint.state}`,
447
+ ].join("\n");
448
+ return { content: [{ type: "text", text }] };
449
+ }
450
+ catch (err) {
451
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
452
+ }
453
+ });
454
+ server.tool("jira_update_sprint", "Update a Jira sprint's name, goal, or dates. IMPORTANT: Ask the user for confirmation before calling this tool.", {
455
+ sprintId: z.number().describe("The sprint ID (from jira_list_sprints)"),
456
+ name: z.string().optional().describe("New sprint name"),
457
+ goal: z.string().optional().describe("New sprint goal"),
458
+ startDate: z.string().optional().describe("New start date (ISO 8601)"),
459
+ endDate: z.string().optional().describe("New end date (ISO 8601)"),
460
+ }, async ({ sprintId, name, goal, startDate, endDate }) => {
461
+ try {
462
+ const sprint = await getClient().updateSprint(sprintId, { name, goal, startDate, endDate });
463
+ return { content: [{ type: "text", text: `✓ Updated sprint "${sprint.name}" (id: ${sprint.id}).` }] };
464
+ }
465
+ catch (err) {
466
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
467
+ }
468
+ });
469
+ server.tool("jira_close_sprint", "Close a Jira sprint (moves remaining open issues to backlog). IMPORTANT: Ask the user for confirmation before calling this tool.", { sprintId: z.number().describe("The sprint ID to close (from jira_list_sprints)") }, async ({ sprintId }) => {
470
+ try {
471
+ const sprint = await getClient().closeSprint(sprintId);
472
+ return { content: [{ type: "text", text: `✓ Closed sprint "${sprint.name}" (id: ${sprint.id}).` }] };
473
+ }
474
+ catch (err) {
475
+ return { content: [{ type: "text", text: formatError(err) }], isError: true };
476
+ }
477
+ });
478
+ }
479
+ //# sourceMappingURL=jira.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira.js","sourceRoot":"","sources":["../../src/mcp/jira.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@geeveeh/atlassian-tools",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "CLI and MCP server for Atlassian Cloud (Confluence, Jira) — manage pages and issues from your terminal or AI agent.",
5
5
  "author": "GeeveeH Software",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
8
  "bin": {
9
- "atlassian": "./dist/cli/index.js",
10
- "atlassian-mcp": "./dist/mcp/index.js"
9
+ "atlassian": "dist/cli/index.js",
10
+ "atlassian-mcp": "dist/mcp/index.js"
11
11
  },
12
12
  "files": [
13
13
  "dist",