@brxce/mcp-server 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.
Files changed (106) hide show
  1. package/README.md +220 -0
  2. package/dist/config/environment.d.ts +8 -0
  3. package/dist/config/environment.d.ts.map +1 -0
  4. package/dist/config/environment.js +16 -0
  5. package/dist/config/environment.js.map +1 -0
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +167 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/prompts/worknode-prompts.d.ts +7 -0
  11. package/dist/prompts/worknode-prompts.d.ts.map +1 -0
  12. package/dist/prompts/worknode-prompts.js +369 -0
  13. package/dist/prompts/worknode-prompts.js.map +1 -0
  14. package/dist/prompts/workspace-context-prompt.d.ts +4 -0
  15. package/dist/prompts/workspace-context-prompt.d.ts.map +1 -0
  16. package/dist/prompts/workspace-context-prompt.js +101 -0
  17. package/dist/prompts/workspace-context-prompt.js.map +1 -0
  18. package/dist/resources/user-resource.d.ts +4 -0
  19. package/dist/resources/user-resource.d.ts.map +1 -0
  20. package/dist/resources/user-resource.js +40 -0
  21. package/dist/resources/user-resource.js.map +1 -0
  22. package/dist/resources/workspace-members-resource.d.ts +4 -0
  23. package/dist/resources/workspace-members-resource.d.ts.map +1 -0
  24. package/dist/resources/workspace-members-resource.js +39 -0
  25. package/dist/resources/workspace-members-resource.js.map +1 -0
  26. package/dist/resources/workspace-resource.d.ts +4 -0
  27. package/dist/resources/workspace-resource.d.ts.map +1 -0
  28. package/dist/resources/workspace-resource.js +27 -0
  29. package/dist/resources/workspace-resource.js.map +1 -0
  30. package/dist/services/api-client.d.ts +17 -0
  31. package/dist/services/api-client.d.ts.map +1 -0
  32. package/dist/services/api-client.js +118 -0
  33. package/dist/services/api-client.js.map +1 -0
  34. package/dist/tools/meeting-agenda-tool.d.ts +7 -0
  35. package/dist/tools/meeting-agenda-tool.d.ts.map +1 -0
  36. package/dist/tools/meeting-agenda-tool.js +452 -0
  37. package/dist/tools/meeting-agenda-tool.js.map +1 -0
  38. package/dist/tools/meeting-create-tool.d.ts +8 -0
  39. package/dist/tools/meeting-create-tool.d.ts.map +1 -0
  40. package/dist/tools/meeting-create-tool.js +309 -0
  41. package/dist/tools/meeting-create-tool.js.map +1 -0
  42. package/dist/tools/meeting-decisions-tool.d.ts +7 -0
  43. package/dist/tools/meeting-decisions-tool.d.ts.map +1 -0
  44. package/dist/tools/meeting-decisions-tool.js +431 -0
  45. package/dist/tools/meeting-decisions-tool.js.map +1 -0
  46. package/dist/tools/meeting-list-tool.d.ts +7 -0
  47. package/dist/tools/meeting-list-tool.d.ts.map +1 -0
  48. package/dist/tools/meeting-list-tool.js +305 -0
  49. package/dist/tools/meeting-list-tool.js.map +1 -0
  50. package/dist/tools/meeting-notes-tool.d.ts +7 -0
  51. package/dist/tools/meeting-notes-tool.d.ts.map +1 -0
  52. package/dist/tools/meeting-notes-tool.js +318 -0
  53. package/dist/tools/meeting-notes-tool.js.map +1 -0
  54. package/dist/tools/meeting-update-tool.d.ts +7 -0
  55. package/dist/tools/meeting-update-tool.d.ts.map +1 -0
  56. package/dist/tools/meeting-update-tool.js +310 -0
  57. package/dist/tools/meeting-update-tool.js.map +1 -0
  58. package/dist/tools/tag-category-tool.d.ts +4 -0
  59. package/dist/tools/tag-category-tool.d.ts.map +1 -0
  60. package/dist/tools/tag-category-tool.js +293 -0
  61. package/dist/tools/tag-category-tool.js.map +1 -0
  62. package/dist/tools/tag-search-tool.d.ts +4 -0
  63. package/dist/tools/tag-search-tool.d.ts.map +1 -0
  64. package/dist/tools/tag-search-tool.js +358 -0
  65. package/dist/tools/tag-search-tool.js.map +1 -0
  66. package/dist/tools/tag-tool.d.ts +4 -0
  67. package/dist/tools/tag-tool.d.ts.map +1 -0
  68. package/dist/tools/tag-tool.js +450 -0
  69. package/dist/tools/tag-tool.js.map +1 -0
  70. package/dist/tools/worknode-archive-tool.d.ts +7 -0
  71. package/dist/tools/worknode-archive-tool.d.ts.map +1 -0
  72. package/dist/tools/worknode-archive-tool.js +163 -0
  73. package/dist/tools/worknode-archive-tool.js.map +1 -0
  74. package/dist/tools/worknode-create-tool.d.ts +4 -0
  75. package/dist/tools/worknode-create-tool.d.ts.map +1 -0
  76. package/dist/tools/worknode-create-tool.js +382 -0
  77. package/dist/tools/worknode-create-tool.js.map +1 -0
  78. package/dist/tools/worknode-my-work-tool.d.ts +8 -0
  79. package/dist/tools/worknode-my-work-tool.d.ts.map +1 -0
  80. package/dist/tools/worknode-my-work-tool.js +302 -0
  81. package/dist/tools/worknode-my-work-tool.js.map +1 -0
  82. package/dist/tools/worknode-search-tool.d.ts +4 -0
  83. package/dist/tools/worknode-search-tool.d.ts.map +1 -0
  84. package/dist/tools/worknode-search-tool.js +289 -0
  85. package/dist/tools/worknode-search-tool.js.map +1 -0
  86. package/dist/tools/worknode-subtree-tool.d.ts +4 -0
  87. package/dist/tools/worknode-subtree-tool.d.ts.map +1 -0
  88. package/dist/tools/worknode-subtree-tool.js +175 -0
  89. package/dist/tools/worknode-subtree-tool.js.map +1 -0
  90. package/dist/tools/worknode-tag-tool.d.ts +4 -0
  91. package/dist/tools/worknode-tag-tool.d.ts.map +1 -0
  92. package/dist/tools/worknode-tag-tool.js +353 -0
  93. package/dist/tools/worknode-tag-tool.js.map +1 -0
  94. package/dist/tools/worknode-update-tool.d.ts +4 -0
  95. package/dist/tools/worknode-update-tool.d.ts.map +1 -0
  96. package/dist/tools/worknode-update-tool.js +409 -0
  97. package/dist/tools/worknode-update-tool.js.map +1 -0
  98. package/dist/tools/workspace-inbox-tool.d.ts +8 -0
  99. package/dist/tools/workspace-inbox-tool.d.ts.map +1 -0
  100. package/dist/tools/workspace-inbox-tool.js +210 -0
  101. package/dist/tools/workspace-inbox-tool.js.map +1 -0
  102. package/dist/tools/workspace-tree-tool.d.ts +4 -0
  103. package/dist/tools/workspace-tree-tool.d.ts.map +1 -0
  104. package/dist/tools/workspace-tree-tool.js +419 -0
  105. package/dist/tools/workspace-tree-tool.js.map +1 -0
  106. package/package.json +61 -0
@@ -0,0 +1,450 @@
1
+ import { z } from 'zod';
2
+ export function registerTagTools(server, apiClient) {
3
+ /**
4
+ * Create multiple tags at once
5
+ */
6
+ server.registerTool('brxce_create_tags_batch', {
7
+ description: `Create multiple tags at once with optional preview mode.
8
+
9
+ **When to use:**
10
+ - When you need to create many tags quickly
11
+ - To set up a new tag taxonomy (e.g., all tech stack tags)
12
+ - When user provides a list of tags to create
13
+
14
+ **Preview mode:**
15
+ - Use preview: true to validate before creating
16
+ - Shows which tags will succeed/fail
17
+ - User can review before confirming
18
+
19
+ **Example scenarios:**
20
+
21
+ User: "Create tags for React, TypeScript, Node.js, and PostgreSQL in Tech Stack category"
22
+ Assistant:
23
+ 1. Get Tech Stack category ID (e.g., 5)
24
+ 2. Call brxce_create_tags_batch with preview: true to show what will be created
25
+ 3. If user confirms, call again with preview: false
26
+
27
+ brxce_create_tags_batch(
28
+ workspaceId: 4,
29
+ tags: [
30
+ { name: "React", slug: "react", categoryId: 5 },
31
+ { name: "TypeScript", slug: "typescript", categoryId: 5 },
32
+ { name: "Node.js", slug: "nodejs", categoryId: 5 },
33
+ { name: "PostgreSQL", slug: "postgresql", categoryId: 5 }
34
+ ],
35
+ preview: false
36
+ )
37
+
38
+ User: "Set up a Backend tag with Node.js and Python as children"
39
+ Assistant:
40
+ 1. Create Backend tag first (gets ID, e.g., 100)
41
+ 2. Create child tags with parentTagId: 100
42
+
43
+ **Returns:**
44
+ - created: List of successfully created tags
45
+ - failed: List of failed tags with errors
46
+ - summary: Total, created, and failed counts`,
47
+ inputSchema: {
48
+ workspaceId: z.number().describe('The workspace ID'),
49
+ tags: z.array(z.object({
50
+ name: z.string().describe('Tag name'),
51
+ slug: z.string().describe('URL-friendly slug'),
52
+ categoryId: z.number().describe('Category ID'),
53
+ parentTagId: z.number().optional().describe('Parent tag ID for hierarchy'),
54
+ description: z.string().optional().describe('Tag description'),
55
+ color: z.string().optional().describe('Hex color code'),
56
+ icon: z.string().optional().describe('Icon identifier')
57
+ })).describe('Array of tags to create'),
58
+ preview: z.boolean().optional().describe('If true, validate but do not create (default: false)')
59
+ }
60
+ }, async (args) => {
61
+ try {
62
+ const { workspaceId, tags, preview } = args;
63
+ const url = `/mcp/workspaces/${workspaceId}/tags/batch`;
64
+ const response = await apiClient.post(url, { tags, preview });
65
+ if (!response.success) {
66
+ return {
67
+ content: [
68
+ {
69
+ type: 'text',
70
+ text: `Failed to create tags: ${response.message || 'Unknown error'}`,
71
+ },
72
+ ],
73
+ };
74
+ }
75
+ const { created, failed, summary, preview: isPreview } = response.data;
76
+ let resultText = '';
77
+ if (isPreview) {
78
+ resultText += `## Tag Creation Preview (Workspace ${workspaceId})\\n\\n`;
79
+ resultText += `Total tags: ${summary.total}\\n`;
80
+ resultText += `Valid: ${summary.valid}\\n`;
81
+ resultText += `Invalid: ${summary.invalid}\\n\\n`;
82
+ if (created.length > 0) {
83
+ resultText += `### Will be created (${created.length}):\\n`;
84
+ created.forEach((item) => {
85
+ resultText += `- **${item.tag.name}** (slug: ${item.tag.slug}, category: ${item.category})\\n`;
86
+ if (item.tag.parentTagId)
87
+ resultText += ` Parent ID: ${item.tag.parentTagId}\\n`;
88
+ });
89
+ resultText += `\\n`;
90
+ }
91
+ if (failed.length > 0) {
92
+ resultText += `### Validation errors (${failed.length}):\\n`;
93
+ failed.forEach((item) => {
94
+ resultText += `- **${item.tag.name}**: ${item.errors.join(', ')}\\n`;
95
+ });
96
+ resultText += `\\n`;
97
+ }
98
+ resultText += `To proceed with creation, call again with preview: false\\n`;
99
+ }
100
+ else {
101
+ resultText += `## Batch Tag Creation Result (Workspace ${workspaceId})\\n\\n`;
102
+ resultText += `Total: ${summary.total}\\n`;
103
+ resultText += `Created: ${summary.created}\\n`;
104
+ resultText += `Failed: ${summary.failed}\\n\\n`;
105
+ if (created.length > 0) {
106
+ resultText += `### Successfully created (${created.length}):\\n`;
107
+ created.forEach((tag) => {
108
+ resultText += `- **${tag.name}** (ID: ${tag.id}, slug: ${tag.slug})\\n`;
109
+ resultText += ` Category: ${tag.category.name}\\n`;
110
+ if (tag.parentTag)
111
+ resultText += ` Parent: ${tag.parentTag.name}\\n`;
112
+ resultText += ` Level: ${tag.tagLevel}\\n`;
113
+ });
114
+ resultText += `\\n`;
115
+ }
116
+ if (failed.length > 0) {
117
+ resultText += `### Failed (${failed.length}):\\n`;
118
+ failed.forEach((item) => {
119
+ resultText += `- **${item.tag.name}**: ${item.error}\\n`;
120
+ });
121
+ }
122
+ }
123
+ return {
124
+ content: [
125
+ {
126
+ type: 'text',
127
+ text: resultText,
128
+ },
129
+ ],
130
+ };
131
+ }
132
+ catch (error) {
133
+ return {
134
+ content: [
135
+ {
136
+ type: 'text',
137
+ text: `Error creating tags: ${error.message || 'Unknown error'}`,
138
+ },
139
+ ],
140
+ };
141
+ }
142
+ });
143
+ /**
144
+ * List tags in workspace
145
+ */
146
+ server.registerTool('brxce_list_tags', {
147
+ description: `List all tags in a workspace with hierarchical structure.
148
+
149
+ **When to use:**
150
+ - When user asks "what tags exist?" or "show me all tags"
151
+ - Before adding tags to WorkNodes
152
+ - To understand available tags in a category
153
+ - To see tag usage statistics
154
+
155
+ **Filtering:**
156
+ - Filter by category ID or slug
157
+ - Filter by parent tag (use 0 for root tags)
158
+ - Filter by usage (unused/popular tags)
159
+
160
+ **Returns:**
161
+ - Tags with category, parent info, usage count
162
+ - Hierarchical structure (tagPath, tagLevel)
163
+ - Children count
164
+
165
+ **Example usage:**
166
+ User: "What React-related tags do we have?"
167
+ Assistant: First get Tech Stack category, then filter by it
168
+ brxce_list_tags(workspaceId: 4, categorySlug: "tech-stack")`,
169
+ inputSchema: {
170
+ workspaceId: z.number().describe('The workspace ID'),
171
+ categoryId: z.number().optional().describe('Filter by category ID'),
172
+ parentTagId: z.number().optional().describe('Filter by parent tag ID (use 0 for root tags)'),
173
+ includeDeleted: z.boolean().optional().describe('Include deleted tags (default: false)')
174
+ }
175
+ }, async (args) => {
176
+ try {
177
+ const { workspaceId, categoryId, parentTagId, includeDeleted } = args;
178
+ const queryParams = new URLSearchParams();
179
+ if (categoryId !== undefined)
180
+ queryParams.set('categoryId', String(categoryId));
181
+ if (parentTagId !== undefined)
182
+ queryParams.set('parentTagId', String(parentTagId));
183
+ if (includeDeleted !== undefined)
184
+ queryParams.set('includeDeleted', String(includeDeleted));
185
+ const url = `/mcp/workspaces/${workspaceId}/tags${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;
186
+ const response = await apiClient.get(url);
187
+ if (!response.success) {
188
+ return {
189
+ content: [
190
+ {
191
+ type: 'text',
192
+ text: `Failed to list tags: ${response.message || 'Unknown error'}`,
193
+ },
194
+ ],
195
+ };
196
+ }
197
+ const { tags, total } = response.data;
198
+ let resultText = `## Tags (Workspace ${workspaceId})\\n\\n`;
199
+ resultText += `Total tags: ${total}\\n\\n`;
200
+ if (tags.length === 0) {
201
+ resultText += `No tags found.\\n`;
202
+ }
203
+ else {
204
+ // Group by category
205
+ const byCategory = tags.reduce((acc, tag) => {
206
+ const catName = tag.category.name;
207
+ if (!acc[catName])
208
+ acc[catName] = [];
209
+ acc[catName].push(tag);
210
+ return acc;
211
+ }, {});
212
+ Object.entries(byCategory).forEach(([catName, catTags]) => {
213
+ resultText += `### ${catName}\\n`;
214
+ catTags.forEach((tag) => {
215
+ const indent = ' '.repeat(tag.tagLevel);
216
+ resultText += `${indent}- **${tag.name}** (ID: ${tag.id}, slug: ${tag.slug})\\n`;
217
+ if (tag.description)
218
+ resultText += `${indent} Description: ${tag.description}\\n`;
219
+ resultText += `${indent} Usage: ${tag.usageCount} WorkNode(s)\\n`;
220
+ if (tag._count.childTags > 0) {
221
+ resultText += `${indent} Children: ${tag._count.childTags}\\n`;
222
+ }
223
+ if (tag.parentTag) {
224
+ resultText += `${indent} Parent: ${tag.parentTag.name}\\n`;
225
+ }
226
+ });
227
+ resultText += `\\n`;
228
+ });
229
+ }
230
+ return {
231
+ content: [
232
+ {
233
+ type: 'text',
234
+ text: resultText,
235
+ },
236
+ ],
237
+ };
238
+ }
239
+ catch (error) {
240
+ return {
241
+ content: [
242
+ {
243
+ type: 'text',
244
+ text: `Error listing tags: ${error.message || 'Unknown error'}`,
245
+ },
246
+ ],
247
+ };
248
+ }
249
+ });
250
+ /**
251
+ * Create tag
252
+ */
253
+ server.registerTool('brxce_create_tag', {
254
+ description: `Create a new tag in a category, optionally with a parent for hierarchical structure.
255
+
256
+ **When to use:**
257
+ - When user mentions a new tag that should be created
258
+ - To build hierarchical tag taxonomy (e.g., Frontend → React → Hooks)
259
+
260
+ **Hierarchical tags:**
261
+ - Use parentTagId to create child tags
262
+ - Example: "Backend" → "Node.js" → "Express"
263
+ - tagPath and tagLevel are auto-calculated
264
+
265
+ **Example flat tags:**
266
+ User: "Create tags for React, TypeScript, and Node.js in Tech Stack"
267
+ Assistant: Get Tech Stack category ID, then create 3 separate tags
268
+
269
+ **Example hierarchical:**
270
+ User: "Create Backend tag with Node.js and Python as sub-tags"
271
+ Assistant:
272
+ 1. Create "Backend" tag (no parent)
273
+ 2. Create "Node.js" tag (parentTagId: Backend ID)
274
+ 3. Create "Python" tag (parentTagId: Backend ID)`,
275
+ inputSchema: {
276
+ workspaceId: z.number().describe('The workspace ID'),
277
+ name: z.string().describe('Tag name (e.g., "React", "Backend/Node.js")'),
278
+ slug: z.string().describe('URL-friendly slug (e.g., "react", "backend-nodejs")'),
279
+ categoryId: z.number().describe('Category ID this tag belongs to'),
280
+ parentTagId: z.number().optional().describe('Parent tag ID for hierarchical tags'),
281
+ description: z.string().optional().describe('Tag description'),
282
+ color: z.string().optional().describe('Hex color code'),
283
+ icon: z.string().optional().describe('Icon identifier')
284
+ }
285
+ }, async (args) => {
286
+ try {
287
+ const url = `/mcp/workspaces/${args.workspaceId}/tags`;
288
+ const response = await apiClient.post(url, {
289
+ name: args.name,
290
+ slug: args.slug,
291
+ categoryId: args.categoryId,
292
+ parentTagId: args.parentTagId,
293
+ description: args.description,
294
+ color: args.color,
295
+ icon: args.icon
296
+ });
297
+ if (!response.success) {
298
+ return {
299
+ content: [
300
+ {
301
+ type: 'text',
302
+ text: `Failed to create tag: ${response.message || 'Unknown error'}`,
303
+ },
304
+ ],
305
+ };
306
+ }
307
+ const tag = response.data;
308
+ let resultText = `Tag "${tag.name}" created successfully!\\n\\n`;
309
+ resultText += `ID: ${tag.id}\\n`;
310
+ resultText += `Slug: ${tag.slug}\\n`;
311
+ resultText += `Category: ${tag.category.name}\\n`;
312
+ resultText += `Level: ${tag.tagLevel}\\n`;
313
+ if (tag.parentTag)
314
+ resultText += `Parent: ${tag.parentTag.name}\\n`;
315
+ return {
316
+ content: [
317
+ {
318
+ type: 'text',
319
+ text: resultText,
320
+ },
321
+ ],
322
+ };
323
+ }
324
+ catch (error) {
325
+ return {
326
+ content: [
327
+ {
328
+ type: 'text',
329
+ text: `Error creating tag: ${error.message || 'Unknown error'}`,
330
+ },
331
+ ],
332
+ };
333
+ }
334
+ });
335
+ /**
336
+ * Update tag
337
+ */
338
+ server.registerTool('brxce_update_tag', {
339
+ description: `Update an existing tag.
340
+
341
+ **When to use:**
342
+ - To rename or change tag properties
343
+ - To update color/icon for better visual organization
344
+ - To fix tag descriptions
345
+
346
+ **Note:** Cannot change category or parent (would break hierarchy)
347
+
348
+ **Example:**
349
+ User: "Rename the 'Reactjs' tag to 'React'"
350
+ Assistant calls: brxce_update_tag(workspaceId: 4, tagId: 25, name: "React", slug: "react")`,
351
+ inputSchema: {
352
+ workspaceId: z.number().describe('The workspace ID'),
353
+ tagId: z.number().describe('Tag ID to update'),
354
+ name: z.string().optional().describe('New tag name'),
355
+ slug: z.string().optional().describe('New slug'),
356
+ description: z.string().optional().describe('New description'),
357
+ color: z.string().optional().describe('New color'),
358
+ icon: z.string().optional().describe('New icon')
359
+ }
360
+ }, async (args) => {
361
+ try {
362
+ const { workspaceId, tagId, ...updates } = args;
363
+ const url = `/mcp/workspaces/${workspaceId}/tags/${tagId}`;
364
+ const response = await apiClient.put(url, updates);
365
+ if (!response.success) {
366
+ return {
367
+ content: [
368
+ {
369
+ type: 'text',
370
+ text: `Failed to update tag: ${response.message || 'Unknown error'}`,
371
+ },
372
+ ],
373
+ };
374
+ }
375
+ return {
376
+ content: [
377
+ {
378
+ type: 'text',
379
+ text: `Tag updated successfully!`,
380
+ },
381
+ ],
382
+ };
383
+ }
384
+ catch (error) {
385
+ return {
386
+ content: [
387
+ {
388
+ type: 'text',
389
+ text: `Error updating tag: ${error.message || 'Unknown error'}`,
390
+ },
391
+ ],
392
+ };
393
+ }
394
+ });
395
+ /**
396
+ * Delete tag
397
+ */
398
+ server.registerTool('brxce_delete_tag', {
399
+ description: `Delete (soft delete) a tag.
400
+
401
+ **When to use:**
402
+ - When a tag is no longer needed or was created by mistake
403
+ - To clean up unused tags
404
+
405
+ **Note:** This is a soft delete. The tag remains in database but is hidden.
406
+
407
+ **Example:**
408
+ User: "Remove the deprecated 'Angular' tag"
409
+ Assistant calls: brxce_delete_tag(workspaceId: 4, tagId: 30)`,
410
+ inputSchema: {
411
+ workspaceId: z.number().describe('The workspace ID'),
412
+ tagId: z.number().describe('Tag ID to delete')
413
+ }
414
+ }, async (args) => {
415
+ try {
416
+ const { workspaceId, tagId } = args;
417
+ const url = `/mcp/workspaces/${workspaceId}/tags/${tagId}`;
418
+ const response = await apiClient.delete(url);
419
+ if (!response.success) {
420
+ return {
421
+ content: [
422
+ {
423
+ type: 'text',
424
+ text: `Failed to delete tag: ${response.message || 'Unknown error'}`,
425
+ },
426
+ ],
427
+ };
428
+ }
429
+ return {
430
+ content: [
431
+ {
432
+ type: 'text',
433
+ text: `Tag deleted successfully.`,
434
+ },
435
+ ],
436
+ };
437
+ }
438
+ catch (error) {
439
+ return {
440
+ content: [
441
+ {
442
+ type: 'text',
443
+ text: `Error deleting tag: ${error.message || 'Unknown error'}`,
444
+ },
445
+ ],
446
+ };
447
+ }
448
+ });
449
+ }
450
+ //# sourceMappingURL=tag-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag-tool.js","sourceRoot":"","sources":["../../src/tools/tag-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { ApiClient } from '../services/api-client.js';
3
+ /**
4
+ * Register WorkNode Archive Tools for LLM-invoked operations
5
+ */
6
+ export declare function registerWorknodeArchiveTools(server: McpServer, apiClient: ApiClient): void;
7
+ //# sourceMappingURL=worknode-archive-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worknode-archive-tool.d.ts","sourceRoot":"","sources":["../../src/tools/worknode-archive-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAG3D;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA4LnF"}
@@ -0,0 +1,163 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Register WorkNode Archive Tools for LLM-invoked operations
4
+ */
5
+ export function registerWorknodeArchiveTools(server, apiClient) {
6
+ /**
7
+ * brxce_archive_worknodes - Archive one or more WorkNodes
8
+ */
9
+ server.registerTool('brxce_archive_worknodes', {
10
+ description: `Archive one or more WorkNodes (soft delete to trash).
11
+
12
+ **When to use this tool:**
13
+ - User wants to remove WorkNodes without deleting permanently
14
+ - Cleaning up old or irrelevant work items
15
+ - Organizing workspace by moving items to trash
16
+ - Replacing old structure with new one
17
+
18
+ **Features:**
19
+ - Archive single or multiple WorkNodes at once
20
+ - Optionally archive all children recursively
21
+ - Archived items are hidden from default views
22
+ - Can be restored using brxce_unarchive_worknodes
23
+
24
+ **Access Control:**
25
+ - Requires workspace membership
26
+ - Only workspace members can archive nodes
27
+
28
+ **Example:**
29
+ User: "Archive old AI nodes #3451, #3443"
30
+ LLM calls: brxce_archive_worknodes(nodeIds: [3451, 3443], includeChildren: true)
31
+
32
+ User: "Move task #100 to trash"
33
+ LLM calls: brxce_archive_worknodes(nodeIds: [100], includeChildren: false)`,
34
+ inputSchema: {
35
+ nodeIds: z.array(z.number()).min(1).describe('Array of WorkNode IDs to archive'),
36
+ includeChildren: z.boolean().optional().describe('If true, archive all descendant nodes recursively (default: false)')
37
+ }
38
+ }, async (args) => {
39
+ const { nodeIds, includeChildren = false } = args;
40
+ try {
41
+ const response = await apiClient.post(`/mcp/worknodes/archive`, { nodeIds, includeChildren });
42
+ if (!response.success) {
43
+ return {
44
+ content: [
45
+ {
46
+ type: 'text',
47
+ text: `Failed to archive WorkNodes: ${response.message || 'Unknown error'}`,
48
+ },
49
+ ],
50
+ isError: true,
51
+ };
52
+ }
53
+ const { archived, failed } = response.data;
54
+ let resultText = '## WorkNodes Archived\n\n';
55
+ resultText += `āœ… **Successfully archived ${archived} of ${nodeIds.length} WorkNodes**\n\n`;
56
+ if (includeChildren) {
57
+ resultText += `šŸ”„ **Recursive mode**: All descendant nodes were also archived\n\n`;
58
+ }
59
+ if (failed && failed.length > 0) {
60
+ resultText += `āŒ **Failed to archive**: ${failed.length} nodes\n`;
61
+ resultText += `Failed IDs: ${failed.join(', ')}\n`;
62
+ }
63
+ resultText += `\nšŸ’” **Note**: Archived nodes can be restored using brxce_unarchive_worknodes\n`;
64
+ return {
65
+ content: [
66
+ {
67
+ type: 'text',
68
+ text: resultText,
69
+ },
70
+ ],
71
+ };
72
+ }
73
+ catch (error) {
74
+ return {
75
+ content: [
76
+ {
77
+ type: 'text',
78
+ text: `Error archiving WorkNodes: ${error.message || 'Unknown error'}`,
79
+ },
80
+ ],
81
+ isError: true,
82
+ };
83
+ }
84
+ });
85
+ /**
86
+ * brxce_unarchive_worknodes - Restore archived WorkNodes
87
+ */
88
+ server.registerTool('brxce_unarchive_worknodes', {
89
+ description: `Restore archived WorkNodes from trash.
90
+
91
+ **When to use this tool:**
92
+ - User wants to restore previously archived nodes
93
+ - Recovering accidentally archived items
94
+ - Bringing back work items from trash
95
+
96
+ **Features:**
97
+ - Restore single or multiple WorkNodes at once
98
+ - Optionally restore all children recursively
99
+ - Restored items become visible in default views
100
+
101
+ **Access Control:**
102
+ - Requires workspace membership
103
+ - Only workspace members can restore nodes
104
+
105
+ **Example:**
106
+ User: "Restore nodes #3451, #3443 from trash"
107
+ LLM calls: brxce_unarchive_worknodes(nodeIds: [3451, 3443], includeChildren: true)
108
+
109
+ User: "Unarchive task #100"
110
+ LLM calls: brxce_unarchive_worknodes(nodeIds: [100], includeChildren: false)`,
111
+ inputSchema: {
112
+ nodeIds: z.array(z.number()).min(1).describe('Array of WorkNode IDs to unarchive'),
113
+ includeChildren: z.boolean().optional().describe('If true, unarchive all descendant nodes recursively (default: false)')
114
+ }
115
+ }, async (args) => {
116
+ const { nodeIds, includeChildren = false } = args;
117
+ try {
118
+ const response = await apiClient.post(`/mcp/worknodes/unarchive`, { nodeIds, includeChildren });
119
+ if (!response.success) {
120
+ return {
121
+ content: [
122
+ {
123
+ type: 'text',
124
+ text: `Failed to unarchive WorkNodes: ${response.message || 'Unknown error'}`,
125
+ },
126
+ ],
127
+ isError: true,
128
+ };
129
+ }
130
+ const { unarchived, failed } = response.data;
131
+ let resultText = '## WorkNodes Restored\n\n';
132
+ resultText += `āœ… **Successfully restored ${unarchived} of ${nodeIds.length} WorkNodes**\n\n`;
133
+ if (includeChildren) {
134
+ resultText += `šŸ”„ **Recursive mode**: All descendant nodes were also restored\n\n`;
135
+ }
136
+ if (failed && failed.length > 0) {
137
+ resultText += `āŒ **Failed to restore**: ${failed.length} nodes\n`;
138
+ resultText += `Failed IDs: ${failed.join(', ')}\n`;
139
+ }
140
+ resultText += `\nšŸ’” **Note**: Restored nodes are now visible in workspace views\n`;
141
+ return {
142
+ content: [
143
+ {
144
+ type: 'text',
145
+ text: resultText,
146
+ },
147
+ ],
148
+ };
149
+ }
150
+ catch (error) {
151
+ return {
152
+ content: [
153
+ {
154
+ type: 'text',
155
+ text: `Error unarchiving WorkNodes: ${error.message || 'Unknown error'}`,
156
+ },
157
+ ],
158
+ isError: true,
159
+ };
160
+ }
161
+ });
162
+ }
163
+ //# sourceMappingURL=worknode-archive-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worknode-archive-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-archive-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { ApiClient } from '../services/api-client.js';
3
+ export declare function registerWorknodeCreateTool(server: McpServer, apiClient: ApiClient): void;
4
+ //# sourceMappingURL=worknode-create-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worknode-create-tool.d.ts","sourceRoot":"","sources":["../../src/tools/worknode-create-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AA4BtD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAgZjF"}