@edicarlos.lds/businessmap-mcp 1.6.1 → 1.7.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 +41 -3
- package/dist/config/environment.d.ts +2 -3
- package/dist/config/environment.d.ts.map +1 -1
- package/dist/config/environment.js +17 -5
- package/dist/config/environment.js.map +1 -1
- package/dist/index.js +12 -6
- package/dist/index.js.map +1 -1
- package/dist/server/http.d.ts +3 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +61 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/mcp-server.d.ts.map +1 -1
- package/dist/server/mcp-server.js.map +1 -1
- package/package.json +8 -2
package/README.md
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
[](https://nodejs.org/)
|
|
8
8
|
[](https://www.typescriptlang.org/)
|
|
9
9
|
[](https://modelcontextprotocol.io/)
|
|
10
|
+
[](https://github.com/sponsors/edicarloslds)
|
|
10
11
|
|
|
11
12
|
Model Context Protocol server for BusinessMap (Kanbanize) integration. Provides comprehensive access to BusinessMap's project management features including workspaces, boards, cards, subtasks, parent-child relationships, outcomes, custom fields, and more.
|
|
12
13
|
|
|
@@ -37,6 +38,21 @@ The server requires the following environment variables:
|
|
|
37
38
|
- `BUSINESSMAP_READ_ONLY_MODE`: Set to `"true"` for read-only mode, `"false"` to allow modifications (optional, defaults to `"false"`)
|
|
38
39
|
- `BUSINESSMAP_DEFAULT_WORKSPACE_ID`: Set the BusinessMap workspace ID (optional)
|
|
39
40
|
- `LOG_LEVEL`: Set logging verbosity - `0` (DEBUG), `1` (INFO), `2` (WARN), `3` (ERROR), `4` (NONE) (optional, defaults to `1`)
|
|
41
|
+
- `PORT`: Server port for HTTP/SSE mode (optional, defaults to `3000`)
|
|
42
|
+
- `TRANSPORT`: Set to `stdio` (default), `sse`, or `http` to switch transport modes
|
|
43
|
+
|
|
44
|
+
### Local Usage with .env
|
|
45
|
+
|
|
46
|
+
When running locally (e.g., via `npx` or `npm start`), the server will automatically look for a `.env` file in your current working directory.
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Create a .env file
|
|
50
|
+
echo "BUSINESSMAP_API_TOKEN=your_token" > .env
|
|
51
|
+
echo "BUSINESSMAP_API_URL=https://..." >> .env
|
|
52
|
+
|
|
53
|
+
# Run the server
|
|
54
|
+
npx @edicarlos.lds/businessmap-mcp
|
|
55
|
+
```
|
|
40
56
|
|
|
41
57
|
#### Claude Desktop
|
|
42
58
|
|
|
@@ -111,6 +127,23 @@ For other MCP clients, use the appropriate configuration format for your client,
|
|
|
111
127
|
- Command: `npx @edicarlos.lds/businessmap-mcp` (or `businessmap-mcp` if globally installed)
|
|
112
128
|
- Environment variables: `BUSINESSMAP_API_TOKEN`, `BUSINESSMAP_API_URL`, and optionally `BUSINESSMAP_READ_ONLY_MODE`, `BUSINESSMAP_DEFAULT_WORKSPACE_ID`
|
|
113
129
|
|
|
130
|
+
### Remote Usage (HTTP/SSE)
|
|
131
|
+
|
|
132
|
+
You can run the server as a remote HTTP endpoint using Server-Sent Events (SSE). This is useful for deploying to cloud providers or using with clients that support remote MCP servers.
|
|
133
|
+
|
|
134
|
+
1. **Start the server in HTTP mode:**
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
export TRANSPORT=sse
|
|
138
|
+
export PORT=3000
|
|
139
|
+
npm start
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
2. **Connect your client:**
|
|
143
|
+
|
|
144
|
+
Configure your MCP client to connect to the SSE endpoint:
|
|
145
|
+
- **URL**: `http://your-server:3000/sse`
|
|
146
|
+
|
|
114
147
|
### Manual Setup
|
|
115
148
|
|
|
116
149
|
1. Clone this repository:
|
|
@@ -239,10 +272,10 @@ The BusinessMap MCP server provides the following tools:
|
|
|
239
272
|
|
|
240
273
|
## Tool Summary
|
|
241
274
|
|
|
242
|
-
The BusinessMap MCP server provides **
|
|
275
|
+
The BusinessMap MCP server provides **42 tools** across 7 categories:
|
|
243
276
|
|
|
244
277
|
- **Workspace Management**: 3 tools
|
|
245
|
-
- **Board Management**:
|
|
278
|
+
- **Board Management**: 8 tools
|
|
246
279
|
- **Card Management**: 23 tools (organized in 6 subcategories)
|
|
247
280
|
- **Custom Field Management**: 1 tool
|
|
248
281
|
- **Workflow & Cycle Time Analysis**: 2 tools
|
|
@@ -395,7 +428,8 @@ This project uses an automated release process. See [RELEASE_PROCESS.md](docs/RE
|
|
|
395
428
|
npm run preview:release
|
|
396
429
|
|
|
397
430
|
# Publish new version (interactive)
|
|
398
|
-
|
|
431
|
+
# Publish to NPM and create GitHub release (interactive flows)
|
|
432
|
+
npm run publish:npm && npm run publish:github
|
|
399
433
|
```
|
|
400
434
|
|
|
401
435
|
The release process automatically:
|
|
@@ -423,6 +457,10 @@ The release process automatically:
|
|
|
423
457
|
npm run test:npx
|
|
424
458
|
```
|
|
425
459
|
|
|
460
|
+
## Sponsors
|
|
461
|
+
|
|
462
|
+
If you find this project helpful and would like to support its development, please consider becoming a sponsor through [GitHub Sponsors](https://github.com/sponsors/edicarloslds).
|
|
463
|
+
|
|
426
464
|
## License
|
|
427
465
|
|
|
428
466
|
MIT
|
|
@@ -4,11 +4,10 @@ export interface EnvironmentConfig {
|
|
|
4
4
|
server: {
|
|
5
5
|
name: string;
|
|
6
6
|
version: string;
|
|
7
|
-
port
|
|
7
|
+
port: number;
|
|
8
8
|
};
|
|
9
9
|
transport: {
|
|
10
|
-
|
|
11
|
-
streamableHttp: boolean;
|
|
10
|
+
type: 'stdio' | 'sse' | 'http';
|
|
12
11
|
};
|
|
13
12
|
}
|
|
14
13
|
export declare const config: EnvironmentConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAkBtD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,SAAS,EAAE;QACT,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;KAChC,CAAC;CACH;AA0BD,eAAO,MAAM,MAAM,EAAE,iBAepB,CAAC;AAEF,wBAAgB,cAAc,IAAI,IAAI,CAgBrC"}
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
import dotenv from 'dotenv';
|
|
2
|
+
import path from 'path';
|
|
2
3
|
import { logger } from '../utils/logger.js';
|
|
3
4
|
// Load environment variables
|
|
4
|
-
|
|
5
|
+
// Load environment variables from current working directory
|
|
6
|
+
const envPath = path.resolve(process.cwd(), '.env');
|
|
7
|
+
const result = dotenv.config({ path: envPath });
|
|
8
|
+
if (result.error) {
|
|
9
|
+
// If .env file doesn't exist, dotenv returns an error.
|
|
10
|
+
// We'll try loading without path (default behavior) as fallback,
|
|
11
|
+
// but also log that we checked CWD.
|
|
12
|
+
logger.info(`No .env file found at ${envPath}, checking default locations...`);
|
|
13
|
+
dotenv.config();
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
logger.info(`Loaded environment variables from ${envPath}`);
|
|
17
|
+
}
|
|
5
18
|
function getRequiredEnvVar(name) {
|
|
6
19
|
const value = process.env[name];
|
|
7
20
|
if (!value) {
|
|
@@ -17,7 +30,7 @@ function getBooleanEnvVar(name, defaultValue = false) {
|
|
|
17
30
|
}
|
|
18
31
|
function getNumberEnvVar(name, defaultValue) {
|
|
19
32
|
const value = process.env[name];
|
|
20
|
-
if (value === undefined)
|
|
33
|
+
if (value === undefined || value === '')
|
|
21
34
|
return defaultValue;
|
|
22
35
|
const parsed = parseInt(value, 10);
|
|
23
36
|
if (isNaN(parsed)) {
|
|
@@ -35,11 +48,10 @@ export const config = {
|
|
|
35
48
|
server: {
|
|
36
49
|
name: process.env.MCP_SERVER_NAME || 'businessmap-mcp',
|
|
37
50
|
version: process.env.MCP_SERVER_VERSION || '1.0.0',
|
|
38
|
-
port: getNumberEnvVar('PORT'),
|
|
51
|
+
port: getNumberEnvVar('PORT') || 3000,
|
|
39
52
|
},
|
|
40
53
|
transport: {
|
|
41
|
-
|
|
42
|
-
streamableHttp: getBooleanEnvVar('STREAMABLE_HTTP', true),
|
|
54
|
+
type: process.env.TRANSPORT || 'stdio',
|
|
43
55
|
},
|
|
44
56
|
};
|
|
45
57
|
export function validateConfig() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -38,12 +38,18 @@ async function main() {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
// Setup transport
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
// Setup transport based on configuration
|
|
42
|
+
if (config.transport.type === 'sse' || config.transport.type === 'http') {
|
|
43
|
+
const { startHttpServer } = await import('./server/http.js');
|
|
44
|
+
await startHttpServer(businessMapServer);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// Default to Stdio
|
|
48
|
+
const transport = new StdioServerTransport();
|
|
49
|
+
await businessMapServer.server.connect(transport);
|
|
50
|
+
logger.success('BusinessMap MCP Server is running on Stdio');
|
|
51
|
+
logger.info('💡 Use Ctrl+C to stop the server');
|
|
52
|
+
}
|
|
47
53
|
}
|
|
48
54
|
catch (error) {
|
|
49
55
|
logger.error('Failed to start BusinessMap MCP Server:', error);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,yBAAyB;QACzB,cAAc,EAAE,CAAC;QAEjB,kCAAkC;QAClC,MAAM,iBAAiB,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAErD,MAAM,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAE9F,iDAAiD;QACjD,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAChE,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,UAAU,GAAG,CAAC,CAAC;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,YAAY;QAErC,OAAO,UAAU,GAAG,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,iBAAiB,CAAC,UAAU,EAAE,CAAC;gBACrC,MAAM,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;gBAC5D,MAAM;YACR,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,UAAU,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBAEzE,IAAI,UAAU,GAAG,UAAU,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,sBAAsB,UAAU,YAAY,OAAO,EAAE,CAAC,CAAC;oBACnE,MAAM,CAAC,IAAI,CACT,kBAAkB,UAAU,GAAG,IAAI,gBAAgB,UAAU,IAAI,UAAU,GAAG,CAC/E,CAAC;oBACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;gBAClE,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAK,CACV,8CAA8C,UAAU,cAAc,OAAO,EAAE,CAChF,CAAC;oBACF,MAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;oBACrE,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,kBAAkB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAIvD,wBAAsB,eAAe,CAAC,SAAS,EAAE,oBAAoB,iBAuEpE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import cors from 'cors';
|
|
3
|
+
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
|
|
4
|
+
import { config } from '../config/environment.js';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
export async function startHttpServer(mcpServer) {
|
|
7
|
+
const app = express();
|
|
8
|
+
const transports = new Map();
|
|
9
|
+
// Enable CORS
|
|
10
|
+
app.use(cors());
|
|
11
|
+
// Set up SSE endpoint
|
|
12
|
+
app.get('/sse', async (req, res) => {
|
|
13
|
+
logger.info('New SSE connection request');
|
|
14
|
+
const transport = new SSEServerTransport('/message', res);
|
|
15
|
+
const sessionId = transport.sessionId;
|
|
16
|
+
transports.set(sessionId, transport);
|
|
17
|
+
logger.info(`Created new transport with session ID: ${sessionId}`);
|
|
18
|
+
// Clean up on close
|
|
19
|
+
res.on('close', () => {
|
|
20
|
+
logger.info(`SSE connection closed for session ${sessionId}`);
|
|
21
|
+
transports.delete(sessionId);
|
|
22
|
+
});
|
|
23
|
+
try {
|
|
24
|
+
await mcpServer.server.connect(transport);
|
|
25
|
+
await transport.start();
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
logger.error(`Failed to start transport for session ${sessionId}:`, error);
|
|
29
|
+
transports.delete(sessionId);
|
|
30
|
+
if (!res.headersSent) {
|
|
31
|
+
res.status(500).send('Failed to start SSE transport');
|
|
32
|
+
}
|
|
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
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const transport = transports.get(sessionId);
|
|
43
|
+
if (!transport) {
|
|
44
|
+
res.status(404).send(`Session not found: ${sessionId}`);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
logger.debug(`Received JSON-RPC message for session ${sessionId}`);
|
|
48
|
+
await transport.handlePostMessage(req, res);
|
|
49
|
+
});
|
|
50
|
+
// Health check endpoint
|
|
51
|
+
app.get('/health', (req, res) => {
|
|
52
|
+
res.json({ status: 'ok', version: config.server.version });
|
|
53
|
+
});
|
|
54
|
+
const port = config.server.port;
|
|
55
|
+
app.listen(port, () => {
|
|
56
|
+
logger.success(`HTTP Server running on port ${port}`);
|
|
57
|
+
logger.info(`SSE Endpoint: http://localhost:${port}/sse`);
|
|
58
|
+
logger.info(`Message Endpoint: http://localhost:${port}/message`);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;AAapE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,iBAAiB,CAAoB;;IAa7C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,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;AAapE,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,iBAAiB,CAAoB;;IAa7C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,OAAO,CAAC,UAAU;IAoBlB,OAAO,CAAC,cAAc;IAKtB,IAAI,MAAM,IAAI,SAAS,CAEtB;CACF"}
|
|
@@ -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;AAE1B,MAAM,OAAO,oBAAoB;IACvB,SAAS,CAAY;IACrB,iBAAiB,CAAoB;IAE7C;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC;YAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;YACxB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACnE,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;
|
|
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;AAE1B,MAAM,OAAO,oBAAoB;IACvB,SAAS,CAAY;IACrB,iBAAiB,CAAoB;IAE7C;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC;YAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;YACxB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACnE,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,gDAAgD,OAAO,EAAE,CAAC,CAAC;QACvJ,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,IAAI,KAAK,CAAC;QAE9D,2BAA2B;QAC3B,MAAM,YAAY,GAAG;YACnB,IAAI,oBAAoB,EAAE;YAC1B,IAAI,gBAAgB,EAAE;YACtB,IAAI,eAAe,EAAE;YACrB,IAAI,sBAAsB,EAAE;YAC5B,IAAI,eAAe,EAAE;YACrB,IAAI,kBAAkB,EAAE;YACxB,IAAI,mBAAmB,EAAE;SAC1B,CAAC;QAEF,mCAAmC;QACnC,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,cAAc;QACpB,2EAA2E;QAC3E,2EAA2E;IAC7E,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edicarlos.lds/businessmap-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "Model Context Protocol server for BusinessMap (Kanbanize) integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -60,10 +60,16 @@
|
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"@modelcontextprotocol/sdk": "^1.17.0",
|
|
62
62
|
"axios": "^1.12.0",
|
|
63
|
-
"
|
|
63
|
+
"cors": "^2.8.5",
|
|
64
|
+
"dotenv": "^16.6.1",
|
|
65
|
+
"eventsource": "^4.1.0",
|
|
66
|
+
"express": "^5.1.0",
|
|
64
67
|
"zod": "^3.22.0"
|
|
65
68
|
},
|
|
66
69
|
"devDependencies": {
|
|
70
|
+
"@types/cors": "^2.8.19",
|
|
71
|
+
"@types/eventsource": "^1.1.15",
|
|
72
|
+
"@types/express": "^5.0.5",
|
|
67
73
|
"@types/node": "^20.0.0",
|
|
68
74
|
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
69
75
|
"@typescript-eslint/parser": "^6.0.0",
|