Skip to main content
The MCP server distinguishes two kinds of signal. Errors mean the call did not do what you asked. Warnings mean it did, with something worth knowing. An agent should stop on errors and read on through warnings.

Error shape

Failures return an MCP error result whose content is a structured JSON body:

Error codes

Before the run starts

These fail preflight. No execution is created and no credits are consumed.

During execution

These happen after a run exists, so the run is inspectable in the dashboard and API.
Branch on the retryable field rather than maintaining your own list of codes. The server sets it per error, and it stays correct as codes evolve.

Warning codes

Warnings appear in the warnings array on successful calls. The array is always present, often empty.
steps_unavailable is not an empty result. It means results could not be loaded right now. Treat it as retryable—concluding “nothing was found” from it is wrong.

Handling errors in an agent

Two branches carry most of the weight: retry when retryable is true, and poll when next_step appears.

Transport-level errors

Connection failures return HTTP status codes rather than tool error bodies: These mean the connection itself is misconfigured. See Connect your client.

Debugging with request_id

Every response carries a request_id, and every run carries a run_id. Together they locate a call precisely:
Include the request_id when reporting an issue—it is the fastest way to find the call in Titan’s logs.

Next steps