@brxce/mcp-server 1.0.3 → 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 (190) hide show
  1. package/README.md +11 -4
  2. package/dist/config/environment.d.ts.map +1 -1
  3. package/dist/config/environment.js +6 -7
  4. package/dist/config/environment.js.map +1 -1
  5. package/dist/constants/enums.d.ts +11 -0
  6. package/dist/constants/enums.d.ts.map +1 -0
  7. package/dist/constants/enums.js +39 -0
  8. package/dist/constants/enums.js.map +1 -0
  9. package/dist/http-server.d.ts +5 -0
  10. package/dist/http-server.d.ts.map +1 -0
  11. package/dist/http-server.js +154 -0
  12. package/dist/http-server.js.map +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +63 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/prompts/worknode-prompts.d.ts.map +1 -1
  17. package/dist/prompts/worknode-prompts.js +5 -4
  18. package/dist/prompts/worknode-prompts.js.map +1 -1
  19. package/dist/prompts/workspace-context-prompt.d.ts.map +1 -1
  20. package/dist/prompts/workspace-context-prompt.js +2 -1
  21. package/dist/prompts/workspace-context-prompt.js.map +1 -1
  22. package/dist/resources/user-resource.d.ts.map +1 -1
  23. package/dist/resources/user-resource.js +2 -1
  24. package/dist/resources/user-resource.js.map +1 -1
  25. package/dist/resources/workspace-members-resource.d.ts.map +1 -1
  26. package/dist/resources/workspace-members-resource.js +6 -3
  27. package/dist/resources/workspace-members-resource.js.map +1 -1
  28. package/dist/resources/workspace-resource.d.ts.map +1 -1
  29. package/dist/resources/workspace-resource.js +2 -1
  30. package/dist/resources/workspace-resource.js.map +1 -1
  31. package/dist/server.d.ts +24 -0
  32. package/dist/server.d.ts.map +1 -0
  33. package/dist/server.js +212 -0
  34. package/dist/server.js.map +1 -0
  35. package/dist/services/api-client.d.ts +36 -2
  36. package/dist/services/api-client.d.ts.map +1 -1
  37. package/dist/services/api-client.js +153 -64
  38. package/dist/services/api-client.js.map +1 -1
  39. package/dist/services/workspace-context.d.ts +56 -0
  40. package/dist/services/workspace-context.d.ts.map +1 -0
  41. package/dist/services/workspace-context.js +104 -0
  42. package/dist/services/workspace-context.js.map +1 -0
  43. package/dist/tools/comment-tool.d.ts +4 -0
  44. package/dist/tools/comment-tool.d.ts.map +1 -0
  45. package/dist/tools/comment-tool.js +154 -0
  46. package/dist/tools/comment-tool.js.map +1 -0
  47. package/dist/tools/criteria-tool.d.ts +4 -0
  48. package/dist/tools/criteria-tool.d.ts.map +1 -0
  49. package/dist/tools/criteria-tool.js +208 -0
  50. package/dist/tools/criteria-tool.js.map +1 -0
  51. package/dist/tools/invitation-tool.d.ts +19 -0
  52. package/dist/tools/invitation-tool.d.ts.map +1 -0
  53. package/dist/tools/invitation-tool.js +501 -0
  54. package/dist/tools/invitation-tool.js.map +1 -0
  55. package/dist/tools/meeting-agenda-notes-tool.d.ts +7 -0
  56. package/dist/tools/meeting-agenda-notes-tool.d.ts.map +1 -0
  57. package/dist/tools/meeting-agenda-notes-tool.js +326 -0
  58. package/dist/tools/meeting-agenda-notes-tool.js.map +1 -0
  59. package/dist/tools/meeting-agenda-tool.d.ts.map +1 -1
  60. package/dist/tools/meeting-agenda-tool.js +12 -11
  61. package/dist/tools/meeting-agenda-tool.js.map +1 -1
  62. package/dist/tools/meeting-create-tool.d.ts.map +1 -1
  63. package/dist/tools/meeting-create-tool.js +74 -139
  64. package/dist/tools/meeting-create-tool.js.map +1 -1
  65. package/dist/tools/meeting-decisions-tool.d.ts.map +1 -1
  66. package/dist/tools/meeting-decisions-tool.js +12 -11
  67. package/dist/tools/meeting-decisions-tool.js.map +1 -1
  68. package/dist/tools/meeting-delete-tool.d.ts +7 -0
  69. package/dist/tools/meeting-delete-tool.d.ts.map +1 -0
  70. package/dist/tools/meeting-delete-tool.js +58 -0
  71. package/dist/tools/meeting-delete-tool.js.map +1 -0
  72. package/dist/tools/meeting-list-tool.d.ts.map +1 -1
  73. package/dist/tools/meeting-list-tool.js +14 -100
  74. package/dist/tools/meeting-list-tool.js.map +1 -1
  75. package/dist/tools/meeting-notes-tool.d.ts.map +1 -1
  76. package/dist/tools/meeting-notes-tool.js +12 -11
  77. package/dist/tools/meeting-notes-tool.js.map +1 -1
  78. package/dist/tools/meeting-update-tool.d.ts.map +1 -1
  79. package/dist/tools/meeting-update-tool.js +8 -135
  80. package/dist/tools/meeting-update-tool.js.map +1 -1
  81. package/dist/tools/my-work-tool.d.ts +7 -0
  82. package/dist/tools/my-work-tool.d.ts.map +1 -0
  83. package/dist/tools/my-work-tool.js +283 -0
  84. package/dist/tools/my-work-tool.js.map +1 -0
  85. package/dist/tools/notification-tool.d.ts +23 -0
  86. package/dist/tools/notification-tool.d.ts.map +1 -0
  87. package/dist/tools/notification-tool.js +330 -0
  88. package/dist/tools/notification-tool.js.map +1 -0
  89. package/dist/tools/tag-category-tool.d.ts.map +1 -1
  90. package/dist/tools/tag-category-tool.js +15 -6
  91. package/dist/tools/tag-category-tool.js.map +1 -1
  92. package/dist/tools/tag-changes-tool.d.ts +4 -0
  93. package/dist/tools/tag-changes-tool.d.ts.map +1 -0
  94. package/dist/tools/tag-changes-tool.js +79 -0
  95. package/dist/tools/tag-changes-tool.js.map +1 -0
  96. package/dist/tools/tag-search-tool.d.ts.map +1 -1
  97. package/dist/tools/tag-search-tool.js +13 -6
  98. package/dist/tools/tag-search-tool.js.map +1 -1
  99. package/dist/tools/tag-tool.d.ts.map +1 -1
  100. package/dist/tools/tag-tool.js +26 -15
  101. package/dist/tools/tag-tool.js.map +1 -1
  102. package/dist/tools/user-search-tool.d.ts +8 -0
  103. package/dist/tools/user-search-tool.d.ts.map +1 -0
  104. package/dist/tools/user-search-tool.js +164 -0
  105. package/dist/tools/user-search-tool.js.map +1 -0
  106. package/dist/tools/worknode-archive-tool.d.ts.map +1 -1
  107. package/dist/tools/worknode-archive-tool.js +15 -52
  108. package/dist/tools/worknode-archive-tool.js.map +1 -1
  109. package/dist/tools/worknode-batch-tool.d.ts +4 -0
  110. package/dist/tools/worknode-batch-tool.d.ts.map +1 -0
  111. package/dist/tools/worknode-batch-tool.js +117 -0
  112. package/dist/tools/worknode-batch-tool.js.map +1 -0
  113. package/dist/tools/worknode-by-member-tool.d.ts +4 -0
  114. package/dist/tools/worknode-by-member-tool.d.ts.map +1 -0
  115. package/dist/tools/worknode-by-member-tool.js +171 -0
  116. package/dist/tools/worknode-by-member-tool.js.map +1 -0
  117. package/dist/tools/worknode-complete-tool.d.ts +4 -0
  118. package/dist/tools/worknode-complete-tool.d.ts.map +1 -0
  119. package/dist/tools/worknode-complete-tool.js +95 -0
  120. package/dist/tools/worknode-complete-tool.js.map +1 -0
  121. package/dist/tools/worknode-create-tool.d.ts.map +1 -1
  122. package/dist/tools/worknode-create-tool.js +40 -126
  123. package/dist/tools/worknode-create-tool.js.map +1 -1
  124. package/dist/tools/worknode-delete-tool.d.ts +4 -0
  125. package/dist/tools/worknode-delete-tool.d.ts.map +1 -0
  126. package/dist/tools/worknode-delete-tool.js +64 -0
  127. package/dist/tools/worknode-delete-tool.js.map +1 -0
  128. package/dist/tools/worknode-history-tool.d.ts +4 -0
  129. package/dist/tools/worknode-history-tool.d.ts.map +1 -0
  130. package/dist/tools/worknode-history-tool.js +103 -0
  131. package/dist/tools/worknode-history-tool.js.map +1 -0
  132. package/dist/tools/worknode-move-tool.d.ts +4 -0
  133. package/dist/tools/worknode-move-tool.d.ts.map +1 -0
  134. package/dist/tools/worknode-move-tool.js +80 -0
  135. package/dist/tools/worknode-move-tool.js.map +1 -0
  136. package/dist/tools/worknode-permanent-delete-tool.d.ts +10 -0
  137. package/dist/tools/worknode-permanent-delete-tool.d.ts.map +1 -0
  138. package/dist/tools/worknode-permanent-delete-tool.js +131 -0
  139. package/dist/tools/worknode-permanent-delete-tool.js.map +1 -0
  140. package/dist/tools/worknode-plan-organize-tool.d.ts.map +1 -1
  141. package/dist/tools/worknode-plan-organize-tool.js +10 -118
  142. package/dist/tools/worknode-plan-organize-tool.js.map +1 -1
  143. package/dist/tools/worknode-read-tool.d.ts.map +1 -1
  144. package/dist/tools/worknode-read-tool.js +23 -117
  145. package/dist/tools/worknode-read-tool.js.map +1 -1
  146. package/dist/tools/worknode-subtree-tool.d.ts.map +1 -1
  147. package/dist/tools/worknode-subtree-tool.js +153 -99
  148. package/dist/tools/worknode-subtree-tool.js.map +1 -1
  149. package/dist/tools/worknode-tag-relations-tool.d.ts +4 -0
  150. package/dist/tools/worknode-tag-relations-tool.d.ts.map +1 -0
  151. package/dist/tools/worknode-tag-relations-tool.js +143 -0
  152. package/dist/tools/worknode-tag-relations-tool.js.map +1 -0
  153. package/dist/tools/worknode-tag-tool.d.ts.map +1 -1
  154. package/dist/tools/worknode-tag-tool.js +17 -8
  155. package/dist/tools/worknode-tag-tool.js.map +1 -1
  156. package/dist/tools/worknode-update-tool.d.ts.map +1 -1
  157. package/dist/tools/worknode-update-tool.js +37 -120
  158. package/dist/tools/worknode-update-tool.js.map +1 -1
  159. package/dist/tools/workspace-ascii-export-tool.d.ts +4 -0
  160. package/dist/tools/workspace-ascii-export-tool.d.ts.map +1 -0
  161. package/dist/tools/workspace-ascii-export-tool.js +99 -0
  162. package/dist/tools/workspace-ascii-export-tool.js.map +1 -0
  163. package/dist/tools/workspace-inbox-tool.d.ts.map +1 -1
  164. package/dist/tools/workspace-inbox-tool.js +8 -77
  165. package/dist/tools/workspace-inbox-tool.js.map +1 -1
  166. package/dist/tools/workspace-list-tool.d.ts.map +1 -1
  167. package/dist/tools/workspace-list-tool.js +5 -50
  168. package/dist/tools/workspace-list-tool.js.map +1 -1
  169. package/dist/tools/workspace-member-tool.d.ts +15 -0
  170. package/dist/tools/workspace-member-tool.d.ts.map +1 -0
  171. package/dist/tools/workspace-member-tool.js +518 -0
  172. package/dist/tools/workspace-member-tool.js.map +1 -0
  173. package/dist/tools/workspace-members-list-tool.d.ts.map +1 -1
  174. package/dist/tools/workspace-members-list-tool.js +10 -87
  175. package/dist/tools/workspace-members-list-tool.js.map +1 -1
  176. package/dist/tools/workspace-statistics-tool.d.ts.map +1 -1
  177. package/dist/tools/workspace-statistics-tool.js +8 -172
  178. package/dist/tools/workspace-statistics-tool.js.map +1 -1
  179. package/dist/tools/workspace-tree-tool.d.ts.map +1 -1
  180. package/dist/tools/workspace-tree-tool.js +37 -185
  181. package/dist/tools/workspace-tree-tool.js.map +1 -1
  182. package/dist/utils/error-utils.d.ts +58 -0
  183. package/dist/utils/error-utils.d.ts.map +1 -0
  184. package/dist/utils/error-utils.js +118 -0
  185. package/dist/utils/error-utils.js.map +1 -0
  186. package/dist/utils/index.d.ts +2 -0
  187. package/dist/utils/index.d.ts.map +1 -0
  188. package/dist/utils/index.js +2 -0
  189. package/dist/utils/index.js.map +1 -0
  190. package/package.json +13 -11
@@ -0,0 +1,95 @@
1
+ import { z } from 'zod';
2
+ import { getErrorMessage } from '../utils/error-utils.js';
3
+ import { workspaceContext } from '../services/workspace-context.js';
4
+ const CompleteWorknodeSchema = z.object({
5
+ nodeId: z.string().describe('WorkNode ID (UUID or displayId like #123 or 123)'),
6
+ cascade: z.boolean().optional().default(false).describe('If true, complete all descendants. Default: false (warns about incomplete children)'),
7
+ });
8
+ export function registerWorknodeCompleteTool(server, apiClient) {
9
+ server.registerTool('brxce_complete_worknode', {
10
+ description: `Complete a WorkNode (status→completed).
11
+
12
+ Params: nodeId (required), cascade (complete all descendants, default: false)
13
+ Without cascade: warns about incomplete children. With cascade: completes entire subtree.`,
14
+ inputSchema: {
15
+ nodeId: z.string().describe('WorkNode ID (UUID or displayId like #123 or 123)'),
16
+ workspaceId: z.string().uuid().optional().describe('Workspace ID (required when using displayId format)'),
17
+ cascade: z.boolean().optional().describe('Complete all descendants'),
18
+ },
19
+ }, async (args) => {
20
+ const { nodeId, workspaceId: providedWorkspaceId, cascade } = args;
21
+ // Auto-resolve workspaceId from context if using displayId
22
+ const resolvedWorkspaceId = workspaceContext.resolveWorkspaceId(providedWorkspaceId, nodeId);
23
+ const request = {
24
+ nodeId,
25
+ workspaceId: resolvedWorkspaceId || undefined,
26
+ cascade
27
+ };
28
+ try {
29
+ const response = await apiClient.post('/mcp/worknodes/complete', request);
30
+ if (!response.success) {
31
+ return {
32
+ content: [
33
+ {
34
+ type: 'text',
35
+ text: `Failed to complete WorkNode: ${response.message || 'Unknown error'}`,
36
+ },
37
+ ],
38
+ isError: true,
39
+ };
40
+ }
41
+ const { data } = response;
42
+ let resultText = '## WorkNode Completion Result\n\n';
43
+ resultText += `āœ… **Completed**: ${data.completedCount} WorkNode(s)\n\n`;
44
+ resultText += `### Node: ${data.node.title}\n`;
45
+ resultText += `- **ID**: ${data.node.id}\n`;
46
+ resultText += `- **Status**: ${data.node.status}\n`;
47
+ if (data.node.completedAt) {
48
+ resultText += `- **Completed At**: ${data.node.completedAt}\n`;
49
+ }
50
+ resultText += '\n';
51
+ if (data.completedCount > 1) {
52
+ resultText += `### Cascade Details\n`;
53
+ resultText += `- Completed ${data.completedCount} nodes in total\n`;
54
+ resultText += `- Completed IDs: ${data.completedNodeIds.length} nodes\n\n`;
55
+ }
56
+ if (data.warnings && data.warnings.length > 0) {
57
+ resultText += `### āš ļø Warnings\n`;
58
+ data.warnings.forEach((warning) => {
59
+ resultText += `- ${warning}\n`;
60
+ });
61
+ resultText += '\n';
62
+ }
63
+ if (data.incompleteChildren && data.incompleteChildren.length > 0) {
64
+ resultText += `### Incomplete Children\n`;
65
+ resultText += `The following children are still incomplete:\n\n`;
66
+ data.incompleteChildren.forEach((child) => {
67
+ resultText += `- **${child.title}** (${child.status})\n`;
68
+ resultText += ` - ID: ${child.id}\n`;
69
+ });
70
+ resultText += '\n';
71
+ resultText += `šŸ’” **Tip**: Use \`cascade: true\` to complete all children automatically.\n`;
72
+ }
73
+ return {
74
+ content: [
75
+ {
76
+ type: 'text',
77
+ text: resultText,
78
+ },
79
+ ],
80
+ };
81
+ }
82
+ catch (error) {
83
+ return {
84
+ content: [
85
+ {
86
+ type: 'text',
87
+ text: `Error completing WorkNode: ${getErrorMessage(error)}`,
88
+ },
89
+ ],
90
+ isError: true,
91
+ };
92
+ }
93
+ });
94
+ }
95
+ //# sourceMappingURL=worknode-complete-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worknode-complete-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-complete-tool.ts"],"names":[],"mappings":"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"}
@@ -1 +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;AAiEtD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAiRjF"}
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;AAoFtD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA6KjF"}
@@ -1,32 +1,46 @@
1
1
  import { z } from 'zod';
2
- const WorknodeTypeSchema = z.enum(['goal', 'project', 'subproject', 'task', 'subtask']);
3
- const WorkNodeStatusSchema = z.enum(['backlog', 'not_started', 'in_progress', 'in_review', 'completed', 'cancelled']);
2
+ import { getErrorMessage } from '../utils/error-utils.js';
3
+ const WorknodeTypeSchema = z.enum(['goal', 'project', 'subproject', 'task', 'subtask', 'note']);
4
+ const WorkNodeStatusSchema = z.enum(['backlog', 'not_started', 'in_progress', 'completed', 'pause', 'archived', 'static']);
4
5
  const WorkNodePrioritySchema = z.enum(['critical', 'urgent', 'high', 'medium', 'low']);
6
+ // ISO 8601 date-time format validation
7
+ // Valid: "2025-01-31T23:59:59Z", "2025-01-31T23:59:59.999Z", "2025-01-31T23:59:59+09:00"
8
+ // Invalid: "2025-01-31" (date-only), "January 31, 2025"
9
+ const ISO_DATE_TIME_REGEX = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-]\d{2}:\d{2})$/;
10
+ const isoDateTimeSchema = z
11
+ .string()
12
+ .refine((val) => ISO_DATE_TIME_REGEX.test(val), { message: 'Must be ISO 8601 date-time format (e.g., 2025-01-31T23:59:59Z)' })
13
+ .optional();
5
14
  const CreateWorknodeSchema = z.object({
6
15
  title: z.string().min(1).describe('WorkNode title (required, min 1 char). Example: "Backend API Development"'),
7
16
  description: z.string().optional().describe('Detailed description. Example: "Implement REST API endpoints for user authentication"'),
8
- nodeType: WorknodeTypeSchema.describe('Node type (required): goal | project | subproject | task | subtask. ' +
9
- 'Hierarchy: goal > project > subproject > task > subtask'),
17
+ nodeType: WorknodeTypeSchema.describe('Node type (required): goal | project | subproject | task | subtask | note. ' +
18
+ 'Hierarchy: goal > project > subproject > task > subtask. ' +
19
+ 'NOTE type: For information storage - allowed statuses: backlog | static | archived (default: static). ' +
20
+ 'Priority/assignee ignored. Notes can only contain other notes as children.'),
10
21
  parentNodeId: z
11
22
  .string()
12
- .uuid()
13
23
  .optional()
14
- .describe('Parent WorkNode UUID (conditional). Required for task/subtask. ' +
24
+ .describe('Parent WorkNode ID (UUID or displayId like #123). Required for task/subtask. ' +
15
25
  'Find using brxce_workspace_overview. Never guess IDs. ' +
16
- 'Example: "a3f5e8d7-1234-5678-9abc-def012345678"'),
26
+ 'Example: "a3f5e8d7-1234-5678-9abc-def012345678" or "#123"'),
17
27
  workspaceId: z
18
- .string()
19
- .uuid()
28
+ .coerce.number()
20
29
  .optional()
21
- .describe('Workspace UUID (conditional). Auto-inherited from parent. ' +
30
+ .describe('Workspace ID (conditional). Auto-inherited from parent. ' +
22
31
  'Required only for root-level items. Get from user://me resource. ' +
23
- 'Example: "138"'),
24
- status: WorkNodeStatusSchema.optional().describe('Initial status (default: backlog). Options: ' +
25
- 'backlog (inbox/quick capture), not_started, in_progress, in_review, completed, cancelled. ' +
26
- 'Omit for default backlog behavior.'),
32
+ 'Example: 138'),
33
+ status: WorkNodeStatusSchema.optional().describe('Initial status (default: backlog, note default: static). Options: ' +
34
+ 'backlog (inbox), not_started, in_progress, completed, pause, archived, static. ' +
35
+ 'NOTE type: Only backlog | static | archived allowed. ' +
36
+ '"static" status is ONLY for note type (cannot be assigned to other types).'),
27
37
  priority: WorkNodePrioritySchema.optional().describe('Priority level (default: medium). Options: low | medium | high | urgent | critical'),
28
- startDate: z.string().optional().describe('Start date in ISO 8601 format. Example: "2025-01-20T09:00:00Z" (UTC)'),
29
- dueDate: z.string().optional().describe('Due date in ISO 8601 format. Example: "2025-01-31T23:59:59Z" (UTC)'),
38
+ startDate: isoDateTimeSchema.describe('Start date in ISO 8601 date-time format. ' +
39
+ 'MUST include time and timezone. Example: "2025-01-20T09:00:00Z" (UTC). ' +
40
+ 'Invalid: "2025-01-20" (date-only format will be rejected)'),
41
+ dueDate: isoDateTimeSchema.describe('Due date in ISO 8601 date-time format. ' +
42
+ 'MUST include time and timezone. Example: "2025-01-31T23:59:59Z" (UTC). ' +
43
+ 'Invalid: "2025-01-31" (date-only format will be rejected)'),
30
44
  tags: z.array(z.string()).optional().describe('Array of tag names. Example: ["backend", "urgent", "api"]'),
31
45
  assignee: z.array(z.string()).optional().describe('Array of user UUIDs. Example: ["user-uuid-1", "user-uuid-2"]'),
32
46
  });
@@ -39,117 +53,15 @@ const BatchCreateRequestSchema = z.object({
39
53
  });
40
54
  export function registerWorknodeCreateTool(server, apiClient) {
41
55
  server.registerTool('brxce_create_worknodes', {
42
- description: `Create WorkNodes in BRXCE with batch support and preview mode.
43
-
44
- ## šŸ“‹ Available Fields
45
-
46
- ### Required Fields
47
- - **title** (string): WorkNode title (min 1 char)
48
- - **nodeType** (enum): goal | project | subproject | task | subtask
49
-
50
- ### Conditional Fields (one required)
51
- - **parentNodeId** (uuid): Parent node ID for structured work (task/subtask require this)
52
- - **workspaceId** (uuid): Workspace ID for root items (auto-inherited from parent)
53
-
54
- ### Optional Fields
55
- - **description** (string): Detailed description
56
- - **status** (enum): backlog (default) | not_started | in_progress | in_review | completed | cancelled
57
- - **priority** (enum): low | medium (default) | high | urgent | critical
58
- - **startDate** (ISO 8601): Start date, e.g., "2025-01-20T09:00:00Z"
59
- - **dueDate** (ISO 8601): Due date, e.g., "2025-01-31T23:59:59Z"
60
- - **tags** (string[]): Tag names, e.g., ["backend", "urgent"]
61
- - **assignee** (string[]): User IDs, e.g., ["user-uuid-1", "user-uuid-2"]
62
-
63
- ### Special Fields
64
- - **preview** (boolean): Always use \`true\` first to validate before creating
65
-
66
- ---
67
-
68
- ## ⚔ Quick Start (3-Step Workflow)
69
-
70
- **Step 1: Find parent** (if creating under existing structure)
71
- \`\`\`typescript
72
- brxce_workspace_overview({ workspaceId: 138 })
73
- \`\`\`
74
-
75
- **Step 2: Preview**
76
- \`\`\`json
77
- {
78
- "worknodes": [{
79
- "title": "Backend API Development",
80
- "nodeType": "task",
81
- "parentNodeId": "parent-uuid-here"
82
- }],
83
- "preview": true
84
- }
85
- \`\`\`
86
-
87
- **Step 3: Create** (after confirming preview)
88
- \`\`\`json
89
- { "worknodes": [...], "preview": false }
90
- \`\`\`
91
-
92
- ---
93
-
94
- ## āŒ Common Mistakes
95
-
96
- 1. **Guessing IDs**: āŒ Never guess \`parentNodeId\` or \`workspaceId\`
97
- → āœ… Always use \`brxce_workspace_overview\` or \`brxce_read_worknodes\` to find IDs
98
-
99
- 2. **Skipping preview**: āŒ Creating directly with \`preview: false\`
100
- → āœ… Always preview first with \`preview: true\`
101
-
102
- 3. **Missing nodeType**: āŒ \`{ title: "Task" }\`
103
- → āœ… \`{ title: "Task", nodeType: "task" }\`
104
-
105
- 4. **Invalid hierarchy**: āŒ Creating subtask without parent
106
- → āœ… Check hierarchy rules below
107
-
108
- ---
109
-
110
- ## šŸ—ļø Hierarchy Rules
111
-
112
- \`\`\`
113
- Goal (root-level, no parent needed)
114
- └─ Project (can be root-level or under goal)
115
- └─ SubProject (requires project/subproject parent)
116
- └─ Task (requires project/subproject parent)
117
- └─ SubTask (requires task parent)
118
- \`\`\`
119
-
120
- **Rules:**
121
- - Goal/Project: \`parentNodeId\` optional (can be root-level)
122
- - SubProject/Task/SubTask: \`parentNodeId\` required
123
- - Workspace: Auto-inherited from parent, or specify for root items
124
-
125
- ---
126
-
127
- ## šŸ”— Advanced Topics
128
-
129
- **Finding Parents**: Always search workspace first using \`brxce_workspace_overview\`
130
- - NEVER guess or hardcode parent IDs
131
- - Present suggestions to user before creating
132
- - Only create in inbox if NO suitable parent exists
133
-
134
- **Two Creation Modes**:
135
- - Inbox Mode: Quick capture with \`status: "backlog"\`, no parent
136
- - Direct Mode: Structured work with parent, ready to work
137
-
138
- **Batch Creation**: Create multiple nodes at once in \`worknodes\` array
139
-
140
- **Validation**: Preview shows warnings, errors, inferred values, and hierarchy validation
141
-
142
- **Timezone**: Provide dates in ISO 8601 with timezone (e.g., "2025-01-20T09:00:00Z")
143
-
144
- ---
56
+ description: `Create WorkNodes. Use preview:true first.
145
57
 
146
- ## šŸ’” Tips
58
+ Required: title, nodeType (goal|project|subproject|task|subtask|note)
59
+ Conditional: parentNodeId (for task/subtask), workspaceId (for root items)
60
+ Optional: status, priority, startDate, dueDate, tags, assignee
147
61
 
148
- - **Default behavior**: If you omit \`status\`, it defaults to \`"backlog"\` (inbox mode)
149
- - **Safety first**: Preview validates hierarchy, permissions, and shows impact
150
- - **Workspace inheritance**: Children automatically inherit workspace from parent
151
- - **User timezone**: Convert local times to UTC in ISO 8601 format (e.g., Korea UTC+9)
152
- - **Proactive search**: Search for appropriate parent even when user doesn't mention one`,
62
+ Hierarchy: goal > project > subproject > task > subtask
63
+ Note: 'note' type allows backlog|static|archived (default: static), ignores priority/assignee
64
+ Dates: ISO 8601 with timezone (e.g., 2025-01-20T09:00:00Z)`,
153
65
  inputSchema: {
154
66
  worknodes: z.array(CreateWorknodeSchema).min(1).describe('Array of WorkNodes to create'),
155
67
  preview: z.boolean().optional().describe('If true, validate but do not create (dry run for user confirmation)'),
@@ -166,6 +78,7 @@ Goal (root-level, no parent needed)
166
78
  text: `Failed to create WorkNodes: ${response.message || 'Unknown error'}`,
167
79
  },
168
80
  ],
81
+ isError: true,
169
82
  };
170
83
  }
171
84
  const { data } = response;
@@ -260,9 +173,10 @@ Goal (root-level, no parent needed)
260
173
  content: [
261
174
  {
262
175
  type: 'text',
263
- text: `Error creating WorkNodes: ${error.message || 'Unknown error'}`,
176
+ text: `Error creating WorkNodes: ${getErrorMessage(error)}`,
264
177
  },
265
178
  ],
179
+ isError: true,
266
180
  };
267
181
  }
268
182
  });
@@ -1 +1 @@
1
- {"version":3,"file":"worknode-create-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-create-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worknode-create-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-create-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 registerWorknodeDeleteTool(server: McpServer, apiClient: ApiClient): void;
4
+ //# sourceMappingURL=worknode-delete-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worknode-delete-tool.d.ts","sourceRoot":"","sources":["../../src/tools/worknode-delete-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAItD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA4EjF"}
@@ -0,0 +1,64 @@
1
+ import { z } from 'zod';
2
+ import { getErrorMessage } from '../utils/error-utils.js';
3
+ import { workspaceContext } from '../services/workspace-context.js';
4
+ export function registerWorknodeDeleteTool(server, apiClient) {
5
+ server.registerTool('brxce_delete_worknode', {
6
+ description: `[DEPRECATED] Soft delete WorkNode (sets deletedAt, recoverable by admin).
7
+
8
+ āš ļø This tool is deprecated. Use brxce_batch_actions with action: 'delete' instead.
9
+
10
+ Params: nodeId (required)`,
11
+ inputSchema: {
12
+ nodeId: z.string().describe('WorkNode ID (UUID or displayId like #123 or 123)'),
13
+ workspaceId: z.string().uuid().optional().describe('Workspace ID (required when using displayId format)'),
14
+ },
15
+ }, async (args) => {
16
+ const { nodeId, workspaceId: providedWorkspaceId } = args;
17
+ // Auto-resolve workspaceId from context if using displayId
18
+ const resolvedWorkspaceId = workspaceContext.resolveWorkspaceId(providedWorkspaceId, nodeId);
19
+ try {
20
+ const url = resolvedWorkspaceId
21
+ ? `/mcp/worknodes/${encodeURIComponent(nodeId)}?workspaceId=${encodeURIComponent(resolvedWorkspaceId)}`
22
+ : `/mcp/worknodes/${encodeURIComponent(nodeId)}`;
23
+ const response = await apiClient.delete(url);
24
+ if (!response.success) {
25
+ return {
26
+ content: [
27
+ {
28
+ type: 'text',
29
+ text: `Failed to delete WorkNode: ${response.message || 'Unknown error'}`,
30
+ },
31
+ ],
32
+ isError: true,
33
+ };
34
+ }
35
+ const { data } = response;
36
+ let resultText = '## WorkNode Deletion Result\n\n';
37
+ resultText += `āš ļø **Deprecated**: This tool is deprecated. Use \`brxce_batch_actions\` with \`action: 'delete'\` instead.\n\n`;
38
+ resultText += `āœ… **Successfully deleted WorkNode**\n\n`;
39
+ resultText += `- **Node ID**: ${data.nodeId}\n`;
40
+ resultText += `- **Deleted At**: ${data.deletedAt}\n\n`;
41
+ resultText += `šŸ’” **Note**: This is a soft delete. The node can potentially be restored by an admin.\n`;
42
+ return {
43
+ content: [
44
+ {
45
+ type: 'text',
46
+ text: resultText,
47
+ },
48
+ ],
49
+ };
50
+ }
51
+ catch (error) {
52
+ return {
53
+ content: [
54
+ {
55
+ type: 'text',
56
+ text: `Error deleting WorkNode: ${getErrorMessage(error)}`,
57
+ },
58
+ ],
59
+ isError: true,
60
+ };
61
+ }
62
+ });
63
+ }
64
+ //# sourceMappingURL=worknode-delete-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worknode-delete-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-delete-tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,MAAM,UAAU,0BAA0B,CAAC,MAAiB,EAAE,SAAoB;IAChF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,WAAW,EAAE;;;;0BAIO;QACpB,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YAC/E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;SAC1G;KACF,EACD,KAAK,EAAE,IAAyB,EAAE,EAAE;QAClC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,GAAG,IAAgD,CAAC;QAEtG,2DAA2D;QAC3D,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QAE7F,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,mBAAmB;gBAC7B,CAAC,CAAC,kBAAkB,kBAAkB,CAAC,MAAM,CAAC,gBAAgB,kBAAkB,CAAC,mBAAmB,CAAC,EAAE;gBACvG,CAAC,CAAC,kBAAkB,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;YAEnD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAOpC,GAAG,CAAC,CAAC;YAER,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,8BAA8B,QAAQ,CAAC,OAAO,IAAI,eAAe,EAAE;yBAC1E;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;YAE1B,IAAI,UAAU,GAAG,iCAAiC,CAAC;YACnD,UAAU,IAAI,gHAAgH,CAAC;YAC/H,UAAU,IAAI,yCAAyC,CAAC;YACxD,UAAU,IAAI,kBAAkB,IAAI,CAAC,MAAM,IAAI,CAAC;YAChD,UAAU,IAAI,qBAAqB,IAAI,CAAC,SAAS,MAAM,CAAC;YACxD,UAAU,IAAI,yFAAyF,CAAC;YAExG,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAU;qBACjB;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,4BAA4B,eAAe,CAAC,KAAK,CAAC,EAAE;qBAC3D;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -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 registerWorknodeHistoryTool(server: McpServer, apiClient: ApiClient): void;
4
+ //# sourceMappingURL=worknode-history-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worknode-history-tool.d.ts","sourceRoot":"","sources":["../../src/tools/worknode-history-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGtD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA2IlF"}
@@ -0,0 +1,103 @@
1
+ import { z } from 'zod';
2
+ import { getErrorMessage } from '../utils/error-utils.js';
3
+ export function registerWorknodeHistoryTool(server, apiClient) {
4
+ /**
5
+ * Get WorkNode change history
6
+ */
7
+ server.registerTool('brxce_worknode_history', {
8
+ description: `Get WorkNode change history (audit trail).
9
+
10
+ Params: nodeId (required), limit (default: 20, max: 100)
11
+ Returns: history entries with commandType, changes, actor info. Dates in UTC.`,
12
+ inputSchema: {
13
+ nodeId: z.string().describe('WorkNode ID (UUID or displayId like #123 or 123)'),
14
+ workspaceId: z.string().uuid().optional().describe('Workspace ID (required when using displayId format)'),
15
+ limit: z.number().optional().default(20).describe('Maximum results (default: 20, max: 100)')
16
+ }
17
+ }, async (args) => {
18
+ try {
19
+ const { nodeId, workspaceId, limit = 20 } = args;
20
+ const response = await apiClient.get(`/mcp/worknodes/${encodeURIComponent(nodeId)}/history?limit=${limit}${workspaceId ? `&workspaceId=${encodeURIComponent(workspaceId)}` : ''}`);
21
+ if (!response.success) {
22
+ return {
23
+ content: [
24
+ {
25
+ type: 'text',
26
+ text: `Failed to fetch WorkNode history: ${response.message || 'Unknown error'}`,
27
+ },
28
+ ],
29
+ isError: true,
30
+ };
31
+ }
32
+ const { history, total, hasMore } = response.data;
33
+ let resultText = `## WorkNode History\n\n`;
34
+ resultText += `**Total Entries:** ${total}\n`;
35
+ resultText += `**Showing:** ${history.length} ${hasMore ? '(more available)' : ''}\n\n`;
36
+ if (history.length === 0) {
37
+ resultText += `No history entries found for this WorkNode.\n\n`;
38
+ resultText += `šŸ’” **Note**: History may be empty for newly created WorkNodes or if history tracking was not enabled.\n`;
39
+ }
40
+ else {
41
+ resultText += `---\n\n`;
42
+ history.forEach((entry, index) => {
43
+ const commandTypeEmoji = {
44
+ create: 'šŸ†•',
45
+ update: 'āœļø',
46
+ delete: 'šŸ—‘ļø',
47
+ complete: 'āœ…',
48
+ move: 'šŸ“¦',
49
+ archive: 'šŸ—„ļø',
50
+ unarchive: 'šŸ“¤'
51
+ };
52
+ const emoji = commandTypeEmoji[entry.commandType] || 'šŸ“';
53
+ resultText += `### ${emoji} ${entry.commandType.toUpperCase()}\n`;
54
+ resultText += `**When:** ${entry.createdAt}\n`;
55
+ resultText += `**Who:** ${entry.actor.name || entry.actor.email || entry.actor.id}\n`;
56
+ resultText += `**Source:** ${entry.source}\n\n`;
57
+ if (Array.isArray(entry.changes) && entry.changes.length > 0) {
58
+ resultText += `**Changes:**\n`;
59
+ entry.changes.forEach((change) => {
60
+ if (change.field) {
61
+ resultText += `- **${change.field}**: `;
62
+ if (change.oldValue !== undefined) {
63
+ resultText += `\`${JSON.stringify(change.oldValue)}\` → `;
64
+ }
65
+ resultText += `\`${JSON.stringify(change.newValue)}\`\n`;
66
+ }
67
+ });
68
+ resultText += `\n`;
69
+ }
70
+ if (entry.metadata) {
71
+ resultText += `**Metadata:** ${JSON.stringify(entry.metadata, null, 2)}\n\n`;
72
+ }
73
+ if (index < history.length - 1) {
74
+ resultText += `---\n\n`;
75
+ }
76
+ });
77
+ if (hasMore) {
78
+ resultText += `\nšŸ’” **Tip**: Increase \`limit\` parameter to see more history entries (max: 100)\n`;
79
+ }
80
+ }
81
+ return {
82
+ content: [
83
+ {
84
+ type: 'text',
85
+ text: resultText,
86
+ },
87
+ ],
88
+ };
89
+ }
90
+ catch (error) {
91
+ return {
92
+ content: [
93
+ {
94
+ type: 'text',
95
+ text: `Error fetching WorkNode history: ${getErrorMessage(error)}`,
96
+ },
97
+ ],
98
+ isError: true,
99
+ };
100
+ }
101
+ });
102
+ }
103
+ //# sourceMappingURL=worknode-history-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worknode-history-tool.js","sourceRoot":"","sources":["../../src/tools/worknode-history-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 registerWorknodeMoveTool(server: McpServer, apiClient: ApiClient): void;
4
+ //# sourceMappingURL=worknode-move-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worknode-move-tool.d.ts","sourceRoot":"","sources":["../../src/tools/worknode-move-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAatD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAyF/E"}
@@ -0,0 +1,80 @@
1
+ import { z } from 'zod';
2
+ import { getErrorMessage } from '../utils/error-utils.js';
3
+ const MoveWorknodeSchema = z.object({
4
+ nodeId: z.string().describe('WorkNode ID (UUID or displayId like #123 or 123)'),
5
+ newParentId: z
6
+ .string()
7
+ .nullable()
8
+ .optional()
9
+ .describe('New parent ID (UUID or displayId, null for root level)'),
10
+ position: z.number().optional().describe('Position among siblings (optional)'),
11
+ });
12
+ export function registerWorknodeMoveTool(server, apiClient) {
13
+ server.registerTool('brxce_move_worknode', {
14
+ description: `Move WorkNode to different parent or root level.
15
+
16
+ Params: nodeId (required), newParentId (null for root), position (sibling order)
17
+ Updates nodePath/nodeLevel for node and all descendants.`,
18
+ inputSchema: {
19
+ nodeId: z.string().describe('WorkNode ID (UUID or displayId like #123 or 123)'),
20
+ workspaceId: z.string().uuid().optional().describe('Workspace ID (required when using displayId format)'),
21
+ newParentId: z
22
+ .string()
23
+ .nullable()
24
+ .optional()
25
+ .describe('New parent ID (UUID or displayId, null for root level)'),
26
+ position: z.number().optional().describe('Position among siblings'),
27
+ },
28
+ }, async (args) => {
29
+ const request = args;
30
+ try {
31
+ const response = await apiClient.post('/mcp/worknodes/move', request);
32
+ if (!response.success) {
33
+ return {
34
+ content: [
35
+ {
36
+ type: 'text',
37
+ text: `Failed to move WorkNode: ${response.message || 'Unknown error'}`,
38
+ },
39
+ ],
40
+ isError: true,
41
+ };
42
+ }
43
+ const { node } = response.data;
44
+ let resultText = '## WorkNode Move Result\n\n';
45
+ resultText += `āœ… **Successfully moved**: ${node.title}\n\n`;
46
+ resultText += `### Node Details\n`;
47
+ resultText += `- **ID**: ${node.id}\n`;
48
+ resultText += `- **Type**: ${node.nodeType}\n`;
49
+ resultText += `- **New Parent**: ${node.parentNodeId || '(Root level)'}\n`;
50
+ resultText += `- **Node Path**: ${node.nodePath}\n`;
51
+ resultText += `- **Node Level**: ${node.nodeLevel}\n\n`;
52
+ if (node.parentNodeId) {
53
+ resultText += `šŸ’” **Note**: Node is now under parent ${node.parentNodeId}\n`;
54
+ }
55
+ else {
56
+ resultText += `šŸ’” **Note**: Node is now at root level\n`;
57
+ }
58
+ return {
59
+ content: [
60
+ {
61
+ type: 'text',
62
+ text: resultText,
63
+ },
64
+ ],
65
+ };
66
+ }
67
+ catch (error) {
68
+ return {
69
+ content: [
70
+ {
71
+ type: 'text',
72
+ text: `Error moving WorkNode: ${getErrorMessage(error)}`,
73
+ },
74
+ ],
75
+ isError: true,
76
+ };
77
+ }
78
+ });
79
+ }
80
+ //# sourceMappingURL=worknode-move-tool.js.map