@edicarlos.lds/businessmap-mcp 3.1.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CONTRIBUTING.md +11 -8
  2. package/README.md +17 -17
  3. package/dist/client/businessmap-client.d.ts.map +1 -1
  4. package/dist/client/businessmap-client.js +3 -3
  5. package/dist/client/businessmap-client.js.map +1 -1
  6. package/dist/client/modules/index.d.ts +0 -3
  7. package/dist/client/modules/index.d.ts.map +1 -1
  8. package/dist/client/modules/index.js +0 -1
  9. package/dist/client/modules/index.js.map +1 -1
  10. package/dist/config/environment.d.ts.map +1 -1
  11. package/dist/config/environment.js +5 -3
  12. package/dist/config/environment.js.map +1 -1
  13. package/dist/index.d.ts +2 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/schemas/board-schemas.d.ts +6 -6
  17. package/dist/schemas/board-schemas.d.ts.map +1 -1
  18. package/dist/schemas/board-schemas.js +6 -2
  19. package/dist/schemas/board-schemas.js.map +1 -1
  20. package/dist/schemas/card-schemas.d.ts +16 -6
  21. package/dist/schemas/card-schemas.d.ts.map +1 -1
  22. package/dist/schemas/card-schemas.js +14 -6
  23. package/dist/schemas/card-schemas.js.map +1 -1
  24. package/dist/server/mcp-server.d.ts.map +1 -1
  25. package/dist/server/mcp-server.js +1 -1
  26. package/dist/server/mcp-server.js.map +1 -1
  27. package/dist/server/prompts/base-prompt.d.ts +12 -0
  28. package/dist/server/prompts/base-prompt.d.ts.map +1 -1
  29. package/dist/server/prompts/base-prompt.js +9 -1
  30. package/dist/server/prompts/base-prompt.js.map +1 -1
  31. package/dist/server/prompts/board-prompts.d.ts.map +1 -1
  32. package/dist/server/prompts/board-prompts.js +6 -5
  33. package/dist/server/prompts/board-prompts.js.map +1 -1
  34. package/dist/server/prompts/card-prompts.d.ts.map +1 -1
  35. package/dist/server/prompts/card-prompts.js +2 -1
  36. package/dist/server/prompts/card-prompts.js.map +1 -1
  37. package/dist/server/prompts/index.d.ts +0 -1
  38. package/dist/server/prompts/index.d.ts.map +1 -1
  39. package/dist/server/prompts/index.js.map +1 -1
  40. package/dist/server/prompts/workspace-prompts.d.ts.map +1 -1
  41. package/dist/server/prompts/workspace-prompts.js +4 -3
  42. package/dist/server/prompts/workspace-prompts.js.map +1 -1
  43. package/dist/server/resources/card-resources.d.ts.map +1 -1
  44. package/dist/server/resources/card-resources.js +22 -4
  45. package/dist/server/resources/card-resources.js.map +1 -1
  46. package/dist/server/tools/base-tool.d.ts.map +1 -1
  47. package/dist/server/tools/base-tool.js +7 -5
  48. package/dist/server/tools/base-tool.js.map +1 -1
  49. package/dist/server/tools/board-tools.d.ts +0 -6
  50. package/dist/server/tools/board-tools.d.ts.map +1 -1
  51. package/dist/server/tools/board-tools.js +32 -72
  52. package/dist/server/tools/board-tools.js.map +1 -1
  53. package/dist/server/tools/card-tools.d.ts.map +1 -1
  54. package/dist/server/tools/card-tools.js +57 -12
  55. package/dist/server/tools/card-tools.js.map +1 -1
  56. package/dist/server/tools/index.d.ts +0 -2
  57. package/dist/server/tools/index.d.ts.map +1 -1
  58. package/dist/server/tools/index.js +0 -1
  59. package/dist/server/tools/index.js.map +1 -1
  60. package/docs/RELEASE_PROCESS.md +88 -106
  61. package/docs/TOOLS.md +123 -106
  62. package/package.json +20 -19
@@ -1,146 +1,128 @@
1
1
  # Release Process
2
2
 
3
- This document describes the automated release process for the BusinessMap MCP Server.
3
+ Releases are fully automated by the [Release workflow](../.github/workflows/release.yml).
4
+ Merging to `main` is the only manual step.
4
5
 
5
- ## 🚀 Automated Process
6
+ ## 🚀 What Happens on Every Push to `main`
6
7
 
7
- The release process has been fully automated and includes:
8
+ 1. **Validation**: lint, unit tests, build, knip and, when the smoke secrets are
9
+ configured, the `test:npx` package smoke test.
10
+ 2. **Version calculation** from [Conventional Commits](https://www.conventionalcommits.org)
11
+ since the last `vX.Y.Z` tag:
8
12
 
9
- 1. **Version bump** (patch, minor, major)
10
- 2. **Automatic release notes generation** based on commits
11
- 3. **Git tag creation**
12
- 4. **Push tag to GitHub**
13
- 5. **GitHub release creation** with release notes
14
- 6. **NPM publication**
13
+ | Commits since last tag | Release |
14
+ |---|---|
15
+ | `feat!:`, `fix(scope)!:` or a `BREAKING CHANGE:` footer | major |
16
+ | `feat:` | minor |
17
+ | `fix:`, `perf:` (including `fix(deps):` from Dependabot) | patch |
18
+ | only `chore:`, `docs:`, `test:`, `ci:`, `refactor:`, ... | no release |
15
19
 
16
- ## 📝 How to Make a Release
20
+ 3. **Release commit and tag**: `chore(release): X.Y.Z` plus tag `vX.Y.Z`, pushed to `main`.
21
+ 4. **npm publication** with provenance, through npm Trusted Publishing (no token stored in GitHub).
22
+ 5. **GitHub release** with the generated release notes.
17
23
 
18
- ### 1. Preparation
24
+ Runs are serialized, so pushes made while a release is running are released by
25
+ the next run.
19
26
 
20
- Before making a release, ensure that:
27
+ ## 🏷️ Commit Convention
21
28
 
22
- - [ ] All changes are committed
23
- - [ ] You are authenticated to NPM: `npm whoami` or make logging via `npm login`
24
- - [ ] You are authenticated to GitHub CLI: `gh auth status`
25
- - [ ] Working directory is clean
29
+ Pull requests are squash merged, so the **PR title** becomes the commit message
30
+ that drives the release. Use:
26
31
 
27
- ### 2. Release Notes Preview
32
+ ```text
33
+ feat: add a new capability -> minor
34
+ fix: correct existing behavior -> patch
35
+ perf: make something faster -> patch
36
+ feat!: remove deprecated tool -> major
37
+ docs: / refactor: / test: / chore: -> no release on their own
38
+ ```
28
39
 
29
- To see how the release notes will look before publishing:
40
+ For a breaking change without `!`, add a footer to the commit body:
30
41
 
31
- ```bash
32
- npm run preview:release
33
- # or for a specific version:
34
- npm run preview:release 1.2.3
42
+ ```text
43
+ BREAKING CHANGE: list_cards no longer accepts board_name
35
44
  ```
36
45
 
37
- ### 3. Publication
38
-
39
- Execute the publish npm command:
46
+ ## 👀 Previewing the Next Release
40
47
 
41
48
  ```bash
42
- npm run publish:npm
49
+ npm run preview:release # next version and notes, as the workflow would compute them
50
+ npm run preview:release 1.2.3 # notes for an explicit version
43
51
  ```
44
52
 
45
- The script will:
46
-
47
- 1. Verify authentications
48
- 2. Build and test
49
- 3. Show version options (patch/minor/major)
50
- 4. Generate release notes preview
51
- 5. Confirm publication
52
- 6. Execute the entire process automatically
53
-
54
- ## 📋 Release Notes Format
55
-
56
- Release notes are automatically generated based on commits since the last tag and organized by category:
57
-
58
- ### 🚀 New Features
59
-
60
- - Commits starting with `feat:`, `feature:` or `FEAT:`
61
-
62
- ### 🐛 Bug Fixes
63
-
64
- - Commits starting with `fix:` or `FIX:`
65
-
66
- ### ♻️ Code Refactoring
67
-
68
- - Commits starting with `refactor:` or `REFACTOR:`
69
-
70
- ### 📚 Documentation
71
-
72
- - Commits starting with `docs:`, `doc:` or `DOCS:`
73
-
74
- ### 🔧 Other Changes
75
-
76
- - All other commits
53
+ The workflow can also be started manually from **Actions → Release → Run workflow**
54
+ with **dry_run** checked to see the version and notes without publishing anything.
77
55
 
78
- ## 🏷️ Commit Convention
79
-
80
- To maximize release notes quality, it's recommended to use the following prefixes:
81
-
82
- ```bash
83
- feat: add new functionality
84
- fix: fix bug
85
- docs: update documentation
86
- refactor: refactor code
87
- test: add or update tests
88
- chore: maintenance tasks
89
- ```
56
+ ## 🎛️ Forcing a Specific Version
90
57
 
91
- ## 🔧 Available Scripts
58
+ Bump `version` in `package.json` (and `package-lock.json`) in a pull request,
59
+ for example with `npm version 5.0.0 --no-git-tag-version`. When it lands on
60
+ `main`, the workflow sees an unpublished version, tags that commit and releases
61
+ it as is instead of computing a bump.
92
62
 
93
- - `npm run publish:npm` - Publish to NPM only
94
- - `npm run publish:github` - Create GitHub release only
95
- - `npm run preview:release` - Preview release notes
96
- - `scripts/generate-release-notes.sh` - Generate release notes for specific version
63
+ ## 📋 Release Notes Format
97
64
 
98
- ## 🎯 Example of Generated Release Notes
65
+ Commits since the previous tag are grouped by type, each one credited to its
66
+ GitHub author:
99
67
 
100
68
  ```markdown
101
69
  ## What's Changed
102
70
 
71
+ ### ⚠️ Breaking Changes
103
72
  ### 🚀 New Features
104
- - add user authentication support by @username
105
- - implement card filtering by @username
106
-
107
73
  ### 🐛 Bug Fixes
108
- - fix memory leak in client by @username
109
- - resolve API timeout issues by @username
110
-
74
+ ### ⚡ Performance
75
+ ### ♻️ Code Refactoring
111
76
  ### 📚 Documentation
112
- - update README with new examples by @username
77
+ ### 📦 Dependencies (scope `deps` / `deps-dev`)
78
+ ### 🔧 Other Changes
113
79
 
114
80
  **Full Changelog**: https://github.com/edicarloslds/businessmap-mcp/compare/v1.0.0...v1.1.0
115
81
  ```
116
82
 
117
- ## 🚨 Troubleshooting
118
-
119
- ### NPM Authentication Error
83
+ ## ⚙️ One-time Setup
84
+
85
+ 1. **GitHub environment**: in *Settings → Environments*, create `npm` and under
86
+ *Deployment branches and tags* select *Selected branches and tags* with only
87
+ `main`. Only the release job running on `main` can then request an npm
88
+ publish token.
89
+ 2. **npm Trusted Publishing**: on npmjs.com, open the package → *Settings* →
90
+ *Trusted Publisher* → *GitHub Actions* and set:
91
+ - Organization or user: `edicarloslds`
92
+ - Repository: `businessmap-mcp`
93
+ - Workflow filename: `release.yml`
94
+ - Environment name: `npm`
95
+ - Allowed actions: `npm publish` (besides the default `npm stage publish`),
96
+ since the workflow publishes directly without a manual approval step
97
+ 3. **Smoke test secrets** (optional): add environment secrets to `npm` or repository secrets
98
+ `BUSINESSMAP_SMOKE_API_URL` and `BUSINESSMAP_SMOKE_API_TOKEN`, ideally a
99
+ read-only token. Without them the smoke test step is skipped.
100
+ 4. **Squash merge only**: in *Settings → General → Pull Requests*, keep only
101
+ *Allow squash merging* with the default message set to the PR title.
102
+ 5. **Branch protection** (if enabled later): allow GitHub Actions to push the
103
+ release commit and tag to `main`, otherwise the release push is rejected.
104
+
105
+ ## 🔧 Scripts
106
+
107
+ - `scripts/release.sh` - non-interactive release used by the workflow (`DRY_RUN=true` to simulate)
108
+ - `scripts/next-version.sh` - bump type implied by the commits in a range
109
+ - `scripts/generate-release-notes.sh` - release notes for a version and commit range
110
+ - `scripts/preview-release-notes.sh` - local preview of the next release
120
111
 
121
- ```bash
122
- npm login
123
- ```
112
+ ## 🚨 Troubleshooting
124
113
 
125
- ### GitHub Authentication Error
114
+ ### A release failed halfway
126
115
 
127
- ```bash
128
- gh auth login
129
- ```
116
+ Re-run the failed workflow. `scripts/release.sh` is idempotent: when the version
117
+ in `package.json` is missing from npm or has no GitHub release yet, it finishes
118
+ that release instead of computing a new one.
130
119
 
131
- ### Working Directory not clean
120
+ ### Merged a fix but nothing was released
132
121
 
133
- ```bash
134
- git status
135
- git add .
136
- git commit -m "prepare for release"
137
- ```
138
-
139
- ### Tag already exists
122
+ Check that the squash commit on `main` starts with `fix:`/`feat:`/`perf:` and
123
+ run `npm run preview:release` locally to see what the workflow detects.
140
124
 
141
- If something goes wrong during the process, you can remove the created tag:
125
+ ### npm publish fails with 404 / ENEEDAUTH
142
126
 
143
- ```bash
144
- git tag -d v1.2.3
145
- git push origin :refs/tags/v1.2.3
146
- ```
127
+ The Trusted Publisher on npmjs.com must match the repository and the
128
+ `release.yml` filename exactly.
package/docs/TOOLS.md CHANGED
@@ -4,16 +4,32 @@ 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 | 6 |
11
- | Prompts | 4 |
12
-
13
- The counts above describe the default `full` profile. Set
14
- `BUSINESSMAP_TOOL_PROFILE=essential` to register a smaller catalog of common
15
- workspace, board, card, docs, user, and health operations. Read-only mode is
16
- applied independently and removes mutation tools from either profile.
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.
24
+
25
+ ## Architecture inspiration
26
+
27
+ The progressive-disclosure architecture used by this server was inspired by
28
+ [“MCPs need to be designed too”](https://www.raindrop.ai/blog/mcp-design/), by
29
+ Jackson Ferrigno at Raindrop. The article's tool-hierarchy approach informed
30
+ the separation between compact discovery, focused detail, and deeper forensic
31
+ operations in this project. Credit belongs to the author and the Raindrop team
32
+ for publishing the design and its evaluation results.
17
33
 
18
34
  ---
19
35
 
@@ -30,23 +46,24 @@ applied independently and removes mutation tools from either profile.
30
46
 
31
47
  ---
32
48
 
33
- ### Board Management (13 tools)
34
-
35
- | Tool | Description | Read-Only Safe |
36
- | :---------------------------- | :--------------------------------------------------------------------------------------------- | :------------: |
37
- | `list_boards` | Get a list of boards with optional workspace filter | ✅ |
38
- | `search_board` | Search for a board by ID or name, with fallback to list | ✅ |
39
- | `get_columns` | Get all columns for a board | ✅ |
40
- | `get_lanes` | Get all lanes/swimlanes for a board | ✅ |
41
- | `get_lane` | Get details of a specific lane/swimlane | ✅ |
42
- | `get_current_board_structure` | Get the complete structure of a board (workflows, columns, lanes, configs) | ✅ |
43
- | `create_board` | Create a new board in a workspace | ❌ |
44
- | `update_board` | Update the name and/or description of a board | ❌ |
45
- | `create_lane` | Create a new lane/swimlane in a board (supports sub-lanes via `parent_lane_id`) | ❌ |
46
- | `update_lane` | Update a lane (name, description, color, position, parent lane) | ❌ |
49
+ ### Board Management (14 tools)
50
+
51
+ | Tool | Description | Read-Only Safe |
52
+ | :---------------------------- | :-------------------------------------------------------------------------------------------- | :------------: |
53
+ | `list_boards` | Discover compact board candidates; set `detail_level=full` for complete board payloads | ✅ |
54
+ | `search_board` | Find compact candidates by name fragment; use `get_board` when the ID is known | ✅ |
55
+ | `get_board` | Get board details without loading its structure | ✅ |
56
+ | `get_columns` | Get all columns for a board | ✅ |
57
+ | `get_lanes` | Get all lanes/swimlanes for a board | ✅ |
58
+ | `get_lane` | Get details of a specific lane/swimlane | ✅ |
59
+ | `get_current_board_structure` | Get the complete structure of a board (workflows, columns, lanes, configs) | ✅ |
60
+ | `create_board` | Create a new board in a workspace | ❌ |
61
+ | `update_board` | Update the name and/or description of a board | ❌ |
62
+ | `create_lane` | Create a new lane/swimlane in a board (supports sub-lanes via `parent_lane_id`) | ❌ |
63
+ | `update_lane` | Update a lane (name, description, color, position, parent lane) | ❌ |
47
64
  | `create_column` | Create a new column (main or sub-column). Section: 1=Backlog, 2=Requested, 3=Progress, 4=Done | ❌ |
48
- | `update_column` | Update the details of a specific column | ❌ |
49
- | `delete_column` | Delete a column from a board | ❌ ⚠️ |
65
+ | `update_column` | Update the details of a specific column | ❌ |
66
+ | `delete_column` | Delete a column from a board | ❌ ⚠️ |
50
67
 
51
68
  ---
52
69
 
@@ -54,18 +71,18 @@ applied independently and removes mutation tools from either profile.
54
71
 
55
72
  #### Basic Operations
56
73
 
57
- | Tool | Description | Read-Only Safe |
58
- | :--------------- | :------------------------------------------- | :------------: |
59
- | `list_cards` | Get cards from a board with optional filters | ✅ |
60
- | `search_cards` | Search cards across all boards with advanced filters (owners, priorities, sizes, blocked state, dates, lifecycle state) | ✅ |
61
- | `get_card` | Get detailed card information | ✅ |
62
- | `get_card_size` | Get the size/points of a specific card | ✅ |
63
- | `get_card_types` | Get all available card types | ✅ |
64
- | `create_card` | Create a new card in a board | ❌ |
65
- | `move_card` | Move a card to a different column or lane | ❌ |
66
- | `update_card` | Update card properties | ❌ |
67
- | `set_card_size` | Set the size/points of a specific card | ❌ |
68
- | `delete_card` | Permanently delete a card (irreversible) | ❌ ⚠️ |
74
+ | Tool | Description | Read-Only Safe |
75
+ | :--------------- | :------------------------------------------------------------------- | :------------: |
76
+ | `list_cards` | Discover a compact, paginated page of cards on a board | ✅ |
77
+ | `search_cards` | Discover compact cards across boards with advanced filters | ✅ |
78
+ | `get_card` | Get a card summary; set `detail_level=full` for the complete payload | ✅ |
79
+ | `get_card_size` | Get the size/points of a specific card | ✅ |
80
+ | `get_card_types` | Get all available card types | ✅ |
81
+ | `create_card` | Create a new card in a board | ❌ |
82
+ | `move_card` | Move a card to a different column or lane | ❌ |
83
+ | `update_card` | Update card properties | ❌ |
84
+ | `set_card_size` | Set the size/points of a specific card | ❌ |
85
+ | `delete_card` | Permanently delete a card (irreversible) | ❌ ⚠️ |
69
86
 
70
87
  `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:
71
88
 
@@ -78,11 +95,11 @@ applied independently and removes mutation tools from either profile.
78
95
  }
79
96
  ```
80
97
 
81
- By default, `list_cards` keeps its legacy array response. Set
82
- `include_pagination: true` to receive `{ data, pagination }`; use `page` and
83
- `per_page` to select the requested page. Set `compact: true` on `list_cards` or
84
- `search_cards` to return only identifiers, placement, ownership, status, and
85
- planning fields.
98
+ By default, `list_cards` returns a compact `{ data, pagination }` page bounded
99
+ to 50 cards, and `search_cards` also defaults to compact results with a 50-card
100
+ page size. Use `page` and `per_page` to navigate. Set `compact: false` only when
101
+ full list payloads are required; set `include_pagination: false` on `list_cards`
102
+ only for legacy array compatibility.
86
103
 
87
104
  #### Comments
88
105
 
@@ -102,13 +119,13 @@ planning fields.
102
119
 
103
120
  #### Outcomes & History
104
121
 
105
- | Tool | Description | Read-Only Safe |
106
- | :----------------------- | :----------------------------------------------------------------------- | :------------: |
107
- | `get_card_outcomes` | Get all outcomes for a specific card | ✅ |
108
- | `get_card_history` | Get the history of a specific card outcome | ✅ |
109
- | `get_card_flow_history` | Get the card's movement (transitions) across workflows/columns with timing | ✅ |
110
- | `get_card_blocked_times` | Get the full blocking history of a card | ✅ |
111
- | `get_card_logged_time` | Get time logged on a card and its subtasks, with individual entries | ✅ |
122
+ | Tool | Description | Read-Only Safe |
123
+ | :----------------------- | :----------------------------------------------------------------------------------------------------------------------- | :------------: |
124
+ | `get_card_outcomes` | Get all outcomes for a specific card | ✅ |
125
+ | `get_card_history` | Get the history of a specific card outcome | ✅ |
126
+ | `get_card_flow_history` | Get the card's movement (transitions) across workflows/columns with timing | ✅ |
127
+ | `get_card_blocked_times` | Get the full blocking history of a card | ✅ |
128
+ | `get_card_logged_time` | Get time logged on a card and its subtasks, with individual entries | ✅ |
112
129
  | `get_card_revisions` | Get the chronological change history (revisions) of a card; pass a revision number for the full card state at that point | ✅ |
113
130
 
114
131
  #### Relationships
@@ -119,25 +136,25 @@ planning fields.
119
136
 
120
137
  #### Subtasks
121
138
 
122
- | Tool | Description | Read-Only Safe |
123
- | :-------------------- | :----------------------------------- | :------------: |
124
- | `get_card_subtasks` | Get all subtasks for a specific card | ✅ |
125
- | `get_card_subtask` | Get details of a specific subtask | ✅ |
126
- | `create_card_subtask` | Create a new subtask for a card | ❌ |
139
+ | Tool | Description | Read-Only Safe |
140
+ | :-------------------- | :------------------------------------------------------------------------ | :------------: |
141
+ | `get_card_subtasks` | Get all subtasks for a specific card | ✅ |
142
+ | `get_card_subtask` | Get details of a specific subtask | ✅ |
143
+ | `create_card_subtask` | Create a new subtask for a card | ❌ |
127
144
  | `update_card_subtask` | Update a subtask (description, owner, finished state, deadline, position) | ❌ |
128
- | `delete_card_subtask` | Delete a subtask from a card | ❌ ⚠️ |
145
+ | `delete_card_subtask` | Delete a subtask from a card | ❌ ⚠️ |
129
146
 
130
147
  #### Parent-Child Relationships
131
148
 
132
- | Tool | Description | Read-Only Safe |
133
- | :---------------------- | :----------------------------------------------------- | :------------: |
134
- | `get_card_parents` | Get a list of parent cards for a specific card | ✅ |
135
- | `get_card_parent` | Check if a card is a parent of a given card | ✅ |
136
- | `get_card_parent_graph` | Get parent cards including their parents (full graph) | ✅ |
137
- | `get_card_children` | Get a list of child cards of a specified parent card | ✅ |
149
+ | Tool | Description | Read-Only Safe |
150
+ | :---------------------- | :------------------------------------------------------------------------- | :------------: |
151
+ | `get_card_parents` | Get a list of parent cards for a specific card | ✅ |
152
+ | `get_card_parent` | Check if a card is a parent of a given card | ✅ |
153
+ | `get_card_parent_graph` | Get parent cards including their parents (full graph) | ✅ |
154
+ | `get_card_children` | Get a list of child cards of a specified parent card | ✅ |
138
155
  | `get_card_child_graph` | Get the hierarchical graph of a card's children (children of children too) | ✅ |
139
- | `add_card_parent` | Make a card a parent of a given card | ❌ |
140
- | `remove_card_parent` | Remove the link between a child card and a parent card | ❌ |
156
+ | `add_card_parent` | Make a card a parent of a given card | ❌ |
157
+ | `remove_card_parent` | Remove the link between a child card and a parent card | ❌ |
141
158
 
142
159
  #### Blocking
143
160
 
@@ -180,46 +197,46 @@ planning fields.
180
197
 
181
198
  ### Workflow Management & Cycle Time Analysis (8 tools)
182
199
 
183
- | Tool | Description | Read-Only Safe |
184
- | :------------------------------------------ | :---------------------------------------------------------------------- | :------------: |
185
- | `list_workflows` | Get a list of workflows for a board | ✅ |
186
- | `get_workflow` | Get the details of a workflow | ✅ |
187
- | `get_workflow_cycle_time_columns` | Get workflow's cycle time columns | ✅ |
188
- | `get_workflow_effective_cycle_time_columns` | Get workflow's effective cycle time columns | ✅ |
189
- | `create_workflow` | Create a new workflow on a board (0=cards, 1=initiatives, 2=timeline) | ❌ |
190
- | `update_workflow` | Update a workflow (name, position, enabled/collapsible) | ❌ |
191
- | `link_related_workflow` | Link a workflow from another board as a related workflow | ❌ |
192
- | `unlink_related_workflow` | Remove a related workflow from a board | ❌ ⚠️ |
200
+ | Tool | Description | Read-Only Safe |
201
+ | :------------------------------------------ | :-------------------------------------------------------------------- | :------------: |
202
+ | `list_workflows` | Get a list of workflows for a board | ✅ |
203
+ | `get_workflow` | Get the details of a workflow | ✅ |
204
+ | `get_workflow_cycle_time_columns` | Get workflow's cycle time columns | ✅ |
205
+ | `get_workflow_effective_cycle_time_columns` | Get workflow's effective cycle time columns | ✅ |
206
+ | `create_workflow` | Create a new workflow on a board (0=cards, 1=initiatives, 2=timeline) | ❌ |
207
+ | `update_workflow` | Update a workflow (name, position, enabled/collapsible) | ❌ |
208
+ | `link_related_workflow` | Link a workflow from another board as a related workflow | ❌ |
209
+ | `unlink_related_workflow` | Remove a related workflow from a board | ❌ ⚠️ |
193
210
 
194
211
  ---
195
212
 
196
213
  ### Quick Setup — Batch (3 tools)
197
214
 
198
- | Tool | Description | Read-Only Safe |
199
- | :----------------------------- | :------------------------------------------------------------------------------------------------------ | :------------: |
200
- | `create_workspaces_and_boards` | Create up to 3 workspaces together with their boards and full board structure in one call | ❌ |
201
- | `create_boards_in_workspace` | Create up to 3 boards with their full structure (workflows, renamed default columns, columns, lanes) in one call | ❌ |
202
- | `configure_board_structure` | Configure an existing board's structure in one call: create/rename workflows, rename built-in columns, add columns and lanes | ❌ |
215
+ | Tool | Description | Read-Only Safe |
216
+ | :----------------------------- | :--------------------------------------------------------------------------------------------------------------------------- | :------------: |
217
+ | `create_workspaces_and_boards` | Create up to 3 workspaces together with their boards and full board structure in one call | ❌ |
218
+ | `create_boards_in_workspace` | Create up to 3 boards with their full structure (workflows, renamed default columns, columns, lanes) in one call | ❌ |
219
+ | `configure_board_structure` | Configure an existing board's structure in one call: create/rename workflows, rename built-in columns, add columns and lanes | ❌ |
203
220
 
204
221
  ---
205
222
 
206
223
  ### Docs (13 tools)
207
224
 
208
- | Tool | Description | Read-Only Safe |
209
- | :-------------------------- | :------------------------------------------------------------------------------------------------------- | :------------: |
210
- | `search_docs` | Search docs by title (case-insensitive substring), optionally including archived and personal docs | ✅ |
211
- | `get_docs_text_title_search`| Search docs by title AND content, returning matches with content snippets | ✅ |
212
- | `get_doc_hierarchy` | Get the hierarchical parent/child tree of docs, optionally rooted at a specific doc | ✅ |
213
- | `list_docs` | Get a list of docs (metadata only) with filters (ids, title, archived, important, parent) | ✅ |
214
- | `list_personal_docs` | Get a list of your personal docs (metadata only) | ✅ |
215
- | `get_doc_content_batch` | Get the full details (including content) of up to 20 docs in one call (shared or personal) | ✅ |
216
- | `get_docs_for_boards_batch` | Get the docs pinned to each of up to 10 boards in one call | ✅ |
217
- | `create_doc` | Create a new doc, optionally as a child of another doc | ❌ |
218
- | `update_doc` | Update the title, content, position, or parent of an existing doc | ❌ |
219
- | `archive_doc` | Archive a doc | ❌ |
220
- | `unarchive_doc` | Restore an archived doc | ❌ |
221
- | `create_personal_doc` | Create a new personal doc (visible only to you) | ❌ |
222
- | `update_personal_doc` | Update the title, content, or position of an existing personal doc | ❌ |
225
+ | Tool | Description | Read-Only Safe |
226
+ | :--------------------------- | :------------------------------------------------------------------------------------------------- | :------------: |
227
+ | `search_docs` | Search docs by title (case-insensitive substring), optionally including archived and personal docs | ✅ |
228
+ | `get_docs_text_title_search` | Search docs by title AND content, returning matches with content snippets | ✅ |
229
+ | `get_doc_hierarchy` | Get the hierarchical parent/child tree of docs, optionally rooted at a specific doc | ✅ |
230
+ | `list_docs` | Get a list of docs (metadata only) with filters (ids, title, archived, important, parent) | ✅ |
231
+ | `list_personal_docs` | Get a list of your personal docs (metadata only) | ✅ |
232
+ | `get_doc_content_batch` | Get the full details (including content) of up to 20 docs in one call (shared or personal) | ✅ |
233
+ | `get_docs_for_boards_batch` | Get the docs pinned to each of up to 10 boards in one call | ✅ |
234
+ | `create_doc` | Create a new doc, optionally as a child of another doc | ❌ |
235
+ | `update_doc` | Update the title, content, position, or parent of an existing doc | ❌ |
236
+ | `archive_doc` | Archive a doc | ❌ |
237
+ | `unarchive_doc` | Restore an archived doc | ❌ |
238
+ | `create_personal_doc` | Create a new personal doc (visible only to you) | ❌ |
239
+ | `update_personal_doc` | Update the title, content, or position of an existing personal doc | ❌ |
223
240
 
224
241
  ---
225
242
 
@@ -247,14 +264,14 @@ planning fields.
247
264
 
248
265
  MCP resources provide structured data access via URI. Clients can read resources directly without invoking tools.
249
266
 
250
- | URI | Name | Description | Listable |
251
- | :-------------------------------------- | :----------- | :---------------------------------- | :------: |
252
- | `businessmap://workspaces` | `workspaces` | List all workspaces | ✅ |
253
- | `businessmap://boards` | `boards` | List all boards | ✅ |
254
- | `businessmap://boards/{board_id}` | `board` | Get details of a specific board | ❌ |
255
- | `businessmap://boards/{board_id}/cards` | `cards` | List all cards for a specific board | ✅ |
256
- | `businessmap://boards/{board_id}/cards/pages/{page}/size/{per_page}` | `card-page` | Read a bounded card page (maximum 100) | ❌ |
257
- | `businessmap://cards/{card_id}` | `card` | Get details of a specific card | ❌ |
267
+ | URI | Name | Description | Listable |
268
+ | :------------------------------------------------------------------- | :----------- | :------------------------------------------------------------------- | :------: |
269
+ | `businessmap://workspaces` | `workspaces` | List all workspaces | ✅ |
270
+ | `businessmap://boards` | `boards` | List all boards | ✅ |
271
+ | `businessmap://boards/{board_id}` | `board` | Get details of a specific board | ❌ |
272
+ | `businessmap://boards/{board_id}/cards` | `cards` | Read the first compact card page (50 items) with pagination metadata | ✅ |
273
+ | `businessmap://boards/{board_id}/cards/pages/{page}/size/{per_page}` | `card-page` | Read a bounded card page (maximum 100) | ❌ |
274
+ | `businessmap://cards/{card_id}` | `card` | Get details of a specific card | ❌ |
258
275
 
259
276
  ---
260
277
 
@@ -275,7 +292,7 @@ Analyze a board's performance: flow efficiency, bottlenecks, cycle time, and wor
275
292
  **Workflow:**
276
293
 
277
294
  1. Uses `get_current_board_structure` to retrieve the full board structure
278
- 2. Uses `list_cards` to retrieve all active cards
295
+ 2. Uses compact, paginated `list_cards` calls to retrieve active cards
279
296
  3. Uses `get_workflow_cycle_time_columns` for each workflow
280
297
  4. Delivers a structured analysis covering flow efficiency, cycle time, workload distribution, and actionable recommendations
281
298
 
@@ -294,8 +311,8 @@ Generate a comprehensive status report for a board, including cards summary, pro
294
311
  **Workflow:**
295
312
 
296
313
  1. Uses `get_current_board_structure` to get the board structure
297
- 2. Uses `list_cards` to get all cards
298
- 3. Uses `get_card` for detailed info on a sample of cards
314
+ 2. Uses compact, paginated `list_cards` for a bounded card snapshot
315
+ 3. Uses summary-level `get_card` for detailed info on a sample of cards
299
316
  4. Generates a structured report with: Executive Summary, Column Breakdown, Recently Updated Cards, Risks & Blockers, and Next Steps
300
317
 
301
318
  ---
@@ -334,7 +351,7 @@ Generate a high-level status overview of a workspace, including all boards and t
334
351
 
335
352
  1. Uses `get_workspace` to get workspace details
336
353
  2. Uses `list_boards` with `workspace_id` filter to list all boards
337
- 3. Uses `list_cards` for each board to get active card counts
354
+ 3. Uses bounded, compact `list_cards` calls for each board to get active card counts
338
355
  4. Uses `get_current_board_structure` for up to 3 boards
339
356
  5. Delivers a structured overview with: Workspace Summary, Board Summaries, Highlights, and Recommendations
340
357