From 264fa9bef9c071910414f2d053312d32a6d34434 Mon Sep 17 00:00:00 2001 From: Chris Ou Date: Thu, 23 Oct 2025 13:13:29 +1300 Subject: [PATCH] Fixed read-only mode not able to retreieve any board data. Added execution-level protection while in read-only mode. --- packages/agent-toolkit/src/mcp/toolkit.ts | 10 ++++++++++ .../src/utils/tools/tools-filtering.utils.ts | 3 --- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/agent-toolkit/src/mcp/toolkit.ts b/packages/agent-toolkit/src/mcp/toolkit.ts index 66070c79..948e93f6 100644 --- a/packages/agent-toolkit/src/mcp/toolkit.ts +++ b/packages/agent-toolkit/src/mcp/toolkit.ts @@ -15,6 +15,7 @@ export class MondayAgentToolkit extends McpServer { private readonly mondayApiClient: ApiClient; private readonly mondayApiToken: string; private readonly dynamicToolManager: DynamicToolManager = new DynamicToolManager(); + private readonly readOnlyMode: boolean; /** * Creates a new instance of the Monday Agent Toolkit @@ -37,6 +38,7 @@ export class MondayAgentToolkit extends McpServer { this.mondayApiClient = this.createApiClient(config); this.mondayApiToken = config.mondayApiToken; + this.readOnlyMode = config.toolsConfiguration?.readOnlyMode ?? false; this.registerTools(config); } @@ -116,6 +118,14 @@ export class MondayAgentToolkit extends McpServer { async (args: any, _extra: any) => { try { let result; + + // Read-only mode protection: prevent WRITE and ALL_API tools from executing + if (this.readOnlyMode && (tool.type === 'write' || tool.type === 'all_api')) { + throw new Error( + `Tool '${tool.name}' cannot be executed in read-only mode. This tool performs write/modification operations which are disabled in read-only mode.` + ); + } + if (inputSchema) { const parsedArgs = z.object(inputSchema).safeParse(args); if (!parsedArgs.success) { diff --git a/packages/agent-toolkit/src/utils/tools/tools-filtering.utils.ts b/packages/agent-toolkit/src/utils/tools/tools-filtering.utils.ts index a2419fe7..f3942194 100644 --- a/packages/agent-toolkit/src/utils/tools/tools-filtering.utils.ts +++ b/packages/agent-toolkit/src/utils/tools/tools-filtering.utils.ts @@ -31,9 +31,6 @@ export const getFilteredToolInstances = ( if (config.mode === ToolMode.API && config.enableDynamicApiTools === false) { shouldFilter = shouldFilter || toolInstance.type === ToolType.ALL_API; } - if (config.readOnlyMode) { - shouldFilter = shouldFilter || toolInstance.type !== ToolType.READ; - } if (config.include) { shouldFilter = shouldFilter || !config.include?.includes(toolInstance.name); } else if (config.exclude) {