get_ticket
Every input property this tool accepts, with its bounds.
Get one ticket with its full message timeline.
Role required: viewer. This is the same check the HTTP route
GET /v1/tickets/{ticket_id} applies, run by the same guard object.
Source: tool definition services/runtime/src/runtime/mcp/tools.py:456-468,
handler services/runtime/src/runtime/mcp/tools.py:286-302, role check
services/runtime/src/runtime/mcp/tools.py:291-293, HTTP route
services/runtime/src/runtime/api/tickets.py:736-738.
Input
| Property | Type | Required | Notes |
|---|---|---|---|
ticket_id | string | yes | Must be a UUID |
workspace_id | string | no | The workspace to act in. Optional if you belong to exactly one workspace, required otherwise |
Source: services/runtime/src/runtime/mcp/tools.py:461-465.
ticket_id is checked twice, and the two checks give different messages.
Missing or empty is ticket_id is required. Present but not a UUID is
ticket_id must be a UUID.
Source: services/runtime/src/runtime/mcp/tools.py:287-288 and
services/runtime/src/runtime/mcp/tools.py:294-297.
Output
The ticket and its timeline, as the HTTP route returns them, delivered as JSON text.
Failures
A ticket that does not exist in this workspace comes back as a tool error carrying the route's own message, not as a protocol failure, so the model can read the reason and react to it.
Source: services/runtime/src/runtime/mcp/tools.py:299-302.
Anything unanticipated returns exactly one message, this tool call could not be completed, and the real exception with its traceback goes to the server logs.
That is deliberate: it is what stops a database error reaching a caller with the
query text that produced it.
Source: services/runtime/src/runtime/mcp/tools.py:566-574.