@edicarlos.lds/businessmap-mcp 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/CONTRIBUTING.md +73 -0
  2. package/README.md +35 -15
  3. package/SECURITY.md +36 -0
  4. package/dist/client/businessmap-client.d.ts +0 -1
  5. package/dist/client/businessmap-client.d.ts.map +1 -1
  6. package/dist/client/businessmap-client.js +39 -23
  7. package/dist/client/businessmap-client.js.map +1 -1
  8. package/dist/client/businessmap-error.d.ts +16 -0
  9. package/dist/client/businessmap-error.d.ts.map +1 -0
  10. package/dist/client/businessmap-error.js +43 -0
  11. package/dist/client/businessmap-error.js.map +1 -0
  12. package/dist/client/modules/board-client.d.ts.map +1 -1
  13. package/dist/client/modules/board-client.js +16 -2
  14. package/dist/client/modules/board-client.js.map +1 -1
  15. package/dist/client/modules/card-client.d.ts +7 -5
  16. package/dist/client/modules/card-client.d.ts.map +1 -1
  17. package/dist/client/modules/card-client.js +40 -13
  18. package/dist/client/modules/card-client.js.map +1 -1
  19. package/dist/client/modules/index.d.ts +0 -3
  20. package/dist/client/modules/index.d.ts.map +1 -1
  21. package/dist/client/modules/index.js +0 -1
  22. package/dist/client/modules/index.js.map +1 -1
  23. package/dist/config/environment.d.ts +3 -0
  24. package/dist/config/environment.d.ts.map +1 -1
  25. package/dist/config/environment.js +64 -3
  26. package/dist/config/environment.js.map +1 -1
  27. package/dist/index.d.ts +2 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +19 -9
  30. package/dist/index.js.map +1 -1
  31. package/dist/schemas/board-schemas.d.ts +6 -6
  32. package/dist/schemas/board-schemas.d.ts.map +1 -1
  33. package/dist/schemas/board-schemas.js +6 -2
  34. package/dist/schemas/board-schemas.js.map +1 -1
  35. package/dist/schemas/card-schemas.d.ts +67 -48
  36. package/dist/schemas/card-schemas.d.ts.map +1 -1
  37. package/dist/schemas/card-schemas.js +23 -0
  38. package/dist/schemas/card-schemas.js.map +1 -1
  39. package/dist/schemas/common-schemas.d.ts +4 -4
  40. package/dist/server/http.d.ts +7 -1
  41. package/dist/server/http.d.ts.map +1 -1
  42. package/dist/server/http.js +140 -31
  43. package/dist/server/http.js.map +1 -1
  44. package/dist/server/mcp-server.d.ts.map +1 -1
  45. package/dist/server/mcp-server.js +1 -1
  46. package/dist/server/mcp-server.js.map +1 -1
  47. package/dist/server/prompts/base-prompt.d.ts +12 -0
  48. package/dist/server/prompts/base-prompt.d.ts.map +1 -1
  49. package/dist/server/prompts/base-prompt.js +9 -1
  50. package/dist/server/prompts/base-prompt.js.map +1 -1
  51. package/dist/server/prompts/board-prompts.d.ts.map +1 -1
  52. package/dist/server/prompts/board-prompts.js +6 -5
  53. package/dist/server/prompts/board-prompts.js.map +1 -1
  54. package/dist/server/prompts/card-prompts.d.ts.map +1 -1
  55. package/dist/server/prompts/card-prompts.js +2 -1
  56. package/dist/server/prompts/card-prompts.js.map +1 -1
  57. package/dist/server/prompts/index.d.ts +0 -1
  58. package/dist/server/prompts/index.d.ts.map +1 -1
  59. package/dist/server/prompts/index.js.map +1 -1
  60. package/dist/server/prompts/workspace-prompts.d.ts.map +1 -1
  61. package/dist/server/prompts/workspace-prompts.js +4 -3
  62. package/dist/server/prompts/workspace-prompts.js.map +1 -1
  63. package/dist/server/resources/card-resources.d.ts.map +1 -1
  64. package/dist/server/resources/card-resources.js +45 -3
  65. package/dist/server/resources/card-resources.js.map +1 -1
  66. package/dist/server/tools/base-tool.d.ts +5 -0
  67. package/dist/server/tools/base-tool.d.ts.map +1 -1
  68. package/dist/server/tools/base-tool.js +89 -6
  69. package/dist/server/tools/base-tool.js.map +1 -1
  70. package/dist/server/tools/board-tools.d.ts +0 -6
  71. package/dist/server/tools/board-tools.d.ts.map +1 -1
  72. package/dist/server/tools/board-tools.js +35 -72
  73. package/dist/server/tools/board-tools.js.map +1 -1
  74. package/dist/server/tools/card-tools.d.ts.map +1 -1
  75. package/dist/server/tools/card-tools.js +99 -11
  76. package/dist/server/tools/card-tools.js.map +1 -1
  77. package/dist/server/tools/doc-tools.d.ts +2 -1
  78. package/dist/server/tools/doc-tools.d.ts.map +1 -1
  79. package/dist/server/tools/doc-tools.js +47 -20
  80. package/dist/server/tools/doc-tools.js.map +1 -1
  81. package/dist/server/tools/index.d.ts +0 -2
  82. package/dist/server/tools/index.d.ts.map +1 -1
  83. package/dist/server/tools/index.js +0 -1
  84. package/dist/server/tools/index.js.map +1 -1
  85. package/dist/server/tools/user-tools.d.ts.map +1 -1
  86. package/dist/server/tools/user-tools.js +2 -1
  87. package/dist/server/tools/user-tools.js.map +1 -1
  88. package/dist/types/base.d.ts +1 -0
  89. package/dist/types/base.d.ts.map +1 -1
  90. package/dist/types/card.d.ts +10 -5
  91. package/dist/types/card.d.ts.map +1 -1
  92. package/dist/utils/logger.d.ts +7 -12
  93. package/dist/utils/logger.d.ts.map +1 -1
  94. package/dist/utils/logger.js +73 -10
  95. package/dist/utils/logger.js.map +1 -1
  96. package/dist/utils/request-context.d.ts +7 -0
  97. package/dist/utils/request-context.d.ts.map +1 -0
  98. package/dist/utils/request-context.js +9 -0
  99. package/dist/utils/request-context.js.map +1 -0
  100. package/docs/LOGGING.md +15 -0
  101. package/docs/MIDDLEWARE.md +26 -4
  102. package/docs/TOOLS.md +116 -96
  103. package/package.json +22 -17
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;IACT,uCAAQ,CAAA;AACV,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AAED,MAAM,MAAM;IACF,YAAY,CAAW;IAE/B,YAAY,QAAkB,QAAQ,CAAC,IAAI;QACzC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAC,KAAe;QACtB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAAe,EAAE,GAAG,IAAe;QACzC,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAEO,GAAG,CAAC,MAAc,EAAE,OAAe,EAAE,GAAG,IAAe;QAC7D,8CAA8C;QAC9C,gDAAgD;QAChD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,gBAAgB,GAAG,IAAI,SAAS,KAAK,MAAM,KAAK,OAAO,EAAE,CAAC;QAEhE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;CACF;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,CAC9B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAC/E,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface RequestContext {
2
+ correlationId: string;
3
+ sessionId?: string;
4
+ }
5
+ export declare function runWithRequestContext<T>(context: RequestContext, callback: () => T): T;
6
+ export declare function getRequestContext(): RequestContext | undefined;
7
+ //# sourceMappingURL=request-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../src/utils/request-context.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,CAAC,GAChB,CAAC,CAEH;AAED,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAE9D"}
@@ -0,0 +1,9 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ const storage = new AsyncLocalStorage();
3
+ export function runWithRequestContext(context, callback) {
4
+ return storage.run(context, callback);
5
+ }
6
+ export function getRequestContext() {
7
+ return storage.getStore();
8
+ }
9
+ //# sourceMappingURL=request-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.js","sourceRoot":"","sources":["../../src/utils/request-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAOrD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAkB,CAAC;AAExD,MAAM,UAAU,qBAAqB,CACnC,OAAuB,EACvB,QAAiB;IAEjB,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC5B,CAAC"}
package/docs/LOGGING.md CHANGED
@@ -64,6 +64,18 @@ All log messages include timestamps and clear prefixes:
64
64
  [2025-11-15T10:30:47.345Z] ❌ ERROR: Failed to connect to API
65
65
  ```
66
66
 
67
+ Set `LOG_FORMAT=json` for machine-readable logs:
68
+
69
+ ```json
70
+ {"timestamp":"2026-07-09T18:00:00.000Z","level":"info","message":"MCP mutation tool completed","correlationId":"request-123","details":[{"event":"mcp_tool_mutation","tool":"update_card","outcome":"success","durationMs":42,"identifiers":{"card_id":123}}]}
71
+ ```
72
+
73
+ HTTP requests accept an optional `x-request-id` header and echo it in the
74
+ response. Invalid or missing IDs are replaced with a UUID. The same correlation
75
+ ID is propagated to BusinessMap API calls and included in logs. Mutation audit
76
+ events contain tool names and numeric identifiers only; free-form card content,
77
+ comments, descriptions, email addresses, and credentials are not logged.
78
+
67
79
  ## Configuration
68
80
 
69
81
  Set the `LOG_LEVEL` environment variable to control verbosity:
@@ -85,6 +97,9 @@ LOG_LEVEL=3 npx @edicarlos.lds/businessmap-mcp
85
97
  LOG_LEVEL=4 npx @edicarlos.lds/businessmap-mcp
86
98
  ```
87
99
 
100
+ Use `LOG_FORMAT=text` (default) for human-readable output or
101
+ `LOG_FORMAT=json` for log aggregation systems.
102
+
88
103
  ### In Claude Desktop Config
89
104
 
90
105
  ```json
@@ -18,7 +18,10 @@ You can import `startHttpServer` and launch the MCP server in HTTP mode programm
18
18
  import { startHttpServer } from '@edicarlos.lds/businessmap-mcp';
19
19
 
20
20
  // Start HTTP server with default options
21
- await startHttpServer();
21
+ const server = await startHttpServer();
22
+
23
+ // Close the listener and all MCP sessions during application shutdown
24
+ await server.shutdown();
22
25
  ```
23
26
 
24
27
  ---
@@ -38,8 +41,8 @@ const API_KEY = process.env.MCP_SERVER_KEY || 'your-secret-api-key';
38
41
  await startHttpServer({
39
42
  middlewares: [
40
43
  (req, res, next) => {
41
- // Allow health check to remain public
42
- if (req.path === '/health') {
44
+ // Allow orchestrator probes to remain public
45
+ if (req.path === '/health' || req.path === '/ready') {
43
46
  return next();
44
47
  }
45
48
 
@@ -67,7 +70,7 @@ const JWT_SECRET = process.env.JWT_SECRET!;
67
70
  await startHttpServer({
68
71
  middlewares: [
69
72
  (req, res, next) => {
70
- if (req.path === '/health') return next();
73
+ if (req.path === '/health' || req.path === '/ready') return next();
71
74
 
72
75
  const authHeader = req.headers['authorization'];
73
76
  if (!authHeader?.startsWith('Bearer ')) {
@@ -128,6 +131,25 @@ Middlewares are executed sequentially in the order they are passed in the `middl
128
131
 
129
132
  ---
130
133
 
134
+ ## HTTP Resource Limits
135
+
136
+ The standalone server supports `HTTP_BODY_LIMIT` (default `1mb`),
137
+ `HTTP_MAX_SESSIONS` (default `100`), and `HTTP_SESSION_TIMEOUT_MS` (default 30
138
+ minutes). Embedded applications can override them directly:
139
+
140
+ ```typescript
141
+ const server = await startHttpServer({
142
+ bodyLimit: '512kb',
143
+ maxSessions: 50,
144
+ sessionTimeoutMs: 15 * 60 * 1000,
145
+ });
146
+ ```
147
+
148
+ `GET /health` is a liveness probe. `GET /ready` returns `503` while the server
149
+ is shutting down or cannot accept another session.
150
+
151
+ ---
152
+
131
153
  ## 🧪 Testing Your Middleware
132
154
 
133
155
  You can test HTTP requests using `curl` or any API client (like Postman):
package/docs/TOOLS.md CHANGED
@@ -4,11 +4,23 @@ Complete reference for all tools, resources, and prompts provided by the Busines
4
4
 
5
5
  ## Summary
6
6
 
7
- | Category | Count |
8
- | --------- | :---: |
9
- | Tools | 92 |
10
- | Resources | 5 |
11
- | Prompts | 4 |
7
+ | Category | Count |
8
+ | --------------------------- | :---: |
9
+ | Default tools (`essential`) | 27 |
10
+ | Full-profile tools | 93 |
11
+ | Resources | 6 |
12
+ | Prompts | 4 |
13
+
14
+ The default `essential` profile exposes an agent-oriented discovery-to-detail
15
+ catalog. Set `BUSINESSMAP_TOOL_PROFILE=full` to register every advanced
16
+ operation. Read-only mode is applied independently and removes mutation tools
17
+ from either profile.
18
+
19
+ Run `npm run eval:hierarchy` to validate the progressive-disclosure contracts:
20
+ bounded card discovery, compact payloads, board discovery without implicit
21
+ structure fetches, and explicit summary/full detail levels. These deterministic
22
+ checks complement production trajectory evals, where tool-call count, latency,
23
+ and token cost should also be monitored.
12
24
 
13
25
  ---
14
26
 
@@ -25,23 +37,24 @@ Complete reference for all tools, resources, and prompts provided by the Busines
25
37
 
26
38
  ---
27
39
 
28
- ### Board Management (13 tools)
29
-
30
- | Tool | Description | Read-Only Safe |
31
- | :---------------------------- | :--------------------------------------------------------------------------------------------- | :------------: |
32
- | `list_boards` | Get a list of boards with optional workspace filter | ✅ |
33
- | `search_board` | Search for a board by ID or name, with fallback to list | ✅ |
34
- | `get_columns` | Get all columns for a board | ✅ |
35
- | `get_lanes` | Get all lanes/swimlanes for a board | ✅ |
36
- | `get_lane` | Get details of a specific lane/swimlane | ✅ |
37
- | `get_current_board_structure` | Get the complete structure of a board (workflows, columns, lanes, configs) | ✅ |
38
- | `create_board` | Create a new board in a workspace | ❌ |
39
- | `update_board` | Update the name and/or description of a board | ❌ |
40
- | `create_lane` | Create a new lane/swimlane in a board (supports sub-lanes via `parent_lane_id`) | ❌ |
41
- | `update_lane` | Update a lane (name, description, color, position, parent lane) | ❌ |
40
+ ### Board Management (14 tools)
41
+
42
+ | Tool | Description | Read-Only Safe |
43
+ | :---------------------------- | :-------------------------------------------------------------------------------------------- | :------------: |
44
+ | `list_boards` | Discover compact board candidates; set `detail_level=full` for complete board payloads | ✅ |
45
+ | `search_board` | Find compact candidates by name fragment; use `get_board` when the ID is known | ✅ |
46
+ | `get_board` | Get board details without loading its structure | ✅ |
47
+ | `get_columns` | Get all columns for a board | ✅ |
48
+ | `get_lanes` | Get all lanes/swimlanes for a board | ✅ |
49
+ | `get_lane` | Get details of a specific lane/swimlane | ✅ |
50
+ | `get_current_board_structure` | Get the complete structure of a board (workflows, columns, lanes, configs) | ✅ |
51
+ | `create_board` | Create a new board in a workspace | ❌ |
52
+ | `update_board` | Update the name and/or description of a board | ❌ |
53
+ | `create_lane` | Create a new lane/swimlane in a board (supports sub-lanes via `parent_lane_id`) | ❌ |
54
+ | `update_lane` | Update a lane (name, description, color, position, parent lane) | ❌ |
42
55
  | `create_column` | Create a new column (main or sub-column). Section: 1=Backlog, 2=Requested, 3=Progress, 4=Done | ❌ |
43
- | `update_column` | Update the details of a specific column | ❌ |
44
- | `delete_column` | Delete a column from a board | ❌ ⚠️ |
56
+ | `update_column` | Update the details of a specific column | ❌ |
57
+ | `delete_column` | Delete a column from a board | ❌ ⚠️ |
45
58
 
46
59
  ---
47
60
 
@@ -49,18 +62,18 @@ Complete reference for all tools, resources, and prompts provided by the Busines
49
62
 
50
63
  #### Basic Operations
51
64
 
52
- | Tool | Description | Read-Only Safe |
53
- | :--------------- | :------------------------------------------- | :------------: |
54
- | `list_cards` | Get cards from a board with optional filters | ✅ |
55
- | `search_cards` | Search cards across all boards with advanced filters (owners, priorities, sizes, blocked state, dates, lifecycle state) | ✅ |
56
- | `get_card` | Get detailed card information | ✅ |
57
- | `get_card_size` | Get the size/points of a specific card | ✅ |
58
- | `get_card_types` | Get all available card types | ✅ |
59
- | `create_card` | Create a new card in a board | ❌ |
60
- | `move_card` | Move a card to a different column or lane | ❌ |
61
- | `update_card` | Update card properties | ❌ |
62
- | `set_card_size` | Set the size/points of a specific card | ❌ |
63
- | `delete_card` | Permanently delete a card (irreversible) | ❌ ⚠️ |
65
+ | Tool | Description | Read-Only Safe |
66
+ | :--------------- | :------------------------------------------------------------------- | :------------: |
67
+ | `list_cards` | Discover a compact, paginated page of cards on a board | ✅ |
68
+ | `search_cards` | Discover compact cards across boards with advanced filters | ✅ |
69
+ | `get_card` | Get a card summary; set `detail_level=full` for the complete payload | ✅ |
70
+ | `get_card_size` | Get the size/points of a specific card | ✅ |
71
+ | `get_card_types` | Get all available card types | ✅ |
72
+ | `create_card` | Create a new card in a board | ❌ |
73
+ | `move_card` | Move a card to a different column or lane | ❌ |
74
+ | `update_card` | Update card properties | ❌ |
75
+ | `set_card_size` | Set the size/points of a specific card | ❌ |
76
+ | `delete_card` | Permanently delete a card (irreversible) | ❌ ⚠️ |
64
77
 
65
78
  `list_cards` supports a `state` parameter (`active` | `archived` | `discarded` | `all`) to control which card lifecycle states are returned. The API defaults to `active`, so archived or discarded cards are only included when explicitly requested:
66
79
 
@@ -73,6 +86,12 @@ Complete reference for all tools, resources, and prompts provided by the Busines
73
86
  }
74
87
  ```
75
88
 
89
+ By default, `list_cards` returns a compact `{ data, pagination }` page bounded
90
+ to 50 cards, and `search_cards` also defaults to compact results with a 50-card
91
+ page size. Use `page` and `per_page` to navigate. Set `compact: false` only when
92
+ full list payloads are required; set `include_pagination: false` on `list_cards`
93
+ only for legacy array compatibility.
94
+
76
95
  #### Comments
77
96
 
78
97
  | Tool | Description | Read-Only Safe |
@@ -91,13 +110,13 @@ Complete reference for all tools, resources, and prompts provided by the Busines
91
110
 
92
111
  #### Outcomes & History
93
112
 
94
- | Tool | Description | Read-Only Safe |
95
- | :----------------------- | :----------------------------------------------------------------------- | :------------: |
96
- | `get_card_outcomes` | Get all outcomes for a specific card | ✅ |
97
- | `get_card_history` | Get the history of a specific card outcome | ✅ |
98
- | `get_card_flow_history` | Get the card's movement (transitions) across workflows/columns with timing | ✅ |
99
- | `get_card_blocked_times` | Get the full blocking history of a card | ✅ |
100
- | `get_card_logged_time` | Get time logged on a card and its subtasks, with individual entries | ✅ |
113
+ | Tool | Description | Read-Only Safe |
114
+ | :----------------------- | :----------------------------------------------------------------------------------------------------------------------- | :------------: |
115
+ | `get_card_outcomes` | Get all outcomes for a specific card | ✅ |
116
+ | `get_card_history` | Get the history of a specific card outcome | ✅ |
117
+ | `get_card_flow_history` | Get the card's movement (transitions) across workflows/columns with timing | ✅ |
118
+ | `get_card_blocked_times` | Get the full blocking history of a card | ✅ |
119
+ | `get_card_logged_time` | Get time logged on a card and its subtasks, with individual entries | ✅ |
101
120
  | `get_card_revisions` | Get the chronological change history (revisions) of a card; pass a revision number for the full card state at that point | ✅ |
102
121
 
103
122
  #### Relationships
@@ -108,25 +127,25 @@ Complete reference for all tools, resources, and prompts provided by the Busines
108
127
 
109
128
  #### Subtasks
110
129
 
111
- | Tool | Description | Read-Only Safe |
112
- | :-------------------- | :----------------------------------- | :------------: |
113
- | `get_card_subtasks` | Get all subtasks for a specific card | ✅ |
114
- | `get_card_subtask` | Get details of a specific subtask | ✅ |
115
- | `create_card_subtask` | Create a new subtask for a card | ❌ |
130
+ | Tool | Description | Read-Only Safe |
131
+ | :-------------------- | :------------------------------------------------------------------------ | :------------: |
132
+ | `get_card_subtasks` | Get all subtasks for a specific card | ✅ |
133
+ | `get_card_subtask` | Get details of a specific subtask | ✅ |
134
+ | `create_card_subtask` | Create a new subtask for a card | ❌ |
116
135
  | `update_card_subtask` | Update a subtask (description, owner, finished state, deadline, position) | ❌ |
117
- | `delete_card_subtask` | Delete a subtask from a card | ❌ ⚠️ |
136
+ | `delete_card_subtask` | Delete a subtask from a card | ❌ ⚠️ |
118
137
 
119
138
  #### Parent-Child Relationships
120
139
 
121
- | Tool | Description | Read-Only Safe |
122
- | :---------------------- | :----------------------------------------------------- | :------------: |
123
- | `get_card_parents` | Get a list of parent cards for a specific card | ✅ |
124
- | `get_card_parent` | Check if a card is a parent of a given card | ✅ |
125
- | `get_card_parent_graph` | Get parent cards including their parents (full graph) | ✅ |
126
- | `get_card_children` | Get a list of child cards of a specified parent card | ✅ |
140
+ | Tool | Description | Read-Only Safe |
141
+ | :---------------------- | :------------------------------------------------------------------------- | :------------: |
142
+ | `get_card_parents` | Get a list of parent cards for a specific card | ✅ |
143
+ | `get_card_parent` | Check if a card is a parent of a given card | ✅ |
144
+ | `get_card_parent_graph` | Get parent cards including their parents (full graph) | ✅ |
145
+ | `get_card_children` | Get a list of child cards of a specified parent card | ✅ |
127
146
  | `get_card_child_graph` | Get the hierarchical graph of a card's children (children of children too) | ✅ |
128
- | `add_card_parent` | Make a card a parent of a given card | ❌ |
129
- | `remove_card_parent` | Remove the link between a child card and a parent card | ❌ |
147
+ | `add_card_parent` | Make a card a parent of a given card | ❌ |
148
+ | `remove_card_parent` | Remove the link between a child card and a parent card | ❌ |
130
149
 
131
150
  #### Blocking
132
151
 
@@ -169,46 +188,46 @@ Complete reference for all tools, resources, and prompts provided by the Busines
169
188
 
170
189
  ### Workflow Management & Cycle Time Analysis (8 tools)
171
190
 
172
- | Tool | Description | Read-Only Safe |
173
- | :------------------------------------------ | :---------------------------------------------------------------------- | :------------: |
174
- | `list_workflows` | Get a list of workflows for a board | ✅ |
175
- | `get_workflow` | Get the details of a workflow | ✅ |
176
- | `get_workflow_cycle_time_columns` | Get workflow's cycle time columns | ✅ |
177
- | `get_workflow_effective_cycle_time_columns` | Get workflow's effective cycle time columns | ✅ |
178
- | `create_workflow` | Create a new workflow on a board (0=cards, 1=initiatives, 2=timeline) | ❌ |
179
- | `update_workflow` | Update a workflow (name, position, enabled/collapsible) | ❌ |
180
- | `link_related_workflow` | Link a workflow from another board as a related workflow | ❌ |
181
- | `unlink_related_workflow` | Remove a related workflow from a board | ❌ ⚠️ |
191
+ | Tool | Description | Read-Only Safe |
192
+ | :------------------------------------------ | :-------------------------------------------------------------------- | :------------: |
193
+ | `list_workflows` | Get a list of workflows for a board | ✅ |
194
+ | `get_workflow` | Get the details of a workflow | ✅ |
195
+ | `get_workflow_cycle_time_columns` | Get workflow's cycle time columns | ✅ |
196
+ | `get_workflow_effective_cycle_time_columns` | Get workflow's effective cycle time columns | ✅ |
197
+ | `create_workflow` | Create a new workflow on a board (0=cards, 1=initiatives, 2=timeline) | ❌ |
198
+ | `update_workflow` | Update a workflow (name, position, enabled/collapsible) | ❌ |
199
+ | `link_related_workflow` | Link a workflow from another board as a related workflow | ❌ |
200
+ | `unlink_related_workflow` | Remove a related workflow from a board | ❌ ⚠️ |
182
201
 
183
202
  ---
184
203
 
185
204
  ### Quick Setup — Batch (3 tools)
186
205
 
187
- | Tool | Description | Read-Only Safe |
188
- | :----------------------------- | :------------------------------------------------------------------------------------------------------ | :------------: |
189
- | `create_workspaces_and_boards` | Create up to 3 workspaces together with their boards and full board structure in one call | ❌ |
190
- | `create_boards_in_workspace` | Create up to 3 boards with their full structure (workflows, renamed default columns, columns, lanes) in one call | ❌ |
191
- | `configure_board_structure` | Configure an existing board's structure in one call: create/rename workflows, rename built-in columns, add columns and lanes | ❌ |
206
+ | Tool | Description | Read-Only Safe |
207
+ | :----------------------------- | :--------------------------------------------------------------------------------------------------------------------------- | :------------: |
208
+ | `create_workspaces_and_boards` | Create up to 3 workspaces together with their boards and full board structure in one call | ❌ |
209
+ | `create_boards_in_workspace` | Create up to 3 boards with their full structure (workflows, renamed default columns, columns, lanes) in one call | ❌ |
210
+ | `configure_board_structure` | Configure an existing board's structure in one call: create/rename workflows, rename built-in columns, add columns and lanes | ❌ |
192
211
 
193
212
  ---
194
213
 
195
214
  ### Docs (13 tools)
196
215
 
197
- | Tool | Description | Read-Only Safe |
198
- | :-------------------------- | :------------------------------------------------------------------------------------------------------- | :------------: |
199
- | `search_docs` | Search docs by title (case-insensitive substring), optionally including archived and personal docs | ✅ |
200
- | `get_docs_text_title_search`| Search docs by title AND content, returning matches with content snippets | ✅ |
201
- | `get_doc_hierarchy` | Get the hierarchical parent/child tree of docs, optionally rooted at a specific doc | ✅ |
202
- | `list_docs` | Get a list of docs (metadata only) with filters (ids, title, archived, important, parent) | ✅ |
203
- | `list_personal_docs` | Get a list of your personal docs (metadata only) | ✅ |
204
- | `get_doc_content_batch` | Get the full details (including content) of up to 20 docs in one call (shared or personal) | ✅ |
205
- | `get_docs_for_boards_batch` | Get the docs pinned to each of up to 10 boards in one call | ✅ |
206
- | `create_doc` | Create a new doc, optionally as a child of another doc | ❌ |
207
- | `update_doc` | Update the title, content, position, or parent of an existing doc | ❌ |
208
- | `archive_doc` | Archive a doc | ❌ |
209
- | `unarchive_doc` | Restore an archived doc | ❌ |
210
- | `create_personal_doc` | Create a new personal doc (visible only to you) | ❌ |
211
- | `update_personal_doc` | Update the title, content, or position of an existing personal doc | ❌ |
216
+ | Tool | Description | Read-Only Safe |
217
+ | :--------------------------- | :------------------------------------------------------------------------------------------------- | :------------: |
218
+ | `search_docs` | Search docs by title (case-insensitive substring), optionally including archived and personal docs | ✅ |
219
+ | `get_docs_text_title_search` | Search docs by title AND content, returning matches with content snippets | ✅ |
220
+ | `get_doc_hierarchy` | Get the hierarchical parent/child tree of docs, optionally rooted at a specific doc | ✅ |
221
+ | `list_docs` | Get a list of docs (metadata only) with filters (ids, title, archived, important, parent) | ✅ |
222
+ | `list_personal_docs` | Get a list of your personal docs (metadata only) | ✅ |
223
+ | `get_doc_content_batch` | Get the full details (including content) of up to 20 docs in one call (shared or personal) | ✅ |
224
+ | `get_docs_for_boards_batch` | Get the docs pinned to each of up to 10 boards in one call | ✅ |
225
+ | `create_doc` | Create a new doc, optionally as a child of another doc | ❌ |
226
+ | `update_doc` | Update the title, content, position, or parent of an existing doc | ❌ |
227
+ | `archive_doc` | Archive a doc | ❌ |
228
+ | `unarchive_doc` | Restore an archived doc | ❌ |
229
+ | `create_personal_doc` | Create a new personal doc (visible only to you) | ❌ |
230
+ | `update_personal_doc` | Update the title, content, or position of an existing personal doc | ❌ |
212
231
 
213
232
  ---
214
233
 
@@ -236,13 +255,14 @@ Complete reference for all tools, resources, and prompts provided by the Busines
236
255
 
237
256
  MCP resources provide structured data access via URI. Clients can read resources directly without invoking tools.
238
257
 
239
- | URI | Name | Description | Listable |
240
- | :-------------------------------------- | :----------- | :---------------------------------- | :------: |
241
- | `businessmap://workspaces` | `workspaces` | List all workspaces | ✅ |
242
- | `businessmap://boards` | `boards` | List all boards | ✅ |
243
- | `businessmap://boards/{board_id}` | `board` | Get details of a specific board | ❌ |
244
- | `businessmap://boards/{board_id}/cards` | `cards` | List all cards for a specific board | ✅ |
245
- | `businessmap://cards/{card_id}` | `card` | Get details of a specific card | ❌ |
258
+ | URI | Name | Description | Listable |
259
+ | :------------------------------------------------------------------- | :----------- | :------------------------------------------------------------------- | :------: |
260
+ | `businessmap://workspaces` | `workspaces` | List all workspaces | ✅ |
261
+ | `businessmap://boards` | `boards` | List all boards | ✅ |
262
+ | `businessmap://boards/{board_id}` | `board` | Get details of a specific board | ❌ |
263
+ | `businessmap://boards/{board_id}/cards` | `cards` | Read the first compact card page (50 items) with pagination metadata | ✅ |
264
+ | `businessmap://boards/{board_id}/cards/pages/{page}/size/{per_page}` | `card-page` | Read a bounded card page (maximum 100) | ❌ |
265
+ | `businessmap://cards/{card_id}` | `card` | Get details of a specific card | ❌ |
246
266
 
247
267
  ---
248
268
 
@@ -263,7 +283,7 @@ Analyze a board's performance: flow efficiency, bottlenecks, cycle time, and wor
263
283
  **Workflow:**
264
284
 
265
285
  1. Uses `get_current_board_structure` to retrieve the full board structure
266
- 2. Uses `list_cards` to retrieve all active cards
286
+ 2. Uses compact, paginated `list_cards` calls to retrieve active cards
267
287
  3. Uses `get_workflow_cycle_time_columns` for each workflow
268
288
  4. Delivers a structured analysis covering flow efficiency, cycle time, workload distribution, and actionable recommendations
269
289
 
@@ -282,8 +302,8 @@ Generate a comprehensive status report for a board, including cards summary, pro
282
302
  **Workflow:**
283
303
 
284
304
  1. Uses `get_current_board_structure` to get the board structure
285
- 2. Uses `list_cards` to get all cards
286
- 3. Uses `get_card` for detailed info on a sample of cards
305
+ 2. Uses compact, paginated `list_cards` for a bounded card snapshot
306
+ 3. Uses summary-level `get_card` for detailed info on a sample of cards
287
307
  4. Generates a structured report with: Executive Summary, Column Breakdown, Recently Updated Cards, Risks & Blockers, and Next Steps
288
308
 
289
309
  ---
@@ -322,7 +342,7 @@ Generate a high-level status overview of a workspace, including all boards and t
322
342
 
323
343
  1. Uses `get_workspace` to get workspace details
324
344
  2. Uses `list_boards` with `workspace_id` filter to list all boards
325
- 3. Uses `list_cards` for each board to get active card counts
345
+ 3. Uses bounded, compact `list_cards` calls for each board to get active card counts
326
346
  4. Uses `get_current_board_structure` for up to 3 boards
327
347
  5. Delivers a structured overview with: Workspace Summary, Board Summaries, Highlights, and Recommendations
328
348
 
@@ -336,4 +356,4 @@ When `BUSINESSMAP_READ_ONLY_MODE=true`, only tools marked ✅ in the "Read-Only
336
356
  - Granting read-only access to AI assistants
337
357
  - Auditing and reporting use cases
338
358
 
339
- > Note: All 5 resources and all 4 prompts are available regardless of read-only mode setting.
359
+ > Note: All 6 resources and all 4 prompts are available regardless of read-only mode setting.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edicarlos.lds/businessmap-mcp",
3
- "version": "3.0.0",
3
+ "version": "4.0.0",
4
4
  "description": "Model Context Protocol server for BusinessMap (Kanbanize) integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -11,15 +11,19 @@
11
11
  "dist",
12
12
  "docs",
13
13
  "README.md",
14
+ "CONTRIBUTING.md",
15
+ "SECURITY.md",
14
16
  "LICENSE"
15
17
  ],
16
18
  "scripts": {
17
- "build": "tsc",
19
+ "build": "tsc -p tsconfig.build.json",
18
20
  "postbuild": "chmod +x dist/index.js",
19
21
  "start": "node dist/index.js",
20
22
  "dev": "tsx src/index.ts",
21
23
  "watch": "tsx --watch src/index.ts",
22
24
  "test": "jest",
25
+ "eval:hierarchy": "jest --runInBand src/server/tools/board-tools.test.ts src/server/tools/card-tools.test.ts src/server/resources/card-resources.test.ts",
26
+ "test:coverage": "jest --coverage --runInBand",
23
27
  "test:npx": "bash scripts/test-npx.sh",
24
28
  "publish:npm": "bash scripts/publish-npm.sh",
25
29
  "publish:github": "bash scripts/publish-github.sh",
@@ -65,32 +69,33 @@
65
69
  "@modelcontextprotocol/sdk": "^1.27.1",
66
70
  "axios": "^1.12.0",
67
71
  "cors": "^2.8.5",
68
- "dotenv": "^16.6.1",
72
+ "dotenv": "^17.4.2",
69
73
  "express": "^5.1.0",
70
- "zod": "^3.22.0"
74
+ "zod": "^4.4.3"
71
75
  },
72
76
  "devDependencies": {
77
+ "@eslint/js": "^10.0.1",
73
78
  "@types/cors": "^2.8.19",
74
79
  "@types/express": "^5.0.5",
75
- "@types/jest": "^29.5.14",
76
- "@types/node": "^20.19.33",
77
- "@typescript-eslint/eslint-plugin": "^8.58.1",
78
- "@typescript-eslint/parser": "^8.58.1",
79
- "eslint": "^8.0.0",
80
- "jest": "^29.0.0",
81
- "knip": "^6.16.1",
82
- "prettier": "^3.0.0",
83
- "ts-jest": "^29.0.0",
80
+ "@types/jest": "^30.0.0",
81
+ "@types/node": "^26.1.1",
82
+ "eslint": "^10.7.0",
83
+ "jest": "^30.4.2",
84
+ "knip": "^6.29.0",
85
+ "prettier": "^3.9.6",
86
+ "ts-jest": "^29.4.12",
84
87
  "tsx": "^4.22.4",
85
- "typescript": "^5.0.0"
88
+ "typescript": "^5.0.0",
89
+ "typescript-eslint": "^8.65.0"
86
90
  },
87
91
  "engines": {
88
- "node": ">=18.0.0"
92
+ "node": ">=22.0.0"
89
93
  },
90
94
  "overrides": {
91
95
  "hono": ">=4.12.25",
92
96
  "form-data": ">=4.0.6",
93
- "js-yaml": ">=4.2.0",
94
- "@babel/core": ">=7.29.6"
97
+ "js-yaml": ">=5.2.2",
98
+ "@babel/core": "^7.29.6",
99
+ "brace-expansion": ">=5.0.8"
95
100
  }
96
101
  }