Skip to content

tool_unknown

POST /v1/actions names a tool no connector serves in gateway mode, or a name that isn’t a tool name at all, such as a look-alike with a Cyrillic letter.

HTTP 404 · invalid_request_error · not retryable

POST /v1/actions names a tool no connector serves in gateway mode, or a name that isn’t a tool name at all, such as a look-alike with a Cyrillic letter. Tool names are <connector>.<tool>, split at the first dot. The attempt is recorded: the action goes evaluated → denied → sealed with the Gate’s own decision (decision.source: builtin, decision.code: tool_unknown), and the envelope carries the sealed action in error.action. Probing is evidence too. A tool string that is empty, longer than 200 bytes or not UTF-8 is a malformed request instead (400 validation_failed, not recorded).

Template Param
No tool named "{tool}". Tools look like "connector.tool", for example "fake.echo". null

Check the spelling of the tool, and that its connector is set up in Console › Connectors. Send the action again with the right name; the refused attempt stays in the Ledger.

HTTP 404 · tool_unknown
{
"error": {
"type": "invalid_request_error",
"code": "tool_unknown",
"message": "No tool named \"fake.ecko\". Tools look like \"connector.tool\", for example \"fake.echo\".",
"param": null,
"action": {
"object": "action",
"id": "act_01k6w4a2c4e6g8j0m2p4r6t8v0",
"tool": "fake.ecko",
"state": "sealed",
"status": "denied",
"…": "…"
},
"request_id": "req_01j9zr3m5k8q2w7x4t6v0b1c9d",
"doc_url": "https://docs.deedglass.com/errors/tool_unknown"
}
}

The message is for a person and can get more exact over time: branch on type and code, never on the message.

SDK Raised as
TypeScript (@deedglass/sdk) InvalidRequestError with code === "tool_unknown"
Python (deedglass) deedglass.InvalidRequestError with .code == "tool_unknown"