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
What happened
Section titled “What happened”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 |
What to do
Section titled “What to do”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.
Example
Section titled “Example”{ "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.
In the SDKs
Section titled “In the SDKs”| SDK | Raised as |
|---|---|
TypeScript (@deedglass/sdk) |
InvalidRequestError with code === "tool_unknown" |
Python (deedglass) |
deedglass.InvalidRequestError with .code == "tool_unknown" |