@crypto512/jicon-mcp 0.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 (103) hide show
  1. package/.env.example +9 -0
  2. package/.jicon.json.custom +21 -0
  3. package/.jicon.json.example +15 -0
  4. package/.jicon.json.readonly +15 -0
  5. package/CLAUDE.md +596 -0
  6. package/CONTRIBUTING.md +371 -0
  7. package/DEVELOPMENT.md +400 -0
  8. package/LICENSE +21 -0
  9. package/README.md +300 -0
  10. package/TOOL_LIST.md +435 -0
  11. package/dist/config/constants.d.ts +14 -0
  12. package/dist/config/constants.d.ts.map +1 -0
  13. package/dist/config/constants.js +18 -0
  14. package/dist/config/constants.js.map +1 -0
  15. package/dist/config/loader.d.ts +35 -0
  16. package/dist/config/loader.d.ts.map +1 -0
  17. package/dist/config/loader.js +108 -0
  18. package/dist/config/loader.js.map +1 -0
  19. package/dist/config/types.d.ts +130 -0
  20. package/dist/config/types.d.ts.map +1 -0
  21. package/dist/config/types.js +32 -0
  22. package/dist/config/types.js.map +1 -0
  23. package/dist/confluence/client.d.ts +30 -0
  24. package/dist/confluence/client.d.ts.map +1 -0
  25. package/dist/confluence/client.js +176 -0
  26. package/dist/confluence/client.js.map +1 -0
  27. package/dist/confluence/defaults.d.ts +23 -0
  28. package/dist/confluence/defaults.d.ts.map +1 -0
  29. package/dist/confluence/defaults.js +29 -0
  30. package/dist/confluence/defaults.js.map +1 -0
  31. package/dist/confluence/formatters.d.ts +22 -0
  32. package/dist/confluence/formatters.d.ts.map +1 -0
  33. package/dist/confluence/formatters.js +125 -0
  34. package/dist/confluence/formatters.js.map +1 -0
  35. package/dist/confluence/tools.d.ts +266 -0
  36. package/dist/confluence/tools.d.ts.map +1 -0
  37. package/dist/confluence/tools.js +376 -0
  38. package/dist/confluence/tools.js.map +1 -0
  39. package/dist/confluence/types.d.ts +122 -0
  40. package/dist/confluence/types.d.ts.map +1 -0
  41. package/dist/confluence/types.js +5 -0
  42. package/dist/confluence/types.js.map +1 -0
  43. package/dist/index.d.ts +6 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +161 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/jira/client.d.ts +46 -0
  48. package/dist/jira/client.d.ts.map +1 -0
  49. package/dist/jira/client.js +178 -0
  50. package/dist/jira/client.js.map +1 -0
  51. package/dist/jira/defaults.d.ts +19 -0
  52. package/dist/jira/defaults.d.ts.map +1 -0
  53. package/dist/jira/defaults.js +57 -0
  54. package/dist/jira/defaults.js.map +1 -0
  55. package/dist/jira/formatters.d.ts +22 -0
  56. package/dist/jira/formatters.d.ts.map +1 -0
  57. package/dist/jira/formatters.js +128 -0
  58. package/dist/jira/formatters.js.map +1 -0
  59. package/dist/jira/tools.d.ts +334 -0
  60. package/dist/jira/tools.d.ts.map +1 -0
  61. package/dist/jira/tools.js +372 -0
  62. package/dist/jira/tools.js.map +1 -0
  63. package/dist/jira/types.d.ts +110 -0
  64. package/dist/jira/types.d.ts.map +1 -0
  65. package/dist/jira/types.js +5 -0
  66. package/dist/jira/types.js.map +1 -0
  67. package/dist/permissions/filter.d.ts +30 -0
  68. package/dist/permissions/filter.d.ts.map +1 -0
  69. package/dist/permissions/filter.js +89 -0
  70. package/dist/permissions/filter.js.map +1 -0
  71. package/dist/permissions/tool-registry.d.ts +49 -0
  72. package/dist/permissions/tool-registry.d.ts.map +1 -0
  73. package/dist/permissions/tool-registry.js +111 -0
  74. package/dist/permissions/tool-registry.js.map +1 -0
  75. package/dist/tempo/client.d.ts +32 -0
  76. package/dist/tempo/client.d.ts.map +1 -0
  77. package/dist/tempo/client.js +125 -0
  78. package/dist/tempo/client.js.map +1 -0
  79. package/dist/tempo/formatters.d.ts +30 -0
  80. package/dist/tempo/formatters.d.ts.map +1 -0
  81. package/dist/tempo/formatters.js +172 -0
  82. package/dist/tempo/formatters.js.map +1 -0
  83. package/dist/tempo/tools.d.ts +184 -0
  84. package/dist/tempo/tools.d.ts.map +1 -0
  85. package/dist/tempo/tools.js +392 -0
  86. package/dist/tempo/tools.js.map +1 -0
  87. package/dist/tempo/types.d.ts +98 -0
  88. package/dist/tempo/types.d.ts.map +1 -0
  89. package/dist/tempo/types.js +5 -0
  90. package/dist/tempo/types.js.map +1 -0
  91. package/dist/types.d.ts +27 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +6 -0
  94. package/dist/types.js.map +1 -0
  95. package/dist/utils/http-client.d.ts +22 -0
  96. package/dist/utils/http-client.d.ts.map +1 -0
  97. package/dist/utils/http-client.js +137 -0
  98. package/dist/utils/http-client.js.map +1 -0
  99. package/dist/utils/response-formatter.d.ts +8 -0
  100. package/dist/utils/response-formatter.d.ts.map +1 -0
  101. package/dist/utils/response-formatter.js +38 -0
  102. package/dist/utils/response-formatter.js.map +1 -0
  103. package/package.json +50 -0
@@ -0,0 +1,372 @@
1
+ /**
2
+ * Jira MCP Tools
3
+ */
4
+ import { z } from "zod";
5
+ import { formatSuccess, formatError, isApiError } from "../utils/response-formatter.js";
6
+ import { formatIssue, formatSearchResults, formatProject, formatProjects, } from "./formatters.js";
7
+ export function createJiraTools(client) {
8
+ return {
9
+ jira_search_issues: {
10
+ description: `Search for Jira issues using JQL (Jira Query Language).
11
+
12
+ JQL Syntax Basics:
13
+ - Field operators: =, !=, >, <, >=, <=, ~, IN, NOT IN
14
+ - Text search: use ~ for "contains" (e.g., summary~"bug")
15
+ - Dates: use functions like startOfDay(), startOfWeek(), etc.
16
+ - Combine: AND, OR, NOT
17
+ - Order: ORDER BY field ASC/DESC
18
+
19
+ Top 10 Useful JQL Queries:
20
+
21
+ 1. Recently updated issues (last 7 days):
22
+ updated >= startOfDay(-7)
23
+
24
+ 2. My open issues:
25
+ assignee = currentUser() AND status != Done
26
+
27
+ 3. Unassigned issues in a project:
28
+ project = PROJ AND assignee is EMPTY AND status != Done
29
+
30
+ 4. Issues created this week:
31
+ created >= startOfWeek()
32
+
33
+ 5. Overdue issues:
34
+ duedate < now() AND status != Done
35
+
36
+ 6. High priority bugs:
37
+ type = Bug AND priority = High AND status != Done
38
+
39
+ 7. Issues in current sprint:
40
+ sprint in openSprints()
41
+
42
+ 8. Issues updated by me recently:
43
+ updatedBy = currentUser() AND updated >= startOfDay(-3)
44
+
45
+ 9. Issues with specific label:
46
+ labels = "urgent" AND status != Done
47
+
48
+ 10. Recently resolved issues:
49
+ resolved >= startOfWeek() ORDER BY resolved DESC
50
+
51
+ Common Patterns:
52
+ - Date ranges: created >= "2025-01-01" AND created <= "2025-01-31"
53
+ - Multiple projects: project IN (PROJ1, PROJ2, PROJ3)
54
+ - Exclude resolved: AND resolution = Unresolved
55
+ - Text search: summary~"login" OR description~"login"`,
56
+ inputSchema: z.object({
57
+ jql: z.string().describe("JQL query string"),
58
+ maxResults: z.number().optional().describe("Maximum number of results (default: 50)"),
59
+ fields: z.array(z.string()).optional().describe("Specific fields to return"),
60
+ }),
61
+ handler: async (args) => {
62
+ try {
63
+ const result = await client.searchIssues(args.jql, args.maxResults, args.fields);
64
+ return {
65
+ content: [
66
+ {
67
+ type: "text",
68
+ text: formatSearchResults(result),
69
+ },
70
+ ],
71
+ };
72
+ }
73
+ catch (error) {
74
+ return formatError(isApiError(error) ? error : new Error(String(error)));
75
+ }
76
+ },
77
+ },
78
+ jira_get_issue: {
79
+ description: "Get detailed information about a specific Jira issue",
80
+ inputSchema: z.object({
81
+ issueKey: z.string().describe('Issue key (e.g., "PROJ-123")'),
82
+ fields: z.array(z.string()).optional().describe("Specific fields to return"),
83
+ expand: z
84
+ .array(z.string())
85
+ .optional()
86
+ .describe('Additional data to expand (e.g., "changelog", "renderedFields")'),
87
+ }),
88
+ handler: async (args) => {
89
+ try {
90
+ const result = await client.getIssue(args.issueKey, args.fields, args.expand);
91
+ return {
92
+ content: [
93
+ {
94
+ type: "text",
95
+ text: formatIssue(result),
96
+ },
97
+ ],
98
+ };
99
+ }
100
+ catch (error) {
101
+ return formatError(isApiError(error) ? error : new Error(String(error)));
102
+ }
103
+ },
104
+ },
105
+ jira_create_issue: {
106
+ description: "Create a new Jira issue",
107
+ inputSchema: z.object({
108
+ projectKey: z.string().describe("Project key"),
109
+ issueType: z.string().describe('Issue type (e.g., "Bug", "Story", "Task")'),
110
+ summary: z.string().describe("Issue summary"),
111
+ description: z.string().optional().describe("Issue description"),
112
+ priority: z.string().optional().describe("Priority name"),
113
+ assignee: z.string().optional().describe("Assignee username"),
114
+ labels: z.array(z.string()).optional().describe("Array of labels"),
115
+ components: z.array(z.string()).optional().describe("Array of component names"),
116
+ customFields: z
117
+ .record(z.unknown())
118
+ .optional()
119
+ .describe("Custom field values"),
120
+ }),
121
+ handler: async (args) => {
122
+ try {
123
+ const result = await client.createIssue(args);
124
+ return formatSuccess(result);
125
+ }
126
+ catch (error) {
127
+ return formatError(isApiError(error) ? error : new Error(String(error)));
128
+ }
129
+ },
130
+ },
131
+ jira_update_issue: {
132
+ description: "Update an existing Jira issue",
133
+ inputSchema: z.object({
134
+ issueKey: z.string().describe("Issue key"),
135
+ fields: z.record(z.unknown()).describe("Fields to update"),
136
+ notifyUsers: z
137
+ .boolean()
138
+ .optional()
139
+ .describe("Send notifications (default: true)"),
140
+ }),
141
+ handler: async (args) => {
142
+ try {
143
+ await client.updateIssue(args.issueKey, args.fields, args.notifyUsers);
144
+ return formatSuccess({
145
+ success: true,
146
+ message: `Issue ${args.issueKey} updated successfully`,
147
+ });
148
+ }
149
+ catch (error) {
150
+ return formatError(isApiError(error) ? error : new Error(String(error)));
151
+ }
152
+ },
153
+ },
154
+ jira_transition_issue: {
155
+ description: "Transition an issue to a different status",
156
+ inputSchema: z.object({
157
+ issueKey: z.string().describe("Issue key"),
158
+ transitionName: z
159
+ .string()
160
+ .describe('Transition name (e.g., "In Progress", "Done")'),
161
+ comment: z.string().optional().describe("Comment to add with transition"),
162
+ fields: z
163
+ .record(z.unknown())
164
+ .optional()
165
+ .describe("Fields to update during transition"),
166
+ }),
167
+ handler: async (args) => {
168
+ try {
169
+ await client.transitionIssue(args.issueKey, args.transitionName, args.comment, args.fields);
170
+ return formatSuccess({
171
+ success: true,
172
+ message: `Issue ${args.issueKey} transitioned to ${args.transitionName}`,
173
+ });
174
+ }
175
+ catch (error) {
176
+ return formatError(isApiError(error) ? error : new Error(String(error)));
177
+ }
178
+ },
179
+ },
180
+ jira_add_comment: {
181
+ description: "Add a comment to a Jira issue",
182
+ inputSchema: z.object({
183
+ issueKey: z.string().describe("Issue key"),
184
+ comment: z.string().describe("Comment text (supports Jira markdown)"),
185
+ visibility: z
186
+ .object({
187
+ type: z.string(),
188
+ value: z.string(),
189
+ })
190
+ .optional()
191
+ .describe("Visibility restrictions"),
192
+ }),
193
+ handler: async (args) => {
194
+ try {
195
+ const result = await client.addComment(args.issueKey, args.comment, args.visibility);
196
+ return formatSuccess(result);
197
+ }
198
+ catch (error) {
199
+ return formatError(isApiError(error) ? error : new Error(String(error)));
200
+ }
201
+ },
202
+ },
203
+ jira_get_issue_comments: {
204
+ description: "Retrieve comments from a Jira issue",
205
+ inputSchema: z.object({
206
+ issueKey: z.string().describe("Issue key"),
207
+ maxResults: z.number().optional().describe("Maximum number of comments"),
208
+ orderBy: z
209
+ .string()
210
+ .optional()
211
+ .describe('Sort order ("created" or "-created")'),
212
+ }),
213
+ handler: async (args) => {
214
+ try {
215
+ const result = await client.getComments(args.issueKey, args.maxResults, args.orderBy);
216
+ return formatSuccess(result);
217
+ }
218
+ catch (error) {
219
+ return formatError(isApiError(error) ? error : new Error(String(error)));
220
+ }
221
+ },
222
+ },
223
+ jira_list_projects: {
224
+ description: "List all accessible Jira projects",
225
+ inputSchema: z.object({
226
+ recent: z.boolean().optional().describe("Only return recent projects"),
227
+ expand: z.array(z.string()).optional().describe("Additional data to expand"),
228
+ }),
229
+ handler: async (args) => {
230
+ try {
231
+ const result = await client.listProjects(args.recent, args.expand);
232
+ return {
233
+ content: [
234
+ {
235
+ type: "text",
236
+ text: formatProjects(result),
237
+ },
238
+ ],
239
+ };
240
+ }
241
+ catch (error) {
242
+ return formatError(isApiError(error) ? error : new Error(String(error)));
243
+ }
244
+ },
245
+ },
246
+ jira_get_project: {
247
+ description: "Get detailed information about a specific project",
248
+ inputSchema: z.object({
249
+ projectKey: z.string().describe("Project key"),
250
+ expand: z.array(z.string()).optional().describe("Additional data to expand"),
251
+ }),
252
+ handler: async (args) => {
253
+ try {
254
+ const result = await client.getProject(args.projectKey, args.expand);
255
+ return {
256
+ content: [
257
+ {
258
+ type: "text",
259
+ text: formatProject(result),
260
+ },
261
+ ],
262
+ };
263
+ }
264
+ catch (error) {
265
+ return formatError(isApiError(error) ? error : new Error(String(error)));
266
+ }
267
+ },
268
+ },
269
+ jira_get_transitions: {
270
+ description: "Get available transitions for an issue",
271
+ inputSchema: z.object({
272
+ issueKey: z.string().describe("Issue key"),
273
+ }),
274
+ handler: async (args) => {
275
+ try {
276
+ const result = await client.getTransitions(args.issueKey);
277
+ return formatSuccess(result);
278
+ }
279
+ catch (error) {
280
+ return formatError(isApiError(error) ? error : new Error(String(error)));
281
+ }
282
+ },
283
+ },
284
+ jira_link_issues: {
285
+ description: "Create a link between two issues",
286
+ inputSchema: z.object({
287
+ issueKey: z.string().describe("Source issue key"),
288
+ linkedIssueKey: z.string().describe("Target issue key"),
289
+ linkType: z.string().describe('Link type (e.g., "Blocks", "Relates to")'),
290
+ comment: z.string().optional().describe("Comment for the link"),
291
+ }),
292
+ handler: async (args) => {
293
+ try {
294
+ await client.linkIssues(args.issueKey, args.linkedIssueKey, args.linkType, args.comment);
295
+ return formatSuccess({
296
+ success: true,
297
+ message: `Linked ${args.issueKey} to ${args.linkedIssueKey} with type ${args.linkType}`,
298
+ });
299
+ }
300
+ catch (error) {
301
+ return formatError(isApiError(error) ? error : new Error(String(error)));
302
+ }
303
+ },
304
+ },
305
+ jira_get_board: {
306
+ description: "Get information about an Agile board",
307
+ inputSchema: z.object({
308
+ boardId: z.number().describe("Board ID"),
309
+ }),
310
+ handler: async (args) => {
311
+ try {
312
+ const result = await client.getBoard(args.boardId);
313
+ return formatSuccess(result);
314
+ }
315
+ catch (error) {
316
+ return formatError(isApiError(error) ? error : new Error(String(error)));
317
+ }
318
+ },
319
+ },
320
+ jira_get_sprints: {
321
+ description: "List sprints for a board",
322
+ inputSchema: z.object({
323
+ boardId: z.number().describe("Board ID"),
324
+ state: z
325
+ .enum(["active", "future", "closed"])
326
+ .optional()
327
+ .describe("Sprint state filter"),
328
+ }),
329
+ handler: async (args) => {
330
+ try {
331
+ const result = await client.getSprints(args.boardId, args.state);
332
+ return formatSuccess(result);
333
+ }
334
+ catch (error) {
335
+ return formatError(isApiError(error) ? error : new Error(String(error)));
336
+ }
337
+ },
338
+ },
339
+ jira_get_sprint_issues: {
340
+ description: "Get issues in a specific sprint",
341
+ inputSchema: z.object({
342
+ sprintId: z.number().describe("Sprint ID"),
343
+ maxResults: z.number().optional().describe("Maximum number of results"),
344
+ }),
345
+ handler: async (args) => {
346
+ try {
347
+ const result = await client.getSprintIssues(args.sprintId, args.maxResults);
348
+ return formatSuccess(result);
349
+ }
350
+ catch (error) {
351
+ return formatError(isApiError(error) ? error : new Error(String(error)));
352
+ }
353
+ },
354
+ },
355
+ jira_get_issue_watchers: {
356
+ description: "Get list of watchers on an issue",
357
+ inputSchema: z.object({
358
+ issueKey: z.string().describe("Issue key"),
359
+ }),
360
+ handler: async (args) => {
361
+ try {
362
+ const result = await client.getIssueWatchers(args.issueKey);
363
+ return formatSuccess(result);
364
+ }
365
+ catch (error) {
366
+ return formatError(isApiError(error) ? error : new Error(String(error)));
367
+ }
368
+ },
369
+ },
370
+ };
371
+ }
372
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/jira/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Jira-specific types
3
+ */
4
+ export interface JiraIssue {
5
+ id: string;
6
+ key: string;
7
+ self: string;
8
+ fields: {
9
+ summary: string;
10
+ description?: string;
11
+ status: {
12
+ name: string;
13
+ statusCategory: {
14
+ name: string;
15
+ };
16
+ };
17
+ issuetype: {
18
+ name: string;
19
+ iconUrl?: string;
20
+ };
21
+ priority?: {
22
+ name: string;
23
+ iconUrl?: string;
24
+ };
25
+ assignee?: {
26
+ displayName: string;
27
+ emailAddress?: string;
28
+ accountId?: string;
29
+ };
30
+ reporter?: {
31
+ displayName: string;
32
+ emailAddress?: string;
33
+ accountId?: string;
34
+ };
35
+ created: string;
36
+ updated: string;
37
+ labels?: string[];
38
+ components?: Array<{
39
+ name: string;
40
+ }>;
41
+ [key: string]: unknown;
42
+ };
43
+ }
44
+ export interface JiraSearchResult {
45
+ issues: JiraIssue[];
46
+ startAt: number;
47
+ maxResults: number;
48
+ total: number;
49
+ }
50
+ export interface JiraProject {
51
+ id: string;
52
+ key: string;
53
+ name: string;
54
+ description?: string;
55
+ lead?: {
56
+ displayName: string;
57
+ emailAddress?: string;
58
+ };
59
+ projectTypeKey: string;
60
+ avatarUrls?: Record<string, string>;
61
+ }
62
+ export interface JiraComment {
63
+ id: string;
64
+ author: {
65
+ displayName: string;
66
+ emailAddress?: string;
67
+ };
68
+ body: string;
69
+ created: string;
70
+ updated: string;
71
+ }
72
+ export interface JiraTransition {
73
+ id: string;
74
+ name: string;
75
+ to: {
76
+ name: string;
77
+ statusCategory: {
78
+ name: string;
79
+ };
80
+ };
81
+ }
82
+ export interface JiraBoard {
83
+ id: number;
84
+ name: string;
85
+ type: string;
86
+ location?: {
87
+ projectKey: string;
88
+ projectName: string;
89
+ };
90
+ }
91
+ export interface JiraSprint {
92
+ id: number;
93
+ name: string;
94
+ state: "active" | "future" | "closed";
95
+ startDate?: string;
96
+ endDate?: string;
97
+ completeDate?: string;
98
+ originBoardId: number;
99
+ }
100
+ export interface JiraIssueLink {
101
+ id: string;
102
+ type: {
103
+ name: string;
104
+ inward: string;
105
+ outward: string;
106
+ };
107
+ outwardIssue?: JiraIssue;
108
+ inwardIssue?: JiraIssue;
109
+ }
110
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/jira/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Jira-specific types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/jira/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Permission filter for tool execution
3
+ */
4
+ import type { PermissionsConfig } from "../config/types.js";
5
+ export declare class PermissionFilter {
6
+ private mode;
7
+ private allowedTools;
8
+ constructor(config: PermissionsConfig);
9
+ /**
10
+ * Compute the set of allowed tools based on configuration
11
+ */
12
+ private computeAllowedTools;
13
+ /**
14
+ * Check if a tool is allowed to execute
15
+ */
16
+ isToolAllowed(toolName: string): boolean;
17
+ /**
18
+ * Get the list of allowed tools
19
+ */
20
+ getAllowedTools(): string[];
21
+ /**
22
+ * Get permission denial message
23
+ */
24
+ getDenialMessage(toolName: string): string;
25
+ /**
26
+ * Get current permission mode
27
+ */
28
+ getMode(): "full" | "readonly" | "custom";
29
+ }
30
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/permissions/filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAW5D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAiC;IAC7C,OAAO,CAAC,YAAY,CAAc;gBAEtB,MAAM,EAAE,iBAAiB;IAKrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqC3B;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IA4B1C;;OAEG;IACH,OAAO,IAAI,MAAM,GAAG,UAAU,GAAG,QAAQ;CAG1C"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Permission filter for tool execution
3
+ */
4
+ import { expandVirtualActions, ALL_JIRA_TOOLS, ALL_CONFLUENCE_TOOLS, ALL_TEMPO_TOOLS, JIRA_READ_TOOLS, CONFLUENCE_READ_TOOLS, TEMPO_READ_TOOLS, } from "./tool-registry.js";
5
+ export class PermissionFilter {
6
+ mode;
7
+ allowedTools;
8
+ constructor(config) {
9
+ this.mode = config.mode;
10
+ this.allowedTools = this.computeAllowedTools(config);
11
+ }
12
+ /**
13
+ * Compute the set of allowed tools based on configuration
14
+ */
15
+ computeAllowedTools(config) {
16
+ // Mode "full": allow all tools
17
+ if (this.mode === "full") {
18
+ return new Set([...ALL_JIRA_TOOLS, ...ALL_CONFLUENCE_TOOLS, ...ALL_TEMPO_TOOLS]);
19
+ }
20
+ // Mode "readonly": allow only read tools
21
+ if (this.mode === "readonly") {
22
+ return new Set([...JIRA_READ_TOOLS, ...CONFLUENCE_READ_TOOLS, ...TEMPO_READ_TOOLS]);
23
+ }
24
+ // Mode "custom": use whitelist/blacklist
25
+ if (this.mode === "custom") {
26
+ // Whitelist has priority
27
+ if (config.whitelist.length > 0) {
28
+ const expanded = expandVirtualActions(config.whitelist);
29
+ return new Set(expanded);
30
+ }
31
+ // If no whitelist, use blacklist
32
+ if (config.blacklist.length > 0) {
33
+ const allTools = new Set([...ALL_JIRA_TOOLS, ...ALL_CONFLUENCE_TOOLS, ...ALL_TEMPO_TOOLS]);
34
+ const blacklisted = new Set(expandVirtualActions(config.blacklist));
35
+ // Remove blacklisted tools
36
+ blacklisted.forEach((tool) => allTools.delete(tool));
37
+ return allTools;
38
+ }
39
+ // No whitelist or blacklist in custom mode: allow all (default)
40
+ return new Set([...ALL_JIRA_TOOLS, ...ALL_CONFLUENCE_TOOLS, ...ALL_TEMPO_TOOLS]);
41
+ }
42
+ // Fallback: allow all
43
+ return new Set([...ALL_JIRA_TOOLS, ...ALL_CONFLUENCE_TOOLS, ...ALL_TEMPO_TOOLS]);
44
+ }
45
+ /**
46
+ * Check if a tool is allowed to execute
47
+ */
48
+ isToolAllowed(toolName) {
49
+ return this.allowedTools.has(toolName);
50
+ }
51
+ /**
52
+ * Get the list of allowed tools
53
+ */
54
+ getAllowedTools() {
55
+ return Array.from(this.allowedTools);
56
+ }
57
+ /**
58
+ * Get permission denial message
59
+ */
60
+ getDenialMessage(toolName) {
61
+ const modeDesc = this.mode === "full"
62
+ ? "full access"
63
+ : this.mode === "readonly"
64
+ ? "read-only"
65
+ : "custom permissions";
66
+ let message = `Tool '${toolName}' is not allowed by current permission configuration (mode: ${modeDesc})`;
67
+ // Suggest similar allowed tools
68
+ const allowed = this.getAllowedTools();
69
+ if (allowed.length > 0) {
70
+ // Find tools from same service
71
+ const service = toolName.split("_")[0]; // "jira" or "confluence"
72
+ const similarTools = allowed.filter((t) => t.startsWith(service));
73
+ if (similarTools.length > 0) {
74
+ message += `\n\nAllowed ${service} tools: ${similarTools.slice(0, 5).join(", ")}`;
75
+ if (similarTools.length > 5) {
76
+ message += ` and ${similarTools.length - 5} more`;
77
+ }
78
+ }
79
+ }
80
+ return message;
81
+ }
82
+ /**
83
+ * Get current permission mode
84
+ */
85
+ getMode() {
86
+ return this.mode;
87
+ }
88
+ }
89
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/permissions/filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,OAAO,gBAAgB;IACnB,IAAI,CAAiC;IACrC,YAAY,CAAc;IAElC,YAAY,MAAyB;QACnC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,MAAyB;QACnD,+BAA+B;QAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,oBAAoB,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,yCAAyC;QACzC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,EAAE,GAAG,qBAAqB,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC;QACtF,CAAC;QAED,yCAAyC;QACzC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,yBAAyB;YACzB,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACxD,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;YAED,iCAAiC;YACjC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,cAAc,EAAE,GAAG,oBAAoB,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC;gBACnG,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBAE5E,2BAA2B;gBAC3B,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrD,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,gEAAgE;YAChE,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,oBAAoB,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC;QACnF,CAAC;QAED,sBAAsB;QACtB,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,oBAAoB,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC;IACnF,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAgB;QAC/B,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,KAAK,MAAM;YAClB,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU;gBACxB,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,oBAAoB,CAAC;QAE7B,IAAI,OAAO,GAAG,SAAS,QAAQ,+DAA+D,QAAQ,GAAG,CAAC;QAE1G,gCAAgC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACvC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,+BAA+B;YAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;YACjE,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YAElE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,IAAI,eAAe,OAAO,WAAW,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,OAAO,IAAI,QAAQ,YAAY,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF"}