{"record":{"id":"0b20b4aef6f6bf34","repo":"amir20/dozzle","slug":"unknown-tool-s","errorCode":null,"errorMessage":"unknown tool: %s","messagePattern":"unknown tool: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"internal/cloud/tools.go","lineNumber":397,"sourceCode":"\t\treturn executeGetRunningContainerStats(deps)\n\tcase toolFetchContainerLogs:\n\t\treturn executeFetchContainerLogs(ctx, argsJSON, deps)\n\tcase toolInspectContainer:\n\t\treturn executeInspectContainer(argsJSON, deps)\n\tcase toolListNotifications:\n\t\treturn executeListNotifications(deps)\n\tcase toolStartContainer, toolStopContainer, toolRestartContainer, toolRemoveContainer:\n\t\treturn executeContainerAction(ctx, name, argsJSON, deps)\n\tcase toolUpdateContainer:\n\t\treturn executeUpdateContainer(ctx, argsJSON, deps)\n\tcase toolCreateLogNotification:\n\t\treturn executeCreateLogNotification(argsJSON, deps)\n\tcase toolCreateMetricNotification:\n\t\treturn executeCreateMetricNotification(argsJSON, deps)\n\tcase toolCreateEventNotification:\n\t\treturn executeCreateEventNotification(argsJSON, deps)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown tool: %s\", name)\n\t}\n}\n","sourceCodeStart":379,"sourceCodeEnd":400,"githubUrl":"https://github.com/amir20/dozzle/blob/d9463cbe21874e44ab79db6fa63e746ca7d22928/internal/cloud/tools.go#L379-L400","documentation":"executeTool falls through its switch of known tool names and returns 'unknown tool: %s' for any name not registered. This indicates the cloud requested a tool the local client does not implement, typically a version mismatch between the cloud service and the local Dozzle build.","triggerScenarios":"A ToolRequest.CallTool arrives whose name is not one of the tool constants handled in executeTool (e.g. a newly added cloud tool not present in this Dozzle version).","commonSituations":"Older Dozzle image receiving requests for newer cloud-side tools; typo'd tool name from a client integrating directly; stale cached tool definitions pointing at removed tools.","solutions":["Update Dozzle to the latest release so newly introduced cloud tools are recognized","Log the tool name and compare against AvailableTools() output to confirm the mismatch","If integrating directly, fix the tool name to match a registered tool exactly","Report the mismatch if the cloud sends tools the current version should support"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// verify the tool exists before dispatch\nknown := map[string]bool{ toolListHosts: true, toolFindContainers: true, /* ... */ }\nif !known[name] {\n    return nil, fmt.Errorf(\"tool %q not supported by this build\", name)\n}","typeGuard":null,"tryCatchPattern":"resp, err := executeTool(ctx, name, args, deps)\nif err != nil && strings.HasPrefix(err.Error(), \"unknown tool:\") {\n    log.Warnf(\"cloud requested unsupported tool %q; update Dozzle\", name)\n    return toolErrorResponse(err)\n}","preventionTips":["Keep Dozzle updated to match cloud-side tool versions","Derive known tool names from AvailableTools() rather than hardcoding","Log unknown tool names for telemetry","Guard direct integrations against typos with a name whitelist"],"tags":["cloud","tools","dispatch","version-mismatch"],"backgroundTag":"operation-not-supported","analyzedSha":"d9463cbe21874e44ab79db6fa63e746ca7d22928","analyzedAt":"2026-09-07T10:08:55.855Z","contentChangedAt":"2026-09-07T10:08:55.855Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}