@edicarlos.lds/businessmap-mcp 2.1.0 → 2.2.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 (40) hide show
  1. package/README.md +241 -49
  2. package/dist/client/businessmap-client.d.ts +17 -11
  3. package/dist/client/businessmap-client.d.ts.map +1 -1
  4. package/dist/client/businessmap-client.js +11 -2
  5. package/dist/client/businessmap-client.js.map +1 -1
  6. package/dist/client/modules/utility-client.d.ts +8 -1
  7. package/dist/client/modules/utility-client.d.ts.map +1 -1
  8. package/dist/client/modules/utility-client.js +11 -19
  9. package/dist/client/modules/utility-client.js.map +1 -1
  10. package/dist/index.d.ts +2 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +33 -16
  13. package/dist/index.js.map +1 -1
  14. package/dist/schemas/common-schemas.d.ts.map +1 -1
  15. package/dist/schemas/common-schemas.js +7 -4
  16. package/dist/schemas/common-schemas.js.map +1 -1
  17. package/dist/server/http.d.ts +6 -1
  18. package/dist/server/http.d.ts.map +1 -1
  19. package/dist/server/http.js +109 -56
  20. package/dist/server/http.js.map +1 -1
  21. package/dist/server/resources/board-resources.d.ts.map +1 -1
  22. package/dist/server/resources/board-resources.js +32 -19
  23. package/dist/server/resources/board-resources.js.map +1 -1
  24. package/dist/server/resources/card-resources.d.ts.map +1 -1
  25. package/dist/server/resources/card-resources.js +36 -20
  26. package/dist/server/resources/card-resources.js.map +1 -1
  27. package/dist/server/resources/workspace-resources.d.ts.map +1 -1
  28. package/dist/server/resources/workspace-resources.js +15 -10
  29. package/dist/server/resources/workspace-resources.js.map +1 -1
  30. package/dist/server/tools/board-tools.d.ts.map +1 -1
  31. package/dist/server/tools/board-tools.js +4 -4
  32. package/dist/server/tools/board-tools.js.map +1 -1
  33. package/dist/server/tools/card-tools.js.map +1 -1
  34. package/dist/server/tools/utility-tools.js +1 -1
  35. package/dist/server/tools/utility-tools.js.map +1 -1
  36. package/docs/LOGGING.md +169 -0
  37. package/docs/MIDDLEWARE.md +141 -0
  38. package/docs/RELEASE_PROCESS.md +146 -0
  39. package/docs/TOOLS.md +281 -0
  40. package/package.json +4 -3
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ export { startHttpServer, HttpServerOptions } from './server/http.js';
3
+ export { BusinessMapMcpServer } from './server/mcp-server.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AASA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -1,8 +1,12 @@
1
1
  #!/usr/bin/env node
2
+ import { fileURLToPath } from 'node:url';
3
+ import fs from 'node:fs';
2
4
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
5
  import { config, validateConfig } from './config/environment.js';
4
6
  import { BusinessMapMcpServer } from './server/mcp-server.js';
5
7
  import { logger } from './utils/logger.js';
8
+ export { startHttpServer } from './server/http.js';
9
+ export { BusinessMapMcpServer } from './server/mcp-server.js';
6
10
  async function initializeWithRetry(server) {
7
11
  logger.info('šŸ”„ Initializing connection to BusinessMap API...');
8
12
  let retryCount = 0;
@@ -61,21 +65,34 @@ async function main() {
61
65
  process.exit(1);
62
66
  }
63
67
  }
64
- // Handle graceful shutdown
65
- process.on('SIGINT', () => {
66
- logger.info('\nšŸ›‘ Shutting down BusinessMap MCP Server...');
67
- process.exit(0);
68
- });
69
- process.on('SIGTERM', () => {
70
- console.error('\nšŸ›‘ Shutting down BusinessMap MCP Server...');
71
- process.exit(0);
72
- });
73
- // Start the server
74
- try {
75
- await main();
76
- }
77
- catch (error) {
78
- console.error('šŸ’„ Unhandled error:', error);
79
- process.exit(1);
68
+ // Check if run directly
69
+ const getRealpath = (p) => {
70
+ try {
71
+ return fs.realpathSync(p);
72
+ }
73
+ catch {
74
+ return p;
75
+ }
76
+ };
77
+ const isMain = process.argv[1] && (getRealpath(process.argv[1]) === fileURLToPath(import.meta.url) ||
78
+ getRealpath(process.argv[1]).replace(/\.[jt]s$/, '') === fileURLToPath(import.meta.url).replace(/\.[jt]s$/, ''));
79
+ if (isMain) {
80
+ // Handle graceful shutdown
81
+ process.on('SIGINT', () => {
82
+ logger.info('\nšŸ›‘ Shutting down BusinessMap MCP Server...');
83
+ process.exit(0);
84
+ });
85
+ process.on('SIGTERM', () => {
86
+ logger.info('\nšŸ›‘ Shutting down BusinessMap MCP Server...');
87
+ process.exit(0);
88
+ });
89
+ // Start the server
90
+ try {
91
+ await main();
92
+ }
93
+ catch (error) {
94
+ console.error('šŸ’„ Unhandled error:', error);
95
+ process.exit(1);
96
+ }
80
97
  }
81
98
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"common-schemas.d.ts","sourceRoot":"","sources":["../../src/schemas/common-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAK3B,eAAO,MAAM,oBAAoB;;;;;CAKhC,CAAC;AAGF,eAAO,MAAM,gBAAgB;;;CAa5B,CAAC;AAGF,eAAO,MAAM,cAAc;;;;;CAqB1B,CAAC;AAGF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAI/B,CAAC;AAGH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;EAKrC,CAAC"}
1
+ {"version":3,"file":"common-schemas.d.ts","sourceRoot":"","sources":["../../src/schemas/common-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAK3B,eAAO,MAAM,oBAAoB;;;;;CAKhC,CAAC;AAGF,eAAO,MAAM,gBAAgB;;;CAgB5B,CAAC;AAGF,eAAO,MAAM,cAAc;;;;;CAqB1B,CAAC;AAGF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAI/B,CAAC;AAGH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;EAKrC,CAAC"}
@@ -11,29 +11,32 @@ export const dateTimeFilterSchema = {
11
11
  export const paginationSchema = {
12
12
  page: z
13
13
  .number()
14
+ .min(1)
14
15
  .optional()
15
16
  .describe('Results are always paginated and returned in pages. This parameter controls which page is returned'),
16
17
  per_page: z
17
18
  .number()
19
+ .min(1)
20
+ .max(1000)
18
21
  .optional()
19
22
  .describe('Controls how many results are returned per page. The default value is 200 and the maximum is 1000'),
20
23
  };
21
24
  // ID array filters
22
25
  export const idArrayFilters = {
23
26
  board_ids: z
24
- .array(z.number())
27
+ .array(z.number().min(1))
25
28
  .optional()
26
29
  .describe('A list of the board ids for which you want to get the results'),
27
30
  column_ids: z
28
- .array(z.number())
31
+ .array(z.number().min(1))
29
32
  .optional()
30
33
  .describe('A list of the column ids for which you want to get the results. Applied only if state parameter is active'),
31
34
  lane_ids: z
32
- .array(z.number())
35
+ .array(z.number().min(1))
33
36
  .optional()
34
37
  .describe('A list of the lane ids for which you want to get the results. Applied only if state parameter is active'),
35
38
  workflow_ids: z
36
- .array(z.number())
39
+ .array(z.number().min(1))
37
40
  .optional()
38
41
  .describe('A list of the workflows ids for which you want to get the results'),
39
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"common-schemas.js","sourceRoot":"","sources":["../../src/schemas/common-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,0DAA0D;AAE1D,wBAAwB;AACxB,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC;AAEF,aAAa;AACb,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,oGAAoG,CACrG;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,mGAAmG,CACpG;CACJ,CAAC;AAEF,mBAAmB;AACnB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE,CAAC;SACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,+DAA+D,CAAC;IAC5E,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,2GAA2G,CAC5G;IACH,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,yGAAyG,CAC1G;IACH,YAAY,EAAE,CAAC;SACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CAAC,mEAAmE,CAAC;CACjF,CAAC;AAEF,yBAAyB;AACzB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAEH,iCAAiC;AACjC,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC"}
1
+ {"version":3,"file":"common-schemas.js","sourceRoot":"","sources":["../../src/schemas/common-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,0DAA0D;AAE1D,wBAAwB;AACxB,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC;AAEF,aAAa;AACb,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACP,oGAAoG,CACrG;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,mGAAmG,CACpG;CACJ,CAAC;AAEF,mBAAmB;AACnB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE,CAAC;SACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxB,QAAQ,EAAE;SACV,QAAQ,CAAC,+DAA+D,CAAC;IAC5E,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxB,QAAQ,EAAE;SACV,QAAQ,CACP,2GAA2G,CAC5G;IACH,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxB,QAAQ,EAAE;SACV,QAAQ,CACP,yGAAyG,CAC1G;IACH,YAAY,EAAE,CAAC;SACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxB,QAAQ,EAAE;SACV,QAAQ,CAAC,mEAAmE,CAAC;CACjF,CAAC;AAEF,yBAAyB;AACzB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAEH,iCAAiC;AACjC,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC"}
@@ -1,2 +1,7 @@
1
- export declare function startHttpServer(): Promise<void>;
1
+ import { Server } from 'node:http';
2
+ import express from 'express';
3
+ export interface HttpServerOptions {
4
+ middlewares?: express.RequestHandler[];
5
+ }
6
+ export declare function startHttpServer(options?: HttpServerOptions): Promise<Server>;
2
7
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAaA,wBAAsB,eAAe,kBA4GpC"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,OAAO,MAAM,SAAS,CAAC;AAwB9B,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;CACxC;AAED,wBAAsB,eAAe,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4KtF"}
@@ -5,8 +5,20 @@ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/
5
5
  import { BusinessMapMcpServer } from './mcp-server.js';
6
6
  import { config } from '../config/environment.js';
7
7
  import { logger } from '../utils/logger.js';
8
- export async function startHttpServer() {
8
+ const SESSION_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
9
+ async function closeSession(id, session) {
10
+ try {
11
+ await session.server.server.close();
12
+ }
13
+ catch (error) {
14
+ logger.warn(`Error while closing MCP session ${id}:`, error);
15
+ }
16
+ logger.info(`MCP session closed: ${id}`);
17
+ }
18
+ export async function startHttpServer(options = {}) {
9
19
  const app = express();
20
+ // Disable X-Powered-By header to prevent disclosing version/framework info
21
+ app.disable('x-powered-by');
10
22
  // Parse JSON bodies (required for StreamableHTTP transport)
11
23
  app.use(express.json());
12
24
  // Enable CORS with configured allowed origins
@@ -16,71 +28,112 @@ export async function startHttpServer() {
16
28
  allowedHeaders: ['Content-Type', 'mcp-session-id', 'last-event-id'],
17
29
  exposedHeaders: ['mcp-session-id'],
18
30
  }));
31
+ // Apply custom middlewares (e.g. for authentication/authorization)
32
+ if (options.middlewares && options.middlewares.length > 0) {
33
+ options.middlewares.forEach((middleware) => {
34
+ app.use(middleware);
35
+ });
36
+ }
37
+ // Request logging middleware
38
+ app.use((req, _res, next) => {
39
+ const sessionId = req.headers['mcp-session-id'];
40
+ const sessionSuffix = sessionId ? ` [session: ${sessionId}]` : '';
41
+ logger.debug(`${req.method} ${req.path}${sessionSuffix}`);
42
+ next();
43
+ });
19
44
  const sessions = new Map();
45
+ // Periodic cleanup of inactive sessions
46
+ const cleanupInterval = setInterval(async () => {
47
+ const now = Date.now();
48
+ for (const [id, session] of sessions) {
49
+ if (now - session.lastActivityAt > SESSION_TIMEOUT_MS) {
50
+ logger.info(`Closing idle MCP session (timeout): ${id}`);
51
+ sessions.delete(id);
52
+ await closeSession(id, session);
53
+ }
54
+ }
55
+ }, 60_000); // check every minute
56
+ // Prevent the interval from blocking process exit
57
+ cleanupInterval.unref();
58
+ const handleNewSession = async (req, res, logResponse, sendError) => {
59
+ const sessionServer = new BusinessMapMcpServer();
60
+ // New session: create a fresh transport
61
+ const transport = new StreamableHTTPServerTransport({
62
+ sessionIdGenerator: () => randomUUID(),
63
+ onsessioninitialized: (id) => {
64
+ sessions.set(id, { transport, server: sessionServer, lastActivityAt: Date.now() });
65
+ logger.info(`New MCP session initialized: ${id}`);
66
+ },
67
+ onsessionclosed: async (id) => {
68
+ const session = sessions.get(id);
69
+ sessions.delete(id);
70
+ if (session) {
71
+ await closeSession(id, session);
72
+ }
73
+ },
74
+ allowedHosts: config.server.allowedHosts,
75
+ allowedOrigins: config.server.allowedOrigins,
76
+ enableDnsRebindingProtection: true,
77
+ });
78
+ try {
79
+ await sessionServer.server.connect(transport);
80
+ await transport.handleRequest(req, res, req.body);
81
+ logResponse(res.statusCode);
82
+ }
83
+ catch (error) {
84
+ logger.error('Failed to handle new MCP session:', error);
85
+ try {
86
+ await sessionServer.server.close();
87
+ }
88
+ catch (closeError) {
89
+ logger.warn('Error while cleaning up failed session:', closeError);
90
+ }
91
+ if (!res.headersSent) {
92
+ sendError(500, 'Failed to initialize MCP session');
93
+ }
94
+ }
95
+ };
96
+ const handleExistingSession = async (req, res, sessionId, logResponse, sendError) => {
97
+ const session = sessions.get(sessionId);
98
+ if (!session) {
99
+ sendError(404, `Session not found: ${sessionId}`);
100
+ return;
101
+ }
102
+ session.lastActivityAt = Date.now();
103
+ try {
104
+ await session.transport.handleRequest(req, res, req.body);
105
+ logResponse(res.statusCode);
106
+ }
107
+ catch (error) {
108
+ logger.error(`Error handling request for session ${sessionId}:`, error);
109
+ if (!res.headersSent) {
110
+ sendError(500, 'Internal server error');
111
+ }
112
+ }
113
+ };
20
114
  // Single /mcp endpoint handles GET, POST and DELETE (Streamable HTTP spec 2025-03-26)
21
115
  const handleMcpRequest = async (req, res) => {
116
+ const start = Date.now();
22
117
  const sessionId = req.headers['mcp-session-id'];
118
+ const logResponse = (statusCode) => {
119
+ const duration = Date.now() - start;
120
+ const sessionSuffix = sessionId ? ` [session: ${sessionId}]` : '';
121
+ logger.debug(`${req.method} ${req.path} -> ${statusCode} (${duration}ms)${sessionSuffix}`);
122
+ };
123
+ const sendError = (statusCode, message) => {
124
+ logResponse(statusCode);
125
+ res.status(statusCode).json({ error: message });
126
+ };
23
127
  if (req.method === 'POST' && !sessionId) {
24
- const sessionServer = new BusinessMapMcpServer();
25
- // New session: create a fresh transport
26
- const transport = new StreamableHTTPServerTransport({
27
- sessionIdGenerator: () => randomUUID(),
28
- onsessioninitialized: (id) => {
29
- sessions.set(id, { transport, server: sessionServer });
30
- logger.info(`New MCP session initialized: ${id}`);
31
- },
32
- onsessionclosed: async (id) => {
33
- const session = sessions.get(id);
34
- sessions.delete(id);
35
- try {
36
- await session?.server.server.close();
37
- }
38
- catch (error) {
39
- logger.warn(`Error while closing MCP session ${id}:`, error);
40
- }
41
- logger.info(`MCP session closed: ${id}`);
42
- },
43
- allowedHosts: config.server.allowedHosts,
44
- allowedOrigins: config.server.allowedOrigins,
45
- enableDnsRebindingProtection: true,
46
- });
47
- try {
48
- await sessionServer.server.connect(transport);
49
- await transport.handleRequest(req, res, req.body);
50
- }
51
- catch (error) {
52
- logger.error('Failed to handle new MCP session:', error);
53
- try {
54
- await sessionServer.server.close();
55
- }
56
- catch (closeError) {
57
- logger.warn('Error while cleaning up failed session:', closeError);
58
- }
59
- if (!res.headersSent) {
60
- res.status(500).json({ error: 'Failed to initialize MCP session' });
61
- }
62
- }
128
+ await handleNewSession(req, res, logResponse, sendError);
63
129
  return;
64
130
  }
65
131
  // Existing session
66
132
  if (sessionId) {
67
- const session = sessions.get(sessionId);
68
- if (!session) {
69
- res.status(404).json({ error: `Session not found: ${sessionId}` });
70
- return;
71
- }
72
- try {
73
- await session.transport.handleRequest(req, res, req.body);
74
- }
75
- catch (error) {
76
- logger.error(`Error handling request for session ${sessionId}:`, error);
77
- if (!res.headersSent) {
78
- res.status(500).json({ error: 'Internal server error' });
79
- }
80
- }
133
+ await handleExistingSession(req, res, sessionId, logResponse, sendError);
81
134
  return;
82
135
  }
83
- res.status(400).json({ error: 'Missing mcp-session-id header' });
136
+ sendError(400, 'Missing mcp-session-id header');
84
137
  };
85
138
  app.get('/mcp', handleMcpRequest);
86
139
  app.post('/mcp', handleMcpRequest);
@@ -90,7 +143,7 @@ export async function startHttpServer() {
90
143
  res.json({ status: 'ok', version: config.server.version });
91
144
  });
92
145
  const port = config.server.port;
93
- app.listen(port, () => {
146
+ return app.listen(port, () => {
94
147
  logger.success(`HTTP Server running on port ${port}`);
95
148
  logger.info(`MCP Endpoint: http://localhost:${port}/mcp`);
96
149
  logger.info(`Health Check: http://localhost:${port}/health`);
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"board-resources.d.ts","sourceRoot":"","sources":["../../../src/server/resources/board-resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,qBAAa,oBAAqB,YAAW,mBAAmB;IAC5D,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAsCxE"}
1
+ {"version":3,"file":"board-resources.d.ts","sourceRoot":"","sources":["../../../src/server/resources/board-resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,qBAAa,oBAAqB,YAAW,mBAAmB;IAC5D,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAiDxE"}
@@ -3,28 +3,41 @@ export class BoardResourceHandler {
3
3
  registerResources(server, client) {
4
4
  // List all boards
5
5
  server.registerResource('boards', new ResourceTemplate('businessmap://boards', { list: undefined }), {}, async (uri) => {
6
- const boards = await client.getBoards();
7
- return {
8
- contents: [
9
- {
10
- uri: uri.href,
11
- text: JSON.stringify(boards, null, 2),
12
- },
13
- ],
14
- };
6
+ try {
7
+ const boards = await client.getBoards();
8
+ return {
9
+ contents: [
10
+ {
11
+ uri: uri.href,
12
+ text: JSON.stringify(boards, null, 2),
13
+ },
14
+ ],
15
+ };
16
+ }
17
+ catch (error) {
18
+ throw new Error(`Failed to fetch boards: ${error instanceof Error ? error.message : 'Unknown error'}`);
19
+ }
15
20
  });
16
21
  // Get board details
17
22
  server.registerResource('board', new ResourceTemplate('businessmap://boards/{board_id}', { list: undefined }), {}, async (uri, variables) => {
18
- const boardId = parseInt(variables.board_id);
19
- const board = await client.getBoard(boardId);
20
- return {
21
- contents: [
22
- {
23
- uri: uri.href,
24
- text: JSON.stringify(board, null, 2),
25
- },
26
- ],
27
- };
23
+ try {
24
+ const boardId = parseInt(variables.board_id);
25
+ if (isNaN(boardId)) {
26
+ throw new Error(`Invalid board_id: "${variables.board_id}" is not a valid number`);
27
+ }
28
+ const board = await client.getBoard(boardId);
29
+ return {
30
+ contents: [
31
+ {
32
+ uri: uri.href,
33
+ text: JSON.stringify(board, null, 2),
34
+ },
35
+ ],
36
+ };
37
+ }
38
+ catch (error) {
39
+ throw new Error(`Failed to fetch board: ${error instanceof Error ? error.message : 'Unknown error'}`);
40
+ }
28
41
  });
29
42
  }
30
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"board-resources.js","sourceRoot":"","sources":["../../../src/server/resources/board-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAK3E,MAAM,OAAO,oBAAoB;IAC7B,iBAAiB,CAAC,MAAiB,EAAE,MAAyB;QAC1D,kBAAkB;QAClB,MAAM,CAAC,gBAAgB,CACnB,QAAQ,EACR,IAAI,gBAAgB,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACjE,EAAE,EACF,KAAK,EAAE,GAAG,EAAE,EAAE;YACV,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;YACxC,OAAO;gBACH,QAAQ,EAAE;oBACN;wBACI,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;qBACxC;iBACJ;aACJ,CAAC;QACN,CAAC,CACJ,CAAC;QAEF,oBAAoB;QACpB,MAAM,CAAC,gBAAgB,CACnB,OAAO,EACP,IAAI,gBAAgB,CAAC,iCAAiC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAC5E,EAAE,EACF,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;YACrB,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAkB,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO;gBACH,QAAQ,EAAE;oBACN;wBACI,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;qBACvC;iBACJ;aACJ,CAAC;QACN,CAAC,CACJ,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"board-resources.js","sourceRoot":"","sources":["../../../src/server/resources/board-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAK3E,MAAM,OAAO,oBAAoB;IAC7B,iBAAiB,CAAC,MAAiB,EAAE,MAAyB;QAC1D,kBAAkB;QAClB,MAAM,CAAC,gBAAgB,CACnB,QAAQ,EACR,IAAI,gBAAgB,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACjE,EAAE,EACF,KAAK,EAAE,GAAG,EAAE,EAAE;YACV,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;gBACxC,OAAO;oBACH,QAAQ,EAAE;wBACN;4BACI,GAAG,EAAE,GAAG,CAAC,IAAI;4BACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;yBACxC;qBACJ;iBACJ,CAAC;YACN,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YAC3G,CAAC;QACL,CAAC,CACJ,CAAC;QAEF,oBAAoB;QACpB,MAAM,CAAC,gBAAgB,CACnB,OAAO,EACP,IAAI,gBAAgB,CAAC,iCAAiC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAC5E,EAAE,EACF,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;YACrB,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAkB,CAAC,CAAC;gBACvD,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,CAAC,QAAQ,yBAAyB,CAAC,CAAC;gBACvF,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC7C,OAAO;oBACH,QAAQ,EAAE;wBACN;4BACI,GAAG,EAAE,GAAG,CAAC,IAAI;4BACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;yBACvC;qBACJ;iBACJ,CAAC;YACN,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YAC1G,CAAC;QACL,CAAC,CACJ,CAAC;IACN,CAAC;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"card-resources.d.ts","sourceRoot":"","sources":["../../../src/server/resources/card-resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,qBAAa,mBAAoB,YAAW,mBAAmB;IAC3D,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAuCxE"}
1
+ {"version":3,"file":"card-resources.d.ts","sourceRoot":"","sources":["../../../src/server/resources/card-resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,qBAAa,mBAAoB,YAAW,mBAAmB;IAC3D,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAqDxE"}
@@ -4,30 +4,46 @@ export class CardResourceHandler {
4
4
  // List cards for a specific board
5
5
  server.registerResource('cards', new ResourceTemplate('businessmap://boards/{board_id}/cards', { list: undefined }), {}, // Added empty metadata object
6
6
  async (uri, variables) => {
7
- const boardId = parseInt(variables.board_id);
8
- const cards = await client.getCards(boardId);
9
- return {
10
- contents: [
11
- {
12
- uri: uri.href,
13
- text: JSON.stringify(cards, null, 2),
14
- },
15
- ],
16
- };
7
+ try {
8
+ const boardId = parseInt(variables.board_id);
9
+ if (isNaN(boardId)) {
10
+ throw new Error(`Invalid board_id: "${variables.board_id}" is not a valid number`);
11
+ }
12
+ const cards = await client.getCards(boardId);
13
+ return {
14
+ contents: [
15
+ {
16
+ uri: uri.href,
17
+ text: JSON.stringify(cards, null, 2),
18
+ },
19
+ ],
20
+ };
21
+ }
22
+ catch (error) {
23
+ throw new Error(`Failed to fetch cards: ${error instanceof Error ? error.message : 'Unknown error'}`);
24
+ }
17
25
  });
18
26
  // Get card details
19
27
  server.registerResource('card', new ResourceTemplate('businessmap://cards/{card_id}', { list: undefined }), {}, // Added empty metadata object
20
28
  async (uri, variables) => {
21
- const cardId = parseInt(variables.card_id);
22
- const card = await client.getCard(cardId);
23
- return {
24
- contents: [
25
- {
26
- uri: uri.href,
27
- text: JSON.stringify(card, null, 2),
28
- },
29
- ],
30
- };
29
+ try {
30
+ const cardId = parseInt(variables.card_id);
31
+ if (isNaN(cardId)) {
32
+ throw new Error(`Invalid card_id: "${variables.card_id}" is not a valid number`);
33
+ }
34
+ const card = await client.getCard(cardId);
35
+ return {
36
+ contents: [
37
+ {
38
+ uri: uri.href,
39
+ text: JSON.stringify(card, null, 2),
40
+ },
41
+ ],
42
+ };
43
+ }
44
+ catch (error) {
45
+ throw new Error(`Failed to fetch card: ${error instanceof Error ? error.message : 'Unknown error'}`);
46
+ }
31
47
  });
32
48
  }
33
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"card-resources.js","sourceRoot":"","sources":["../../../src/server/resources/card-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAK3E,MAAM,OAAO,mBAAmB;IAC5B,iBAAiB,CAAC,MAAiB,EAAE,MAAyB;QAC1D,kCAAkC;QAClC,MAAM,CAAC,gBAAgB,CACnB,OAAO,EACP,IAAI,gBAAgB,CAAC,uCAAuC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAClF,EAAE,EAAE,8BAA8B;QAClC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;YACrB,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAkB,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO;gBACH,QAAQ,EAAE;oBACN;wBACI,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;qBACvC;iBACJ;aACJ,CAAC;QACN,CAAC,CACJ,CAAC;QAEF,mBAAmB;QACnB,MAAM,CAAC,gBAAgB,CACnB,MAAM,EACN,IAAI,gBAAgB,CAAC,+BAA+B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAC1E,EAAE,EAAE,8BAA8B;QAClC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;YACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAiB,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1C,OAAO;gBACH,QAAQ,EAAE;oBACN;wBACI,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;qBACtC;iBACJ;aACJ,CAAC;QACN,CAAC,CACJ,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"card-resources.js","sourceRoot":"","sources":["../../../src/server/resources/card-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAK3E,MAAM,OAAO,mBAAmB;IAC5B,iBAAiB,CAAC,MAAiB,EAAE,MAAyB;QAC1D,kCAAkC;QAClC,MAAM,CAAC,gBAAgB,CACnB,OAAO,EACP,IAAI,gBAAgB,CAAC,uCAAuC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAClF,EAAE,EAAE,8BAA8B;QAClC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;YACrB,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAkB,CAAC,CAAC;gBACvD,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,CAAC,QAAQ,yBAAyB,CAAC,CAAC;gBACvF,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC7C,OAAO;oBACH,QAAQ,EAAE;wBACN;4BACI,GAAG,EAAE,GAAG,CAAC,IAAI;4BACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;yBACvC;qBACJ;iBACJ,CAAC;YACN,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YAC1G,CAAC;QACL,CAAC,CACJ,CAAC;QAEF,mBAAmB;QACnB,MAAM,CAAC,gBAAgB,CACnB,MAAM,EACN,IAAI,gBAAgB,CAAC,+BAA+B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAC1E,EAAE,EAAE,8BAA8B;QAClC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;YACrB,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAiB,CAAC,CAAC;gBACrD,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CAAC,qBAAqB,SAAS,CAAC,OAAO,yBAAyB,CAAC,CAAC;gBACrF,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC1C,OAAO;oBACH,QAAQ,EAAE;wBACN;4BACI,GAAG,EAAE,GAAG,CAAC,IAAI;4BACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;yBACtC;qBACJ;iBACJ,CAAC;YACN,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YACzG,CAAC;QACL,CAAC,CACJ,CAAC;IACN,CAAC;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-resources.d.ts","sourceRoot":"","sources":["../../../src/server/resources/workspace-resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,qBAAa,wBAAyB,YAAW,mBAAmB;IAChE,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAkBxE"}
1
+ {"version":3,"file":"workspace-resources.d.ts","sourceRoot":"","sources":["../../../src/server/resources/workspace-resources.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,qBAAa,wBAAyB,YAAW,mBAAmB;IAChE,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAsBxE"}
@@ -1,16 +1,21 @@
1
1
  import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  export class WorkspaceResourceHandler {
3
3
  registerResources(server, client) {
4
- server.registerResource('workspaces', new ResourceTemplate('businessmap://workspaces', { list: undefined }), {}, async (uri, variables) => {
5
- const workspaces = await client.getWorkspaces();
6
- return {
7
- contents: [
8
- {
9
- uri: uri.href,
10
- text: JSON.stringify(workspaces, null, 2),
11
- },
12
- ],
13
- };
4
+ server.registerResource('workspaces', new ResourceTemplate('businessmap://workspaces', { list: undefined }), {}, async (uri) => {
5
+ try {
6
+ const workspaces = await client.getWorkspaces();
7
+ return {
8
+ contents: [
9
+ {
10
+ uri: uri.href,
11
+ text: JSON.stringify(workspaces, null, 2),
12
+ },
13
+ ],
14
+ };
15
+ }
16
+ catch (error) {
17
+ throw new Error(`Failed to fetch workspaces: ${error instanceof Error ? error.message : 'Unknown error'}`);
18
+ }
14
19
  });
15
20
  }
16
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-resources.js","sourceRoot":"","sources":["../../../src/server/resources/workspace-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAK3E,MAAM,OAAO,wBAAwB;IACjC,iBAAiB,CAAC,MAAiB,EAAE,MAAyB;QAC1D,MAAM,CAAC,gBAAgB,CACnB,YAAY,EACZ,IAAI,gBAAgB,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACrE,EAAE,EACF,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;YACrB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;YAChD,OAAO;gBACH,QAAQ,EAAE;oBACN;wBACI,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;qBAC5C;iBACJ;aACJ,CAAC;QACN,CAAC,CACJ,CAAC;IACN,CAAC;CACJ"}
1
+ {"version":3,"file":"workspace-resources.js","sourceRoot":"","sources":["../../../src/server/resources/workspace-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAK3E,MAAM,OAAO,wBAAwB;IACjC,iBAAiB,CAAC,MAAiB,EAAE,MAAyB;QAC1D,MAAM,CAAC,gBAAgB,CACnB,YAAY,EACZ,IAAI,gBAAgB,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACrE,EAAE,EACF,KAAK,EAAE,GAAG,EAAE,EAAE;YACV,IAAI,CAAC;gBACD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;gBAChD,OAAO;oBACH,QAAQ,EAAE;wBACN;4BACI,GAAG,EAAE,GAAG,CAAC,IAAI;4BACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC5C;qBACJ;iBACJ,CAAC;YACN,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;YAC/G,CAAC;QACL,CAAC,CACJ,CAAC;IACN,CAAC;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"board-tools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/board-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAevE,OAAO,EAAE,eAAe,EAA8C,MAAM,gBAAgB,CAAC;AAE7F,qBAAa,gBAAiB,YAAW,eAAe;IACtD,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI;IAiBxF,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,mBAAmB;YA6Bb,eAAe;YAef,uBAAuB;YAoBvB,iBAAiB;YAiCjB,YAAY;YAKZ,qBAAqB;IAmBnC,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,gCAAgC;IAqBxC,OAAO,CAAC,oBAAoB;IAiC5B,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,oBAAoB;CAkB7B"}
1
+ {"version":3,"file":"board-tools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/board-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAgBvE,OAAO,EAAE,eAAe,EAA8C,MAAM,gBAAgB,CAAC;AAE7F,qBAAa,gBAAiB,YAAW,eAAe;IACtD,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI;IAiBxF,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,mBAAmB;YA6Bb,eAAe;YAef,uBAAuB;YAoBvB,iBAAiB;YAiCjB,YAAY;YAKZ,qBAAqB;IAmBnC,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,gCAAgC;IAqBxC,OAAO,CAAC,oBAAoB;IAiC5B,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,oBAAoB;CAkB7B"}