@edicarlos.lds/businessmap-mcp 1.0.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.
@@ -0,0 +1,593 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ import { BusinessMapClient } from '../client/businessmap-client.js';
4
+ import { config } from '../config/environment.js';
5
+ export class BusinessMapMcpServer {
6
+ mcpServer;
7
+ businessMapClient;
8
+ constructor() {
9
+ this.mcpServer = new McpServer({
10
+ name: config.server.name,
11
+ version: config.server.version,
12
+ });
13
+ this.businessMapClient = new BusinessMapClient(config.businessMap);
14
+ this.setupTools();
15
+ this.setupResources();
16
+ }
17
+ setupTools() {
18
+ this.setupWorkspaceTools();
19
+ this.setupBoardTools();
20
+ this.setupCardTools();
21
+ this.setupUserTools();
22
+ this.setupAnalyticsTools();
23
+ this.setupUtilityTools();
24
+ }
25
+ setupWorkspaceTools() {
26
+ // List workspaces
27
+ this.mcpServer.registerTool('list_workspaces', {
28
+ title: 'List Workspaces',
29
+ description: 'Get a list of all workspaces',
30
+ inputSchema: {},
31
+ }, async () => {
32
+ try {
33
+ const workspaces = await this.businessMapClient.getWorkspaces();
34
+ return {
35
+ content: [{
36
+ type: 'text',
37
+ text: JSON.stringify(workspaces, null, 2),
38
+ }],
39
+ };
40
+ }
41
+ catch (error) {
42
+ return {
43
+ content: [{
44
+ type: 'text',
45
+ text: `Error fetching workspaces: ${error instanceof Error ? error.message : 'Unknown error'}`,
46
+ }],
47
+ isError: true,
48
+ };
49
+ }
50
+ });
51
+ // Get workspace details
52
+ this.mcpServer.registerTool('get_workspace', {
53
+ title: 'Get Workspace',
54
+ description: 'Get details of a specific workspace',
55
+ inputSchema: {
56
+ workspace_id: z.number().describe('The ID of the workspace'),
57
+ },
58
+ }, async ({ workspace_id }) => {
59
+ try {
60
+ const workspace = await this.businessMapClient.getWorkspace(workspace_id);
61
+ return {
62
+ content: [{
63
+ type: 'text',
64
+ text: JSON.stringify(workspace, null, 2),
65
+ }],
66
+ };
67
+ }
68
+ catch (error) {
69
+ return {
70
+ content: [{
71
+ type: 'text',
72
+ text: `Error fetching workspace: ${error instanceof Error ? error.message : 'Unknown error'}`,
73
+ }],
74
+ isError: true,
75
+ };
76
+ }
77
+ });
78
+ if (!config.businessMap.readOnlyMode) {
79
+ // Create workspace
80
+ this.mcpServer.registerTool('create_workspace', {
81
+ title: 'Create Workspace',
82
+ description: 'Create a new workspace',
83
+ inputSchema: {
84
+ name: z.string().describe('The name of the workspace'),
85
+ description: z.string().optional().describe('Optional description for the workspace'),
86
+ },
87
+ }, async ({ name, description }) => {
88
+ try {
89
+ const workspace = await this.businessMapClient.createWorkspace({ name, description });
90
+ return {
91
+ content: [{
92
+ type: 'text',
93
+ text: `Workspace created successfully:\n${JSON.stringify(workspace, null, 2)}`,
94
+ }],
95
+ };
96
+ }
97
+ catch (error) {
98
+ return {
99
+ content: [{
100
+ type: 'text',
101
+ text: `Error creating workspace: ${error instanceof Error ? error.message : 'Unknown error'}`,
102
+ }],
103
+ isError: true,
104
+ };
105
+ }
106
+ });
107
+ }
108
+ }
109
+ setupBoardTools() {
110
+ // List boards
111
+ this.mcpServer.registerTool('list_boards', {
112
+ title: 'List Boards',
113
+ description: 'Get a list of boards, optionally filtered by workspace',
114
+ inputSchema: {
115
+ workspace_id: z.number().optional().describe('Optional workspace ID to filter boards'),
116
+ },
117
+ }, async ({ workspace_id }) => {
118
+ try {
119
+ const boards = await this.businessMapClient.getBoards(workspace_id);
120
+ return {
121
+ content: [{
122
+ type: 'text',
123
+ text: JSON.stringify(boards, null, 2),
124
+ }],
125
+ };
126
+ }
127
+ catch (error) {
128
+ return {
129
+ content: [{
130
+ type: 'text',
131
+ text: `Error fetching boards: ${error instanceof Error ? error.message : 'Unknown error'}`,
132
+ }],
133
+ isError: true,
134
+ };
135
+ }
136
+ });
137
+ // Get board details
138
+ this.mcpServer.registerTool('get_board', {
139
+ title: 'Get Board',
140
+ description: 'Get details of a specific board including its structure',
141
+ inputSchema: {
142
+ board_id: z.number().describe('The ID of the board'),
143
+ },
144
+ }, async ({ board_id }) => {
145
+ try {
146
+ const [board, structure] = await Promise.all([
147
+ this.businessMapClient.getBoard(board_id),
148
+ this.businessMapClient.getBoardStructure(board_id),
149
+ ]);
150
+ return {
151
+ content: [{
152
+ type: 'text',
153
+ text: JSON.stringify({ ...board, structure }, null, 2),
154
+ }],
155
+ };
156
+ }
157
+ catch (error) {
158
+ return {
159
+ content: [{
160
+ type: 'text',
161
+ text: `Error fetching board: ${error instanceof Error ? error.message : 'Unknown error'}`,
162
+ }],
163
+ isError: true,
164
+ };
165
+ }
166
+ });
167
+ if (!config.businessMap.readOnlyMode) {
168
+ // Create board
169
+ this.mcpServer.registerTool('create_board', {
170
+ title: 'Create Board',
171
+ description: 'Create a new board in a workspace',
172
+ inputSchema: {
173
+ name: z.string().describe('The name of the board'),
174
+ workspace_id: z.number().describe('The ID of the workspace'),
175
+ description: z.string().optional().describe('Optional description for the board'),
176
+ },
177
+ }, async ({ name, workspace_id, description }) => {
178
+ try {
179
+ const board = await this.businessMapClient.createBoard({ name, workspace_id, description });
180
+ return {
181
+ content: [{
182
+ type: 'text',
183
+ text: `Board created successfully:\n${JSON.stringify(board, null, 2)}`,
184
+ }],
185
+ };
186
+ }
187
+ catch (error) {
188
+ return {
189
+ content: [{
190
+ type: 'text',
191
+ text: `Error creating board: ${error instanceof Error ? error.message : 'Unknown error'}`,
192
+ }],
193
+ isError: true,
194
+ };
195
+ }
196
+ });
197
+ }
198
+ }
199
+ setupCardTools() {
200
+ // List cards
201
+ this.mcpServer.registerTool('list_cards', {
202
+ title: 'List Cards',
203
+ description: 'Get a list of cards from a board with optional filters',
204
+ inputSchema: {
205
+ board_id: z.number().describe('The ID of the board'),
206
+ column_id: z.number().optional().describe('Optional column ID to filter cards'),
207
+ swimlane_id: z.number().optional().describe('Optional swimlane ID to filter cards'),
208
+ assignee_user_id: z.number().optional().describe('Optional assignee user ID to filter cards'),
209
+ },
210
+ }, async ({ board_id, column_id, swimlane_id, assignee_user_id }) => {
211
+ try {
212
+ const filters = { column_id, swimlane_id, assignee_user_id };
213
+ const cards = await this.businessMapClient.getCards(board_id, filters);
214
+ return {
215
+ content: [{
216
+ type: 'text',
217
+ text: JSON.stringify(cards, null, 2),
218
+ }],
219
+ };
220
+ }
221
+ catch (error) {
222
+ return {
223
+ content: [{
224
+ type: 'text',
225
+ text: `Error fetching cards: ${error instanceof Error ? error.message : 'Unknown error'}`,
226
+ }],
227
+ isError: true,
228
+ };
229
+ }
230
+ });
231
+ // Get card details
232
+ this.mcpServer.registerTool('get_card', {
233
+ title: 'Get Card',
234
+ description: 'Get details of a specific card',
235
+ inputSchema: {
236
+ card_id: z.number().describe('The ID of the card'),
237
+ },
238
+ }, async ({ card_id }) => {
239
+ try {
240
+ const card = await this.businessMapClient.getCard(card_id);
241
+ return {
242
+ content: [{
243
+ type: 'text',
244
+ text: JSON.stringify(card, null, 2),
245
+ }],
246
+ };
247
+ }
248
+ catch (error) {
249
+ return {
250
+ content: [{
251
+ type: 'text',
252
+ text: `Error fetching card: ${error instanceof Error ? error.message : 'Unknown error'}`,
253
+ }],
254
+ isError: true,
255
+ };
256
+ }
257
+ });
258
+ if (!config.businessMap.readOnlyMode) {
259
+ // Create card
260
+ this.mcpServer.registerTool('create_card', {
261
+ title: 'Create Card',
262
+ description: 'Create a new card in a board',
263
+ inputSchema: {
264
+ title: z.string().describe('The title of the card'),
265
+ board_id: z.number().describe('The ID of the board'),
266
+ column_id: z.number().describe('The ID of the column'),
267
+ description: z.string().optional().describe('Optional description for the card'),
268
+ swimlane_id: z.number().optional().describe('Optional swimlane ID'),
269
+ type_id: z.number().optional().describe('Optional card type ID'),
270
+ size: z.number().optional().describe('Optional card size/points'),
271
+ priority: z.string().optional().describe('Priority level (Low, Average, High, Critical)'),
272
+ owner_user_id: z.number().optional().describe('Optional owner user ID'),
273
+ assignee_user_id: z.number().optional().describe('Optional assignee user ID'),
274
+ deadline: z.string().optional().describe('Optional deadline (ISO date string)'),
275
+ },
276
+ }, async (params) => {
277
+ try {
278
+ const card = await this.businessMapClient.createCard(params);
279
+ return {
280
+ content: [{
281
+ type: 'text',
282
+ text: `Card created successfully:\n${JSON.stringify(card, null, 2)}`,
283
+ }],
284
+ };
285
+ }
286
+ catch (error) {
287
+ return {
288
+ content: [{
289
+ type: 'text',
290
+ text: `Error creating card: ${error instanceof Error ? error.message : 'Unknown error'}`,
291
+ }],
292
+ isError: true,
293
+ };
294
+ }
295
+ });
296
+ // Move card
297
+ this.mcpServer.registerTool('move_card', {
298
+ title: 'Move Card',
299
+ description: 'Move a card to a different column or swimlane',
300
+ inputSchema: {
301
+ card_id: z.number().describe('The ID of the card to move'),
302
+ column_id: z.number().describe('The target column ID'),
303
+ swimlane_id: z.number().optional().describe('Optional target swimlane ID'),
304
+ position: z.number().optional().describe('Optional position in the column'),
305
+ },
306
+ }, async ({ card_id, column_id, swimlane_id, position }) => {
307
+ try {
308
+ const card = await this.businessMapClient.moveCard(card_id, column_id, swimlane_id, position);
309
+ return {
310
+ content: [{
311
+ type: 'text',
312
+ text: `Card moved successfully:\n${JSON.stringify(card, null, 2)}`,
313
+ }],
314
+ };
315
+ }
316
+ catch (error) {
317
+ return {
318
+ content: [{
319
+ type: 'text',
320
+ text: `Error moving card: ${error instanceof Error ? error.message : 'Unknown error'}`,
321
+ }],
322
+ isError: true,
323
+ };
324
+ }
325
+ });
326
+ // Update card
327
+ this.mcpServer.registerTool('update_card', {
328
+ title: 'Update Card',
329
+ description: 'Update a card\'s properties',
330
+ inputSchema: {
331
+ card_id: z.number().describe('The ID of the card to update'),
332
+ title: z.string().optional().describe('New title for the card'),
333
+ description: z.string().optional().describe('New description for the card'),
334
+ priority: z.string().optional().describe('New priority level'),
335
+ assignee_user_id: z.number().optional().describe('New assignee user ID'),
336
+ deadline: z.string().optional().describe('New deadline (ISO date string)'),
337
+ size: z.number().optional().describe('New card size/points'),
338
+ },
339
+ }, async (params) => {
340
+ try {
341
+ const card = await this.businessMapClient.updateCard(params);
342
+ return {
343
+ content: [{
344
+ type: 'text',
345
+ text: `Card updated successfully:\n${JSON.stringify(card, null, 2)}`,
346
+ }],
347
+ };
348
+ }
349
+ catch (error) {
350
+ return {
351
+ content: [{
352
+ type: 'text',
353
+ text: `Error updating card: ${error instanceof Error ? error.message : 'Unknown error'}`,
354
+ }],
355
+ isError: true,
356
+ };
357
+ }
358
+ });
359
+ }
360
+ }
361
+ setupUserTools() {
362
+ // List users
363
+ this.mcpServer.registerTool('list_users', {
364
+ title: 'List Users',
365
+ description: 'Get a list of all users',
366
+ inputSchema: {},
367
+ }, async () => {
368
+ try {
369
+ const users = await this.businessMapClient.getUsers();
370
+ return {
371
+ content: [{
372
+ type: 'text',
373
+ text: JSON.stringify(users, null, 2),
374
+ }],
375
+ };
376
+ }
377
+ catch (error) {
378
+ return {
379
+ content: [{
380
+ type: 'text',
381
+ text: `Error fetching users: ${error instanceof Error ? error.message : 'Unknown error'}`,
382
+ }],
383
+ isError: true,
384
+ };
385
+ }
386
+ });
387
+ // Get user details
388
+ this.mcpServer.registerTool('get_user', {
389
+ title: 'Get User',
390
+ description: 'Get details of a specific user',
391
+ inputSchema: {
392
+ user_id: z.number().describe('The ID of the user'),
393
+ },
394
+ }, async ({ user_id }) => {
395
+ try {
396
+ const user = await this.businessMapClient.getUser(user_id);
397
+ return {
398
+ content: [{
399
+ type: 'text',
400
+ text: JSON.stringify(user, null, 2),
401
+ }],
402
+ };
403
+ }
404
+ catch (error) {
405
+ return {
406
+ content: [{
407
+ type: 'text',
408
+ text: `Error fetching user: ${error instanceof Error ? error.message : 'Unknown error'}`,
409
+ }],
410
+ isError: true,
411
+ };
412
+ }
413
+ });
414
+ }
415
+ setupAnalyticsTools() {
416
+ // Workflow analytics
417
+ this.mcpServer.registerTool('get_workflow_analytics', {
418
+ title: 'Get Workflow Analytics',
419
+ description: 'Get workflow analytics for a board within a time period',
420
+ inputSchema: {
421
+ board_id: z.number().describe('The ID of the board'),
422
+ period_start: z.string().describe('Start date (ISO date string)'),
423
+ period_end: z.string().describe('End date (ISO date string)'),
424
+ },
425
+ }, async ({ board_id, period_start, period_end }) => {
426
+ try {
427
+ const analytics = await this.businessMapClient.getWorkflowAnalytics(board_id, period_start, period_end);
428
+ return {
429
+ content: [{
430
+ type: 'text',
431
+ text: JSON.stringify(analytics, null, 2),
432
+ }],
433
+ };
434
+ }
435
+ catch (error) {
436
+ return {
437
+ content: [{
438
+ type: 'text',
439
+ text: `Error fetching workflow analytics: ${error instanceof Error ? error.message : 'Unknown error'}`,
440
+ }],
441
+ isError: true,
442
+ };
443
+ }
444
+ });
445
+ // Cumulative flow diagram
446
+ this.mcpServer.registerTool('get_cumulative_flow_data', {
447
+ title: 'Get Cumulative Flow Data',
448
+ description: 'Get cumulative flow diagram data for a board',
449
+ inputSchema: {
450
+ board_id: z.number().describe('The ID of the board'),
451
+ period_start: z.string().describe('Start date (ISO date string)'),
452
+ period_end: z.string().describe('End date (ISO date string)'),
453
+ },
454
+ }, async ({ board_id, period_start, period_end }) => {
455
+ try {
456
+ const flowData = await this.businessMapClient.getCumulativeFlowData(board_id, period_start, period_end);
457
+ return {
458
+ content: [{
459
+ type: 'text',
460
+ text: JSON.stringify(flowData, null, 2),
461
+ }],
462
+ };
463
+ }
464
+ catch (error) {
465
+ return {
466
+ content: [{
467
+ type: 'text',
468
+ text: `Error fetching cumulative flow data: ${error instanceof Error ? error.message : 'Unknown error'}`,
469
+ }],
470
+ isError: true,
471
+ };
472
+ }
473
+ });
474
+ // Cycle time report
475
+ this.mcpServer.registerTool('get_cycle_time_report', {
476
+ title: 'Get Cycle Time Report',
477
+ description: 'Get cycle time report for a board',
478
+ inputSchema: {
479
+ board_id: z.number().describe('The ID of the board'),
480
+ period_start: z.string().describe('Start date (ISO date string)'),
481
+ period_end: z.string().describe('End date (ISO date string)'),
482
+ },
483
+ }, async ({ board_id, period_start, period_end }) => {
484
+ try {
485
+ const report = await this.businessMapClient.getCycleTimeReport(board_id, period_start, period_end);
486
+ return {
487
+ content: [{
488
+ type: 'text',
489
+ text: JSON.stringify(report, null, 2),
490
+ }],
491
+ };
492
+ }
493
+ catch (error) {
494
+ return {
495
+ content: [{
496
+ type: 'text',
497
+ text: `Error fetching cycle time report: ${error instanceof Error ? error.message : 'Unknown error'}`,
498
+ }],
499
+ isError: true,
500
+ };
501
+ }
502
+ });
503
+ // Throughput report
504
+ this.mcpServer.registerTool('get_throughput_report', {
505
+ title: 'Get Throughput Report',
506
+ description: 'Get throughput report for a board',
507
+ inputSchema: {
508
+ board_id: z.number().describe('The ID of the board'),
509
+ period_start: z.string().describe('Start date (ISO date string)'),
510
+ period_end: z.string().describe('End date (ISO date string)'),
511
+ },
512
+ }, async ({ board_id, period_start, period_end }) => {
513
+ try {
514
+ const report = await this.businessMapClient.getThroughputReport(board_id, period_start, period_end);
515
+ return {
516
+ content: [{
517
+ type: 'text',
518
+ text: JSON.stringify(report, null, 2),
519
+ }],
520
+ };
521
+ }
522
+ catch (error) {
523
+ return {
524
+ content: [{
525
+ type: 'text',
526
+ text: `Error fetching throughput report: ${error instanceof Error ? error.message : 'Unknown error'}`,
527
+ }],
528
+ isError: true,
529
+ };
530
+ }
531
+ });
532
+ }
533
+ setupUtilityTools() {
534
+ // Health check
535
+ this.mcpServer.registerTool('health_check', {
536
+ title: 'Health Check',
537
+ description: 'Check the connection to BusinessMap API',
538
+ inputSchema: {},
539
+ }, async () => {
540
+ try {
541
+ const isHealthy = await this.businessMapClient.healthCheck();
542
+ return {
543
+ content: [{
544
+ type: 'text',
545
+ text: `BusinessMap API Health: ${isHealthy ? 'Healthy' : 'Unhealthy'}`,
546
+ }],
547
+ };
548
+ }
549
+ catch (error) {
550
+ return {
551
+ content: [{
552
+ type: 'text',
553
+ text: `Health check failed: ${error instanceof Error ? error.message : 'Unknown error'}`,
554
+ }],
555
+ isError: true,
556
+ };
557
+ }
558
+ });
559
+ // API info
560
+ this.mcpServer.registerTool('get_api_info', {
561
+ title: 'Get API Info',
562
+ description: 'Get information about the BusinessMap API',
563
+ inputSchema: {},
564
+ }, async () => {
565
+ try {
566
+ const apiInfo = await this.businessMapClient.getApiInfo();
567
+ return {
568
+ content: [{
569
+ type: 'text',
570
+ text: JSON.stringify(apiInfo, null, 2),
571
+ }],
572
+ };
573
+ }
574
+ catch (error) {
575
+ return {
576
+ content: [{
577
+ type: 'text',
578
+ text: `Error fetching API info: ${error instanceof Error ? error.message : 'Unknown error'}`,
579
+ }],
580
+ isError: true,
581
+ };
582
+ }
583
+ });
584
+ }
585
+ setupResources() {
586
+ // TODO: Implement resource endpoints for reading workspace/board/card data
587
+ // This would allow LLMs to access current state without performing actions
588
+ }
589
+ get server() {
590
+ return this.mcpServer;
591
+ }
592
+ }
593
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"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"}