amir20/dozzle · warning

unknown tool

Error message

unknown tool: %s

What it means

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.

Solutions

  1. Update Dozzle to the latest release so newly introduced cloud tools are recognized
  2. Log the tool name and compare against AvailableTools() output to confirm the mismatch
  3. If integrating directly, fix the tool name to match a registered tool exactly
  4. Report the mismatch if the cloud sends tools the current version should support
Defensive patterns

Strategy: try-catch

Validate before calling

// verify the tool exists before dispatch
known := map[string]bool{ toolListHosts: true, toolFindContainers: true, /* ... */ }
if !known[name] {
    return nil, fmt.Errorf("tool %q not supported by this build", name)
}

Try / catch

resp, err := executeTool(ctx, name, args, deps)
if err != nil && strings.HasPrefix(err.Error(), "unknown tool:") {
    log.Warnf("cloud requested unsupported tool %q; update Dozzle", name)
    return toolErrorResponse(err)
}

Prevention

When it happens

Trigger: 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).

Common situations: 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.

Related errors


AI-assisted analysis of amir20/dozzle@d9463cbe21 (2026-09-07). Data as JSON: /api/errors/0b20b4aef6f6bf34. Report an issue: GitHub.

Appendix: source

Thrown at internal/cloud/tools.go:397

		return executeGetRunningContainerStats(deps)
	case toolFetchContainerLogs:
		return executeFetchContainerLogs(ctx, argsJSON, deps)
	case toolInspectContainer:
		return executeInspectContainer(argsJSON, deps)
	case toolListNotifications:
		return executeListNotifications(deps)
	case toolStartContainer, toolStopContainer, toolRestartContainer, toolRemoveContainer:
		return executeContainerAction(ctx, name, argsJSON, deps)
	case toolUpdateContainer:
		return executeUpdateContainer(ctx, argsJSON, deps)
	case toolCreateLogNotification:
		return executeCreateLogNotification(argsJSON, deps)
	case toolCreateMetricNotification:
		return executeCreateMetricNotification(argsJSON, deps)
	case toolCreateEventNotification:
		return executeCreateEventNotification(argsJSON, deps)
	default:
		return nil, fmt.Errorf("unknown tool: %s", name)
	}
}

View on GitHub (pinned to d9463cbe21)