{"record":{"id":"3de19657d001c298","repo":"musistudio/claude-code-router","slug":"unknown-browser-automation-tool-name","errorCode":null,"errorMessage":"Unknown browser automation tool: ${name}","messagePattern":"Unknown browser automation tool: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/electron/src/main/browser-automation-mcp.ts","lineNumber":1094,"sourceCode":"          {\n            deltaX: readNumber(args.deltaX) ?? 0,\n            deltaY: readNumber(args.deltaY) ?? 700\n          }\n        );\n      case \"browser_wait_for\":\n        await this.ensureBrowserOpen();\n        return await waitForPageCondition(\n          builtInBrowserService.getAutomationWebContents(readString(args.tabId)),\n          {\n            selector: readString(args.selector),\n            text: readString(args.text),\n            timeoutMs: clampInteger(readNumber(args.timeoutMs) ?? defaultWaitTimeoutMs, 100, 120000),\n            urlIncludes: readString(args.urlIncludes),\n            urlMatches: readString(args.urlMatches)\n          }\n        );\n      default:\n        throw new Error(`Unknown browser automation tool: ${name}`);\n    }\n  }\n\n  private async ensureBrowserOpen(): Promise<BuiltInBrowserState> {\n    await builtInBrowserService.openHidden(await loadAppConfig());\n    return builtInBrowserService.getAutomationState();\n  }\n\n  private async ensureBrowserVisible(): Promise<BuiltInBrowserState> {\n    await builtInBrowserService.open(await loadAppConfig());\n    return builtInBrowserService.getAutomationState();\n  }\n\n  private async openSession(args: Record<string, unknown>): Promise<unknown> {\n    let state = await this.ensureBrowserOpen();\n    const url = readString(args.url);\n    const requestedTabId = readString(args.tabId);\n    const previousActiveTabId = state.activeTabId;","sourceCodeStart":1076,"sourceCodeEnd":1112,"githubUrl":"https://github.com/musistudio/claude-code-router/blob/99f24806c6a2c660b16e53e95211c517448a6c90/packages/electron/src/main/browser-automation-mcp.ts#L1076-L1112","documentation":"Thrown by runTool's switch default branch when the tools/call name does not match any implemented browser automation tool. The MCP server dispatches on a fixed set of tool names; anything else reaches the default case and is rejected rather than silently ignored.","triggerScenarios":"Calling tools/call with a name like 'browser_click', 'navigate_page', or a typo such as 'browser_tab_activte'; also calling a tool that exists in a newer/older server version than the caller targets.","commonSituations":"Version skew between client tool list and server implementation; LLM-generated tool names that hallucinate plausible-but-nonexistent tools; typos in hand-written automation scripts.","solutions":["List available tools first via the MCP tools/list method and use an exact name from the result.","Check for typos and the exact tool naming (browser_ prefix, snake_case).","Align client and server versions so advertised tools match implemented ones."],"exampleFix":"// before\nawait call(\"browser_tab_activte\", { tabId });\n\n// after\nconst tools = await listTools();\nawait call(\"browser_tab_activate\", { tabId });","handlingStrategy":"validation","validationCode":"const { tools } = await mcp.listTools();\nconst known = new Set(tools.map((t) => t.name));\nif (!known.has(name)) throw new Error(`Unknown tool ${name}; available: ${[...known].join(\", \")}`);\nawait call(name, args);","typeGuard":null,"tryCatchPattern":"try { await call(name, args); } catch (e) { if (e instanceof Error && e.message.includes(\"Unknown browser automation tool\")) { /* re-list tools, correct name or skip */ } throw e; }","preventionTips":["Drive tool choice from tools/list output","Pin client/server versions","For LLM agents, constrain tool selection to the advertised list"],"tags":["mcp","browser-automation","unknown-tool","dispatch"],"backgroundTag":"unknown-tool-name","analyzedSha":"99f24806c6a2c660b16e53e95211c517448a6c90","analyzedAt":"2026-08-27T04:11:01.184Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}