Skip to main content
Glama

XP Tickets

Check Listing

check_listing
Read-only

Poll the current status and action feed for the listing tied to this call's correlation id.

IDENTITY: the correlation id is never a tool argument. It must ride the X-XP-Correlation-Id HTTP header on every MCP request, exactly like on every other tool call for this job. A missing/invalid header returns a structured error (below) instead of failing the call -- this tool is open-world (no bearer/OAuth needed); holding the correlation id (an unguessable v4 uuid) is itself the access control.

ARGS since: the cursor value returned by the previous call for this same correlation id. Omit (or pass null) on the first call to fetch the full action feed from the beginning. Must be >= 0; a negative value returns {"error": "invalid_since"}.

POLL LOOP: store cursor per correlation id in your own cache/store, send it back as since on the next call, and render only the new actions entries onto your own timeline -- the array already excludes anything at or before since and is empty when nothing changed. listing is a snapshot for cheap "current state" display only (quantity, bid count, bucket, ...); do not diff it yourself for history -- actions is the exact, ordered record (a bid placed and rescinded between two polls still yields both events).

RESULT SCHEMA (found: false -> every other field is null/absent; an unrecognized correlation id is not an error, just an empty result)::

{
  "correlation_id": "<uuid>",
  "found": true,
  "verified": true,               # identity confirmed when the listing was created
  "event_id": 406,                # last event this correlation looked at
  "listing": {                    # null until a listing exists for this id
    "swap": "d5b03i1rbqqa",       # public listing identifier (sell/checkout URLs)
    "created_at": "2026-08-12T14:00:00+00:00",
    "status_bucket": "open",      # see BUCKETS below
    "event_id": 406,
    "quantity": 2,
    "bid_count": 3,
    "top_bid_amount": 12000,      # cents, open bids, null if none
    "accepted_bid_amount": null,  # cents, set once a bid is accepted
    "sold": false,
    "last_activity_at": "2026-08-12T14:05:00+00:00"
  },
  "actions": [                    # everything after `since`, oldest first, [] if nothing new
    {"id": 91234, "event": "listing_created", "at": "2026-08-12T14:00:00+00:00"},
    {"id": 91288, "event": "bid_placed", "at": "2026-08-12T14:03:10+00:00", "amount": 12000}
  ],
  "cursor": 91301,                # send back as `since` on the next call
  "actions_truncated": true       # present+true only when 50+ new rows; call again with `cursor` to page
}

BUCKETS (listing.status_bucket) open - accepting bids, none accepted yet awaiting_tickets - a bid was accepted; seller hasn't transferred tickets yet buyer_has_tickets - tickets transferred; seller payout not yet finalized seller_payout - funds are ready to release to the seller zombies - stalled, no forward progress -- needs attention closed - terminal: cancelled, expired, or fully settled

EVENT VOCABULARY (actions[].event; only bid/sale events carry amount, in cents) listing_created, bid_placed, bid_rescinded, bid_accepted, bid_rejected, tickets_transferred, funds_claimed, listing_cancelled, listing_expired, sale_completed NOTE: no separate payout-completion signal exists -- the agent-forward payout rail is retired; sellers claim funds normally (funds_claimed).

FAILURES: this tool never raises and never returns an auth error (401). {"error": "missing_correlation_header", "message": "..."} - header missing/invalid {"error": "invalid_since"} - since < 0 {"error": "status_unavailable"} - backend down/slow/non-200

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sinceNoCursor from the previous call's `cursor` field. Omit/null on the first call to fetch the action feed from the beginning. Must be >= 0.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Goes far beyond annotations: explains header-based auth (open-world, no bearer/OAuth), the failure taxonomy (never raises, never 401, three structured errors), pagination truncation at 50+ rows, and the semantic difference between `listing` snapshot vs. `actions` history. Notes the retired payout rail. Annotations only cover readOnly/openWorld/destructive, so this substantially enriches the picture.

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

Conciseness3/5

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

Front-loaded purpose sentence is excellent, but the embedded JSON result schema is large and largely duplicates the actual output schema referenced in context signals. Header notation, ARGS, POLL LOOP, BUCKETS and EVENT VOCABULARY sections add operating value but make the description long for a one-parameter tool.

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?

Despite the output schema existing, the description adds the bucket semantics, event vocabulary, and cursor bookkeeping needed to drive a correct poll loop – none of which live in schema/annotations. An agent has everything required to invoke and interpret the tool correctly.

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 baseline 3 applies. The description adds meaning the schema lacks: what the cursor *is* (value from previous `cursor` field), the per-correlation-id storage discipline, and that negative values return invalid_since rather than being silently clamped.

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?

States a specific verb (poll) and resource (status and action feed for the listing tied to this call's correlation id). The identity mechanism (correlation id via header, not an argument) immediately distinguishes it from all sibling read tools like get_event_details or search_market.

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?

Explicitly documents the poll loop, when to omit `since` (first call), how to page via `cursor`, and clarifies non-error cases (unrecognized correlation id is not an error). No sibling tool overlaps this function, so no alternative needs naming.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources