@edicarlos.lds/businessmap-mcp 1.7.0 → 2.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.
- package/README.md +11 -7
- package/dist/client/modules/index.d.ts +2 -1
- package/dist/client/modules/index.d.ts.map +1 -1
- package/dist/client/modules/index.js.map +1 -1
- package/dist/config/environment.d.ts +3 -1
- package/dist/config/environment.d.ts.map +1 -1
- package/dist/config/environment.js +37 -6
- package/dist/config/environment.js.map +1 -1
- package/dist/index.js +40 -32
- package/dist/index.js.map +1 -1
- package/dist/schemas/board-schemas.d.ts +1 -1
- package/dist/schemas/board-schemas.d.ts.map +1 -1
- package/dist/schemas/board-schemas.js +1 -1
- package/dist/schemas/board-schemas.js.map +1 -1
- package/dist/schemas/card-schemas.d.ts +1 -1
- package/dist/schemas/card-schemas.d.ts.map +1 -1
- package/dist/schemas/card-schemas.js +1 -1
- package/dist/schemas/card-schemas.js.map +1 -1
- package/dist/schemas/common-schemas.d.ts +1 -1
- package/dist/schemas/common-schemas.d.ts.map +1 -1
- package/dist/schemas/common-schemas.js +1 -1
- package/dist/schemas/common-schemas.js.map +1 -1
- package/dist/schemas/custom-field-schemas.d.ts +1 -1
- package/dist/schemas/custom-field-schemas.d.ts.map +1 -1
- package/dist/schemas/custom-field-schemas.js +1 -1
- package/dist/schemas/custom-field-schemas.js.map +1 -1
- package/dist/schemas/user-schemas.d.ts +1 -1
- package/dist/schemas/user-schemas.d.ts.map +1 -1
- package/dist/schemas/user-schemas.js +1 -1
- package/dist/schemas/user-schemas.js.map +1 -1
- package/dist/schemas/utility-schemas.d.ts +1 -1
- package/dist/schemas/utility-schemas.d.ts.map +1 -1
- package/dist/schemas/utility-schemas.js +1 -1
- package/dist/schemas/utility-schemas.js.map +1 -1
- package/dist/schemas/workflow-schemas.d.ts +1 -1
- package/dist/schemas/workflow-schemas.d.ts.map +1 -1
- package/dist/schemas/workflow-schemas.js +1 -1
- package/dist/schemas/workflow-schemas.js.map +1 -1
- package/dist/schemas/workspace-schemas.d.ts +1 -1
- package/dist/schemas/workspace-schemas.d.ts.map +1 -1
- package/dist/schemas/workspace-schemas.js +1 -1
- package/dist/schemas/workspace-schemas.js.map +1 -1
- package/dist/server/http.d.ts +1 -2
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +82 -42
- package/dist/server/http.js.map +1 -1
- package/dist/server/mcp-server.d.ts +3 -2
- package/dist/server/mcp-server.d.ts.map +1 -1
- package/dist/server/mcp-server.js +21 -2
- package/dist/server/mcp-server.js.map +1 -1
- package/dist/server/prompts/base-prompt.d.ts +14 -0
- package/dist/server/prompts/base-prompt.d.ts.map +1 -0
- package/dist/server/prompts/base-prompt.js +2 -0
- package/dist/server/prompts/base-prompt.js.map +1 -0
- package/dist/server/prompts/board-prompts.d.ts +9 -0
- package/dist/server/prompts/board-prompts.d.ts.map +1 -0
- package/dist/server/prompts/board-prompts.js +101 -0
- package/dist/server/prompts/board-prompts.js.map +1 -0
- package/dist/server/prompts/card-prompts.d.ts +8 -0
- package/dist/server/prompts/card-prompts.d.ts.map +1 -0
- package/dist/server/prompts/card-prompts.js +47 -0
- package/dist/server/prompts/card-prompts.js.map +1 -0
- package/dist/server/prompts/index.d.ts +5 -0
- package/dist/server/prompts/index.d.ts.map +1 -0
- package/dist/server/prompts/index.js +4 -0
- package/dist/server/prompts/index.js.map +1 -0
- package/dist/server/prompts/workspace-prompts.d.ts +8 -0
- package/dist/server/prompts/workspace-prompts.d.ts.map +1 -0
- package/dist/server/prompts/workspace-prompts.js +59 -0
- package/dist/server/prompts/workspace-prompts.js.map +1 -0
- package/dist/server/resources/base-resource.d.ts +18 -0
- package/dist/server/resources/base-resource.d.ts.map +1 -0
- package/dist/server/resources/base-resource.js +10 -0
- package/dist/server/resources/base-resource.js.map +1 -0
- package/dist/server/resources/board-resources.d.ts +7 -0
- package/dist/server/resources/board-resources.d.ts.map +1 -0
- package/dist/server/resources/board-resources.js +31 -0
- package/dist/server/resources/board-resources.js.map +1 -0
- package/dist/server/resources/card-resources.d.ts +7 -0
- package/dist/server/resources/card-resources.d.ts.map +1 -0
- package/dist/server/resources/card-resources.js +34 -0
- package/dist/server/resources/card-resources.js.map +1 -0
- package/dist/server/resources/index.d.ts +5 -0
- package/dist/server/resources/index.d.ts.map +1 -0
- package/dist/server/resources/index.js +5 -0
- package/dist/server/resources/index.js.map +1 -0
- package/dist/server/resources/workspace-resources.d.ts +7 -0
- package/dist/server/resources/workspace-resources.d.ts.map +1 -0
- package/dist/server/resources/workspace-resources.js +17 -0
- package/dist/server/resources/workspace-resources.js.map +1 -0
- package/dist/server/tools/base-tool.d.ts +1 -1
- package/dist/server/tools/base-tool.d.ts.map +1 -1
- package/dist/server/tools/base-tool.js.map +1 -1
- package/dist/server/tools/board-tools.d.ts.map +1 -1
- package/dist/server/tools/board-tools.js +8 -0
- package/dist/server/tools/board-tools.js.map +1 -1
- package/dist/server/tools/card-tools.d.ts.map +1 -1
- package/dist/server/tools/card-tools.js +23 -0
- package/dist/server/tools/card-tools.js.map +1 -1
- package/dist/server/tools/custom-field-tools.d.ts.map +1 -1
- package/dist/server/tools/custom-field-tools.js +1 -0
- package/dist/server/tools/custom-field-tools.js.map +1 -1
- package/dist/server/tools/user-tools.d.ts.map +1 -1
- package/dist/server/tools/user-tools.js +3 -0
- package/dist/server/tools/user-tools.js.map +1 -1
- package/dist/server/tools/utility-tools.d.ts.map +1 -1
- package/dist/server/tools/utility-tools.js +2 -0
- package/dist/server/tools/utility-tools.js.map +1 -1
- package/dist/server/tools/workflow-tools.d.ts.map +1 -1
- package/dist/server/tools/workflow-tools.js +2 -0
- package/dist/server/tools/workflow-tools.js.map +1 -1
- package/dist/server/tools/workspace-tools.d.ts.map +1 -1
- package/dist/server/tools/workspace-tools.js +3 -0
- package/dist/server/tools/workspace-tools.js.map +1 -1
- package/dist/utils/logger.d.ts +5 -5
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/package.json +4 -5
package/dist/server/http.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAaA,wBAAsB,eAAe,kBA4GpC"}
|
package/dist/server/http.js
CHANGED
|
@@ -1,61 +1,101 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
1
2
|
import express from 'express';
|
|
2
3
|
import cors from 'cors';
|
|
3
|
-
import {
|
|
4
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
5
|
+
import { BusinessMapMcpServer } from './mcp-server.js';
|
|
4
6
|
import { config } from '../config/environment.js';
|
|
5
7
|
import { logger } from '../utils/logger.js';
|
|
6
|
-
export async function startHttpServer(
|
|
8
|
+
export async function startHttpServer() {
|
|
7
9
|
const app = express();
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
10
|
+
// Parse JSON bodies (required for StreamableHTTP transport)
|
|
11
|
+
app.use(express.json());
|
|
12
|
+
// Enable CORS with configured allowed origins
|
|
13
|
+
app.use(cors({
|
|
14
|
+
origin: config.server.allowedOrigins,
|
|
15
|
+
methods: ['GET', 'POST', 'DELETE', 'OPTIONS'],
|
|
16
|
+
allowedHeaders: ['Content-Type', 'mcp-session-id', 'last-event-id'],
|
|
17
|
+
exposedHeaders: ['mcp-session-id'],
|
|
18
|
+
}));
|
|
19
|
+
const sessions = new Map();
|
|
20
|
+
// Single /mcp endpoint handles GET, POST and DELETE (Streamable HTTP spec 2025-03-26)
|
|
21
|
+
const handleMcpRequest = async (req, res) => {
|
|
22
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
23
|
+
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
|
+
}
|
|
32
62
|
}
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
// Set up message endpoint
|
|
36
|
-
app.post('/message', async (req, res) => {
|
|
37
|
-
const sessionId = req.query.sessionId;
|
|
38
|
-
if (!sessionId) {
|
|
39
|
-
res.status(400).send('Missing sessionId query parameter');
|
|
40
63
|
return;
|
|
41
64
|
}
|
|
42
|
-
|
|
43
|
-
if (
|
|
44
|
-
|
|
65
|
+
// Existing session
|
|
66
|
+
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
|
+
}
|
|
45
81
|
return;
|
|
46
82
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
83
|
+
res.status(400).json({ error: 'Missing mcp-session-id header' });
|
|
84
|
+
};
|
|
85
|
+
app.get('/mcp', handleMcpRequest);
|
|
86
|
+
app.post('/mcp', handleMcpRequest);
|
|
87
|
+
app.delete('/mcp', handleMcpRequest);
|
|
50
88
|
// Health check endpoint
|
|
51
|
-
app.get('/health', (
|
|
89
|
+
app.get('/health', (_req, res) => {
|
|
52
90
|
res.json({ status: 'ok', version: config.server.version });
|
|
53
91
|
});
|
|
54
92
|
const port = config.server.port;
|
|
55
93
|
app.listen(port, () => {
|
|
56
94
|
logger.success(`HTTP Server running on port ${port}`);
|
|
57
|
-
logger.info(`
|
|
58
|
-
logger.info(`
|
|
95
|
+
logger.info(`MCP Endpoint: http://localhost:${port}/mcp`);
|
|
96
|
+
logger.info(`Health Check: http://localhost:${port}/health`);
|
|
97
|
+
logger.info(`Allowed origins: ${config.server.allowedOrigins.join(', ')}`);
|
|
98
|
+
logger.info(`Allowed hosts: ${config.server.allowedHosts.join(', ')}`);
|
|
59
99
|
});
|
|
60
100
|
}
|
|
61
101
|
//# sourceMappingURL=http.js.map
|
package/dist/server/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
export declare class BusinessMapMcpServer {
|
|
3
|
-
private mcpServer;
|
|
4
|
-
private businessMapClient;
|
|
3
|
+
private readonly mcpServer;
|
|
4
|
+
private readonly businessMapClient;
|
|
5
5
|
constructor();
|
|
6
6
|
/**
|
|
7
7
|
* Initialize the server by verifying the BusinessMap API connection
|
|
@@ -9,6 +9,7 @@ export declare class BusinessMapMcpServer {
|
|
|
9
9
|
initialize(): Promise<void>;
|
|
10
10
|
private setupTools;
|
|
11
11
|
private setupResources;
|
|
12
|
+
private setupPrompts;
|
|
12
13
|
get server(): McpServer;
|
|
13
14
|
}
|
|
14
15
|
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuBpE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;;IActD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,YAAY;IAYpB,IAAI,MAAM,IAAI,SAAS,CAEtB;CACF"}
|
|
@@ -2,6 +2,8 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
2
2
|
import { BusinessMapClient } from '../client/businessmap-client.js';
|
|
3
3
|
import { config } from '../config/environment.js';
|
|
4
4
|
import { BoardToolHandler, CardToolHandler, CustomFieldToolHandler, UserToolHandler, UtilityToolHandler, WorkflowToolHandler, WorkspaceToolHandler, } from './tools/index.js';
|
|
5
|
+
import { BoardResourceHandler, CardResourceHandler, WorkspaceResourceHandler, } from './resources/index.js';
|
|
6
|
+
import { BoardPromptHandler, CardPromptHandler, WorkspacePromptHandler, } from './prompts/index.js';
|
|
5
7
|
export class BusinessMapMcpServer {
|
|
6
8
|
mcpServer;
|
|
7
9
|
businessMapClient;
|
|
@@ -13,6 +15,7 @@ export class BusinessMapMcpServer {
|
|
|
13
15
|
this.businessMapClient = new BusinessMapClient(config.businessMap);
|
|
14
16
|
this.setupTools();
|
|
15
17
|
this.setupResources();
|
|
18
|
+
this.setupPrompts();
|
|
16
19
|
}
|
|
17
20
|
/**
|
|
18
21
|
* Initialize the server by verifying the BusinessMap API connection
|
|
@@ -44,8 +47,24 @@ export class BusinessMapMcpServer {
|
|
|
44
47
|
});
|
|
45
48
|
}
|
|
46
49
|
setupResources() {
|
|
47
|
-
|
|
48
|
-
|
|
50
|
+
const resourceHandlers = [
|
|
51
|
+
new WorkspaceResourceHandler(),
|
|
52
|
+
new BoardResourceHandler(),
|
|
53
|
+
new CardResourceHandler(),
|
|
54
|
+
];
|
|
55
|
+
resourceHandlers.forEach((handler) => {
|
|
56
|
+
handler.registerResources(this.mcpServer, this.businessMapClient);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
setupPrompts() {
|
|
60
|
+
const promptHandlers = [
|
|
61
|
+
new BoardPromptHandler(),
|
|
62
|
+
new CardPromptHandler(),
|
|
63
|
+
new WorkspacePromptHandler(),
|
|
64
|
+
];
|
|
65
|
+
promptHandlers.forEach((handler) => {
|
|
66
|
+
handler.registerPrompts(this.mcpServer, this.businessMapClient);
|
|
67
|
+
});
|
|
49
68
|
}
|
|
50
69
|
get server() {
|
|
51
70
|
return this.mcpServer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { BusinessMapClient } from '../../client/businessmap-client.js';
|
|
3
|
+
/**
|
|
4
|
+
* Base interface for prompt handlers
|
|
5
|
+
*/
|
|
6
|
+
export interface BasePromptHandler {
|
|
7
|
+
/**
|
|
8
|
+
* Register all prompts provided by this handler
|
|
9
|
+
* @param server The MCP server instance
|
|
10
|
+
* @param client The BusinessMap client instance
|
|
11
|
+
*/
|
|
12
|
+
registerPrompts(server: McpServer, client: BusinessMapClient): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=base-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-prompt.d.ts","sourceRoot":"","sources":["../../../src/server/prompts/base-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACrE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-prompt.js","sourceRoot":"","sources":["../../../src/server/prompts/base-prompt.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { BusinessMapClient } from '../../client/businessmap-client.js';
|
|
3
|
+
import { BasePromptHandler } from './base-prompt.js';
|
|
4
|
+
export declare class BoardPromptHandler implements BasePromptHandler {
|
|
5
|
+
registerPrompts(server: McpServer, _client: BusinessMapClient): void;
|
|
6
|
+
private registerAnalyzeBoardPerformance;
|
|
7
|
+
private registerGenerateBoardReport;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=board-prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-prompts.d.ts","sourceRoot":"","sources":["../../../src/server/prompts/board-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,qBAAa,kBAAmB,YAAW,iBAAiB;IAC1D,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAKpE,OAAO,CAAC,+BAA+B;IAmDvC,OAAO,CAAC,2BAA2B;CAqDpC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { z } from 'zod/v3';
|
|
2
|
+
export class BoardPromptHandler {
|
|
3
|
+
registerPrompts(server, _client) {
|
|
4
|
+
this.registerAnalyzeBoardPerformance(server);
|
|
5
|
+
this.registerGenerateBoardReport(server);
|
|
6
|
+
}
|
|
7
|
+
registerAnalyzeBoardPerformance(server) {
|
|
8
|
+
server.registerPrompt('analyze-board-performance', {
|
|
9
|
+
title: 'Analyze Board Performance',
|
|
10
|
+
description: 'Analyze a board\'s performance: flow efficiency, bottlenecks, cycle time and workload distribution across columns and lanes.',
|
|
11
|
+
argsSchema: {
|
|
12
|
+
board_id: z.string().describe('The board ID to analyze'),
|
|
13
|
+
},
|
|
14
|
+
}, ({ board_id }) => ({
|
|
15
|
+
messages: [
|
|
16
|
+
{
|
|
17
|
+
role: 'user',
|
|
18
|
+
content: {
|
|
19
|
+
type: 'text',
|
|
20
|
+
text: `Please analyze the performance of board ID ${board_id} in BusinessMap.
|
|
21
|
+
|
|
22
|
+
Follow these steps:
|
|
23
|
+
1. Use \`get_current_board_structure\` to retrieve the full board structure (workflows, columns, lanes).
|
|
24
|
+
2. Use \`list_cards\` to retrieve all active cards on the board.
|
|
25
|
+
3. Use \`get_workflow_cycle_time_columns\` for each workflow to understand which columns count for cycle time.
|
|
26
|
+
|
|
27
|
+
Based on the data collected, provide a structured analysis including:
|
|
28
|
+
|
|
29
|
+
**Flow Analysis**
|
|
30
|
+
- Number of cards per column and lane
|
|
31
|
+
- Columns with the highest accumulation (bottlenecks)
|
|
32
|
+
- WIP distribution
|
|
33
|
+
|
|
34
|
+
**Cycle Time**
|
|
35
|
+
- Average cycle time estimation per column
|
|
36
|
+
- Columns that are cycle time columns vs. buffer columns
|
|
37
|
+
|
|
38
|
+
**Workload Distribution**
|
|
39
|
+
- Cards per assignee (if available)
|
|
40
|
+
- Lanes with the most blocked/overdue items
|
|
41
|
+
|
|
42
|
+
**Recommendations**
|
|
43
|
+
- Top 3 actionable improvements to increase flow efficiency
|
|
44
|
+
- Any WIP limit violations or risks identified
|
|
45
|
+
|
|
46
|
+
Format the response as a clear executive report with sections and bullet points.`,
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
registerGenerateBoardReport(server) {
|
|
53
|
+
server.registerPrompt('generate-board-report', {
|
|
54
|
+
title: 'Generate Board Report',
|
|
55
|
+
description: 'Generate a comprehensive status report for a board, including cards summary, progress, and highlights.',
|
|
56
|
+
argsSchema: {
|
|
57
|
+
board_id: z.string().describe('The board ID to report on'),
|
|
58
|
+
},
|
|
59
|
+
}, ({ board_id }) => ({
|
|
60
|
+
messages: [
|
|
61
|
+
{
|
|
62
|
+
role: 'user',
|
|
63
|
+
content: {
|
|
64
|
+
type: 'text',
|
|
65
|
+
text: `Generate a comprehensive status report for board ID ${board_id}.
|
|
66
|
+
|
|
67
|
+
Steps to gather data:
|
|
68
|
+
1. Use \`get_current_board_structure\` to get the board structure.
|
|
69
|
+
2. Use \`list_cards\` to get all cards (use filters as needed for active cards).
|
|
70
|
+
3. For a sample of cards (up to 10), use \`get_card\` to get detailed information.
|
|
71
|
+
|
|
72
|
+
Report structure:
|
|
73
|
+
# Board Status Report — [Board Name]
|
|
74
|
+
**Date:** [Today's date]
|
|
75
|
+
|
|
76
|
+
## Executive Summary
|
|
77
|
+
- Total cards in progress
|
|
78
|
+
- Total cards completed (if available)
|
|
79
|
+
- Key highlights and risks
|
|
80
|
+
|
|
81
|
+
## Column Breakdown
|
|
82
|
+
For each column: card count, key items, blockers
|
|
83
|
+
|
|
84
|
+
## Recently Updated Cards
|
|
85
|
+
List the 5 most recently updated cards with status
|
|
86
|
+
|
|
87
|
+
## Risks & Blockers
|
|
88
|
+
- Cards that appear stuck or overdue
|
|
89
|
+
- Any notable concerns
|
|
90
|
+
|
|
91
|
+
## Next Steps
|
|
92
|
+
- Suggested actions based on current board state
|
|
93
|
+
|
|
94
|
+
Keep the report concise, factual, and actionable.`,
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=board-prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-prompts.js","sourceRoot":"","sources":["../../../src/server/prompts/board-prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,MAAM,OAAO,kBAAkB;IAC7B,eAAe,CAAC,MAAiB,EAAE,OAA0B;QAC3D,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAEO,+BAA+B,CAAC,MAAiB;QACvD,MAAM,CAAC,cAAc,CACnB,2BAA2B,EAC3B;YACE,KAAK,EAAE,2BAA2B;YAClC,WAAW,EACT,8HAA8H;YAChI,UAAU,EAAE;gBACV,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;aACzD;SACF,EACD,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YACjB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,8CAA8C,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;iFA0BO;qBACpE;iBACF;aACF;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,2BAA2B,CAAC,MAAiB;QACnD,MAAM,CAAC,cAAc,CACnB,uBAAuB,EACvB;YACE,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EACT,wGAAwG;YAC1G,UAAU,EAAE;gBACV,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;aAC3D;SACF,EACD,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YACjB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,uDAAuD,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDA6BjC;qBACrC;iBACF;aACF;SACF,CAAC,CACH,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { BusinessMapClient } from '../../client/businessmap-client.js';
|
|
3
|
+
import { BasePromptHandler } from './base-prompt.js';
|
|
4
|
+
export declare class CardPromptHandler implements BasePromptHandler {
|
|
5
|
+
registerPrompts(server: McpServer, _client: BusinessMapClient): void;
|
|
6
|
+
private registerCreateCardFromDescription;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=card-prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card-prompts.d.ts","sourceRoot":"","sources":["../../../src/server/prompts/card-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,qBAAa,iBAAkB,YAAW,iBAAiB;IACzD,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIpE,OAAO,CAAC,iCAAiC;CA6C1C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from 'zod/v3';
|
|
2
|
+
export class CardPromptHandler {
|
|
3
|
+
registerPrompts(server, _client) {
|
|
4
|
+
this.registerCreateCardFromDescription(server);
|
|
5
|
+
}
|
|
6
|
+
registerCreateCardFromDescription(server) {
|
|
7
|
+
server.registerPrompt('create-card-from-description', {
|
|
8
|
+
title: 'Create Card from Description',
|
|
9
|
+
description: 'Guide the creation of a well-structured card from a natural language description.',
|
|
10
|
+
argsSchema: {
|
|
11
|
+
description: z.string().describe('Natural language description of what the card should be'),
|
|
12
|
+
board_id: z.string().describe('The board ID where the card should be created'),
|
|
13
|
+
},
|
|
14
|
+
}, ({ description, board_id }) => ({
|
|
15
|
+
messages: [
|
|
16
|
+
{
|
|
17
|
+
role: 'user',
|
|
18
|
+
content: {
|
|
19
|
+
type: 'text',
|
|
20
|
+
text: `Help me create a well-structured card in BusinessMap based on the following description:
|
|
21
|
+
|
|
22
|
+
"${description}"
|
|
23
|
+
|
|
24
|
+
Target board ID: ${board_id}
|
|
25
|
+
|
|
26
|
+
Steps to follow:
|
|
27
|
+
1. Use \`get_current_board_structure\` to understand the available columns, lanes, and workflows on board ${board_id}.
|
|
28
|
+
2. Use \`get_card_types\` to list available card types.
|
|
29
|
+
3. Based on the description and board structure, determine the best:
|
|
30
|
+
- Card title (concise, action-oriented)
|
|
31
|
+
- Card description (detailed, with acceptance criteria if applicable)
|
|
32
|
+
- Card type (story, task, bug, etc.)
|
|
33
|
+
- Target column (most appropriate initial stage)
|
|
34
|
+
- Lane (if applicable)
|
|
35
|
+
- Size/priority estimate (if inferable)
|
|
36
|
+
|
|
37
|
+
4. Use \`create_card\` to create the card with the determined values.
|
|
38
|
+
5. Confirm the card was created and provide its ID and a link summary.
|
|
39
|
+
|
|
40
|
+
Make the card title clear and actionable. Include acceptance criteria in the description if the request is a feature or user story.`,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=card-prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card-prompts.js","sourceRoot":"","sources":["../../../src/server/prompts/card-prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,MAAM,OAAO,iBAAiB;IAC5B,eAAe,CAAC,MAAiB,EAAE,OAA0B;QAC3D,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAEO,iCAAiC,CAAC,MAAiB;QACzD,MAAM,CAAC,cAAc,CACnB,8BAA8B,EAC9B;YACE,KAAK,EAAE,8BAA8B;YACrC,WAAW,EACT,mFAAmF;YACrF,UAAU,EAAE;gBACV,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;gBAC3F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;aAC/E;SACF,EACD,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9B,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;;GAEjB,WAAW;;mBAEK,QAAQ;;;4GAGiF,QAAQ;;;;;;;;;;;;;oIAagB;qBACvH;iBACF;aACF;SACF,CAAC,CACH,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { BasePromptHandler } from './base-prompt.js';
|
|
2
|
+
export { BoardPromptHandler } from './board-prompts.js';
|
|
3
|
+
export { CardPromptHandler } from './card-prompts.js';
|
|
4
|
+
export { WorkspacePromptHandler } from './workspace-prompts.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/prompts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { BusinessMapClient } from '../../client/businessmap-client.js';
|
|
3
|
+
import { BasePromptHandler } from './base-prompt.js';
|
|
4
|
+
export declare class WorkspacePromptHandler implements BasePromptHandler {
|
|
5
|
+
registerPrompts(server: McpServer, _client: BusinessMapClient): void;
|
|
6
|
+
private registerWorkspaceStatusOverview;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=workspace-prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-prompts.d.ts","sourceRoot":"","sources":["../../../src/server/prompts/workspace-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIpE,OAAO,CAAC,+BAA+B;CAyDxC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { z } from 'zod/v3';
|
|
2
|
+
export class WorkspacePromptHandler {
|
|
3
|
+
registerPrompts(server, _client) {
|
|
4
|
+
this.registerWorkspaceStatusOverview(server);
|
|
5
|
+
}
|
|
6
|
+
registerWorkspaceStatusOverview(server) {
|
|
7
|
+
server.registerPrompt('workspace-status-overview', {
|
|
8
|
+
title: 'Workspace Status Overview',
|
|
9
|
+
description: 'Generate a high-level status overview of a workspace, including all boards and their key metrics.',
|
|
10
|
+
argsSchema: {
|
|
11
|
+
workspace_id: z.string().describe('The workspace ID to generate an overview for'),
|
|
12
|
+
},
|
|
13
|
+
}, ({ workspace_id }) => ({
|
|
14
|
+
messages: [
|
|
15
|
+
{
|
|
16
|
+
role: 'user',
|
|
17
|
+
content: {
|
|
18
|
+
type: 'text',
|
|
19
|
+
text: `Generate a high-level status overview for workspace ID ${workspace_id}.
|
|
20
|
+
|
|
21
|
+
Steps:
|
|
22
|
+
1. Use \`get_workspace\` to get workspace details.
|
|
23
|
+
2. Use \`list_boards\` with workspace_id filter to list all boards in this workspace.
|
|
24
|
+
3. For each board (up to 5 boards), use \`list_cards\` to get a count of active cards.
|
|
25
|
+
4. For up to 3 boards, use \`get_current_board_structure\` for column distribution.
|
|
26
|
+
|
|
27
|
+
Deliver a structured overview:
|
|
28
|
+
|
|
29
|
+
# Workspace Overview — [Workspace Name]
|
|
30
|
+
**Date:** [Today's date]
|
|
31
|
+
|
|
32
|
+
## Workspace Summary
|
|
33
|
+
- Total boards
|
|
34
|
+
- Total active cards (estimate)
|
|
35
|
+
- Overall health status (Green/Yellow/Red based on workload)
|
|
36
|
+
|
|
37
|
+
## Board Summaries
|
|
38
|
+
For each board:
|
|
39
|
+
- Board name and ID
|
|
40
|
+
- Active card count
|
|
41
|
+
- Columns with most cards (top 2-3)
|
|
42
|
+
- Any notable concerns (high WIP, empty boards, etc.)
|
|
43
|
+
|
|
44
|
+
## Highlights
|
|
45
|
+
- Most active board
|
|
46
|
+
- Any boards with potential bottlenecks
|
|
47
|
+
- Boards with no activity
|
|
48
|
+
|
|
49
|
+
## Recommendations
|
|
50
|
+
- Top 2-3 areas to focus attention on
|
|
51
|
+
|
|
52
|
+
Keep it concise — this is a management-level overview.`,
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=workspace-prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-prompts.js","sourceRoot":"","sources":["../../../src/server/prompts/workspace-prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,MAAM,OAAO,sBAAsB;IACjC,eAAe,CAAC,MAAiB,EAAE,OAA0B;QAC3D,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEO,+BAA+B,CAAC,MAAiB;QACvD,MAAM,CAAC,cAAc,CACnB,2BAA2B,EAC3B;YACE,KAAK,EAAE,2BAA2B;YAClC,WAAW,EACT,mGAAmG;YACrG,UAAU,EAAE;gBACV,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;aAClF;SACF,EACD,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;YACrB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,0DAA0D,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uDAiCnC;qBAC1C;iBACF;aACF;SACF,CAAC,CACH,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { BusinessMapClient } from '../../client/businessmap-client.js';
|
|
3
|
+
/**
|
|
4
|
+
* Base interface for resource handlers
|
|
5
|
+
*/
|
|
6
|
+
export interface BaseResourceHandler {
|
|
7
|
+
/**
|
|
8
|
+
* Register all resources provided by this handler
|
|
9
|
+
* @param server The MCP server instance
|
|
10
|
+
* @param client The BusinessMap client instance
|
|
11
|
+
*/
|
|
12
|
+
registerResources(server: McpServer, client: BusinessMapClient): void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Standard error handler for resource responses
|
|
16
|
+
*/
|
|
17
|
+
export declare function createErrorResourceResponse(error: unknown): void;
|
|
18
|
+
//# sourceMappingURL=base-resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-resource.d.ts","sourceRoot":"","sources":["../../../src/server/resources/base-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACzE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,QAKzD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard error handler for resource responses
|
|
3
|
+
*/
|
|
4
|
+
export function createErrorResourceResponse(error) {
|
|
5
|
+
// Resources typically return content, but if there's an error reading,
|
|
6
|
+
// we might want to return an error message in the content or throw.
|
|
7
|
+
// For MCP resources, throwing an error is often the right way to signal failure to read.
|
|
8
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=base-resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-resource.js","sourceRoot":"","sources":["../../../src/server/resources/base-resource.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACtD,uEAAuE;IACvE,oEAAoE;IACpE,yFAAyF;IACzF,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { BusinessMapClient } from '../../client/businessmap-client.js';
|
|
3
|
+
import { BaseResourceHandler } from './base-resource.js';
|
|
4
|
+
export declare class BoardResourceHandler implements BaseResourceHandler {
|
|
5
|
+
registerResources(server: McpServer, client: BusinessMapClient): void;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=board-resources.d.ts.map
|
|
@@ -0,0 +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"}
|