@mondaydotcomorg/agent-toolkit 5.68.0 → 5.70.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mondaydotcomorg/agent-toolkit",
3
- "version": "5.68.0",
3
+ "version": "5.70.1",
4
4
  "description": "monday.com agent toolkit",
5
5
  "exports": {
6
6
  "./mcp": {
@@ -45,7 +45,7 @@
45
45
  ],
46
46
  "repository": {
47
47
  "type": "git",
48
- "url": "https://github.com/mondaycom/monday-ai/tree/master/packages/agent-toolkit"
48
+ "url": "https://github.com/mondaycom/mcp/tree/master/packages/agent-toolkit"
49
49
  },
50
50
  "dependencies": {
51
51
  "@mondaydotcomorg/api": "^13.0.0",
package/CHANGELOG.md DELETED
@@ -1,384 +0,0 @@
1
- # Changelog
2
-
3
- ## 5.68.0
4
-
5
- ### Make the "group" filter column discoverable
6
-
7
- Filtering items by board group has always worked - `filters: [{"columnId": "group", "compareValue": ["group_mm6wsvcc"]}]` - but it was documented nowhere: not in the tool description, not in the input schema, and `get_board_info` does not return `group` among a board's columns. Models could only get it right from prior knowledge of the monday API.
8
-
9
- This produced 21% of `get_board_items_page`'s `ResourceNotFoundException` errors across 191 accounts: `includeGroup` hands the model each item's `group.id`, and with no documented way to filter on it, models put the group id in `filters[].columnId` and got "Column not found". In 81% of those cases the model then abandoned filtering and paged through the whole board.
10
-
11
- Descriptions only, no filtering behavior or schema-shape change:
12
-
13
- - `get_board_items_page` description gains a GROUP FILTERING section with the exact filter rule to use, and states that a group id is never a valid `columnId`.
14
- - `filters[].columnId` states that `group` is accepted alongside real board column ids.
15
- - `get_column_type_info` returns filter guidelines for `columnType: "group"`, which previously returned `filter: null` even though `group` is a member of the column-type enum.
16
-
17
- ## 5.67.0
18
-
19
- ### get_user_context — include relevant docs
20
-
21
- `get_user_context` now returns `relevantDocs` alongside `relevantBoards` and `relevantPeople`: the user's most loaded docs ranked by frequency and recency. Each entry includes `id` (document ID for API calls), `name`, and `objectId` (the identifier in the doc URL).
22
-
23
- ## 5.66.0
24
-
25
- ### search — expose highlights on DOCUMENTS results
26
-
27
- DOCUMENTS search now returns `highlights`: an array of `{ field, fragments }` entries, where `fragments` contain matched text snippets with `<em>` tags around matched terms. `field` is one of `name` or `content`. `highlights` is omitted when there's no lexical match.
28
-
29
- ## 5.65.1
30
-
31
- ### create_notification — report failures instead of swallowing them
32
-
33
- `create_notification` caught every error and returned the plain string `Failed to send notification to user <id>` as its result. Because the MCP layer only marks a call as an error when the tool *throws*, that string was delivered as a **success** — callers could not distinguish a delivered notification from a failed one, and the underlying cause was discarded entirely.
34
-
35
- - Errors now go through `rethrowWithContext(error, 'send notification to user <id>')`, the same path already used by `create_update` and `delete_update`. GraphQL failures surface their real messages plus `extensions.code` / `error_data`, and reach the client as `isError: true` with JSON `structuredContent`: `{ message, tool, status, errors: [{ code, message, path }] }`
36
- - Added an empty-response guard — the API can return `create_notification: null` with no GraphQL error, which previously reported success. It now throws a `ToolValidationError` coded `EMPTY_API_RESPONSE` naming the likely cause: a `target_id` / `target_type` mismatch (`Post` expects an update/reply id, `Project` expects an item/board id)
37
- - Success output is a JSON object with `notification_id`, `user_id`, `target_id`, `target_type`, and `text` (previously only `message`, `user_id`, `text`). The mutation now selects `id` so the created notification can be identified
38
- - No input schema changes. Callers that treated the old failure string as a soft failure will now see a thrown error
39
-
40
- ### all_api_read — drop get_graphql_schema from the stated prerequisites
41
-
42
- - `all_api_read` no longer names `get_graphql_schema` as a prerequisite, leaving `get_type_details` as the single lookup to call before crafting a query (and fixing the plural "tools" left behind by the removal). `all_api_write` and `all_monday_api` still name both tools
43
-
44
- ## 5.65.0
45
-
46
- ### Short, self-explaining first sentence for every monday tool description
47
-
48
- Deferred-tool listings show only the first sentence of a tool's description, so that sentence has to say what the tool does on its own. Audited every monday tool description (platform API + monday-dev; app tools untouched) and fixed the ones that opened with something else:
49
-
50
- - `create_item` — was `[IMPORTANT] use create_items instead…`; now leads with what the tool creates
51
- - `change_item_column_values` — was `[IMPORTANT] use update_items instead…`; now leads with what it changes
52
- - `get_asset_upload_url` — was a capability precondition; the presigned-URL summary moved to the front
53
- - `link_board_items_workflow` — was `When to use: …`; now leads with a one-line statement of what it returns
54
- - `get_sprints_metadata` — was one long sentence running into a markdown section list; now a one-line summary followed by the details
55
-
56
- No behavior changes — descriptions only; all the original guidance is kept, just reordered.
57
-
58
- ## 5.64.7
59
-
60
- ### get_board_info — nested filters to shrink large responses
61
-
62
- On boards with hundreds of columns or views, a full `get_board_info` payload can be multi-MB (mostly `views[].settings`). Callers can now shape the response with nested filters:
63
-
64
- - `filters.columns.ids` — return only those columns
65
- - `filters.columns.only` — omit views and return only columns (`@include` skips the views selection in GraphQL)
66
- - `filters.views.ids` — return only those views
67
- - `filters.views.names` — resolve names via a lean id/name index query, then fetch only matching views (avoids downloading every view's settings)
68
- - `filters.views.only` — omit columns and return only views (`@include` skips the columns selection in GraphQL)
69
- - Unmatched view names are reported; if none match, the tool lists available view names
70
-
71
- Related tool descriptions now tell the model to pass `filters.views.names` when the user named specific views (`update_view`, `update_view_table`, `get_board_items_page`) and to use `filters.columns.only` when they only need columns (`create_view`, `create_view_table`, `board_insights`, `create_item`, `create_items`, `update_items`, `change_item_column_values`, `update_column`, `get_board_schema`).
72
-
73
- ## 5.64.6
74
-
75
- ### Spell out prerequisite tool ordering for board, view, and column tools
76
-
77
- Discovery tools (schema/id/revision lookups) and the write tools that depend on them often didn't state the ordering between them, so callers guessed column ids, revisions, and settings shapes instead of fetching them first. Prerequisites are now stated on both sides of each pair — the upstream tool says what it should be called before, the downstream tool says what to call first. No input schemas or behavior changed.
78
-
79
- - `get_column_type_info` — now names all three settings writers it precedes (`create_column`, `update_column`, `manage_object_schema_columns`) instead of only `create_column`
80
- - `create_column` / `update_column` — call `get_column_type_info` before populating `columnSettings` (previously only stated on the field description). `update_column` keeps the existing revision precondition
81
- - `get_board_schema` / `delete_column` — `get_board_schema` documents the column id + revision it supplies to `update_column`, `delete_column`, `configure_ai_column`, and `remove_ai_from_column`, and points to `get_board_info` for broader metadata. `delete_column` now requires resolving the id first and notes the deletion is irreversible
82
- - `get_board_info` — states it is the required precondition already declared by `get_board_items_page`, `board_insights`, `create_item`, `create_items`, `update_items`, and `change_item_column_values`, and that its views are the source of view ids
83
- - `get_board_info` — also warns that a column's returned `settings` value is the raw API shape for that existing column and must not be copied verbatim into the `columnSettings` parameter of `create_column` / `update_column`, which was producing doubly-nested `{"settings": {...}}` payloads and schema validation failures
84
- - `create_view` / `create_view_table` / `update_view` / `update_view_table` — call `get_board_info` first for column ids, status label indexes, and (for updates) the `viewId`
85
- - `create_view` — fetch filter guidelines via `get_column_type_info` with `fetchMode: "guidelines"` (`data.guidelines.filter`) before sending filter rules, matching the precondition already stated on `get_board_items_page` and `board_insights`
86
-
87
- ## 5.64.5
88
-
89
- ### Spell out prerequisite tool ordering for object schema, form, automation, sprint, and dynamic API tools
90
-
91
- Discovery tools (schema/id/revision lookups) and the write tools that depend on them often didn't state the ordering between them, so callers guessed schema ids, column ids, revisions, question ids, tag ids, automation ids, and sprint ids instead of fetching them first. Prerequisites are now stated on both sides of each pair — the upstream tool says what it should be called before, the downstream tool says what to call first. No input schemas or behavior changed.
92
-
93
- - `get_object_schemas` — listed as the resolver for schema ids, column ids, and revisions ahead of `update_object_schema`, `manage_object_schema_columns`, `set_object_schema_column_active_state`, `delete_object_schema_columns`, `delete_object_schema`, and `manage_object_schema_board_connection`. The matching precondition was added to `manage_object_schema_columns` (update), `set_object_schema_column_active_state`, and `delete_object_schema_columns`
94
- - `create_object_schema` — resolve `parentId` via `get_object_schemas`, and notes columns/boards are added afterwards
95
- - `get_form` / `update_form` / `form_questions_editor` — `get_form` states it precedes `create_form_submission`, `form_questions_editor`, and `update_form`, and the two writers now require it for question ids, tag ids, and current settings
96
- - `get_type_details` — documents that it returns fields, input fields, and enum values, and that it should be used to confirm a type's shape before referencing that type in an operation for `all_monday_api`, `all_api_read`, or `all_api_write`. It takes a known type name and is not gated on any other lookup. `get_graphql_schema` is unchanged
97
- - `list_automations` — stated as the only way to resolve an automation id before `manage_automations`
98
- - `get_board_activity` — call with `includeData=true` before `undo_action` to get the `action_record_uuid`
99
- - `get_sprints_metadata` / `get_sprint_summary` — `get_sprints_metadata` points back to `get_monday_dev_sprints_boards` for the board id and forward to `get_sprint_summary` for the sprint ids it supplies. `get_sprint_summary` now requires resolving `sprintId` there
100
-
101
- ## 5.64.4
102
-
103
- ### search — scope UPDATES and TIMELINE_ITEMS search by workspaceIds
104
-
105
- - UPDATES and TIMELINE_ITEMS search now accept `workspaceIds` to scope results to specific workspaces (the corresponding GraphQL queries already supported `workspace_ids`)
106
- - Updated the `workspaceIds` field description to list UPDATES and TIMELINE_ITEMS alongside the existing entity types
107
- - Updated the UPDATES and TIMELINE_ITEMS lines in the tool description to mention optional `workspaceIds` scoping
108
-
109
- ## 5.64.2
110
-
111
- ### get_board_items_page — return BatteryValue rollup status on MLS parent items
112
-
113
- - Status columns that roll up from subitems on MLS boards are returned as `BatteryValue` (`battery_value: [{ key, count }, ...]`), not flattened to text or raw JSON
114
- - The query now requests `column_values` with `capabilities: [CALCULATED]`, plus `is_leaf` and the `BatteryValue` fragment
115
- - Leaf/subitem status columns are unchanged and still resolve via `text`
116
-
117
- ## 5.64.1
118
-
119
- ### search — scope BOARD and TIMELINE_ITEMS search by boardIds
120
-
121
- - BOARD and TIMELINE_ITEMS search now accept `boardIds` to scope results to specific boards (the corresponding GraphQL queries already supported `board_ids`)
122
- - Updated the `boardIds` field description to list BOARD, ITEMS, UPDATES, and TIMELINE_ITEMS
123
- - Updated the BOARD and TIMELINE_ITEMS lines in the tool description to mention optional `boardIds` scoping
124
-
125
- ## 5.64.0
126
-
127
- ### send_feedback renamed to submit_bug_or_feature_request (breaking)
128
-
129
- - **Breaking:** the `send_feedback` tool is now `submit_bug_or_feature_request`. The name leads with the two intents callers most often have, so it is picked up more reliably than the vaguer "send feedback"
130
- - Renamed to match across the codebase: `SendFeedbackTool` → `SubmitBugOrFeatureRequestTool`, `sendFeedbackToolSchema` → `submitBugOrFeatureRequestToolSchema`, annotation title `Send Feedback` → `Submit Bug or Feature Request`, and the directory/files `send-feedback-tool/` → `submit-bug-or-feature-request-tool/`
131
- - Rewrote the tool description: it now covers the monday.com product as well as this integration, leads the proactive-call signals with tool errors and capability gaps (frustration and retry signals moved last), spells out the parameters inline, and folds the non-monday.com and PII restrictions into a single closing line
132
- - Input schema and behavior are unchanged — `kind` still accepts `feedback`, `feature_request`, and `bug`
133
-
134
- ## 5.62.1
135
-
136
- ### get_asset_upload_url — require capability check before calling
137
-
138
- - Prepended a precondition to the tool description: only call `get_asset_upload_url` if the caller can execute a direct HTTP PUT with binary data and read response headers; otherwise it should tell the user direct file upload isn't supported instead of calling the tool
139
- - Addresses a metrics gap where `get_asset_upload_url` was called far more often than `finalize_asset_upload` completed, consistent with callers (e.g. plain conversational chat agents without shell/HTTP execution) generating presigned URLs they have no way to actually use
140
-
141
- ## 5.62.0
142
-
143
- ### search — filter ITEMS search by creatorIds
144
-
145
- - ITEMS search now accepts `creatorIds` to filter results to items created by specific users, alongside the existing `workspaceIds` and `boardIds` scoping
146
- - `creatorIds` now applies to ITEMS, UPDATES, and DASHBOARDS (field description updated accordingly)
147
- - `search.items(creator_ids:)` is only available from the `dev` API version, so a creator-filtered ITEMS search uses a dev-only `SearchItemsByCreatorDev` operation with `versionOverride: 'dev'`; unfiltered ITEMS searches stay on the stable version. Fold this back into `searchItems` and drop the override once the arg reaches a dated version
148
- - Requires DaPulse/search#2707, which removes the `public-internal` tag that kept `creator_ids` out of the public schema
149
-
150
- ## 5.61.7
151
-
152
- ### search — scope ITEMS search by boardIds; accurate scoping docs
153
-
154
- - ITEMS search now accepts `boardIds` to scope results to specific boards (the `search.items` GraphQL query already supported `board_ids`); pass alongside or instead of `workspaceIds`
155
- - Fixed the `workspaceIds` field description, which omitted ITEMS even though ITEMS search already honored it — it now lists ITEMS alongside BOARD, DOCUMENTS, and DASHBOARDS
156
- - Updated the `boardIds` field description (now ITEMS and UPDATES) and the ITEMS line in the tool description to mention `workspaceIds`/`boardIds` scoping
157
-
158
- ## 5.61.5
159
-
160
- ### update_doc — bulk-only delete via delete_blocks (breaking)
161
-
162
- - **Breaking:** `update_doc` operation `delete_block` renamed to `delete_blocks` and always takes `block_ids: string[]` (1–100)
163
- - All public delete operations now use the `delete_doc_blocks` GraphQL mutation (single-block deletes included)
164
- - `replace_block` internally still uses `delete_doc_block` (no external impact)
165
-
166
- ## 5.61.4
167
-
168
- ### search — clearer searchTerm guidance and an actionable missing-searchTerm error
169
-
170
- - Strengthened the tool description and the `searchTerm` field description to define `searchTerm` as the phrase the search matches against (the text/keywords to look for), state that it is required and non-empty, and clarify it is not a filter or an id. Directly targets the largest residual validation-error bucket: callers omitting the term or sending the wrong field
171
- - A missing `searchTerm` now returns an actionable, browse-oriented message pointing callers at `workspace_info` (boards/docs/folders) and `get_board_items_page` (items) instead of the generic "Required", so callers trying to list rather than search can self-correct. An empty/whitespace `searchTerm` keeps its existing non-empty message
172
- - Both the description and the error name the browse alternatives, so a caller with browse intent (no search phrase) is steered to the right tool
173
-
174
- ## 5.61.3
175
-
176
- ### search — propagate location ids (board/workspace/item) across entities
177
-
178
- - ITEMS search now returns `boardId` and `workspaceId` for each result, so callers can locate an item's board and workspace without a follow-up lookup
179
- - BOARD, DOCUMENTS, and DASHBOARDS search now return `workspaceId`
180
- - TIMELINE_ITEMS search now returns `itemId` and `boardId`
181
- - All added ids come from the search index (`board_id`/`workspace_id`/`item_id`); the nullable ones are optional and omitted when the index has no value for them
182
- - Updated the tool description to list the fields each search type returns
183
-
184
- ## 5.58.1
185
-
186
- ### search — reduce validation failures (actionable errors, folder fallback, input coercion)
187
-
188
- - `searchType` rejections now return an actionable message that lists the valid values and, when the value maps to a known intent, redirects to the right tool (e.g. `USERS` → `list_users_and_teams`, `BOARD_ITEMS` → `get_board_items_page`, `FORMS` → not searchable) so callers can self-correct on retry
189
- - `searchType` normalization now also collapses separators/casing (e.g. `"board item"`, `"BOARD-ITEM"`) and adds `DOCUMENT`, `PULSE`/`PULSES` aliases
190
- - FOLDERS search no longer errors when `workspaceIds` is omitted — it searches across all accessible workspaces
191
- - `limit` accepts numeric strings (coerced then clamped); `workspaceIds`/`boardIds`/`creatorIds` accept a scalar or numeric strings and treat `null` as omitted
192
- - Targets the top post-deploy validation-error buckets observed in production search logs
193
- - Fixed: a `searchTerm` that normalizes to an empty string (e.g. punctuation/emoji-only) no longer returns unfiltered folders
194
- - Fixed: FOLDERS search now reports when its 100-folder scan was truncated instead of silently dropping matches
195
- - Fixed: `limit` now enforces a lower bound (clamped to at least 1) and `null` correctly defaults instead of failing validation
196
- - Fixed: `limit`/`workspaceIds`/`boardIds`/`creatorIds` no longer accept `Infinity` (as a string or a raw numeric literal) — numeric coercion now goes through `z.coerce.number().finite()` instead of hand-rolled regex/`Number.isFinite` checks, so both forms are rejected consistently. Hex-like strings (e.g. `"0x1A"`) are still accepted and coerced to their numeric value, same as any other numeric string — no special-casing
197
- - Fixed: `searchType` normalization only collapses separators, so garbage input (e.g. `"board!!!"`) is rejected instead of silently matching a valid value
198
- - Empty `workspaceIds`/`boardIds`/`creatorIds` arrays are now treated as "no filter" consistently across all search types, matching FOLDERS
199
- - `searchTerm` is trimmed and validated as non-empty for every search type, including BOARD
200
-
201
- ## 5.58.0
202
-
203
- ### search — add DASHBOARDS (overviews) search type
204
-
205
- - Adds `DASHBOARDS` as a search type in the unified `search` tool (aliases: `dashboard`, `overview`, `overviews`), backed by the platform's `search { overviews }` endpoint
206
- - Returns `id` and `title`; optionally scoped by `workspaceIds` and/or `creatorIds`
207
- - `search.overviews` is only exposed in the `dev` API version, so the query lives in `search-tool.graphql.dev.ts` and pins `versionOverride: 'dev'` (same approach previously used for boards/docs). Move the query to `search-tool.graphql.ts` and drop the override once the field is promoted to a stable API version
208
-
209
- ## 5.56.1
210
-
211
- ### search — actionable error and whitespace handling for searchTerm
212
-
213
- - `searchTerm` validation now returns an actionable message (`searchTerm must be a non-empty search string.`) instead of the generic Zod `String must contain at least 1 character(s)`, helping agents recover from empty-term calls
214
- - `searchTerm` is now trimmed before validation, so whitespace-only values (e.g. `" "`) are correctly rejected and surrounding whitespace is stripped from valid terms before querying
215
-
216
- ## 5.54.1
217
-
218
- ### publish_workflow — restrict to explicit user request
219
-
220
- - Added "When to use" guidance to the tool description instructing the LLM to only call `publish_workflow` when the user explicitly asks to publish
221
- - After workflow creation/update, the LLM will suggest publishing and wait for user confirmation before proceeding
222
-
223
- ## 5.54.0
224
-
225
- ### create_items — report items_count on sessionContext metadata
226
-
227
- - `create_items` now sets `sessionContext.metadata.items_count` to the number of items in the request, so BigBrain mcp-request events can track how many items agents send per call
228
- - Mirrors the observability pattern introduced for `all_monday_api`
229
-
230
- ## 5.49.0
231
-
232
- ### search — normalize searchType and limit inputs
233
-
234
- - `searchType` now accepts lowercase and plural variants (e.g. `"boards"`, `"docs"`, `"workspace"`) and normalizes them to the canonical enum value via `z.preprocess()`
235
- - `limit` values exceeding the maximum (20) are clamped instead of rejected, preventing unnecessary validation errors
236
- - These two normalizations address ~12k weekly validation errors caused by LLMs passing non-canonical input values
237
-
238
- ## 5.46.0
239
-
240
- ### search — remove fallback, make searchTerm required, and promote boards/docs to stable API
241
-
242
- - `searchTerm` is now required (`z.string().min(1)`) for all search types — agents that previously omitted it to browse must use `workspace_info` instead
243
- - Removed the legacy `getBoards`/`getDocs` listing queries and the fallback path that activated when the dev search endpoint failed; all results now come directly from the search endpoint
244
- - Removed the `page` parameter and virtual pagination logic; removed `LOAD_INTO_MEMORY_LIMIT` constant and `DataWithFilterInfo` type
245
- - Boards and docs search GraphQL queries promoted from `versionOverride: 'dev'` to the stable default schema endpoint; `search-tool.graphql.dev.ts` deleted
246
- - IDs in search results are now returned as raw values — the `ObjectPrefixes` type and all prefixing logic removed since cross-entity search no longer exists
247
-
248
- ## 5.42.0
249
-
250
- ### search — add TIMELINE_ITEMS search type
251
-
252
- - Adds `TIMELINE_ITEMS` as a search type in the unified `search` tool, backed by the platform's `search { timeline_items }` endpoint
253
- - Only available from API version `2026-10`; query pins `versionOverride: '2026-10'` with hand-written types (same approach as `UPDATES`)
254
- - Requires a `searchTerm`; returns `id` (prefixed `timeline-item-`), `title`, `summary`, and `content`
255
- - No listing fallback — errors propagate, and `page > 1` is rejected, matching `ITEMS`/`WORKSPACES`/`UPDATES`
256
-
257
- ## 5.41.1
258
-
259
- ### search — improve field descriptions to reduce incorrect tool usage
260
-
261
- - Clarified required vs optional fields per search type
262
- - Listed exact valid enum values for `searchType`
263
- - Added format guidance for array parameters
264
- - Removed misleading pagination hint from `page` description
265
-
266
- ## 5.37.0
267
-
268
- ### search — add UPDATES search type
269
-
270
- - Added `UPDATES` as a search type in the unified `search` tool, backed by the server-side `search { updates }` endpoint
271
- - `UPDATES` results return `id`, `title` (the update body), `itemId`, `boardId`, and `creatorId`, with optional `boardIds` and `creatorIds` filters to scope the search
272
- - Requires a `searchTerm` and has no listing fallback (errors propagate, like `ITEMS`)
273
- - This field is only available from API version `2026-10`, so the query pins `versionOverride: '2026-10'` with hand-written types (same approach as `list_automations`) until it is promoted to the codegen schema snapshot
274
-
275
- ## 5.24.0
276
-
277
- ### manage_automations — rename from manage_workflows
278
-
279
- - Renamed `manage_workflows` tool to `manage_automations` for consistency with `list_automations` and `create_automation`
280
- - Updated tool title and description accordingly; removed the now-unnecessary "Terminology: workflows = automations" note
281
- - No functional changes — activate, deactivate, and delete behaviour is unchanged
282
-
283
- ### automations-tools — directory restructure
284
-
285
- - Renamed `workflows-tools/` → `automations-tools/` and `list-workflows/` → `list-automations/` to align directory names with tool naming convention
286
- - Removed stale note from `publish_workflow` description that incorrectly referenced `manage_automations` as a way to retrieve draft IDs
287
-
288
- ## 5.22.0
289
-
290
- ### plan_workflow — new tool
291
-
292
- - Adds `plan_workflow` MCP tool that calls the `workflow-planner` platform-agent proxy (`/platform-ai-gateway/agents/workflow-planner`)
293
- - Takes a single `prompt` (max 2000 chars) describing a process and returns a structured markdown plan: workflow breakdowns, block IDs, Mermaid diagrams, resource definitions, and assumption/gap notes
294
- - Use before `create_workflow` to understand how to decompose a complex process into individual workflows and which resources to create first
295
- - Adds `WORKFLOW_PLANNER_AGENT_URL` constant to `workflow-builder-tools/constants.ts`
296
-
297
- ## 5.21.0
298
-
299
- ### get_board_activity — add user_ids filter
300
-
301
- - Added optional `userIds` parameter to filter activity logs to actions performed by specific users
302
- - Updated GraphQL query (`GetBoardActivity`) to pass `user_ids` argument to `activity_logs`
303
- - Updated `getDescription()` to reflect the new filtering capabilities
304
-
305
- ## 5.20.0
306
-
307
- ### Add agent management tools
308
-
309
- Five new tools enabling agents to create and manage monday.com platform agents end-to-end:
310
-
311
- - `manage_agent` — full lifecycle management: `create` (AI mode via prompt), `create_blank` (manual mode), `get`, `update`, `delete`, `activate`, `deactivate`, `run`
312
- - `manage_agent_triggers` — manage per-agent triggers (when it runs): `list`, `add`, `remove`
313
- - `manage_agent_skills` — full skill lifecycle: `create` a new skill in the catalog, `add` to agent, `remove` from agent
314
- - `manage_agent_knowledge` — grant, update, or revoke an agent's access to boards and docs
315
- - `agent_catalog` (READ) — browse the account-wide catalog of available trigger types and skills before wiring them to an agent
316
-
317
- ## 5.19.0
318
-
319
- ### publish_workflow — surface validation error details
320
-
321
- - `rethrowWithContext` now includes GraphQL `extensions` data in the error message when present, so structured errors like `WORKFLOW_VALIDATION_FAILED` (with step-level issue details) are passed through to the LLM instead of being dropped
322
-
323
- ## 5.11.0
324
-
325
- ### Asset upload MCP tools
326
-
327
- - Added `get_asset_upload_url` — requests a presigned S3 upload URL for a file. Returns `upload_id`, `upload_url`, and expiry. Includes inline `curl` example for the upload step and ETag capture guidance.
328
- - Added `finalize_asset_upload` — finalizes the upload via `complete_upload` and attaches the asset to a file column on a board item using `change_column_value` (append semantics). Returns `asset_id`, `filename`, `content_type`, `file_size`, `url`, and `filelink`.
329
- - Both tools use `versionOverride: 'dev'` as `create_upload` / `complete_upload` are currently dev-schema-only.
330
-
331
- ## 5.7.1
332
-
333
- ### form_questions_editor — fix ConditionOperator and remove existing_column_id
334
-
335
- - Removed `existing_column_id` from the tool schema — this field caused 38% of all tool errors (ColumnNotFound / QuestionTypeIncompatibleWithColumnType) because agents passed arbitrary board column IDs not linked to the form
336
- - Fixed misleading `show_if_rules` description that incorrectly stated AND was used between conditions — all operators must be OR per the GraphQL schema
337
- - Removed `And` from the local `ConditionOperator` enum to align with the GraphQL schema constraint
338
-
339
- ## 5.7.0
340
-
341
- ### Add account context to get_user_context tool
342
-
343
- - Extended `get_user_context` to include account-level data: plan tier, active member count, trial status, and active products
344
- - Added account fields to the getUserContext GraphQL query (dev API version)
345
- - Updated search tool routing hints to direct account-level queries to `get_user_context`
346
- - Removed standalone `get_account_context` tool (functionality merged into `get_user_context`)
347
-
348
- ## 5.3.3
349
-
350
- ### Workforms tools — trim MCP tool descriptions by ~79% to reduce token cost
351
-
352
- - Removed descriptions that restate the field name, type, or enum values
353
- - Removed container object descriptions (`"Object containing X configuration"`)
354
- - Rewrote remaining descriptions to be terse and actionable
355
- - Added non-obvious constraints: type immutability on update, safe option update workflow (call `get_form` first), `page_block_id` null vs omit distinction, `existing_column_id` usage guidance
356
- - `update_form` action description now explains each action requires different fields — check field descriptions
357
- - Net result: ~4,591 → ~963 tokens per request across all 4 form tools
358
-
359
- ## 5.3.1
360
-
361
- ### Workforms tools — return full option data from GraphQL queries
362
-
363
- - Added `value`, `visible`, and `active` fields to the `QuestionOptionsFragment` GraphQL fragment
364
- - `get_form`, `create_form_question`, and `update_form_question` now return complete option data
365
- - Previously only `label` was returned, preventing safe updates on questions with existing submissions
366
-
367
- ## 5.1.1
368
-
369
- ### Workforms tools — options schema and description updates
370
-
371
- **`form_questions_editor` options schema:**
372
-
373
- - `value` (optional) — internal option identifier. Required when updating options already assigned to board items.
374
- - `visible` (optional) — whether the option is visible to respondents.
375
-
376
- **`update-form-tool` schema:**
377
-
378
- - `page_block_id` on question order entries — assign questions to page blocks during reorder.
379
-
380
- **Description improvements:**
381
-
382
- - `selectOptions`: added max limits (SingleSelect: 40, MultiSelect: 500) and PUT semantics clarification.
383
- - `pageBlockId`: clarified that passing `null` removes the page block association.
384
- - Added descriptions for `selectOptionsValue`, `selectOptionsVisible`, `blockType`, `insertAfterQuestionId`, `existingColumnId`, `labelLimitCount`, `labelLimitCountEnabled`, `defaultAnswer`.