@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,358 @@
1
+ import { z } from 'zod';
2
+ export function registerTagSearchTools(server, apiClient) {
3
+ /**
4
+ * Search tags
5
+ */
6
+ server.registerTool('brxce_search_tags', {
7
+ description: `Search and filter tags by various criteria.
8
+
9
+ **When to use:**
10
+ - To find tags by name or partial match
11
+ - To discover unused tags for cleanup
12
+ - To find popular/frequently used tags
13
+ - To search within specific categories
14
+
15
+ **Search options:**
16
+ - q: Search query for tag name
17
+ - categoryId or categorySlug: Filter by category
18
+ - minUsage/maxUsage: Filter by usage count
19
+ - unused: Show only unused tags (usageCount = 0)
20
+ - popular: Show only used tags (usageCount > 0)
21
+
22
+ **Example searches:**
23
+ User: "Find all unused tags in Tech Stack category"
24
+ Assistant calls: brxce_search_tags(
25
+ workspaceId: 4,
26
+ categorySlug: "tech-stack",
27
+ unused: true
28
+ )
29
+
30
+ User: "What are the most popular tags?"
31
+ Assistant calls: brxce_search_tags(
32
+ workspaceId: 4,
33
+ popular: true,
34
+ limit: 10
35
+ )
36
+
37
+ User: "Find tags matching 'react'"
38
+ Assistant calls: brxce_search_tags(workspaceId: 4, q: "react")`,
39
+ inputSchema: {
40
+ workspaceId: z.number().describe('The workspace ID'),
41
+ q: z.string().optional().describe('Search query for tag name'),
42
+ categoryId: z.number().optional().describe('Filter by category ID'),
43
+ categorySlug: z.string().optional().describe('Filter by category slug'),
44
+ minUsage: z.number().optional().describe('Minimum usage count'),
45
+ maxUsage: z.number().optional().describe('Maximum usage count'),
46
+ unused: z.boolean().optional().describe('Show only unused tags (usageCount = 0)'),
47
+ popular: z.boolean().optional().describe('Show only popular tags (usageCount > 0)'),
48
+ limit: z.number().optional().describe('Limit results (default: 100)')
49
+ }
50
+ }, async (args) => {
51
+ try {
52
+ const { workspaceId, q, categoryId, categorySlug, minUsage, maxUsage, unused, popular, limit } = args;
53
+ const queryParams = new URLSearchParams();
54
+ if (q)
55
+ queryParams.set('q', q);
56
+ if (categoryId !== undefined)
57
+ queryParams.set('categoryId', String(categoryId));
58
+ if (categorySlug)
59
+ queryParams.set('categorySlug', categorySlug);
60
+ if (minUsage !== undefined)
61
+ queryParams.set('minUsage', String(minUsage));
62
+ if (maxUsage !== undefined)
63
+ queryParams.set('maxUsage', String(maxUsage));
64
+ if (unused !== undefined)
65
+ queryParams.set('unused', String(unused));
66
+ if (popular !== undefined)
67
+ queryParams.set('popular', String(popular));
68
+ if (limit !== undefined)
69
+ queryParams.set('limit', String(limit));
70
+ const url = `/mcp/workspaces/${workspaceId}/tags/search${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;
71
+ const response = await apiClient.get(url);
72
+ if (!response.success) {
73
+ return {
74
+ content: [
75
+ {
76
+ type: 'text',
77
+ text: `Failed to search tags: ${response.message || 'Unknown error'}`,
78
+ },
79
+ ],
80
+ };
81
+ }
82
+ const { tags, total } = response.data;
83
+ let resultText = `## Tag Search Results (Workspace ${workspaceId})\\n\\n`;
84
+ if (q)
85
+ resultText += `Query: "${q}"\\n`;
86
+ resultText += `Found: ${total} tag(s)\\n\\n`;
87
+ if (tags.length === 0) {
88
+ resultText += `No tags found matching the criteria.\\n`;
89
+ }
90
+ else {
91
+ // Group by category
92
+ const byCategory = tags.reduce((acc, tag) => {
93
+ const catName = tag.category.name;
94
+ if (!acc[catName])
95
+ acc[catName] = [];
96
+ acc[catName].push(tag);
97
+ return acc;
98
+ }, {});
99
+ Object.entries(byCategory).forEach(([catName, catTags]) => {
100
+ resultText += `### ${catName}\\n`;
101
+ catTags.forEach((tag) => {
102
+ const indent = ' '.repeat(tag.tagLevel);
103
+ resultText += `${indent}- **${tag.name}** (ID: ${tag.id})\\n`;
104
+ resultText += `${indent} Usage: ${tag.usageCount} WorkNode(s)\\n`;
105
+ if (tag.parentTag) {
106
+ resultText += `${indent} Parent: ${tag.parentTag.name}\\n`;
107
+ }
108
+ if (tag._count.childTags > 0) {
109
+ resultText += `${indent} Children: ${tag._count.childTags}\\n`;
110
+ }
111
+ });
112
+ resultText += `\\n`;
113
+ });
114
+ }
115
+ return {
116
+ content: [
117
+ {
118
+ type: 'text',
119
+ text: resultText,
120
+ },
121
+ ],
122
+ };
123
+ }
124
+ catch (error) {
125
+ return {
126
+ content: [
127
+ {
128
+ type: 'text',
129
+ text: `Error searching tags: ${error.message || 'Unknown error'}`,
130
+ },
131
+ ],
132
+ };
133
+ }
134
+ });
135
+ /**
136
+ * Get tag statistics
137
+ */
138
+ server.registerTool('brxce_get_tag_stats', {
139
+ description: `Get comprehensive tag usage statistics for workspace.
140
+
141
+ **When to use:**
142
+ - To understand overall tag adoption and usage
143
+ - To identify unused tags for cleanup
144
+ - To see most popular tags
145
+ - To analyze tag distribution across categories
146
+
147
+ **Returns:**
148
+ - Overview: Total tags, used/unused counts, utilization rate
149
+ - Most used tags (top 10)
150
+ - Category breakdown with usage stats
151
+
152
+ **Example:**
153
+ User: "Show me tag usage statistics for this workspace"
154
+ Assistant calls: brxce_get_tag_stats(workspaceId: 4)
155
+
156
+ Use case: Workspace cleanup
157
+ - Check unused tags
158
+ - Review utilization rate
159
+ - Identify which categories are actively used`,
160
+ inputSchema: {
161
+ workspaceId: z.number().describe('The workspace ID')
162
+ }
163
+ }, async (args) => {
164
+ try {
165
+ const { workspaceId } = args;
166
+ const url = `/mcp/workspaces/${workspaceId}/tags/stats`;
167
+ const response = await apiClient.get(url);
168
+ if (!response.success) {
169
+ return {
170
+ content: [
171
+ {
172
+ type: 'text',
173
+ text: `Failed to get tag statistics: ${response.message || 'Unknown error'}`,
174
+ },
175
+ ],
176
+ };
177
+ }
178
+ const { overview, mostUsedTags, byCategory } = response.data;
179
+ let resultText = `## Tag Statistics (Workspace ${workspaceId})\\n\\n`;
180
+ // Overview
181
+ resultText += `### Overview\\n`;
182
+ resultText += `- Total tags: ${overview.totalTags}\\n`;
183
+ resultText += `- Total categories: ${overview.totalCategories}\\n`;
184
+ resultText += `- Used tags: ${overview.usedTags}\\n`;
185
+ resultText += `- Unused tags: ${overview.unusedTags}\\n`;
186
+ resultText += `- Total assignments: ${overview.totalAssignments}\\n`;
187
+ resultText += `- Utilization rate: ${overview.utilizationRate}%\\n`;
188
+ resultText += `\\n`;
189
+ // Most used tags
190
+ if (mostUsedTags.length > 0) {
191
+ resultText += `### Most Used Tags\\n`;
192
+ mostUsedTags.forEach((tag, index) => {
193
+ resultText += `${index + 1}. **${tag.name}** (${tag.category}): ${tag.usageCount} uses\\n`;
194
+ });
195
+ resultText += `\\n`;
196
+ }
197
+ // By category
198
+ if (byCategory.length > 0) {
199
+ resultText += `### By Category\\n`;
200
+ byCategory.forEach((cat) => {
201
+ resultText += `#### ${cat.categoryName}\\n`;
202
+ resultText += `- Total tags: ${cat.totalTags}\\n`;
203
+ resultText += `- Used: ${cat.usedTags}\\n`;
204
+ resultText += `- Unused: ${cat.unusedTags}\\n`;
205
+ resultText += `- Total usage: ${cat.totalUsage}\\n`;
206
+ const catUtilization = cat.totalTags > 0
207
+ ? ((cat.usedTags / cat.totalTags) * 100).toFixed(2)
208
+ : '0.00';
209
+ resultText += `- Utilization: ${catUtilization}%\\n`;
210
+ resultText += `\\n`;
211
+ });
212
+ }
213
+ return {
214
+ content: [
215
+ {
216
+ type: 'text',
217
+ text: resultText,
218
+ },
219
+ ],
220
+ };
221
+ }
222
+ catch (error) {
223
+ return {
224
+ content: [
225
+ {
226
+ type: 'text',
227
+ text: `Error getting tag statistics: ${error.message || 'Unknown error'}`,
228
+ },
229
+ ],
230
+ };
231
+ }
232
+ });
233
+ /**
234
+ * Find WorkNodes by tags
235
+ */
236
+ server.registerTool('brxce_find_worknodes_by_tags', {
237
+ description: `Find WorkNodes that have specific tags.
238
+
239
+ **When to use:**
240
+ - To find all work related to specific tags
241
+ - To see what tasks/projects use certain technologies
242
+ - To filter workspace by tag combinations
243
+
244
+ **Match modes:**
245
+ - matchAll: false (default) - WorkNode has ANY of the specified tags
246
+ - matchAll: true - WorkNode must have ALL specified tags
247
+
248
+ **Example queries:**
249
+ User: "Show me all tasks tagged with React"
250
+ Assistant: Get React tag ID, then call:
251
+ brxce_find_worknodes_by_tags(
252
+ workspaceId: 4,
253
+ tagIds: "25",
254
+ matchAll: false
255
+ )
256
+
257
+ User: "Find work that uses both React AND TypeScript"
258
+ Assistant: Get both tag IDs, then call:
259
+ brxce_find_worknodes_by_tags(
260
+ workspaceId: 4,
261
+ tagIds: "25,26",
262
+ matchAll: true
263
+ )
264
+
265
+ User: "What backend tasks do we have?"
266
+ Assistant: Search for backend tag, then use its ID
267
+
268
+ **Returns:**
269
+ - WorkNodes with their tags grouped by category
270
+ - Match mode used (ANY/ALL)
271
+ - Total count`,
272
+ inputSchema: {
273
+ workspaceId: z.number().describe('The workspace ID'),
274
+ tagIds: z.string().optional().describe('Comma-separated tag IDs (e.g., "1,2,3")'),
275
+ tagSlugs: z.string().optional().describe('Comma-separated tag slugs (e.g., "react,typescript")'),
276
+ matchAll: z.boolean().optional().describe('If true, WorkNode must have ALL tags. If false, ANY tag matches. (default: false)'),
277
+ limit: z.number().optional().describe('Limit results (default: 100)')
278
+ }
279
+ }, async (args) => {
280
+ try {
281
+ const { workspaceId, tagIds, tagSlugs, matchAll, limit } = args;
282
+ const queryParams = new URLSearchParams();
283
+ if (tagIds)
284
+ queryParams.set('tagIds', tagIds);
285
+ if (tagSlugs)
286
+ queryParams.set('tagSlugs', tagSlugs);
287
+ if (matchAll !== undefined)
288
+ queryParams.set('matchAll', String(matchAll));
289
+ if (limit !== undefined)
290
+ queryParams.set('limit', String(limit));
291
+ const url = `/mcp/workspaces/${workspaceId}/worknodes/search-by-tags${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;
292
+ const response = await apiClient.get(url);
293
+ if (!response.success) {
294
+ return {
295
+ content: [
296
+ {
297
+ type: 'text',
298
+ text: `Failed to find WorkNodes: ${response.message || 'Unknown error'}`,
299
+ },
300
+ ],
301
+ };
302
+ }
303
+ const { worknodes, total, matchedTags, matchMode } = response.data;
304
+ let resultText = `## WorkNodes by Tags (Workspace ${workspaceId})\\n\\n`;
305
+ resultText += `Matched ${matchedTags} tag(s) with mode: ${matchMode}\\n`;
306
+ resultText += `Found: ${total} WorkNode(s)\\n\\n`;
307
+ if (worknodes.length === 0) {
308
+ resultText += `No WorkNodes found with the specified tags.\\n`;
309
+ }
310
+ else {
311
+ worknodes.forEach((wn) => {
312
+ const typeEmoji = {
313
+ goal: '🎯',
314
+ project: '📁',
315
+ subproject: '📂',
316
+ task: '✅',
317
+ subtask: '☑️'
318
+ }[wn.nodeType] || '📄';
319
+ const statusEmoji = {
320
+ backlog: '📥',
321
+ not_started: '⭕',
322
+ in_progress: '🔄',
323
+ in_review: '👀',
324
+ completed: '✅',
325
+ cancelled: '❌'
326
+ }[wn.status] || '❓';
327
+ resultText += `${typeEmoji} **${wn.title}** (ID: ${wn.id}) ${statusEmoji}\\n`;
328
+ resultText += ` Type: ${wn.nodeType} | Status: ${wn.status} | Priority: ${wn.priority}\\n`;
329
+ if (wn.tags && wn.tags.length > 0) {
330
+ resultText += ` Tags: `;
331
+ resultText += wn.tags.map((tag) => tag.name).join(', ');
332
+ resultText += `\\n`;
333
+ }
334
+ resultText += `\\n`;
335
+ });
336
+ }
337
+ return {
338
+ content: [
339
+ {
340
+ type: 'text',
341
+ text: resultText,
342
+ },
343
+ ],
344
+ };
345
+ }
346
+ catch (error) {
347
+ return {
348
+ content: [
349
+ {
350
+ type: 'text',
351
+ text: `Error finding WorkNodes: ${error.message || 'Unknown error'}`,
352
+ },
353
+ ],
354
+ };
355
+ }
356
+ });
357
+ }
358
+ //# sourceMappingURL=tag-search-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag-search-tool.js","sourceRoot":"","sources":["../../src/tools/tag-search-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 registerTagTools(server: McpServer, apiClient: ApiClient): void;
4
+ //# sourceMappingURL=tag-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag-tool.d.ts","sourceRoot":"","sources":["../../src/tools/tag-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAijBvE"}