Skip to main content
Glama

Get Original Chat Receipt

horizon_get_chat_operation
Read-onlyIdempotent

Read a retained send receipt to reconcile an original chat message operation, returning metadata needed for explicit replay decisions.

Instructions

Reads the current player's retained original send receipt. Use when: explicit hosted chat actions after reading horizon://docs/chat. Not for: automatic sends, repeated polling, rich-text rendering or exposing moderation credentials. Use horizon_get_chat_operation to reconcile original sends, then horizon_send_chat_message only for the explicit identical replay. Requires: userId and the player's session: sign in with horizon_signin_email or horizon_signin_anonymous and pass its accessToken as sessionToken. Side effects: Read only, with current identity while the original message remains. A missing/expired receipt does not prove a send never committed and cannot authorize a new ID. No historical per-player copy is retained. Returns: {receipt,serverTime}, metadata only Errors: 404 hides private/missing/expired channels or source messages. 409 OPERATION_CONFLICT/OPERATION_EXPIRED or STATE_CONFLICT requires explicit original-intent reconciliation. Never replace an unknown send UUID/time/text. 429 does not schedule a retry. CHAT_MUTED/CHAT_BANNED restrict current chat access. 501 NOT_SUPPORTED means simpleServer has no chat or polling fallback. 401 means the session is missing or expired: sign in again and retry with the new accessToken. 403 for a session means the token belongs to another user: pass the userId that signed in. Needs HORIZON_API_KEY. Every failure returns an error result (isError) with the HTTP status and body: a 401 that horizon_test_connection also returns means HORIZON_API_KEY is wrong, 429 means the account's per-minute rate limit was reached (wait a minute, then retry).

Input Schema

NameRequiredDescriptionDefault
userIdYesActive player matching the current session and project
operationIdYesOriginal canonical lowercase UUID
sessionTokenYesPlayer accessToken sent only as Bearer

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.9.1

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnly/idempotent/openWorld annotations, the description discloses the critical nuance that a missing or expired receipt does not prove a send never committed and cannot authorize a new ID, and that no historical per-player copy is retained. It also documents the error surface (404 masking private/missing/expired, 409 OPERATION_CONFLICT/EXPIRED and STATE_CONFLICT, 429 non-retry, 501 NOT_SUPPORTED, 401 vs 403 session semantics) and the HORIZON_API_KEY requirement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded with labeled sections (Use when / Not for / Requires / Side effects / Returns / Errors), so an agent can scan to the relevant part. It is however quite long for a read tool, and the trailing paragraph re-explains 401/429 already covered in the Errors line, which is mild redundancy rather than a structural flaw.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read with no output schema, the description supplies auth prerequisites, the return shape ({receipt, serverTime}, metadata only), the side-effect/retention model, and a full error-to-cause mapping. Nothing an agent needs to invoke this correctly, or to interpret a failure without retrying blindly, is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: sessionToken must come from the signin tool's accessToken, and userId must be the identity that signed in ('pass the userId that signed in'). It also frames operationId as the original canonical UUID that must never be replaced when unknown, which the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb and resource ('Reads the current player's retained original send receipt'), which is precise enough to separate it from siblings like horizon_get_chat_limits or horizon_get_marketplace_operation. Scope ('current player', 'retained original') is stated up front, so an agent knows exactly what object is being fetched.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use when' (explicit hosted chat actions after reading horizon://docs/chat) and 'Not for' clauses (automatic sends, repeated polling, rich-text rendering, exposing moderation credentials) give both sides of the decision. It also names the follow-up alternative, horizon_send_chat_message, and restricts it to 'explicit identical replay', plus points to horizon_signin_email/horizon_signin_anonymous for prerequisite auth.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools