{"record":{"id":"4746196dba9e0e1e","repo":"musistudio/claude-code-router","slug":"tools-call-params-must-include-a-tool-name-474619","errorCode":null,"errorMessage":"tools/call params must include a tool name.","messagePattern":"tools/call params must include a tool name\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/electron/src/main/electron-web-search-mcp.ts","lineNumber":352,"sourceCode":"        includeDomains: { description: \"Domains to restrict with site:domain.\", items: { type: \"string\" }, type: \"array\" },\n        includeRaw: { description: \"Include the engine search URL in the text response.\", type: \"boolean\" },\n        keywords: { description: \"Additional required keywords. A comma-separated string is also accepted.\", items: { type: \"string\" }, type: \"array\" },\n        language: { description: \"Language hint such as en, zh-CN, ja.\", type: \"string\" },\n        prompt: { description: \"Natural-language query. Search engine operators already present here are preserved.\", type: \"string\" },\n        query: { description: \"Alias for prompt.\", type: \"string\" },\n        safeSearch: { enum: [\"off\", \"moderate\", \"strict\"], type: \"string\" },\n        site: { description: \"Single domain alias for includeDomains.\", type: \"string\" },\n        timeRange: { description: \"Alias for freshness.\", enum: [\"day\", \"week\", \"month\", \"year\"], type: \"string\" },\n        timeoutMs: { minimum: 100, type: \"number\" }\n      }, [\"prompt\"]),\n      name: this.toolName,\n      title: \"In-app Browser Web Search\"\n    };\n  }\n\n  private async callTool(params: unknown): Promise<ToolCallResult> {\n    if (!isRecord(params) || typeof params.name !== \"string\") {\n      throw new Error(\"tools/call params must include a tool name.\");\n    }\n    if (params.name !== this.toolName) {\n      throw new Error(`Unknown in-app browser web search tool: ${params.name}`);\n    }\n\n    const args = isRecord(params.arguments) ? params.arguments : {};\n    try {\n      const input = this.readSearchInput(args);\n      const record = await this.search(input);\n      return textResult(formatSearchResponse(record, input.includeRaw));\n    } catch (error) {\n      return {\n        ...textResult(formatError(error)),\n        isError: true\n      };\n    }\n  }\n","sourceCodeStart":334,"sourceCodeEnd":370,"githubUrl":"https://github.com/musistudio/claude-code-router/blob/99f24806c6a2c660b16e53e95211c517448a6c90/packages/electron/src/main/electron-web-search-mcp.ts#L334-L370","documentation":"Error \"tools/call params must include a tool name.\" thrown in musistudio/claude-code-router.","triggerScenarios":"Thrown at packages/electron/src/main/electron-web-search-mcp.ts:352 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"99f24806c6a2c660b16e53e95211c517448a6c90","analyzedAt":"2026-08-27T04:11:01.184Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}