@ecubelabs/atlassian-mcp 1.1.0-next.1 → 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 (2) hide show
  1. package/dist/index.js +134 -33
  2. package/package.json +2 -3
package/dist/index.js CHANGED
@@ -25,7 +25,7 @@ server.tool("get-issue", "Get details of a Jira issue by key", {
25
25
  ])
26
26
  .array()
27
27
  .optional()
28
- .describe("Optional fields to expand in the response"),
28
+ .describe("Optional fields to expand in the response. Options include: renderedFields (HTML format), names (display names), schema (field type descriptions), transitions (possible transitions), editmeta (field editing info), changelog (recent updates), versionedRepresentations (field value history)"),
29
29
  }, async ({ issueKey, expand }) => {
30
30
  try {
31
31
  const issue = await jiraService.getIssue(issueKey, expand);
@@ -50,10 +50,23 @@ server.tool("get-issue", "Get details of a Jira issue by key", {
50
50
  }
51
51
  });
52
52
  server.tool("search-issues", "Search Jira issues using JQL", {
53
- jql: z.string().describe("JQL query string"),
54
- fields: z.array(z.string()).optional().describe("Fields to include"),
55
- maxResults: z.number().min(1).max(5000).optional().describe("Max results"),
56
- nextPageToken: z.string().optional().describe("Next page token"),
53
+ jql: z
54
+ .string()
55
+ .describe("JQL query string. Must be a bounded query with search restrictions."),
56
+ fields: z
57
+ .array(z.string())
58
+ .optional()
59
+ .describe("Optional fields to include in the response. Examples: ['summary', 'comment'] or ['*all', '-comment']"),
60
+ maxResults: z
61
+ .number()
62
+ .min(1)
63
+ .max(5000)
64
+ .optional()
65
+ .describe("Maximum number of results to return per page (default: 50, max: 5000)"),
66
+ nextPageToken: z
67
+ .string()
68
+ .optional()
69
+ .describe("Token for fetching the next page of results. The first page has null nextPageToken."),
57
70
  expand: z
58
71
  .enum([
59
72
  "renderedFields",
@@ -66,11 +79,25 @@ server.tool("search-issues", "Search Jira issues using JQL", {
66
79
  ])
67
80
  .array()
68
81
  .optional()
69
- .describe("Fields to expand"),
70
- properties: z.array(z.string()).max(5).optional().describe("Properties to include"),
71
- fieldsByKeys: z.boolean().optional().describe("Use field keys"),
72
- failFast: z.boolean().optional().describe("Fail fast mode"),
73
- reconcileIssues: z.array(z.number()).max(50).optional().describe("Issue IDs to reconcile"),
82
+ .describe("Comma-separated values to expand in response: renderedFields, names, schema, transitions, operations, editmeta, changelog, versionedRepresentations"),
83
+ properties: z
84
+ .array(z.string())
85
+ .max(5)
86
+ .optional()
87
+ .describe("List of up to 5 issue properties to include in results"),
88
+ fieldsByKeys: z
89
+ .boolean()
90
+ .optional()
91
+ .describe("Reference fields by their key rather than ID (default: false)"),
92
+ failFast: z
93
+ .boolean()
94
+ .optional()
95
+ .describe("Fail request early if we can't retrieve all field data (default: false)"),
96
+ reconcileIssues: z
97
+ .array(z.number())
98
+ .max(50)
99
+ .optional()
100
+ .describe("Strong consistency issue IDs to be reconciled with search results (max: 50 IDs)"),
74
101
  }, async ({ jql, fields, maxResults, nextPageToken, expand, properties, fieldsByKeys, failFast, reconcileIssues, }) => {
75
102
  try {
76
103
  const issues = await jiraService.searchIssues({
@@ -106,10 +133,25 @@ server.tool("search-issues", "Search Jira issues using JQL", {
106
133
  });
107
134
  server.tool("get-comments", "Get comments for a Jira issue", {
108
135
  issueKey: z.string().describe("Jira issue key (e.g. PROJ-123)"),
109
- startAt: z.number().min(0).optional().describe("Page offset"),
110
- maxResults: z.number().min(1).max(100).optional().describe("Max results"),
111
- orderBy: z.enum(["created", "-created", "+created"]).optional().describe("Order by"),
112
- expand: z.array(z.enum(["renderedBody"])).optional().describe("Fields to expand"),
136
+ startAt: z
137
+ .number()
138
+ .min(0)
139
+ .optional()
140
+ .describe("The index of the first item to return (page offset). Default: 0"),
141
+ maxResults: z
142
+ .number()
143
+ .min(1)
144
+ .max(100)
145
+ .optional()
146
+ .describe("Maximum number of items per page. Default: 100"),
147
+ orderBy: z
148
+ .enum(["created", "-created", "+created"])
149
+ .optional()
150
+ .describe("Order comments by creation date. Default: created"),
151
+ expand: z
152
+ .array(z.enum(["renderedBody"]))
153
+ .optional()
154
+ .describe("Include additional information: renderedBody (comment body in HTML format)"),
113
155
  }, async ({ issueKey, startAt, maxResults, orderBy, expand }) => {
114
156
  try {
115
157
  const result = await jiraService.getComments(issueKey, {
@@ -139,29 +181,88 @@ server.tool("get-comments", "Get comments for a Jira issue", {
139
181
  }
140
182
  });
141
183
  server.tool("get-projects", "Get list of Jira projects", {
142
- startAt: z.number().min(0).optional().describe("Page offset"),
143
- maxResults: z.number().min(1).max(100).optional().describe("Max results"),
184
+ startAt: z
185
+ .number()
186
+ .min(0)
187
+ .optional()
188
+ .describe("The index of the first item to return (page offset). Default: 0"),
189
+ maxResults: z
190
+ .number()
191
+ .min(1)
192
+ .max(100)
193
+ .optional()
194
+ .describe("Maximum number of items per page. Default: 50, Maximum: 100"),
144
195
  orderBy: z
145
196
  .enum([
146
- "category", "-category", "+category",
147
- "key", "-key", "+key",
148
- "name", "-name", "+name",
149
- "owner", "-owner", "+owner",
150
- "issueCount", "-issueCount", "+issueCount",
151
- "lastIssueUpdatedTime", "-lastIssueUpdatedTime", "+lastIssueUpdatedTime",
152
- "archivedDate", "-archivedDate", "+archivedDate",
153
- "deletedDate", "-deletedDate", "+deletedDate"
197
+ "category",
198
+ "-category",
199
+ "+category",
200
+ "key",
201
+ "-key",
202
+ "+key",
203
+ "name",
204
+ "-name",
205
+ "+name",
206
+ "owner",
207
+ "-owner",
208
+ "+owner",
209
+ "issueCount",
210
+ "-issueCount",
211
+ "+issueCount",
212
+ "lastIssueUpdatedTime",
213
+ "-lastIssueUpdatedTime",
214
+ "+lastIssueUpdatedTime",
215
+ "archivedDate",
216
+ "-archivedDate",
217
+ "+archivedDate",
218
+ "deletedDate",
219
+ "-deletedDate",
220
+ "+deletedDate",
154
221
  ])
155
222
  .optional()
156
- .describe("Sort order"),
157
- id: z.array(z.number().int()).max(50).optional().describe("Project IDs"),
158
- keys: z.array(z.string()).max(50).optional().describe("Project keys"),
159
- query: z.string().optional().describe("Search query"),
160
- typeKey: z.string().optional().describe("Project type"),
161
- categoryId: z.number().int().optional().describe("Category ID"),
162
- action: z.enum(["view", "browse", "edit", "create"]).optional().describe("Permission filter"),
163
- expand: z.array(z.enum(["description", "projectKeys", "lead", "issueTypes", "url", "insight"])).optional().describe("Fields to expand"),
164
- status: z.array(z.enum(["live", "archived", "deleted"])).optional().describe("Status filter"),
223
+ .describe("Field to order results by. Default: key"),
224
+ id: z
225
+ .array(z.number().int())
226
+ .max(50)
227
+ .optional()
228
+ .describe("Filter by project IDs. Maximum: 50 IDs"),
229
+ keys: z
230
+ .array(z.string())
231
+ .max(50)
232
+ .optional()
233
+ .describe("Filter by project keys. Maximum: 50 keys"),
234
+ query: z
235
+ .string()
236
+ .optional()
237
+ .describe("Filter by matching key or name (case insensitive)"),
238
+ typeKey: z
239
+ .string()
240
+ .optional()
241
+ .describe("Filter by project type. Accepts comma-separated list: business, service_desk, software"),
242
+ categoryId: z
243
+ .number()
244
+ .int()
245
+ .optional()
246
+ .describe("Filter by project category ID"),
247
+ action: z
248
+ .enum(["view", "browse", "edit", "create"])
249
+ .optional()
250
+ .describe("Filter by user's project permissions. Default: view"),
251
+ expand: z
252
+ .array(z.enum([
253
+ "description",
254
+ "projectKeys",
255
+ "lead",
256
+ "issueTypes",
257
+ "url",
258
+ "insight",
259
+ ]))
260
+ .optional()
261
+ .describe("Additional fields to include: description, projectKeys, lead, issueTypes, url, insight"),
262
+ status: z
263
+ .array(z.enum(["live", "archived", "deleted"]))
264
+ .optional()
265
+ .describe("EXPERIMENTAL. Filter by project status"),
165
266
  }, async ({ startAt, maxResults, orderBy, id, keys, query, typeKey, categoryId, action, expand, status, }) => {
166
267
  try {
167
268
  const projects = await jiraService.getProjects({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ecubelabs/atlassian-mcp",
3
- "version": "1.1.0-next.1",
3
+ "version": "1.1.0",
4
4
  "bin": "./dist/index.js",
5
5
  "repository": {
6
6
  "url": "https://github.com/Ecube-Labs/skynet.git"
@@ -32,6 +32,5 @@
32
32
  "semantic-release-yarn": "^3.0.2",
33
33
  "ts-node": "^10.9.2",
34
34
  "typescript": "^5.8.2"
35
- },
36
- "stableVersion": "1.0.0"
35
+ }
37
36
  }