{"record":{"id":"ed14751c6245ccc8","repo":"CherryHQ/cherry-studio","slug":"invalid-arguments-n-errordetails","errorCode":null,"errorMessage":"Invalid arguments:\\n${errorDetails}","messagePattern":"Invalid arguments:\\\\n(.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/main/ai/mcp/servers/difyKnowledge.ts","lineNumber":112,"sourceCode":"            description: 'Search knowledge by id and query',\n            inputSchema: z.toJSONSchema(SearchKnowledgeArgsSchema)\n          }\n        ]\n      }\n    })\n\n    this.server.setRequestHandler(CallToolRequestSchema, async (request) => {\n      try {\n        const { name, arguments: args } = request.params\n        switch (name) {\n          case 'list_knowledges': {\n            return await this.performListKnowledges(this.config.difyKey, this.config.apiHost)\n          }\n          case 'search_knowledge': {\n            const parsed = SearchKnowledgeArgsSchema.safeParse(args)\n            if (!parsed.success) {\n              const errorDetails = JSON.stringify(parsed.error.format(), null, 2)\n              throw new Error(`Invalid arguments:\\n${errorDetails}`)\n            }\n            return await this.performSearchKnowledge(\n              parsed.data.id,\n              parsed.data.query,\n              parsed.data.topK || 6,\n              this.config.difyKey,\n              this.config.apiHost\n            )\n          }\n          default:\n            throw new Error(`Unknown tool: ${name}`)\n        }\n      } catch (error) {\n        const errorMessage = error instanceof Error ? error.message : String(error)\n        return {\n          content: [{ type: 'text', text: `Error: ${errorMessage}` }],\n          isError: true\n        }","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/CherryHQ/cherry-studio/blob/726446b54cd69ffe51a276638672f6d95ca0768c/src/main/ai/mcp/servers/difyKnowledge.ts#L94-L130","documentation":"Generic Error thrown by the DifyKnowledgeServer search_knowledge handler when the Zod safeParse of the arguments fails. SearchKnowledgeArgsSchema requires id (string) and query (string), with optional topK (number). The error message includes a formatted JSON dump of the Zod validation errors for diagnosis. This is caught by the outer try-catch and returned as an MCP isError response (not re-thrown).","triggerScenarios":"Calling search_knowledge with missing id or query, wrong types (e.g., topK as a string), or extra constraints failing Zod validation. The safeParse error is stringified into the message.","commonSituations":"The LLM omitted the required query or id field; topK was passed as a string instead of a number; the arguments object was malformed or empty.","solutions":["Ensure both id and query are provided as non-empty strings.","Pass topK as a number, not a string, if provided.","Validate arguments against SearchKnowledgeArgsSchema before calling the tool."],"exampleFix":"// before\nawait server.callTool('search_knowledge', { id: 'kb-123' }) // missing query\n\n// after\nconst args = { id: 'kb-123', query: 'how to reset password', topK: 5 }\nconst parsed = SearchKnowledgeArgsSchema.safeParse(args)\nif (!parsed.success) throw new Error(parsed.error.message)\nawait server.callTool('search_knowledge', parsed.data)","handlingStrategy":"validation","validationCode":"import { z } from 'zod'\nconst SearchKnowledgeArgsSchema = z.object({\n  id: z.string(),\n  query: z.string(),\n  topK: z.number().optional()\n})\nconst parsed = SearchKnowledgeArgsSchema.safeParse(args)\nif (!parsed.success) {\n  throw new Error(`Invalid search_knowledge arguments: ${parsed.error.message}`)\n}\n// use parsed.data\nawait server.callTool('search_knowledge', parsed.data)","typeGuard":"function isValidSearchArgs(args: unknown): args is { id: string; query: string; topK?: number } {\n  if (typeof args !== 'object' || args === null) return false\n  const a = args as Record<string, unknown>\n  return typeof a.id === 'string' && typeof a.query === 'string'\n}","tryCatchPattern":null,"preventionTips":["Always provide non-empty id and query strings for search_knowledge.","Pass topK as a number, not a string.","Validate with Zod on the caller side before invoking the tool."],"tags":["dify","validation","zod","invalid-arguments"],"backgroundTag":null,"analyzedSha":"726446b54cd69ffe51a276638672f6d95ca0768c","analyzedAt":"2026-08-12T17:30:37.448Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}