From 4bcade3851bb36e82653c73500aebd6124f46c04 Mon Sep 17 00:00:00 2001 From: amitrossmonday Date: Mon, 25 May 2026 18:47:09 +0300 Subject: [PATCH 01/14] feat(agent-toolkit): add update_workflow_builder tool Co-Authored-By: Claude Sonnet 4.6 --- .../core/tools/platform-api-tools/index.ts | 5 + .../workflow-builder-tools/index.ts | 1 + .../update-workflow-tool.test.ts | 151 ++++++++++++++++++ .../update-workflow/update-workflow-tool.ts | 83 ++++++++++ 4 files changed, 240 insertions(+) create mode 100644 packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/index.ts create mode 100644 packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.test.ts create mode 100644 packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/index.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/index.ts index fa923969..55101d7b 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/index.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/index.ts @@ -74,6 +74,7 @@ import { ListAutomationsTool } from './workflows-tools/list-workflows/list-workf import { ManageWorkflowsTool } from './workflows-tools/manage-workflows/manage-workflows-tool'; import { CreateAutomationTool } from './workflows-tools/create-automation/create-automation-tool'; import { CreateWorkflowBuilderTool } from './workflow-builder-tools/create-workflow/create-workflow-tool'; +import { UpdateWorkflowBuilderTool } from './workflow-builder-tools/update-workflow/update-workflow-tool'; export const allGraphqlApiTools: BaseMondayApiToolConstructor[] = [ DeleteItemTool, @@ -156,6 +157,8 @@ export const allGraphqlApiTools: BaseMondayApiToolConstructor[] = [ CreateAutomationTool as unknown as BaseMondayApiToolConstructor, // Workflow Builder Tools CreateWorkflowBuilderTool, + // Cast: ctor signature (api, apiToken, context?) doesn't match BaseMondayApiToolConstructor. + UpdateWorkflowBuilderTool as unknown as BaseMondayApiToolConstructor, ]; export * from './all-monday-api-tool'; @@ -226,10 +229,12 @@ export * from './get-notetaker-meetings-tool/get-notetaker-meetings-tool'; export * from './fetch-file-content-tool/fetch-file-content-tool'; // monday Platform Agents export * from './agents-tools'; +// Workflow Builder Tools // Workflows export * from './workflows-tools'; // Workflow Builder Tools export * from './workflow-builder-tools/create-workflow/create-workflow-tool'; +export * from './workflow-builder-tools/update-workflow/update-workflow-tool'; // Dashboard Tools export * from './dashboard-tools'; // Monday Dev Tools diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/index.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/index.ts new file mode 100644 index 00000000..b62175b3 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/index.ts @@ -0,0 +1 @@ +export * from './update-workflow/update-workflow-tool'; diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.test.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.test.ts new file mode 100644 index 00000000..9b6b666a --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.test.ts @@ -0,0 +1,151 @@ +import { MondayAgentToolkit } from 'src/mcp/toolkit'; +import { callToolByNameRawAsync, createMockApiClient, parseToolResult } from '../../test-utils/mock-api-client'; + +const WORKFLOW_BUILDER_URL = 'https://api.monday.com/platform-ai-gateway/agents/workflow-builder'; + +function mockFetchResponse({ + ok = true, + status = 200, + body = {}, +}: { + ok?: boolean; + status?: number; + body?: unknown; +} = {}): Response { + return { + ok, + status, + json: async () => body, + text: async () => (typeof body === 'string' ? body : JSON.stringify(body)), + } as unknown as Response; +} + +describe('UpdateWorkflowBuilderTool', () => { + let mocks: ReturnType; + let fetchSpy: jest.SpyInstance; + + beforeEach(() => { + mocks = createMockApiClient(); + jest.spyOn(MondayAgentToolkit.prototype as any, 'createApiClient').mockReturnValue(mocks.mockApiClient); + fetchSpy = jest.spyOn(global, 'fetch'); + }); + + afterEach(() => { + fetchSpy.mockRestore(); + }); + + it('posts to the workflow-builder agent URL with correct body and Authorization header', async () => { + fetchSpy.mockResolvedValue( + mockFetchResponse({ + body: { workflowObjectId: 5002722216, workflowDraftId: 43023, result: 'Added an email step' }, + }), + ); + + await callToolByNameRawAsync('update_workflow_builder', { + workflowObjectId: 5002722216, + workflowDraftId: 43023, + prompt: 'add a step that sends an email when an item is created', + }); + + expect(fetchSpy).toHaveBeenCalledTimes(1); + const [url, init] = fetchSpy.mock.calls[0]; + expect(url).toBe(WORKFLOW_BUILDER_URL); + expect(init.method).toBe('POST'); + expect(init.headers).toMatchObject({ + Authorization: 'test-token', + 'Content-Type': 'application/json', + }); + expect(JSON.parse(init.body)).toEqual({ + workflowObjectId: 5002722216, + workflowDraftId: 43023, + prompt: 'add a step that sends an email when an item is created', + }); + }); + + it('passes through the agent result on success', async () => { + fetchSpy.mockResolvedValue( + mockFetchResponse({ + body: { + workflowObjectId: 5002722216, + workflowDraftId: 43023, + result: 'Added an email notification step after the trigger', + }, + }), + ); + + const result = await callToolByNameRawAsync('update_workflow_builder', { + workflowObjectId: 5002722216, + workflowDraftId: 43023, + prompt: 'add an email step', + }); + const parsed = parseToolResult(result); + + expect(parsed.workflowObjectId).toBe(5002722216); + expect(parsed.workflowDraftId).toBe(43023); + expect(parsed.result).toBe('Added an email notification step after the trigger'); + }); + + it('rejects missing workflowObjectId before making any HTTP call', async () => { + const result = await callToolByNameRawAsync('update_workflow_builder', { + workflowDraftId: 43023, + prompt: 'add a step', + }); + + expect(result.content[0].text).toContain('workflowObjectId'); + expect(fetchSpy).not.toHaveBeenCalled(); + }); + + it('rejects missing workflowDraftId before making any HTTP call', async () => { + const result = await callToolByNameRawAsync('update_workflow_builder', { + workflowObjectId: 5002722216, + prompt: 'add a step', + }); + + expect(result.content[0].text).toContain('workflowDraftId'); + expect(fetchSpy).not.toHaveBeenCalled(); + }); + + it('rejects empty prompt before making any HTTP call', async () => { + const result = await callToolByNameRawAsync('update_workflow_builder', { + workflowObjectId: 5002722216, + workflowDraftId: 43023, + prompt: ' ', + }); + + expect(result.content[0].text).toContain('prompt must be a non-empty string'); + expect(fetchSpy).not.toHaveBeenCalled(); + }); + + it('surfaces the error envelope on 4xx', async () => { + fetchSpy.mockResolvedValue( + mockFetchResponse({ + ok: false, + status: 400, + body: { error: 'Prompt exceeds maximum length of 2000 characters', code: 'PROMPT_TOO_LONG' }, + }), + ); + + const result = await callToolByNameRawAsync('update_workflow_builder', { + workflowObjectId: 5002722216, + workflowDraftId: 43023, + prompt: 'add a step', + }); + + expect(result.content[0].text).toContain('Failed to update workflow'); + expect(result.content[0].text).toContain('HTTP 400'); + expect(result.content[0].text).toContain('PROMPT_TOO_LONG'); + }); + + it('wraps network errors with operation context', async () => { + fetchSpy.mockRejectedValue(new Error('network failure')); + + const result = await callToolByNameRawAsync('update_workflow_builder', { + workflowObjectId: 5002722216, + workflowDraftId: 43023, + prompt: 'add a step', + }); + + expect(result.content[0].text).toContain('Failed to update workflow'); + expect(result.content[0].text).toContain('network failure'); + }); +}); diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts new file mode 100644 index 00000000..2ab552e6 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts @@ -0,0 +1,83 @@ +import { ApiClient } from '@mondaydotcomorg/api'; +import { z } from 'zod'; +import { ToolInputType, ToolOutputType, ToolType } from '../../../../tool'; +import { BaseMondayApiTool, MondayApiToolContext, createMondayApiAnnotations } from '../../base-monday-api-tool'; +import { rethrowWithContext } from '../../../../../utils'; + +const WORKFLOW_BUILDER_AGENT_URL = 'https://api.monday.com/platform-ai-gateway/agents/workflow-builder'; +const REQUEST_TIMEOUT_MS = 180_000; + +export const updateWorkflowBuilderToolSchema = { + workflowObjectId: z.number().describe('The stable workflow entity ID (workflow_object_id returned by create_workflow_builder).'), + workflowDraftId: z.number().describe('The draft workflow ID to update (workflow_draft_id returned by create_workflow_builder).'), + prompt: z + .string() + .trim() + .min(1, 'prompt must be a non-empty string') + .describe('Natural-language description of the changes to make to the workflow (e.g. "add a step that sends an email when an item is created").'), +}; + +export class UpdateWorkflowBuilderTool extends BaseMondayApiTool { + name = 'update_workflow_builder'; + type = ToolType.WRITE; + annotations = createMondayApiAnnotations({ + title: 'Update Workflow Builder', + readOnlyHint: false, + destructiveHint: false, + idempotentHint: false, + }); + + constructor( + api: ApiClient, + private readonly apiToken: string, + context?: MondayApiToolContext, + ) { + super(api, context); + } + + getDescription(): string { + return `Updates an existing Workflow Builder workflow from a natural-language description. + +Use when the user wants to modify a workflow — add steps, remove steps, change triggers or conditions, etc. Requires the workflowObjectId and workflowDraftId from a previous create_workflow_builder call (or from list_workflows). + +Returns: +- workflowObjectId: the workflow entity ID +- workflowDraftId: the updated draft ID +- result: agent response describing the changes made +`; + } + + getInputSchema() { + return updateWorkflowBuilderToolSchema; + } + + protected async executeInternal( + input: ToolInputType, + ): Promise> { + try { + const response = await fetch(WORKFLOW_BUILDER_AGENT_URL, { + method: 'POST', + headers: { + Authorization: this.apiToken, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + workflowObjectId: input.workflowObjectId, + workflowDraftId: input.workflowDraftId, + prompt: input.prompt, + }), + signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS), + }); + + if (!response.ok) { + const body = await response.text().catch(() => ''); + throw new Error(`workflow-builder responded with HTTP ${response.status}${body ? `: ${body}` : ''}`); + } + + const body = (await response.json()) as Record; + return { content: body }; + } catch (error) { + rethrowWithContext(error, 'update workflow'); + } + } +} From bd98773c9e147e7464f0157b4fc0e74948c2b7d2 Mon Sep 17 00:00:00 2001 From: amitrossmonday Date: Tue, 26 May 2026 15:12:21 +0300 Subject: [PATCH 02/14] feat(agent-toolkit): enrich update_workflow_builder description and params, extract URL to constants Co-Authored-By: Claude Sonnet 4.6 --- .../workflow-builder-tools/constants.ts | 1 + .../update-workflow/update-workflow-tool.ts | 35 ++++++++++++++----- 2 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/constants.ts diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/constants.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/constants.ts new file mode 100644 index 00000000..9e3a7110 --- /dev/null +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/constants.ts @@ -0,0 +1 @@ +export const WORKFLOW_BUILDER_AGENT_URL = 'https://api.monday.com/platform-ai-gateway/agents/workflow-builder'; diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts index 2ab552e6..78a63d38 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts @@ -3,18 +3,29 @@ import { z } from 'zod'; import { ToolInputType, ToolOutputType, ToolType } from '../../../../tool'; import { BaseMondayApiTool, MondayApiToolContext, createMondayApiAnnotations } from '../../base-monday-api-tool'; import { rethrowWithContext } from '../../../../../utils'; +import { WORKFLOW_BUILDER_AGENT_URL } from '../constants'; -const WORKFLOW_BUILDER_AGENT_URL = 'https://api.monday.com/platform-ai-gateway/agents/workflow-builder'; const REQUEST_TIMEOUT_MS = 180_000; export const updateWorkflowBuilderToolSchema = { - workflowObjectId: z.number().describe('The stable workflow entity ID (workflow_object_id returned by create_workflow_builder).'), - workflowDraftId: z.number().describe('The draft workflow ID to update (workflow_draft_id returned by create_workflow_builder).'), + workflowObjectId: z + .number() + .describe( + 'The stable workflow entity ID returned by create_workflow_builder. Identifies the workflow across all its drafts and published versions.', + ), + workflowDraftId: z + .number() + .describe( + 'The draft version ID returned by create_workflow_builder. The agent applies changes to this specific draft. Both workflowObjectId and workflowDraftId are required — together they identify the exact draft to update.', + ), prompt: z .string() .trim() .min(1, 'prompt must be a non-empty string') - .describe('Natural-language description of the changes to make to the workflow (e.g. "add a step that sends an email when an item is created").'), + .max(2000, 'prompt must not exceed 2000 characters') + .describe( + 'Natural-language description of the changes to make. Describe what steps to add, remove, or modify in plain English (e.g. "add a step that sends an email when an item is created"). The agent interprets this and applies the right structural changes. Maximum 2000 characters.', + ), }; export class UpdateWorkflowBuilderTool extends BaseMondayApiTool { @@ -36,14 +47,22 @@ export class UpdateWorkflowBuilderTool extends BaseMondayApiTool Date: Tue, 26 May 2026 15:18:02 +0300 Subject: [PATCH 03/14] fix(agent-toolkit): use correct workflowObjectId terminology in description Co-Authored-By: Claude Sonnet 4.6 --- .../update-workflow/update-workflow-tool.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts index 78a63d38..20c6cb9b 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts @@ -11,7 +11,7 @@ export const updateWorkflowBuilderToolSchema = { workflowObjectId: z .number() .describe( - 'The stable workflow entity ID returned by create_workflow_builder. Identifies the workflow across all its drafts and published versions.', + 'The workflow object ID returned by create_workflow_builder. Identifies the workflow across all its drafts and published versions.', ), workflowDraftId: z .number() From 01cd2a820c1b3862b925ebe1dbd5b079330cbbe6 Mon Sep 17 00:00:00 2001 From: amitrossmonday Date: Tue, 26 May 2026 15:34:10 +0300 Subject: [PATCH 04/14] refactor(agent-toolkit): import WORKFLOW_BUILDER_AGENT_URL from constants in test Co-Authored-By: Claude Sonnet 4.6 --- .../update-workflow/update-workflow-tool.test.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.test.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.test.ts index 9b6b666a..8ad41164 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.test.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.test.ts @@ -1,7 +1,6 @@ import { MondayAgentToolkit } from 'src/mcp/toolkit'; import { callToolByNameRawAsync, createMockApiClient, parseToolResult } from '../../test-utils/mock-api-client'; - -const WORKFLOW_BUILDER_URL = 'https://api.monday.com/platform-ai-gateway/agents/workflow-builder'; +import { WORKFLOW_BUILDER_AGENT_URL } from '../constants'; function mockFetchResponse({ ok = true, @@ -49,7 +48,7 @@ describe('UpdateWorkflowBuilderTool', () => { expect(fetchSpy).toHaveBeenCalledTimes(1); const [url, init] = fetchSpy.mock.calls[0]; - expect(url).toBe(WORKFLOW_BUILDER_URL); + expect(url).toBe(WORKFLOW_BUILDER_AGENT_URL); expect(init.method).toBe('POST'); expect(init.headers).toMatchObject({ Authorization: 'test-token', From 759df2ab80aad0259b4c684c123f6e9cc7a666d7 Mon Sep 17 00:00:00 2001 From: amitrossmonday Date: Tue, 26 May 2026 15:36:31 +0300 Subject: [PATCH 05/14] fix(agent-toolkit): replace 'entity ID' with 'object ID' in update_workflow_builder description Co-Authored-By: Claude Sonnet 4.6 --- .../update-workflow/update-workflow-tool.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts index 20c6cb9b..2bcc5aa0 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts @@ -58,7 +58,7 @@ Parameters: - prompt: describe what you want to change in plain English. Maximum 2000 characters. Returns: -- workflowObjectId: the workflow entity ID (unchanged) +- workflowObjectId: the workflow object ID (unchanged) - workflowDraftId: the draft version ID (unchanged) - result: agent response describing the changes made From e03c401c36c0f1a4d41a61b028e689bfe8b8cdcf Mon Sep 17 00:00:00 2001 From: amitrossmonday Date: Wed, 27 May 2026 12:31:09 +0300 Subject: [PATCH 06/14] feat(agent-toolkit): rename update_workflow_builder to update_workflow, bump to 5.17.0 Co-Authored-By: Claude Sonnet 4.6 --- packages/agent-toolkit/package.json | 2 +- .../core/tools/platform-api-tools/index.ts | 4 ++-- .../update-workflow-tool.test.ts | 16 +++++++------- .../update-workflow/update-workflow-tool.ts | 22 +++++++++---------- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/agent-toolkit/package.json b/packages/agent-toolkit/package.json index 94ff379b..06bede2e 100644 --- a/packages/agent-toolkit/package.json +++ b/packages/agent-toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@mondaydotcomorg/agent-toolkit", -"version": "5.16.0", +"version": "5.17.0", "description": "monday.com agent toolkit", "exports": { "./mcp": { diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/index.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/index.ts index 55101d7b..3d2d413e 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/index.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/index.ts @@ -74,7 +74,7 @@ import { ListAutomationsTool } from './workflows-tools/list-workflows/list-workf import { ManageWorkflowsTool } from './workflows-tools/manage-workflows/manage-workflows-tool'; import { CreateAutomationTool } from './workflows-tools/create-automation/create-automation-tool'; import { CreateWorkflowBuilderTool } from './workflow-builder-tools/create-workflow/create-workflow-tool'; -import { UpdateWorkflowBuilderTool } from './workflow-builder-tools/update-workflow/update-workflow-tool'; +import { UpdateWorkflowTool } from './workflow-builder-tools/update-workflow/update-workflow-tool'; export const allGraphqlApiTools: BaseMondayApiToolConstructor[] = [ DeleteItemTool, @@ -158,7 +158,7 @@ export const allGraphqlApiTools: BaseMondayApiToolConstructor[] = [ // Workflow Builder Tools CreateWorkflowBuilderTool, // Cast: ctor signature (api, apiToken, context?) doesn't match BaseMondayApiToolConstructor. - UpdateWorkflowBuilderTool as unknown as BaseMondayApiToolConstructor, + UpdateWorkflowTool as unknown as BaseMondayApiToolConstructor, ]; export * from './all-monday-api-tool'; diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.test.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.test.ts index 8ad41164..4ba8632e 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.test.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.test.ts @@ -19,7 +19,7 @@ function mockFetchResponse({ } as unknown as Response; } -describe('UpdateWorkflowBuilderTool', () => { +describe('UpdateWorkflowTool', () => { let mocks: ReturnType; let fetchSpy: jest.SpyInstance; @@ -40,7 +40,7 @@ describe('UpdateWorkflowBuilderTool', () => { }), ); - await callToolByNameRawAsync('update_workflow_builder', { + await callToolByNameRawAsync('update_workflow', { workflowObjectId: 5002722216, workflowDraftId: 43023, prompt: 'add a step that sends an email when an item is created', @@ -72,7 +72,7 @@ describe('UpdateWorkflowBuilderTool', () => { }), ); - const result = await callToolByNameRawAsync('update_workflow_builder', { + const result = await callToolByNameRawAsync('update_workflow', { workflowObjectId: 5002722216, workflowDraftId: 43023, prompt: 'add an email step', @@ -85,7 +85,7 @@ describe('UpdateWorkflowBuilderTool', () => { }); it('rejects missing workflowObjectId before making any HTTP call', async () => { - const result = await callToolByNameRawAsync('update_workflow_builder', { + const result = await callToolByNameRawAsync('update_workflow', { workflowDraftId: 43023, prompt: 'add a step', }); @@ -95,7 +95,7 @@ describe('UpdateWorkflowBuilderTool', () => { }); it('rejects missing workflowDraftId before making any HTTP call', async () => { - const result = await callToolByNameRawAsync('update_workflow_builder', { + const result = await callToolByNameRawAsync('update_workflow', { workflowObjectId: 5002722216, prompt: 'add a step', }); @@ -105,7 +105,7 @@ describe('UpdateWorkflowBuilderTool', () => { }); it('rejects empty prompt before making any HTTP call', async () => { - const result = await callToolByNameRawAsync('update_workflow_builder', { + const result = await callToolByNameRawAsync('update_workflow', { workflowObjectId: 5002722216, workflowDraftId: 43023, prompt: ' ', @@ -124,7 +124,7 @@ describe('UpdateWorkflowBuilderTool', () => { }), ); - const result = await callToolByNameRawAsync('update_workflow_builder', { + const result = await callToolByNameRawAsync('update_workflow', { workflowObjectId: 5002722216, workflowDraftId: 43023, prompt: 'add a step', @@ -138,7 +138,7 @@ describe('UpdateWorkflowBuilderTool', () => { it('wraps network errors with operation context', async () => { fetchSpy.mockRejectedValue(new Error('network failure')); - const result = await callToolByNameRawAsync('update_workflow_builder', { + const result = await callToolByNameRawAsync('update_workflow', { workflowObjectId: 5002722216, workflowDraftId: 43023, prompt: 'add a step', diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts index 2bcc5aa0..a26c6a06 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts @@ -7,16 +7,16 @@ import { WORKFLOW_BUILDER_AGENT_URL } from '../constants'; const REQUEST_TIMEOUT_MS = 180_000; -export const updateWorkflowBuilderToolSchema = { +export const updateWorkflowToolSchema = { workflowObjectId: z .number() .describe( - 'The workflow object ID returned by create_workflow_builder. Identifies the workflow across all its drafts and published versions.', + 'The workflow object ID returned by create_workflow. Identifies the workflow across all its drafts and published versions.', ), workflowDraftId: z .number() .describe( - 'The draft version ID returned by create_workflow_builder. The agent applies changes to this specific draft. Both workflowObjectId and workflowDraftId are required — together they identify the exact draft to update.', + 'The draft version ID returned by create_workflow. The agent applies changes to this specific draft. Both workflowObjectId and workflowDraftId are required — together they identify the exact draft to update.', ), prompt: z .string() @@ -28,11 +28,11 @@ export const updateWorkflowBuilderToolSchema = { ), }; -export class UpdateWorkflowBuilderTool extends BaseMondayApiTool { - name = 'update_workflow_builder'; +export class UpdateWorkflowTool extends BaseMondayApiTool { + name = 'update_workflow'; type = ToolType.WRITE; annotations = createMondayApiAnnotations({ - title: 'Update Workflow Builder', + title: 'Update Workflow', readOnlyHint: false, destructiveHint: false, idempotentHint: false, @@ -47,14 +47,14 @@ export class UpdateWorkflowBuilderTool extends BaseMondayApiTool, + input: ToolInputType, ): Promise> { try { const response = await fetch(WORKFLOW_BUILDER_AGENT_URL, { From 6e5d839e891446e847721ff2581d0dcfa03db3e5 Mon Sep 17 00:00:00 2001 From: amitrossmonday Date: Wed, 27 May 2026 12:35:24 +0300 Subject: [PATCH 07/14] fix(agent-toolkit): update prompt example in update_workflow to a supported trigger Co-Authored-By: Claude Sonnet 4.6 --- .../update-workflow/update-workflow-tool.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts index a26c6a06..729a33f8 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts @@ -24,7 +24,7 @@ export const updateWorkflowToolSchema = { .min(1, 'prompt must be a non-empty string') .max(2000, 'prompt must not exceed 2000 characters') .describe( - 'Natural-language description of the changes to make. Describe what steps to add, remove, or modify in plain English (e.g. "add a step that sends an email when an item is created"). The agent interprets this and applies the right structural changes. Maximum 2000 characters.', + 'Natural-language description of the changes to make. Describe what steps to add, remove, or modify in plain English (e.g. "Add a trigger that fires when an item is created on Amit\'s Board (5001393610)"). The agent interprets this and applies the right structural changes. Maximum 2000 characters.', ), }; @@ -55,7 +55,7 @@ Use this after create_workflow to build out the workflow step by step. You can c Parameters: - workflowObjectId and workflowDraftId: both returned by create_workflow — they identify which draft to update. -- prompt: describe what you want to change in plain English. Maximum 2000 characters. +- prompt: describe what you want to change in plain English (e.g. "Add a trigger that fires when an item is created on Amit's Board (5001393610)"). Maximum 2000 characters. Returns: - workflowObjectId: the workflow object ID (unchanged) From 626a87a7c687fbe08f5ed0d309e856cfa5831aa5 Mon Sep 17 00:00:00 2001 From: amitrossmonday Date: Wed, 27 May 2026 12:35:48 +0300 Subject: [PATCH 08/14] fix(agent-toolkit): use generic board ID in update_workflow prompt example Co-Authored-By: Claude Sonnet 4.6 --- .../update-workflow/update-workflow-tool.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts index 729a33f8..3420d2eb 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts @@ -24,7 +24,7 @@ export const updateWorkflowToolSchema = { .min(1, 'prompt must be a non-empty string') .max(2000, 'prompt must not exceed 2000 characters') .describe( - 'Natural-language description of the changes to make. Describe what steps to add, remove, or modify in plain English (e.g. "Add a trigger that fires when an item is created on Amit\'s Board (5001393610)"). The agent interprets this and applies the right structural changes. Maximum 2000 characters.', + 'Natural-language description of the changes to make. Describe what steps to add, remove, or modify in plain English (e.g. "Add a trigger that fires when an item is created on board 1234567890"). The agent interprets this and applies the right structural changes. Maximum 2000 characters.', ), }; @@ -55,7 +55,7 @@ Use this after create_workflow to build out the workflow step by step. You can c Parameters: - workflowObjectId and workflowDraftId: both returned by create_workflow — they identify which draft to update. -- prompt: describe what you want to change in plain English (e.g. "Add a trigger that fires when an item is created on Amit's Board (5001393610)"). Maximum 2000 characters. +- prompt: describe what you want to change in plain English (e.g. "Add a trigger that fires when an item is created on board 1234567890"). Maximum 2000 characters. Returns: - workflowObjectId: the workflow object ID (unchanged) From b8f60aca653d93ab98cacf26154e4efeb192c4cf Mon Sep 17 00:00:00 2001 From: amitrossmonday Date: Wed, 27 May 2026 12:36:24 +0300 Subject: [PATCH 09/14] fix(agent-toolkit): use natural language board name in update_workflow prompt example Co-Authored-By: Claude Sonnet 4.6 --- .../update-workflow/update-workflow-tool.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts index 3420d2eb..c5b898e2 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts @@ -24,7 +24,7 @@ export const updateWorkflowToolSchema = { .min(1, 'prompt must be a non-empty string') .max(2000, 'prompt must not exceed 2000 characters') .describe( - 'Natural-language description of the changes to make. Describe what steps to add, remove, or modify in plain English (e.g. "Add a trigger that fires when an item is created on board 1234567890"). The agent interprets this and applies the right structural changes. Maximum 2000 characters.', + 'Natural-language description of the changes to make. Describe what steps to add, remove, or modify in plain English (e.g. "Add a trigger that fires when an item is created on the Marketing board"). The agent interprets this and applies the right structural changes. Maximum 2000 characters.', ), }; @@ -55,7 +55,7 @@ Use this after create_workflow to build out the workflow step by step. You can c Parameters: - workflowObjectId and workflowDraftId: both returned by create_workflow — they identify which draft to update. -- prompt: describe what you want to change in plain English (e.g. "Add a trigger that fires when an item is created on board 1234567890"). Maximum 2000 characters. +- prompt: describe what you want to change in plain English (e.g. "Add a trigger that fires when an item is created on the Marketing board"). Maximum 2000 characters. Returns: - workflowObjectId: the workflow object ID (unchanged) From adf9810ad4f6e754df3620c63e8503a7e3cb2ba4 Mon Sep 17 00:00:00 2001 From: amitrossmonday Date: Wed, 27 May 2026 12:38:14 +0300 Subject: [PATCH 10/14] chore(agent-toolkit): remove duplicate comment in platform-api-tools index Co-Authored-By: Claude Sonnet 4.6 --- .../agent-toolkit/src/core/tools/platform-api-tools/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/index.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/index.ts index 3d2d413e..f2048851 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/index.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/index.ts @@ -229,7 +229,6 @@ export * from './get-notetaker-meetings-tool/get-notetaker-meetings-tool'; export * from './fetch-file-content-tool/fetch-file-content-tool'; // monday Platform Agents export * from './agents-tools'; -// Workflow Builder Tools // Workflows export * from './workflows-tools'; // Workflow Builder Tools From 89803d741a5173dbcbc6ae1a7634ffe785108a73 Mon Sep 17 00:00:00 2001 From: amitrossmonday Date: Wed, 27 May 2026 12:46:13 +0300 Subject: [PATCH 11/14] chore(agent-toolkit): remove incomplete workflow-builder-tools barrel Co-Authored-By: Claude Sonnet 4.6 --- .../tools/platform-api-tools/workflow-builder-tools/index.ts | 1 - 1 file changed, 1 deletion(-) delete mode 100644 packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/index.ts diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/index.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/index.ts deleted file mode 100644 index b62175b3..00000000 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './update-workflow/update-workflow-tool'; From 23aa4dbdcfbafd64013ef945c04b809bf3f603c8 Mon Sep 17 00:00:00 2001 From: amitrossmonday Date: Wed, 27 May 2026 13:15:23 +0300 Subject: [PATCH 12/14] fix(agent-toolkit): clarify workflowObjectId/workflowDraftId lifecycle in update_workflow params Co-Authored-By: Claude Sonnet 4.6 --- .../update-workflow/update-workflow-tool.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts index c5b898e2..4f72b430 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts @@ -11,12 +11,12 @@ export const updateWorkflowToolSchema = { workflowObjectId: z .number() .describe( - 'The workflow object ID returned by create_workflow. Identifies the workflow across all its drafts and published versions.', + 'The workflow object ID returned by create_workflow. Identifies the workflow across all its drafts and published versions. Does not change across publishes.', ), workflowDraftId: z .number() .describe( - 'The draft version ID returned by create_workflow. The agent applies changes to this specific draft. Both workflowObjectId and workflowDraftId are required — together they identify the exact draft to update.', + 'The draft version ID returned by create_workflow. The agent applies changes to this specific draft. Both workflowObjectId and workflowDraftId are required — together they identify the exact draft to update. A new draft ID is issued after each publish.', ), prompt: z .string() From 5a6c51ec42a079ba3920819e739ecbd1475276a0 Mon Sep 17 00:00:00 2001 From: amitrossmonday Date: Wed, 27 May 2026 13:19:55 +0300 Subject: [PATCH 13/14] fix(agent-toolkit): simplify workflowDraftId lifecycle note in update_workflow Co-Authored-By: Claude Sonnet 4.6 --- .../update-workflow/update-workflow-tool.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts index 4f72b430..ff5f252f 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts @@ -16,7 +16,7 @@ export const updateWorkflowToolSchema = { workflowDraftId: z .number() .describe( - 'The draft version ID returned by create_workflow. The agent applies changes to this specific draft. Both workflowObjectId and workflowDraftId are required — together they identify the exact draft to update. A new draft ID is issued after each publish.', + 'The draft version ID returned by create_workflow. The agent applies changes to this specific draft. Both workflowObjectId and workflowDraftId are required — together they identify the exact draft to update. A new version ID is issued after each publish.', ), prompt: z .string() From 645cd4760260b005d139a498e960bea78769d26f Mon Sep 17 00:00:00 2001 From: amitrossmonday Date: Wed, 27 May 2026 14:17:15 +0300 Subject: [PATCH 14/14] fix(agent-toolkit): clarify workflowDraftId should be read from latest response in update_workflow Co-Authored-By: Claude Sonnet 4.6 --- .../update-workflow/update-workflow-tool.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts index ff5f252f..a9f5e79c 100644 --- a/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts +++ b/packages/agent-toolkit/src/core/tools/platform-api-tools/workflow-builder-tools/update-workflow/update-workflow-tool.ts @@ -16,7 +16,7 @@ export const updateWorkflowToolSchema = { workflowDraftId: z .number() .describe( - 'The draft version ID returned by create_workflow. The agent applies changes to this specific draft. Both workflowObjectId and workflowDraftId are required — together they identify the exact draft to update. A new version ID is issued after each publish.', + 'The draft version ID to update. Use the workflowDraftId from the previous create_workflow or update_workflow response — the agent may return a new draft ID, so always read it from the latest response rather than reusing an earlier value.', ), prompt: z .string()