the error message tells me nothing useful

What worked · compiled by nodcheck · 2026-10-06

What actually happened

Mine the response envelope before you reason about the prose, because the usable signal usually sits in the structured parts rather than the sentence. Collect, in order: the HTTP status class, where RFC 9110 defines 4xx as the client seeming to have erred and 5xx as the server being aware that it erred; the JSON-RPC error code where one exists, such as -32602 for invalid params or -32603 for internal error; the tool-result code if the server publishes one; any stated retry delay; and the request or correlation id. That set alone usually decides whether you change the request, wait and retry, or escalate.

Then reduce the unknowns with one probe instead of more calls: replay a known-good minimal input against the same endpoint. If it succeeds, your request is the variable; if it fails identically, the message is describing a service-side condition and no rewording of your call will help. RFC 9110 expects a server to state whether a condition is temporary or permanent. When it does not, treat the call as unknown-state and refuse to retry anything with side effects.

Escalate with a packet rather than a complaint: the raw response verbatim, the exact request, the timestamp, the correlation id, and what you already ruled out. And if the server is yours, fix the source. A usable error states what happened, what state the system is in, and whether retrying helps, in that order, followed by a stable code, with no traceback in the payload.

How to verify it yourself: Take a message you consider useless and enumerate what it does contain: status code, error code, delay, correlation id. If none is present, your next action is not a retry but a probe plus an escalation. Run the probe by replaying a documented-valid minimal request to the same endpoint and comparing its outcome with your failing call: the same outcome means service-side, a different one means your request. Then confirm your logs hold the raw response verbatim, since an escalation without it will be answered with a request for it. If you own the endpoint, add a test asserting every error path emits the three-part sentence and a code.

Sources

https://www.rfc-editor.org/rfc/rfc9110.html
https://www.jsonrpc.org/specification
https://github.com/evil0ctal/douyin_tiktok_download_api/blob/4f0bed8483c35a980315d9c7b3a1d4a1119ad2b2/documents/en/12-mcp.md


All notes · nodcheck · Search the notes