@crypto512/jicon-mcp 0.6.1 → 0.7.1

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 (77) hide show
  1. package/README.md +265 -43
  2. package/TOOL_LIST.md +201 -5
  3. package/dist/config/types.d.ts +6 -6
  4. package/dist/config/types.d.ts.map +1 -1
  5. package/dist/config/types.js +3 -2
  6. package/dist/config/types.js.map +1 -1
  7. package/dist/confluence/client.d.ts +8 -16
  8. package/dist/confluence/client.d.ts.map +1 -1
  9. package/dist/confluence/client.js +75 -43
  10. package/dist/confluence/client.js.map +1 -1
  11. package/dist/confluence/formatters.d.ts +4 -0
  12. package/dist/confluence/formatters.d.ts.map +1 -1
  13. package/dist/confluence/formatters.js +19 -0
  14. package/dist/confluence/formatters.js.map +1 -1
  15. package/dist/confluence/tools.d.ts +9 -36
  16. package/dist/confluence/tools.d.ts.map +1 -1
  17. package/dist/confluence/tools.js +90 -158
  18. package/dist/confluence/tools.js.map +1 -1
  19. package/dist/index.js +9 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/jira/client.d.ts +9 -9
  22. package/dist/jira/client.d.ts.map +1 -1
  23. package/dist/jira/client.js +252 -30
  24. package/dist/jira/client.js.map +1 -1
  25. package/dist/jira/formatters.d.ts +4 -0
  26. package/dist/jira/formatters.d.ts.map +1 -1
  27. package/dist/jira/formatters.js +24 -0
  28. package/dist/jira/formatters.js.map +1 -1
  29. package/dist/jira/tools.d.ts +36 -36
  30. package/dist/jira/tools.d.ts.map +1 -1
  31. package/dist/jira/tools.js +161 -139
  32. package/dist/jira/tools.js.map +1 -1
  33. package/dist/jira/types.d.ts +50 -0
  34. package/dist/jira/types.d.ts.map +1 -1
  35. package/dist/permissions/filter.d.ts.map +1 -1
  36. package/dist/permissions/filter.js +42 -13
  37. package/dist/permissions/filter.js.map +1 -1
  38. package/dist/permissions/tool-registry.d.ts +33 -14
  39. package/dist/permissions/tool-registry.d.ts.map +1 -1
  40. package/dist/permissions/tool-registry.js +80 -5
  41. package/dist/permissions/tool-registry.js.map +1 -1
  42. package/dist/tempo/client.d.ts +1 -0
  43. package/dist/tempo/client.d.ts.map +1 -1
  44. package/dist/tempo/client.js +43 -0
  45. package/dist/tempo/client.js.map +1 -1
  46. package/dist/tempo/formatters.d.ts +4 -0
  47. package/dist/tempo/formatters.d.ts.map +1 -1
  48. package/dist/tempo/formatters.js +24 -0
  49. package/dist/tempo/formatters.js.map +1 -1
  50. package/dist/tempo/tools.d.ts +21 -0
  51. package/dist/tempo/tools.d.ts.map +1 -1
  52. package/dist/tempo/tools.js +74 -134
  53. package/dist/tempo/tools.js.map +1 -1
  54. package/dist/types.d.ts +1 -0
  55. package/dist/types.d.ts.map +1 -1
  56. package/dist/types.js.map +1 -1
  57. package/dist/utils/buffer-tools.d.ts +128 -0
  58. package/dist/utils/buffer-tools.d.ts.map +1 -0
  59. package/dist/utils/buffer-tools.js +312 -0
  60. package/dist/utils/buffer-tools.js.map +1 -0
  61. package/dist/utils/content-buffer.d.ts +144 -0
  62. package/dist/utils/content-buffer.d.ts.map +1 -0
  63. package/dist/utils/content-buffer.js +330 -0
  64. package/dist/utils/content-buffer.js.map +1 -0
  65. package/dist/utils/response-formatter.d.ts +5 -1
  66. package/dist/utils/response-formatter.d.ts.map +1 -1
  67. package/dist/utils/response-formatter.js +52 -2
  68. package/dist/utils/response-formatter.js.map +1 -1
  69. package/dist/utils/workload-tools.d.ts +68 -0
  70. package/dist/utils/workload-tools.d.ts.map +1 -0
  71. package/dist/utils/workload-tools.js +134 -0
  72. package/dist/utils/workload-tools.js.map +1 -0
  73. package/package.json +1 -1
  74. package/CLAUDE.md +0 -722
  75. package/CONTRIBUTING.md +0 -371
  76. package/DEVELOPMENT.md +0 -400
  77. package/JIRA_API_ANALYSIS.md +0 -275
@@ -0,0 +1,312 @@
1
+ /**
2
+ * Buffer management tools for MCP Server
3
+ *
4
+ * Provides tools to retrieve chunks from buffered content,
5
+ * list active buffers, clear buffers, search content, and edit content.
6
+ */
7
+ import { z } from "zod";
8
+ import { contentBuffer } from "./content-buffer.js";
9
+ import { formatSuccess, formatError, getMaxOutputSize } from "./response-formatter.js";
10
+ /**
11
+ * Format grep results as text output similar to grep CLI
12
+ */
13
+ function formatGrepOutput(result, showLineNumbers) {
14
+ const lines = [];
15
+ for (let i = 0; i < result.matches.length; i++) {
16
+ const match = result.matches[i];
17
+ // Add separator between matches (except for first)
18
+ if (i > 0) {
19
+ lines.push("--");
20
+ }
21
+ // Before context
22
+ for (let j = 0; j < match.before.length; j++) {
23
+ const lineNum = match.lineNumber - match.before.length + j;
24
+ if (showLineNumbers) {
25
+ lines.push(`${lineNum}-${match.before[j]}`);
26
+ }
27
+ else {
28
+ lines.push(match.before[j]);
29
+ }
30
+ }
31
+ // Matched line
32
+ if (showLineNumbers) {
33
+ lines.push(`${match.lineNumber}:${match.line}`);
34
+ }
35
+ else {
36
+ lines.push(match.line);
37
+ }
38
+ // After context
39
+ for (let j = 0; j < match.after.length; j++) {
40
+ const lineNum = match.lineNumber + 1 + j;
41
+ if (showLineNumbers) {
42
+ lines.push(`${lineNum}-${match.after[j]}`);
43
+ }
44
+ else {
45
+ lines.push(match.after[j]);
46
+ }
47
+ }
48
+ }
49
+ return lines.join("\n");
50
+ }
51
+ export function createBufferTools() {
52
+ return {
53
+ buffer_get_chunk: {
54
+ description: `Retrieve a chunk of buffered content by buffer ID. Use after receiving a bufferId from tools. Returns content, offset, totalSize, and hasMore flag.`,
55
+ inputSchema: z.object({
56
+ bufferId: z.string().describe("Buffer ID from previous tool response"),
57
+ offset: z
58
+ .number()
59
+ .optional()
60
+ .default(0)
61
+ .describe("Character offset to start from (default: 0)"),
62
+ limit: z
63
+ .number()
64
+ .optional()
65
+ .default(5000)
66
+ .describe("Maximum characters to return (default: 5000)"),
67
+ }),
68
+ handler: async (args) => {
69
+ try {
70
+ const chunk = contentBuffer.getChunk(args.bufferId, args.offset ?? 0, args.limit ?? 5000);
71
+ if (!chunk) {
72
+ return formatError({
73
+ error: true,
74
+ message: `Buffer not found or expired: ${args.bufferId}`,
75
+ statusCode: 404,
76
+ });
77
+ }
78
+ return formatSuccess({
79
+ bufferId: chunk.bufferId,
80
+ content: chunk.chunk,
81
+ offset: chunk.offset,
82
+ limit: chunk.limit,
83
+ totalSize: chunk.totalSize,
84
+ hasMore: chunk.hasMore,
85
+ metadata: chunk.metadata,
86
+ });
87
+ }
88
+ catch (error) {
89
+ return formatError(error instanceof Error ? error : new Error(String(error)));
90
+ }
91
+ },
92
+ },
93
+ buffer_list: {
94
+ description: `List all active buffers with metadata. Buffers expire after 10 minutes.`,
95
+ inputSchema: z.object({}),
96
+ handler: async () => {
97
+ try {
98
+ const buffers = contentBuffer.list();
99
+ return formatSuccess({
100
+ count: buffers.length,
101
+ buffers: buffers.map((b) => ({
102
+ ...b,
103
+ createdAt: new Date(b.createdAt).toISOString(),
104
+ expiresAt: new Date(b.expiresAt).toISOString(),
105
+ })),
106
+ });
107
+ }
108
+ catch (error) {
109
+ return formatError(error instanceof Error ? error : new Error(String(error)));
110
+ }
111
+ },
112
+ },
113
+ buffer_clear: {
114
+ description: `Clear a specific buffer or all buffers. Omit bufferId to clear all.`,
115
+ inputSchema: z.object({
116
+ bufferId: z
117
+ .string()
118
+ .optional()
119
+ .describe("Buffer ID to clear, or omit to clear all buffers"),
120
+ }),
121
+ handler: async (args) => {
122
+ try {
123
+ if (args.bufferId) {
124
+ const deleted = contentBuffer.clear(args.bufferId);
125
+ if (!deleted) {
126
+ return formatError({
127
+ error: true,
128
+ message: `Buffer not found: ${args.bufferId}`,
129
+ statusCode: 404,
130
+ });
131
+ }
132
+ return formatSuccess({
133
+ message: `Buffer ${args.bufferId} cleared`,
134
+ cleared: 1,
135
+ });
136
+ }
137
+ const count = contentBuffer.size();
138
+ contentBuffer.clear();
139
+ return formatSuccess({
140
+ message: "All buffers cleared",
141
+ cleared: count,
142
+ });
143
+ }
144
+ catch (error) {
145
+ return formatError(error instanceof Error ? error : new Error(String(error)));
146
+ }
147
+ },
148
+ },
149
+ buffer_grep: {
150
+ description: `Search buffered content for patterns. Supports regex, context lines (-A/-B/-C), and case-insensitive (-i). Large results are buffered.`,
151
+ inputSchema: z.object({
152
+ bufferId: z.string().describe("Buffer ID from previous tool response"),
153
+ pattern: z.string().describe("Regex pattern to search for"),
154
+ "-A": z
155
+ .number()
156
+ .optional()
157
+ .describe("Number of lines to show after each match"),
158
+ "-B": z
159
+ .number()
160
+ .optional()
161
+ .describe("Number of lines to show before each match"),
162
+ "-C": z
163
+ .number()
164
+ .optional()
165
+ .describe("Number of lines to show before AND after each match (overrides -A/-B)"),
166
+ "-i": z
167
+ .boolean()
168
+ .optional()
169
+ .describe("Case insensitive search"),
170
+ "-n": z
171
+ .boolean()
172
+ .optional()
173
+ .default(true)
174
+ .describe("Show line numbers in output (default: true)"),
175
+ output_mode: z
176
+ .enum(["content", "count"])
177
+ .optional()
178
+ .default("content")
179
+ .describe("Output mode: 'content' shows matching lines, 'count' shows match count"),
180
+ multiline: z
181
+ .boolean()
182
+ .optional()
183
+ .default(false)
184
+ .describe("Enable multiline mode where . matches newlines"),
185
+ head_limit: z
186
+ .number()
187
+ .optional()
188
+ .describe("Limit to first N matches"),
189
+ offset: z
190
+ .number()
191
+ .optional()
192
+ .default(0)
193
+ .describe("Skip first N matches"),
194
+ }),
195
+ handler: async (args) => {
196
+ try {
197
+ // Handle -C overriding -A/-B
198
+ const before = args["-C"] ?? args["-B"] ?? 0;
199
+ const after = args["-C"] ?? args["-A"] ?? 0;
200
+ const result = contentBuffer.grep(args.bufferId, args.pattern, {
201
+ caseInsensitive: args["-i"] ?? false,
202
+ before,
203
+ after,
204
+ multiline: args.multiline ?? false,
205
+ countOnly: args.output_mode === "count",
206
+ headLimit: args.head_limit,
207
+ offset: args.offset ?? 0,
208
+ });
209
+ if (!result) {
210
+ return formatError({
211
+ error: true,
212
+ message: `Buffer not found or expired: ${args.bufferId}`,
213
+ statusCode: 404,
214
+ });
215
+ }
216
+ // Count mode returns structured JSON
217
+ if ("count" in result) {
218
+ return formatSuccess(result);
219
+ }
220
+ // Content mode - format as text if -n, else JSON
221
+ const showLineNumbers = args["-n"] ?? true;
222
+ const maxSize = getMaxOutputSize();
223
+ if (showLineNumbers) {
224
+ const textOutput = formatGrepOutput(result, true);
225
+ const fullText = `# Search Results: ${result.totalMatches} matches found${result.truncated ? " (truncated)" : ""}\n\n${textOutput || "No matches found."}`;
226
+ // Check if exceeds max size - if so, buffer it
227
+ if (fullText.length > maxSize) {
228
+ const newBufferId = contentBuffer.store(fullText, {
229
+ type: "grep_result",
230
+ sourceBufferId: args.bufferId,
231
+ pattern: args.pattern,
232
+ totalMatches: result.totalMatches,
233
+ });
234
+ return {
235
+ content: [
236
+ {
237
+ type: "text",
238
+ text: JSON.stringify({
239
+ _pagination: true,
240
+ status: "SUCCESS - Search results buffered",
241
+ bufferId: newBufferId,
242
+ totalSize: fullText.length,
243
+ totalMatches: result.totalMatches,
244
+ hasMore: true,
245
+ next_action: {
246
+ tool: "buffer_get_chunk",
247
+ args: { bufferId: newBufferId, offset: 0, limit: 5000 },
248
+ },
249
+ }, null, 2),
250
+ },
251
+ ],
252
+ };
253
+ }
254
+ // Within limit - return directly
255
+ return {
256
+ content: [
257
+ {
258
+ type: "text",
259
+ text: fullText,
260
+ },
261
+ ],
262
+ };
263
+ }
264
+ // JSON mode - use formatSuccess which handles buffering automatically
265
+ return formatSuccess(result);
266
+ }
267
+ catch (error) {
268
+ return formatError(error instanceof Error ? error : new Error(String(error)));
269
+ }
270
+ },
271
+ },
272
+ buffer_edit: {
273
+ description: `Exact string replacement in buffered content. Fails if old_string is not unique (use replace_all=true for all occurrences). Changes are in-memory only - call update API to persist.`,
274
+ inputSchema: z.object({
275
+ bufferId: z.string().describe("Buffer ID to modify"),
276
+ old_string: z.string().describe("Exact text to replace"),
277
+ new_string: z.string().describe("Replacement text"),
278
+ replace_all: z
279
+ .boolean()
280
+ .optional()
281
+ .default(false)
282
+ .describe("Replace all occurrences (default: false, fails if not unique)"),
283
+ }),
284
+ handler: async (args) => {
285
+ try {
286
+ const result = contentBuffer.edit(args.bufferId, args.old_string, args.new_string, args.replace_all ?? false);
287
+ if (!result) {
288
+ return formatError({
289
+ error: true,
290
+ message: `Buffer not found or expired: ${args.bufferId}`,
291
+ statusCode: 404,
292
+ });
293
+ }
294
+ // Check if it's an error result
295
+ if ("error" in result && result.error) {
296
+ return formatError({
297
+ error: true,
298
+ message: result.message,
299
+ statusCode: 400,
300
+ details: { occurrences: result.occurrences },
301
+ });
302
+ }
303
+ return formatSuccess(result);
304
+ }
305
+ catch (error) {
306
+ return formatError(error instanceof Error ? error : new Error(String(error)));
307
+ }
308
+ },
309
+ },
310
+ };
311
+ }
312
+ //# sourceMappingURL=buffer-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer-tools.js","sourceRoot":"","sources":["../../src/utils/buffer-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Content Buffer for MCP Server
3
+ *
4
+ * Provides in-memory buffering with pagination support for large content
5
+ * that needs to be returned in chunks to MCP clients.
6
+ */
7
+ export interface BufferEntry {
8
+ content: string;
9
+ totalSize: number;
10
+ createdAt: number;
11
+ modifiedAt?: number;
12
+ ttl: number;
13
+ metadata?: Record<string, unknown>;
14
+ }
15
+ export interface ChunkResult {
16
+ bufferId: string;
17
+ chunk: string;
18
+ offset: number;
19
+ limit: number;
20
+ totalSize: number;
21
+ hasMore: boolean;
22
+ metadata?: Record<string, unknown>;
23
+ }
24
+ export interface BufferInfo {
25
+ bufferId: string;
26
+ totalSize: number;
27
+ createdAt: number;
28
+ expiresAt: number;
29
+ metadata?: Record<string, unknown>;
30
+ }
31
+ export interface GrepMatch {
32
+ lineNumber: number;
33
+ line: string;
34
+ before: string[];
35
+ after: string[];
36
+ }
37
+ export interface GrepResult {
38
+ bufferId: string;
39
+ pattern: string;
40
+ totalMatches: number;
41
+ matches: GrepMatch[];
42
+ truncated: boolean;
43
+ metadata?: Record<string, unknown>;
44
+ }
45
+ export interface GrepCountResult {
46
+ bufferId: string;
47
+ pattern: string;
48
+ count: number;
49
+ metadata?: Record<string, unknown>;
50
+ }
51
+ export interface GrepOptions {
52
+ caseInsensitive?: boolean;
53
+ before?: number;
54
+ after?: number;
55
+ multiline?: boolean;
56
+ countOnly?: boolean;
57
+ headLimit?: number;
58
+ offset?: number;
59
+ }
60
+ export interface EditResult {
61
+ bufferId: string;
62
+ success: boolean;
63
+ replacements: number;
64
+ oldSize: number;
65
+ newSize: number;
66
+ metadata?: Record<string, unknown>;
67
+ }
68
+ export interface EditError {
69
+ error: true;
70
+ message: string;
71
+ occurrences: number;
72
+ }
73
+ export declare class ContentBuffer {
74
+ private buffers;
75
+ private defaultTTL;
76
+ private modifiedTTL;
77
+ private cleanupInterval;
78
+ private defaultChunkSize;
79
+ constructor(options?: {
80
+ defaultTTL?: number;
81
+ modifiedTTL?: number;
82
+ defaultChunkSize?: number;
83
+ cleanupIntervalMs?: number;
84
+ });
85
+ /**
86
+ * Check if a buffer entry is expired
87
+ * Modified buffers use modifiedAt as the reference time
88
+ */
89
+ private isExpired;
90
+ /**
91
+ * Get the expiration timestamp for a buffer entry
92
+ */
93
+ private getExpiresAt;
94
+ /**
95
+ * Store content in the buffer and return a unique buffer ID
96
+ */
97
+ store(content: string, metadata?: Record<string, unknown>, ttl?: number): string;
98
+ /**
99
+ * Get a chunk of content from the buffer
100
+ */
101
+ getChunk(bufferId: string, offset?: number, limit?: number): ChunkResult | null;
102
+ /**
103
+ * Check if a buffer exists and is valid
104
+ */
105
+ has(bufferId: string): boolean;
106
+ /**
107
+ * Get buffer info without content
108
+ */
109
+ getInfo(bufferId: string): BufferInfo | null;
110
+ /**
111
+ * List all active buffers
112
+ */
113
+ list(): BufferInfo[];
114
+ /**
115
+ * Clear a specific buffer or all buffers
116
+ */
117
+ clear(bufferId?: string): boolean;
118
+ /**
119
+ * Get the number of active buffers
120
+ */
121
+ size(): number;
122
+ /**
123
+ * Search buffer content for a pattern with context lines
124
+ */
125
+ grep(bufferId: string, pattern: string, options?: GrepOptions): GrepResult | GrepCountResult | null;
126
+ /**
127
+ * Edit buffer content by replacing old_string with new_string
128
+ */
129
+ edit(bufferId: string, oldString: string, newString: string, replaceAll?: boolean): EditResult | EditError | null;
130
+ /**
131
+ * Clean up expired buffers
132
+ */
133
+ private cleanup;
134
+ /**
135
+ * Generate a unique buffer ID
136
+ */
137
+ private generateId;
138
+ /**
139
+ * Stop the cleanup interval (for graceful shutdown)
140
+ */
141
+ destroy(): void;
142
+ }
143
+ export declare const contentBuffer: ContentBuffer;
144
+ //# sourceMappingURL=content-buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-buffer.d.ts","sourceRoot":"","sources":["../../src/utils/content-buffer.ts"],"names":[],"mappings":"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"}