Skip to main content
Glama

Ticker: Live Event Ticket Market

Server Details

Live event ticket market data: prices, inventory, demand and seat maps, with screens and alerts.

Ownership verified
Status
Healthy
Uptime
91.2% over 21 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

C2.8/5.0

Scored across 53 tools

Disambiguation2/5

Many tools are deprecated aliases or renamed stubs that duplicate canonical tools (e.g., get_event_price_chart vs get_event_chart, get_event_seller_series vs get_event_sellers). While descriptions label them as renamed, an agent still faces heavy overlap and misselection risk. Core canonical tools are distinct, but the aliases blur the surface significantly.

Naming Consistency4/5

Nearly all tools follow a clear snake_case verb_noun pattern (get_event_analytics, list_matches, create_view, watch_event). Minor deviations like screen_events and research_event are still semantically consistent. The naming is predictable enough for an agent to infer tool purpose.

Tool Count1/5

With 53 tools, the server is far beyond a reasonable scoped set, especially since a large fraction are deprecated aliases or removed stubs. The count reflects accumulated cruft rather than necessary operations. This extreme number hurts discoverability and selection accuracy.

Completeness4/5

The canonical surface covers a rich domain: events, analytics, seats, sections, sellers, performers, venues, views, watchlist, matches, and account quotas. However, destination management (create/update/delete) is explicitly removed and app-only, leaving a noticeable gap in alert lifecycle CRUD. Most workflows are otherwise complete.

Available Tools

53 tools
create_viewCreate Saved ViewAInspect

Creates a View: a saved predicate that records a Match when an event enters it and sends it by email or to a destination, with an optional Digest. Try the predicate with screen_events first; use update_view to change a View that exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
tagsNoFree-text organization labels for this View (max 5, deduplicated). Purely for grouping/filtering in the app; tags never change what the View matches or where alerts deliver.
colorNoAccent color the app shows on this View's pill/dot. One of: red, orange, amber, green, teal, blue, violet, pink. Cosmetic only.
digestNoThe View's Digest: each Issue is the View's events with Movers, New and Gone against the previous Issue. Only the fields you pass change. Turning it on past the plan's Digest count is refused with the plan that carries more.
enabledNo
channelsYesDelivery channels, at least one. "email" mails the Matches to the account's address. The other value routes them to the destinations attached to this View instead, which is how a Slack or Discord channel receives them: add one in the Ticker web app under Settings, then attach it with set_view_target. A View may carry both.
predicateNo{} = always-true, combined with max_firings_per_eval to get a "top-N of the universe" alert. Predicate DSL (recursive JSON): a leaf is {col, op, val}; composites are {all:[...]} (AND) or {any:[...]} (OR). Columns are prefixed: "ea." = event_analytics, "e." = events, "pa." = performer_analytics, "p." = performers (p.name, the act the row is about), "v." = venues (v.venue_name, the venue's name; v.city, v.state, v.country_code, v.capacity). Ops: =, !=, >, >=, <, <=, between (val=[lo,hi]), in (val=[...]), contains (case-insensitive substring on a TEXT column; val is a plain string), not_contains (removes the rows whose TEXT column holds val as a case-insensitive substring; a row with no value stays; % and _ in val match themselves, while contains reads them as wildcards). Example: {"all":[{"col":"ea.price_self_z_7d_xs_z_subcat_tte","op":">=","val":2},{"col":"ea.days_to_event","op":"between","val":[7,60]}]}. NAMED ACTS / TEAMS / PERFORMERS, use p.name. When the user names the act the events are BY (a musician like 'Taylor Swift', a team like 'Lakers', a comedian, a touring show), filter the performer column: {col:'p.name', op:'contains', val:'Taylor Swift'}. p.name is the act the row is KEYED on. e.event_name is the TITLE, which reads 'A at B' for a sports event and so also returns the opponent's home games, and for a concert also returns parking and support billings. A performer or team ask NEVER goes to e.event_name. Keep writing 'contains' for an act name. When what was typed IS a whole act name in the catalog, the server rewrites that leaf to op '=' and says so; anything else stays a substring. REMOVING ROWS BY A WORD. 'NOT Little', 'not the Lakers', 'without Taylor', 'excluding Hamilton' remove every row whose title contains the word: {col:'e.event_name', op:'not_contains', val:'Little'}. Never write '!=' for a word: '!=' compares the WHOLE value, so e.event_name != 'Manilow' removes nothing. A MISSPELLED superlative is still a superlative. 'htotest', 'hotest', 'bigest movers', 'chepest', 'lowset price' read as the word they intend and take the ordering that word takes. A ranking word is NEVER a name: never put it in a 'contains' leaf on e.event_name or p.name, and never answer with sort null because the spelling was odd. ECONOMIC FLOOR. The server already ANDs ea.listings_current >= 25 AND ea.median_price_current >= 40 into every screen. Do NOT add a listings-depth floor of your own. A column whose name ends in d1 or 1d is a ONE-DAY CHANGE, not yesterday's value. 'Inventory dropping' or 'listings falling' is a SEVEN-DAY change or an absorption column, never a one-day ratio. A stale row, or an event that is not active, is NEVER a move: its numbers describe the last day it was priced. Gate a movement ask on ea.last_price_snapshot_date with a relative date. The economic floor CAN be turned off at the call site (apply_floor=false, or apply_economic_floor=false on a rule), only when you explicitly want the raw universe. A freshness gate is NOT applied by default, so supply it yourself: {"col":"ea.last_price_snapshot_date","op":">=","val":{"days_ago":1}} means "priced within the last day" and compiles to CURRENT_DATE - 1, re-evaluated every tick, where a literal date string silently rots. The {"days_ago": N} value form is valid on any date/timestamp column. A weekend is {"col":"e.local_date","op":"between","val":{"weekend":"this","tz":"America/New_York"}} ("next" for the one after): the coming Friday to Sunday in tz, from today on a Friday to Sunday, resolved on every run. e.event_id, e.venue_id and e.performer_id take the ids rows carry (ev..., vn..., pf...). Authoritative validation runs in SQL; an invalid predicate returns a clear error.
notification_modeNoPer-alert EMAIL delivery mode: 'instant' (email each match), 'batched' (the Matches wait and go out together in one email, at the pace notification_cadence sets: `hourly` or `daily`), or 'muted' (Matches recorded, never emailed). 'instant' and 'muted' override notification_cadence. 'digest' is the old name of 'batched', accepted until 2026-11-30 and stored as 'batched'. Alert destinations are unaffected: they always deliver instantly.
delivery_target_idNoOptionally attach an alert destination (an id from list_destinations; new destinations are added in the Ticker web app under Settings) so this alert's Matches are delivered there the instant they fire, in addition to email. Omit for email-only.
apply_economic_floorNoWhether the rule's predicate is AND-ed with the economic floor (listings_current >= 25 AND median_price_current >= 40). Default true.
max_firings_per_evalNoCap on events this rule can match per evaluation tick (top-N by event_id (deterministic cap, not magnitude-prioritized)). Bounds alert volume since percentile predicates can't self-limit. Default 25.
notification_cadenceNoHow often this alert's Matches may leave as EMAIL: `immediate` (each match), `hourly`, `daily` (batched), or `off` (Matches recorded but never emailed). Only paces EMAIL; an attached alert destination always delivers the instant a Match fires, regardless of this.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish the mutation/safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), so the bar is lower. The description adds genuine behavioral context: what constitutes a Match, that delivery happens by email or to a destination, and that a Digest is optional. It omits plan-limit refusals (Digest count) and that predicate validation is server-side, but the core create-and-deliver behavior is disclosed.

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

Conciseness5/5

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

Two sentences with zero filler. The purpose and the resource definition are front-loaded, and the routing guidance follows immediately, so every sentence earns its place.

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

Completeness4/5

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

For a high-complexity, 12-parameter create tool with nested objects and no output schema, the description is thin on its own, but the exceptionally rich schema (predicate DSL, digest, triggers) carries the parameter burden and the description covers purpose and routing. The main residual gap is that, with no output schema, it does not say what a successful create returns (e.g. the new View id).

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

Parameters3/5

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

Schema description coverage is 83% (>80%), so the schema already documents the 12 parameters in depth. The description only gestures at the channels/digest parameters ('sends it by email or to a destination, with an optional Digest') without adding syntax beyond the schema. Baseline 3 is correct.

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+resource ('Creates a View') and defines the resource in domain terms: a saved predicate that records a Match when an event enters it, with email/destination delivery and an optional Digest. It also distinguishes itself from siblings by naming screen_events (test the predicate) and update_view (change an existing View).

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?

Gives explicit when-to-use alternatives: 'Try the predicate with screen_events first; use update_view to change a View that exists.' This both routes away from the wrong tool (update_view for existing Views) and prescribes a safe pre-flight step, leaving nothing to inference.

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

delete_destinationDelete Alert DestinationC
Destructive
Inspect

Removed: Destinations are managed in the Ticker web app. Rename, pause or delete one under Settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
destination_idYesThe destination to delete (id from list_destinations).

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, openWorldHint=false, so the safety profile is covered. The description adds the one piece of context annotations cannot express, that the endpoint is retired, but it does not say what happens if it is invoked anyway (error, no-op, or success).

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?

One short sentence, front-loaded with the critical word 'Removed:', with zero filler. It is efficient, though the brevity comes at the cost of stating an actual purpose.

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

Completeness3/5

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

For a retired single-parameter tool, the essential message (do not use; manage destinations in the web app) is present, but the definition omits what a call returns or whether the tool still executes, and points to no sibling tool.

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

Parameters3/5

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

With 100% schema description coverage, the single destination_id parameter is fully documented in the schema, including its source (list_destinations). The description adds nothing about the parameter, which is acceptable at baseline but no better.

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

Purpose2/5

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

The description never states what the tool does; it announces that the tool was removed and redirects the user to the Ticker web app. It effectively negates the name/title rather than clarifying the operation, so an agent cannot tell from the text whether the tool is still callable.

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

Usage Guidelines3/5

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

It does give a routing instruction for where destination management now lives (Settings in the web app), which is actionable. However, it never references the relevant siblings such as update_destination or list_destinations, so the agent gets no tool-level alternative.

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

delete_viewDelete Saved ViewA
Destructive
Inspect

Deletes a saved View and all its Matches for good; it cannot be undone. To stop a View for now and keep its Matches, use update_view with enabled false instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
view_idYesThe View to delete (from list_views).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is partly covered. The description goes beyond them by disclosing the cascade ('all its Matches'), irreversibility ('it cannot be undone'), and the softer alternative. It doesn't discuss permissions or confirmation requirements, but the key behavioral risk is well communicated.

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

Conciseness5/5

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

Two tightly written sentences: destructive consequence front-loaded, alternative second. Every clause earns its place with no redundancy.

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 destructive single-param delete with no output schema, the description covers consequence, irreversibility, and the safer path. Nothing needed to invoke it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% with a single required param (view_id) already documented including its source ('from list_views'). The description adds no parameter-level detail, so baseline 3 is appropriate when the schema does the work.

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 and resource ('Deletes a saved View'), plus the scope of the deletion ('all its Matches'). It is clearly distinguishable from siblings like update_view and list_views without opening either schema.

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 names the when-not case and the alternative: 'To stop a View for now and keep its Matches, use update_view with enabled false instead.' The agent is routed to the correct sibling with the exact parameter value to use.

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

find_venueFind VenueA
Read-only
Inspect

Renamed: use get_venue_schedule with view "venues" and venue_name for name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoThe venue name to look for, or part of it. Minimum two characters, e.g. "barclays", "Madison Square Garden". Optional when at least one of state, country, capacity_min or capacity_max is given.
limitNoHow many matches to return. Default 5, maximum 25.
stateNoKeep venues in this state or province, e.g. "TX". Matched against the same grouping key the venue directory orders by: the region code where the venue has one, its country code otherwise.
countryNoKeep venues in this country, by two-letter code, e.g. "US".
capacity_maxNoKeep venues that hold at most this many people. Venues whose capacity is unknown are left out whenever either bound is given.
capacity_minNoKeep venues that hold at least this many people. Venues whose capacity is unknown are left out whenever either bound is given.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds the meaningful context that the tool is superseded, but says nothing about whether it still functions, whether it is an alias with identical results, or whether it will be removed.

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

Conciseness5/5

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

A single sentence with zero waste, front-loaded with the decisive word "Renamed" so the agent knows immediately this is a redirect.

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

Completeness4/5

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

For a legacy stub with a fully documented schema and no output schema, the description supplies the one thing an agent needs: where to go instead and how to call the replacement. It omits any statement about this tool's continued behavior, which is the only remaining gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all six filters (name, limit, state, country, capacity_min/max) with examples and defaults. The description adds only the venue_name/name mapping hint, which is marginal; baseline 3 applies.

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

Purpose3/5

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

The description never states what find_venue does; it only announces a rename and names the successor tool. An agent can infer the resource (venues) from the target parameters, but the tool's actual purpose is left implicit rather than stated as a verb+resource.

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

Usage Guidelines4/5

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

It explicitly routes the agent to get_venue_schedule and even specifies the required view ("venues") and field (venue_name), which is unusually actionable. It stops short of saying whether this tool should never be called or only as a fallback, and the venue_name/name field naming differs from this schema's own 'name' parameter.

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

get_accountGet AccountA
Read-only
Inspect

Shows the caller's plan, its dates and how much of each quota and limit is left. Call it once before you say which plan includes a reading. Use list_views, list_watchlist or list_destinations for the items behind a count.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds useful behavioral context: it enumerates what is returned (plan, dates, remaining quota/limit per allowance) and the 'call it once' guidance implies a stable, cacheable, side-effect-free read. It stops short of stating auth requirements, but nothing contradicts the annotations.

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

Conciseness5/5

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

Two sentences, zero filler, with the primary purpose front-loaded and the routing guidance second. Each sentence earns its place.

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

Completeness4/5

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

There is no output schema, so the description must sketch the return value on its own, and it does: plan identity, plan dates, and remaining quota/limit per allowance. For a zero-parameter, non-destructive read that is sufficient, though it could say slightly more about what 'each quota and limit' comprises.

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?

The tool takes zero parameters, so the baseline is 4 and there is no parameter syntax the description needs to compensate for. No param-level value could be added here.

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 and resource ('Shows the caller's plan, its dates and how much of each quota and limit is left') and implicitly distinguishes itself from the many list_* siblings by naming them as alternatives for item-level data. An agent can identify this as the plan/quota probe without opening a schema.

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?

Gives explicit when ('Call it once before you say which plan includes a reading') and when-not/alternatives ('Use list_views, list_watchlist or list_destinations for the items behind a count'), naming three concrete sibling tools. Nothing is left to inference.

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

get_event_analyticsEvent AnalyticsA
Read-only
Inspect

Every number for one event as it reads now: prices, inventory, demand, their recent changes, prediction markets, and its presale and public on-sale windows. Pass range for how its numbers read on each past date, one row per date, to test a signal against what came next; never fill a date listed in days_missing. Use screen_events to compare many events, get_event_chart for the price series, research_event for why a number moved. Replaces get_event_analytics_history and get_event_sale_windows.

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNoLookback window over as_of_date: 7d | 14d | 28d | 90d | all (all is bounded to ~1 year). Default 90d.
columnsNoevent_analytics columns to return (bare names). Now: omit for the full row; `presales` and `onsale` name the sale windows. With range: omit for the headline signal set.
event_idYesThe event to look up. Ticker event id, `ev` plus ten characters, as returned by every tool here. A marketplace id also resolves when it carries its source prefix (`vs:`, `tm:`, `tp:`), and a bare marketplace id resolves until 2027-09-13.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond that: it discloses that a range call returns one row per date, that the tool now consolidates two former tools, and a do-not-fill constraint tied to days_missing. It stops short of describing pagination or output volume.

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?

Front-loaded with the core purpose, and each sentence carries routing or mode information rather than filler. It is dense and the 'never fill a date listed in days_missing' clause is cryptic since that field is never defined, which slightly hurts clarity without adding much length.

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

Completeness4/5

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

With no output schema, the description reasonably compensates by describing the return shape (full row vs. headline set, one row per date) and the sale-window fields. The gap is that days_missing is referenced as if defined elsewhere but is unexplained, leaving one behavioral rule ambiguous.

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; the schema already documents range, columns, and event_id. The description adds meaning beyond it by explaining that range yields one row per past date and by clarifying columns omission behavior (full row now vs. headline signal set with range), which is not stated in the schema.

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+resource with enumerated scope ('prices, inventory, demand, their recent changes, prediction markets, and its presale and public on-sale windows'). It explicitly differentiates from siblings (screen_events, get_event_chart, research_event) and notes it replaces get_event_analytics_history and get_event_sale_windows, so an agent can place it precisely without opening a schema.

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?

Gives explicit routing: 'Use screen_events to compare many events, get_event_chart for the price series, research_event for why a number moved.' It also states the condition that selects history mode ('Pass range ... to test a signal against what came next') and a negative constraint ('never fill a date listed in days_missing').

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

get_event_analytics_historyEvent Analytics HistoryC
Read-only
Inspect

Renamed: use get_event_analytics with range.

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNoLookback window over as_of_date: 7d | 14d | 28d | 90d | all (all is bounded to ~1 year). Default 90d.90d
columnsNoevent_analytics columns to return on each row (bare names, e.g. ["price_self_z_7d","median_price_current"]). Omit for the headline signal set. as_of_date, days_to_event and the partial-row markers are always included.
event_idYesThe event to chart. Ticker event id, `ev` plus ten characters, as returned by every tool here. A marketplace id also resolves when it carries its source prefix (`vs:`, `tm:`, `tp:`), and a bare marketplace id resolves until 2027-09-13.

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds almost nothing behavioral: it does not say whether calls to this alias still succeed, whether it is deprecated or will be removed, or whether it errors. 'Renamed' implies a working alias but leaves the agent guessing.

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?

One short, front-loaded sentence with no filler — the alternative tool is stated immediately. It is perhaps too terse for the amount of behavioral uncertainty it leaves, but nothing is wasted.

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

Completeness3/5

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

For a three-parameter read tool with annotations, the mechanical information is available elsewhere. What is missing is the one thing only the description can supply: whether this alias still functions, whether it is deprecated, and what happens to the caller if they use it instead of get_event_analytics.

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

Parameters3/5

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

Schema coverage is 100% and the schema itself is unusually detailed (range enum with default and boundedness, event_id format and legacy-id expiry, columns semantics). The description's 'with range' adds nothing beyond that, so the baseline 3 applies.

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

Purpose2/5

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

The description never states what the tool does — it only announces a rename to get_event_analytics. An agent cannot infer from it that this retrieves historical event analytics rows; the title is the only hint at the resource. It does, however, distinguish itself from get_event_analytics by marking itself as the superseded name.

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

Usage Guidelines4/5

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

It names a specific alternative (get_event_analytics) plus the condition that selects it ('with range'), which is exactly the routing an agent needs. It stops short of stating when this tool itself should still be used, or whether it should never be used at all.

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

get_event_bundleEvent BundleA
Read-only
Inspect

One event's price series, current analytics and sections in one call, as a short summary: the headline prices, listings and demand, where the series started, ended, bottomed and peaked, and the top sections now. Pass rows true for each part's rows. Use it when you need more than one of these on one event; get_event_chart, get_event_analytics and get_event_sections read one part in full.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNoFalse (default): the summary. True: the full analytics row, each date of the series and each section's prices with its last 7 days, each part cut to fit with a pointer to read on.
partsNoWhich parts to read: analytics, chart, sections. Omit for all three.
rangeNoHow far back the price series reaches. Default 28d; all is about a year.28d
event_idYesThe event to read. Ticker event id, `ev` plus ten characters, as every tool here returns it.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed world), so the description is free to add what they can't: it discloses that output is a summary by default and that rows=true yields truncated data 'cut to fit with a pointer to read on'. That truncation/pointer behavior is genuinely useful beyond the structured fields, though it says nothing about permissions or rate limits.

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?

Two sentences, front-loaded with the combined scope and followed by the routing rule; the middle enumeration of summary contents is dense but earns its place. Slightly list-heavy, but no filler.

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

Completeness4/5

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

There is no output schema, and the description does sketch what comes back (headline prices, listings, demand, series start/end/bottom/peak, top sections) plus the summary-vs-rows tradeoff, which is adequate. The full row shape still depends on the schema text, so it stops short of complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already defines rows, parts, range and event_id in detail; baseline is 3. The description adds only a light restatement ('Pass rows true for each part's rows') and never mentions the range or parts parameters, so it does not meaningfully exceed the schema.

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+resource (read one event's price series, analytics and sections in a single call) and explicitly contrasts itself with the three sibling tools that read one part in full. An agent can distinguish it from get_event_chart/analytics/sections without opening any schema.

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?

Gives an explicit selection rule: 'Use it when you need more than one of these on one event', then names the alternatives and their condition ('read one part in full'). No inference required.

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

get_event_chartEvent ChartA
Read-only
Inspect

One event over time, one row per date. metric price (the default): prices and inventory from one source (vs resale by default, tm primary, or another), never mixing primary and resale. metric demand: interest in its listings and recent sales, as levels over a window, never tickets bought that day. Use get_event_sections_live with view series for one section in finer steps, and get_event_analytics with range for other numbers over time. Replaces get_event_price_chart and get_event_demand_chart.

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNoLookback window: 7d | 14d | 28d | 90d | all (about a year). Default 90d for price, 28d for demand. vs only on price; other sources answer full depth.
metricNoprice (default): prices and inventory. demand: interest and sales levels.
renderNoA rendered chart (a PNG image content block) is included ahead of the data by default. Pass render:false for a data-only (smaller) response.
sourceNoComparison source: vs | tp | tm | tmr | gt | sg | sh | mlb | sgp. vs answers the per-date rollup; every other code answers the per-source series envelope ({source, meta:{coverageStart, lastMeasuredAt, granularity, mapped, bases}, series:[{date, floor, median, p25, p75, floorAip, medianAip, p25Aip, p75Aip, listings, tickets}]}), data only; mapped:false means the event has no link to that source. Default vs (this tool's classic per-date rollup shape); tm is the primary market, tmr the resale market, and vs, tp, tmr, gt, sg and sh are all resale. Never mix a primary and a resale source into one series. Every code serves the price (before fees) in floor and the all-in price (with fees) in floorAip; compare like with like. mlb is the club box office of an mlb game, a primary market of disclosed face values with their disclosed all-in beside them. sgp is the sg primary market; sg is the sg resale market only.
event_idYesThe event to chart. Ticker event id, `ev` plus ten characters, as returned by every tool here. A marketplace id also resolves when it carries its source prefix (`vs:`, `tm:`, `tp:`), and a bare marketplace id resolves until 2027-09-13.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true/destructiveHint=false, but the description goes well beyond them: it states the never-mix-primary-and-resale constraint, explains that demand shows levels over a window rather than tickets bought that day, and notes the default render behavior (data-only via render:false). It also discloses deprecation/replacement behavior, which the annotations cannot express.

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?

Front-loaded with the core behavior in the first sentence and organized around metric modes before routing to alternatives. It is dense and jargon-heavy but every clause carries routing or semantic information rather than filler.

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

Completeness4/5

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

For a five-parameter chart tool with no output schema, the description covers the essential context: metric semantics, source rules, response shape (rows per date, image vs data-only) and sibling routing. The per-source series envelope is only described inside the schema, so the description alone is not fully self-contained, but it is sufficient to call the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3, and the description largely restates what the schema already documents (price as default metric, vs as default source, the primary/resale distinction, the never-mix rule). It adds framing but little syntax or format detail beyond the structured fields.

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 resource and shape ('One event over time, one row per date') and then splits the two modes into distinct meanings: metric price = prices/inventory from one source, metric demand = interest and sales levels. It also explicitly names the tools it supersedes (get_event_price_chart, get_event_demand_chart), so an agent can disambiguate against siblings immediately.

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?

Gives explicit alternatives and the conditions that select them: use get_event_sections_live with view series for one section in finer steps, and get_event_analytics with range for other numbers over time. It also flags this tool as the replacement for two deprecated siblings, removing any ambiguity about which chart tool to call.

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

get_event_demand_chartEvent Demand ChartB
Read-only
Inspect

Renamed: use get_event_chart with metric "demand".

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNoLookback window over snapshot_date: 7d | 14d | 28d | 90d | all (all is bounded to ~1 year). Default 28d.28d
renderNoA rendered chart (a PNG image content block) is included ahead of the data by default. Pass render:false for a data-only (smaller) response.
event_idYesThe event to chart. Ticker event id, `ev` plus ten characters, as returned by every tool here. A marketplace id also resolves when it carries its source prefix (`vs:`, `tm:`, `tp:`), and a bare marketplace id resolves until 2027-09-13.

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. However, for a renamed tool the single most important behavioral fact is missing: whether the tool still executes and returns data, or is deprecated and fails. Nothing is said about the response format, the rendered-PNG behavior, or lifecycle status.

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?

A single short sentence with zero padding and the actionable instruction front-loaded. The terse 'Renamed:' fragment is slightly cryptic (renamed from what, and is this name still valid), but nothing is wasted.

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

Completeness3/5

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

For a simple 3-param read tool with 100% schema coverage, no output schema, and safety annotations, the description covers the migration path adequately. What it omits is the deprecation lifecycle detail an agent needs to decide whether invoking this tool is safe.

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

Parameters3/5

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

Schema description coverage is 100% and the params (event_id, range, render) are fully documented in the schema, so baseline 3 applies. The description adds no parameter detail beyond the schema, though it does name the 'metric' value the replacement tool expects.

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

Purpose3/5

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

The description never states what the tool does; the purpose ('demand chart for an event') is only inferable from the name/title. It does usefully identify the tool as a renamed alias and points to its replacement, which helps an agent place it among siblings, but as a statement of purpose it is a redirect notice rather than a description.

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

Usage Guidelines4/5

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

It explicitly names the alternative to use instead (get_event_chart) and the exact parameter that reproduces this tool's behavior (metric "demand"), which is precisely the routing information an agent needs. It stops short of stating whether calling this tool is still supported, errors out, or silently redirects.

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

get_event_ga_historyEvent General Admission HistoryB
Read-only
Inspect

Renamed: use get_event_sections_live with view "ga".

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPoints per page.
widthNoInstead of pages: the shape of the whole history in one answer, as the first, last, lowest and highest point of each of `width` equal slices of time from the section's first observation to now. At most four points a slice. Use it for the shape of a busy section, which can hold tens of thousands of changes.
cursorNonext_cursor from the previous page, for newer points. A page after the first carries the points alone.
sectionNoA general admission section's code, e.g. "GAFLR3", to add its exact points.
event_idYesThe event to read.
occurrenceNo0 unless the event lists the code twice, as `sections` shows. `section` and `occurrence` together name one section.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered structurally. The description's one behavioral contribution is disclosing deprecation/renaming, which is genuinely useful context. It says nothing about pagination, limits, or what a call to the stale name would do.

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

Conciseness5/5

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

A single short sentence that front-loads the critical fact (renamed) and immediately names the replacement and its argument. There is no filler whatsoever.

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

Completeness4/5

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

For a deprecation/redirect stub, the essential information an agent needs — don't use this, use that instead with this argument — is present. It would be marginally better if it stated whether the old name still resolves, but nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters (limit, width, cursor, section, event_id, occurrence) are already documented in the schema, including the non-obvious width and occurrence semantics. The description adds no parameter detail at all, so the baseline 3 applies.

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

Purpose2/5

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

The description never states what this tool does or returns; it only announces that it was renamed. An agent can infer it was once about GA history from the name, but the text itself provides no verb+resource statement. It does, however, distinguish itself as a dead end relative to siblings.

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

Usage Guidelines4/5

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

It explicitly redirects to a named sibling (get_event_sections_live) and even supplies the selecting parameter (view "ga"), which is exactly the when-to-use guidance an agent needs. It stops short of saying whether this tool still works or what happens if called.

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

get_event_price_chartEvent Price ChartC
Read-only
Inspect

Renamed: use get_event_chart with metric "price".

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNoLookback window over snapshot_date: 7d | 14d | 28d | 90d | all (all is bounded to ~1 year). Default 90d. vs only; envelope sources answer full depth.90d
renderNoA rendered chart (a PNG image content block) is included ahead of the data by default. Pass render:false for a data-only (smaller) response.
sourceNoComparison source: vs | tp | tm | tmr | gt | sg | sh | mlb | sgp. vs answers the per-date rollup; every other code answers the per-source series envelope ({source, meta:{coverageStart, lastMeasuredAt, granularity, mapped, bases}, series:[{date, floor, median, p25, p75, floorAip, medianAip, p25Aip, p75Aip, listings, tickets}]}), data only; mapped:false means the event has no link to that source. Default vs (this tool's classic per-date rollup shape); tm is the primary market, tmr the resale market, and vs, tp, tmr, gt, sg and sh are all resale. Never mix a primary and a resale source into one series. Every code serves the price (before fees) in floor and the all-in price (with fees) in floorAip; compare like with like. mlb is the club box office of an mlb game, a primary market of disclosed face values with their disclosed all-in beside them. sgp is the sg primary market; sg is the sg resale market only.vs
event_idYesThe event to chart. Ticker event id, `ev` plus ten characters, as returned by every tool here. A marketplace id also resolves when it carries its source prefix (`vs:`, `tm:`, `tp:`), and a bare marketplace id resolves until 2027-09-13.

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already state readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds nothing about deprecation status, whether calling it still functions, or what happens if an agent invokes it, which is the key behavioral fact for a renamed tool.

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?

One short, front-loaded sentence with no wasted words. It is concise, though it omits essential information.

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

Completeness1/5

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

For a renamed/deprecated tool with four parameters and no output schema, the description is inadequate. It does not say whether this tool is still callable, whether it forwards to get_event_chart, or what the replacement's required parameters are (e.g., that get_event_chart also requires event_id and a metric argument).

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents event_id, range, render, and source. The description adds no parameter semantics beyond the implicit equivalence to get_event_chart(metric="price"). Baseline 3 is appropriate.

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

Purpose2/5

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

The description only says the tool was renamed and points to get_event_chart with metric "price". It does not state what the tool actually does (produce a price chart for an event), so an agent unfamiliar with the rename has to infer purpose from the name alone.

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

Usage Guidelines3/5

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

It implicitly tells the agent to prefer get_event_chart with metric "price" instead of this tool, which is useful routing. But it gives no explicit when-to-use/when-not guidance and does not address whether this tool still works or is deprecated.

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

get_event_sale_windowsEvent Sale WindowsB
Read-only
Inspect

Renamed: use get_event_analytics with columns ["presales","onsale"].

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe event to read.

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered structurally. The description adds the rename fact but says nothing about whether invoking it aliases the new tool, fails, or returns a deprecation error. It neither contradicts the annotations nor enriches them much beyond the routing note.

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

Conciseness5/5

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

A single short sentence with zero filler, front-loading the essential fact (renamed) and the destination tool plus arguments. Nothing is padded or repeated.

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

Completeness3/5

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

For a renamed/deprecated alias, the most important missing context is whether the tool still works and what happens on invocation; the description omits this. It does supply the replacement target and exact columns, which is the essential routing info, but an agent cannot tell if calling it is safe or futile.

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

Parameters3/5

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

Only one parameter exists and schema description coverage is 100%, so the schema fully documents event_id ('The event to read.'). The description adds no parameter meaning, which lands at the baseline for a fully-covered single-param schema.

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

Purpose2/5

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

The description never states what the tool does; it only announces a rename and points at a replacement. The name suggests 'sale windows' but the text supplies no verb+resource statement of behavior. It is closer to a redirect stub than a purpose statement, though it does distinguish itself from siblings by declaring itself superseded.

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

Usage Guidelines3/5

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

It explicitly names the alternative (get_event_analytics) and even the exact columns to request (["presales","onsale"]), which is actionable routing. However it never says whether this tool still functions, returns an error, or should be avoided entirely, leaving the 'when to use this vs. that' question half-answered.

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

get_event_seat_historyEvent Seat HistoryB
Read-only
Inspect

Renamed: use get_event_seats with view "history".

ParametersJSON Schema
NameRequiredDescriptionDefault
rowNoRow, e.g. "6".
rowsNoscope section or event: each seat's changes, up to 25 seats a page in seat order, instead of the summary. A seat with more than 50 rows is truncated and carries its own next_cursor for scope seat.
seatNoSeat number, e.g. "2".
limitNoChanges per page.
scopeNoseat (default): one seat. section: every seat of `section` that changed since `since`. event: every seat of the event that changed. A section or event read answers a summary per section unless `rows` is true.seat
sinceNoOldest change to include, ISO 8601. Omit to reach the seat's first change.
all_inNoAdds each price after fees beside it. On by default; false returns the prices before fees alone.
cursorNonext_cursor from the previous page: one seat's older changes, or the next seats of a section or event read.
sectionNoSection code, e.g. "104".
event_idYesThe event to read.
place_indexNoThe seat's place index, instead of section, row and seat.

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already cover the safety profile (readOnlyHint true, destructive false), so the bar is lower, but the description adds only the fact that the tool is renamed. It discloses no behavioral traits such as pagination, truncation, or response shape beyond the redirect.

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?

A single front-loaded sentence with zero waste, which is appropriate for a deprecation notice. It is not padded or buried, though it is terse to the point of omitting any statement of the tool's function.

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

Completeness4/5

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

For a renamed alias, the correct agent behavior is to redirect rather than invoke, and the description accomplishes that despite 11 parameters and no output schema. Nothing further is required for an agent to act correctly, since it should not call this tool at all.

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

Parameters3/5

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

Schema description coverage is 100% across 11 parameters, so the schema carries the semantics and baseline 3 applies. The description's only parameter-adjacent claim references a view "history", which does not correspond to any value in the scope enum (seat/section/event) — it is a reference to the successor tool's parameter, not this one's.

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

Purpose3/5

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

The description never states what the tool does beyond the name; it only announces a rename. It does effectively differentiate from siblings by pointing to get_event_seats with view "history", so an agent knows this is not the tool to pick. Vague on purpose, clear on routing.

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 tells the agent to use get_event_seats with view "history" instead, which is precisely the when/when-not guidance needed for a deprecated alias. The named alternative and the condition selecting it are both stated, leaving nothing to inference.

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

get_event_seatsEvent SeatsA
Read-only
Inspect

Reserved seats at one event. view live (the default): every seat open now as place indexes with prices, or the seats open at a past moment (at); read count, not the list length. view recent: seats that came on or off sale in the last minutes; republish marks a price change, not a sale. view history: one seat's full history, named by section, row and seat or by place_index; with scope section or event, every seat that changed, as a summary per section or, with rows true, each seat's history a page at a time. Use get_event_sections_live for the house per section. Replaces get_event_seats_live, get_event_seats_recent and get_event_seat_history.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoRead the open seats as they stood at this instant, ISO 8601. Omit for now.
rowNoRow, e.g. "6".
rowsNoscope section or event: each seat's changes, up to 25 seats a page in seat order, instead of the summary. A seat with more than 50 rows is truncated and carries its own next_cursor for scope seat.
seatNoSeat number, e.g. "2".
viewNolive (default): open seats. recent: what just moved. history: one seat over time.
limitNoRows returned. live: seats, default 200, at most 5000. recent: seats, default 50. history: changes per page, default 50, at most 200.
scopeNoseat (default): one seat. section: every seat of `section` that changed since `since`. event: every seat of the event that changed. A section or event read answers a summary per section unless `rows` is true.
sinceNoOldest change to include, ISO 8601. Omit to reach the seat's first change.
all_inNoAdds each open seat's price after fees and whether it is an estimate, same position as `open`. On by default; false returns the prices before fees alone. Not served with `at`.
cursorNonext_cursor from the previous page: one seat's older changes, or the next seats of a section or event read.
minutesNoHow far back to look.
sectionNoSection code, e.g. "104". recent: only this section. history: the seat's section, with row and seat.
event_idYesThe event to read.
place_indexNoThe seat's place index, instead of section, row and seat.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/non-destructive, and the description adds real behavior beyond them: 'read count, not the list length', 'republish marks a price change, not a sale', page/truncation behavior with next_cursor, and that all_in is not served with `at`. These are non-obvious semantics an agent could not infer from annotations or schema alone.

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?

Front-loaded with the live/recent/history modes, then the alternative and the replacement note; no sentence is wasted for a 14-parameter tool. The semicolon-chained clauses are dense and border on run-on, which costs it the top mark but keeps it compact for the complexity involved.

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 high-complexity multi-mode read tool with no output schema, the description covers mode selection, scoping, pagination/truncation, cross-parameter constraints, the sibling alternative, and the consolidation of four tools. Essentially nothing needed to invoke it correctly 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% with 14 well-documented params, so the baseline is 3, but the description adds interaction semantics the schema does not: how `view`, `scope`, `rows`, `at` and `cursor` combine (e.g. rows turning a per-section summary into per-seat history paged 25 at a time). It stops short of fully mapping every parameter, but meaningfully exceeds the schema.

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 (get) and resource (seats at one event) and enumerates the three operating modes (live/recent/history) with scope. It explicitly distinguishes itself from get_event_sections_live and from the three tools it replaces, so an agent can place it without opening the schema.

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?

Each view mode is given a selection condition ('live: open now', 'recent: came on or off sale in the last minutes', 'history: one seat over time'), and the alternative get_event_sections_live is named with its reason. It also states it replaces get_event_seats_live, get_event_seats_recent and get_event_seat_history, which directly resolves sibling ambiguity.

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

get_event_seats_liveEvent Live SeatsB
Read-only
Inspect

Renamed: use get_event_seats with view "live".

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoRead the open seats as they stood at this instant, ISO 8601. Omit for now.
limitNoCap on seats returned. `count` is always the true total.
all_inNoAdds each open seat's price after fees and whether it is an estimate, same position as `open`. On by default; false returns the prices before fees alone. Not served with `at`.
event_idYesThe event to read.

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. Beyond the rename notice, the description adds no behavioral context: it doesn't say whether calling this alias returns the same payload as get_event_seats, whether it is deprecated-but-working or removed, or how the parameters map to the replacement's view argument.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler, and the actionable instruction (the replacement call) comes first. Nothing is padded or repeated.

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

Completeness3/5

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

For a rename stub, telling the agent the successor call is the essential information, but the description omits whether the alias still works and how this tool's four parameters carry over to the replacement's view argument. No output schema exists, so return-value omission is acceptable.

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

Parameters3/5

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

Schema description coverage is 100% and the four parameters (at, limit, all_in, event_id) are thoroughly documented in the schema, including interactions like all_in not being served with at. The description adds nothing about parameters, so the baseline 3 applies.

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

Purpose3/5

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

The description does not state what this tool does in its own right; it only says it has been renamed and points to get_event_seats with view "live". The redirect is informative and distinguishes it from siblings like get_event_seats_recent or get_event_seats_history, but the purpose is conveyed indirectly via the replacement rather than directly.

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

Usage Guidelines4/5

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

"use get_event_seats with view 'live'" explicitly names the alternative and the condition that selects it, which is exactly what an agent needs to route correctly. It stops short of a 5 because it never states whether this alias still functions, errors out, or should never be called.

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

get_event_seats_recentEvent Recent Seat MovesC
Read-only
Inspect

Renamed: use get_event_seats with view "recent".

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoSeats returned; `truncated` says more moved.
all_inNoAdds each price after fees beside it. On by default; false returns the prices before fees alone.
minutesNoHow far back to look.
sectionNoOnly this section, by ticket code (e.g. "104").
event_idYesThe event to read.

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds no behavioral context at all: no mention of deprecation semantics, whether calling it still works, or what it returns.

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?

A single short sentence with zero padding, and the redirect is front-loaded. It is appropriately sized for a tombstone notice, though it is so terse that it borders on under-specification.

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

Completeness3/5

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

For a redirect stub it covers the essential point (use get_event_seats with view "recent"), and the schema and annotations handle the rest. It never explicitly states the deprecation or whether this alias still functions, leaving a gap an agent must infer.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (limit, all_in, minutes, section, event_id) are already documented in the schema. The description only references the "view" argument of the successor tool, adding nothing for this tool's own parameters.

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

Purpose2/5

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

The description does not state what the tool does; it only announces a rename and points to get_event_seats with view "recent". An agent learns this is a superseded alias, but nothing about the resource or operation (recent seat moves) is conveyed beyond what the name/title already imply.

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

Usage Guidelines4/5

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

It explicitly names the replacement tool and the argument needed (view "recent"), which is exactly the routing guidance an agent needs to pick the right sibling. It lacks any statement of when the old alias might still be valid, so it falls short of a full 5.

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

get_event_sectionsEvent SectionsA
Read-only
Inspect

Shows each section's prices and tickets for one event per market, now and for the last 7 days. Use get_event_sections_live for seats open now, at a past moment (view at) or one section over hours (view series).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoCap on sections returned when `sections` is omitted. The widest events draw 650 sections.
event_idYesThe event to read.
sectionsNoOnly these sections, by label (e.g. ["108","FL2"]). Omit for the whole house.
include_historyNoSet false for current levels only.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare a safe read (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description adds real behavioral context beyond that: the results cover a trailing 7-day window and can be scoped to a single market/event. It does not discuss cost, rate limits, or result size, which would push it higher.

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

Conciseness5/5

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

Two sentences, no filler, with the scope statement front-loaded before the alternative-tool routing. Every clause carries information.

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

Completeness4/5

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

With no output schema, the description conveys what comes back (per-section prices and tickets) and the temporal coverage (now plus 7 days). It does not describe result shape or the effect of the 650-section limit, but for a read-only listing tool it is nearly complete.

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

Parameters3/5

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

Schema description coverage is 100%, so limit, event_id, sections, and include_history are all documented in the schema itself. The description adds no syntax, defaults, or filtering semantics beyond what the schema provides, so the baseline 3 applies.

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 and resource with scope: each section's prices and tickets, for one event, now plus the last 7 days. It also names the sibling it is not (get_event_sections_live), so an agent can distinguish it without opening schemas.

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

Usage Guidelines4/5

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

Explicitly routes the agent elsewhere for live/point-in-time/series needs: 'Use get_event_sections_live for seats open now, at a past moment (view at) or one section over hours (view series).' The alternatives are described by intent rather than exact tool names for the 'view at' and 'view series' cases, which slightly weakens the routing.

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

get_event_sections_atEvent Sections At A TimeA
Read-only
Inspect

Renamed: use get_event_sections_live with view "at".

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoThe instant to read the house at, ISO 8601. Defaults to now.
event_idYesThe event to read.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false). The description adds one genuinely useful behavioral fact beyond them — that this is a renamed/legacy entry point — but says nothing about whether calls still return data or are redirected.

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

Conciseness5/5

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

A single sentence with zero waste, and the redirect (the most actionable information) is front-loaded.

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

Completeness4/5

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

For a renamed alias with only two fully-documented parameters and no output schema, the redirect is the essential content and it is present. Missing only whether the tool remains callable and whether its parameters match the replacement's.

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

Parameters3/5

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

Schema description coverage is 100%, so both `at` and `event_id` are already documented with format and defaults. The description adds only the mapping of the view name "at", which is marginal; baseline 3 applies.

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

Purpose3/5

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

The description never states a verb+resource for this tool itself; it only points at get_event_sections_live with view "at". From that an agent can infer this reads event sections at an instant, but the purpose is conveyed indirectly through the redirect rather than stated.

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

Usage Guidelines4/5

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

It explicitly names the alternative tool and the exact configuration to use instead (view "at"), which is real routing guidance. It stops short of saying whether this tool still works, is deprecated-but-functional, or will be removed.

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

get_event_section_seriesEvent Section Open SeriesA
Read-only
Inspect

Renamed: use get_event_sections_live with view "series".

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoOldest point to include, ISO 8601. Defaults to 24 hours ago.
bucketNoPoint size: 5m for the last few hours, 1h for days. `open_count` is exact at every bucket. THE PRICES ARE NOT: they are exact on the newest bucket only; on every earlier bucket they are the seats open now valued at the prices recorded for that bucket, an approximation. Never present an earlier bucket's price as the price at that time.1h
sectionYesThe section's ticket code, e.g. "104", as get_event_sections_live keys it.
event_idYesThe event to read.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds meaningful operational context by marking the tool as renamed/deprecated, but it does not disclose return format, pagination, or other behavioral traits.

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

Conciseness5/5

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

The entire description is one short sentence with no wasted words. It front-loads the deprecation/redirect status, which is the only actionable information an agent needs.

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

Completeness3/5

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

The description is complete for routing an agent away from this deprecated alias, but it does not explain what the tool returns or how it behaves if called. With no output schema, a fuller description would normally be expected, though the rich input schema and annotations reduce the practical gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are fully documented in the schema, including detailed notes about bucket price approximation. The description adds no parameter meaning for this tool and merely refers to a parameter on the replacement tool, so baseline 3 is appropriate.

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

Purpose3/5

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

The description does not state what the tool itself does; it only says it has been renamed. The replacement tool and view name imply the original purpose (event section series) but this is inferred from the name and sibling, not explicitly stated. It is a vague purpose statement rather than a specific verb+resource description.

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?

It explicitly names the replacement tool and the exact view parameter to use instead: get_event_sections_live with view "series". An agent is given an unambiguous instruction, which is the correct guidance for a deprecated alias.

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

get_event_sections_liveEvent Section CountsA
Read-only
Inspect

Open seats per section of one event from the seat log. view now (the default): each section right now, with the lowest, median and highest price, capacity and what left the resale market. view at: every section's open count at a past moment, up to 90 days back; call it twice and subtract to see where seats went. view series: one section over up to 7 days, in 5m or 1h steps; only the newest point's prices are exact. view ga: each general admission section's open count over time; added and removed are changes, not sales. Use get_event_sections for prices over 7 days and get_event_seats for single seats. Replaces get_event_sections_at, get_event_section_series and get_event_ga_history.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoThe instant to read the house at, ISO 8601. Defaults to now.
viewNonow (default), at (a past moment), series (one section over time), ga (general admission over time).
limitNonow: sections returned when `sections` is omitted, default 60. ga: points per page, default 200.
sinceNoOldest point to include, ISO 8601. Defaults to 24 hours ago.
widthNoInstead of pages: the shape of the whole history in one answer, as the first, last, lowest and highest point of each of `width` equal slices of time from the section's first observation to now. At most four points a slice. Use it for the shape of a busy section, which can hold tens of thousands of changes.
all_inNoAdds each section's lowest, median and highest price after fees and whether the lowest is an estimate. On by default; false returns the prices before fees alone.
bucketNoPoint size: 5m for the last few hours, 1h for days. `open_count` is exact at every bucket. THE PRICES ARE NOT: they are exact on the newest bucket only; on every earlier bucket they are the seats open now valued at the prices recorded for that bucket, an approximation. Never present an earlier bucket's price as the price at that time.
cursorNonext_cursor from the previous page, for newer points. A page after the first carries the points alone.
sectionNoseries: the section's ticket code, e.g. "104" (required). ga: a general admission section's code, to add its exact points.
event_idYesThe event to read.
sectionsNoOnly these sections, by ticket code (e.g. ["104","FL2"]). Omit for the whole house.
occurrenceNo0 unless the event lists the code twice, as `sections` shows. `section` and `occurrence` together name one section.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare a safe read (readOnlyHint, non-destructive, non-open-world); the description adds genuinely non-obvious behavior: prices are exact only on the newest bucket and are approximations on earlier buckets ('Never present an earlier bucket's price as the price at that time'), and for GA 'added and removed are changes, not sales'. It also discloses time-window limits (90 days, 7 days) and the existence of a seat log as the data source.

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?

Front-loaded with the core purpose, then view-by-view, then alternatives and deprecations; every clause carries routing or caveat information, so little is wasted. The density of semicolon-chained clauses makes it slightly harder to scan than a fully structured list, but it is not padded.

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

Completeness4/5

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

For a 12-parameter tool with no output schema, the description covers modes, time ranges, defaults, price caveats and alternatives well enough to call it correctly. It stops short of describing the response shape (e.g. per-section fields, pagination envelope beyond `next_cursor`), which is the only material gap.

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

Parameters5/5

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

Schema coverage is already 100%, but the description adds meaning the schema alone does not: it explains what each enum value of `view` actually returns, the 90-day cap on `at`, the 7-day cap and step sizes for `series`, the dependency that `section` is required for `series`, and the semantics of `bucket` price approximation. It also clarifies the page/`width` trade-off in prose.

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?

Opens with a specific verb and resource ('Open seats per section of one event from the seat log') and then enumerates the four distinct views, so the agent knows exactly what each mode returns. It explicitly separates itself from get_event_sections and get_event_seats and names the three tools it replaces, which is precisely what an agent needs to disambiguate among the crowded sibling set.

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?

Gives explicit when-to-use guidance per view ('view now: ... view at: every section's open count at a past moment, up to 90 days back', 'view series: one section over up to 7 days'), including the workaround of calling 'at' twice and subtracting. It also names alternatives with their selection conditions ('Use get_event_sections for prices over 7 days and get_event_seats for single seats').

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

get_event_seller_concentrationEvent Seller ConcentrationC
Read-only
Inspect

Renamed: use get_event_sellers with view "now".

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe event to read.

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered structurally. The description adds nothing behavioral — no mention of deprecation behavior, whether the call still succeeds, or what it returns.

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?

One short sentence with zero waste and the actionable instruction front-loaded. It is terse to the point of under-specification rather than padded.

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

Completeness2/5

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

For a deprecated alias the migration note is the essential content and it is present, but the description omits whether the tool still works, whether it errors, and what a caller gets if invoked anyway. With no output schema, that leaves real ambiguity.

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

Parameters3/5

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

Schema description coverage is 100% for the single event_id parameter, so the schema carries the parameter documentation burden. The description adds no parameter meaning beyond that, which is the expected baseline.

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

Purpose2/5

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

The description never states what the tool does or what it returns; it only announces a rename. An agent learns nothing about seller-concentration semantics from the text itself, and must infer the purpose from the title alone.

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

Usage Guidelines4/5

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

It explicitly routes the caller to the replacement, get_event_sellers, and even names the required view value ("now"). That is a concrete alternative plus condition, though it never says whether this tool still functions or when a caller could legitimately invoke it.

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

get_event_seller_marketEvent Seller MarketB
Read-only
Inspect

Renamed: use get_event_sellers with view "market".

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNoHow far back the series reads. Default 7d.
sellersYesSeller letters, `["A", "C"]`.
event_idYesThe event to read.
section_idsNoOptional section ids, as `get_event_sections` keys them.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered by structured data. The description adds one genuinely useful behavioral fact beyond annotations: the tool has been renamed and superseded. It says nothing about whether calls still succeed, error, or return stale data, so the disclosure is thin.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler; every word (rename, replacement tool, view value) is load-bearing and the agent gets the redirect immediately.

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

Completeness3/5

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

For a four-parameter tool with a full schema still exposed, the description omits key migration context: whether the tool remains callable, and how its parameters map to get_event_sellers view="market". No output schema exists, so return values need not be covered, but the unresolved replacement mapping leaves a gap.

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

Parameters3/5

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

Schema description coverage is 100%, so event_id, sellers, range, and section_ids are already documented in the schema, and the description adds no parameter syntax or constraints. It also does not explain whether these same parameters carry over to get_event_sellers with view "market", which is the migration detail an agent actually needs. Baseline 3 is appropriate.

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

Purpose3/5

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

The description never states what the tool does (read seller market series for an event); it only announces a rename and points to a replacement. The replacement name plus view "market" hints at the resource, but the agent must infer the actual purpose from the tool name and sibling get_event_sellers. It is a routing note, not a purpose statement.

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

Usage Guidelines4/5

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

It explicitly names the tool to use instead, which is the strongest possible alternative guidance. However, it does not say whether this tool still functions, when it will be removed, or what condition (other than always) selects the alternative, leaving a small ambiguity about calling it.

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

get_event_sellersEvent SellersA
Read-only
Inspect

One event's sellers, anonymously and by letter. view now (the default): how much of the inventory the largest sellers hold (active sellers, top shares, hhi, coverage). view series: how the lettered sellers moved hour by hour, up to 720 hours; letters are an arrival order, not a rank, and match the event page. view market: chosen sellers' prices and listings over time and per section; only a seller that reached 10 live listings can be chosen. Replaces get_event_seller_concentration, get_event_seller_series and get_event_seller_market.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNonow (default): concentration. series: sellers hour by hour. market: chosen sellers' prices.
hoursNoHow many of the most recent hours to return. Default 168, maximum 720.
rangeNoHow far back the series reads. Default 7d.
sellersNoSeller letters, `["A", "C"]`.
event_idYesThe event to read.
section_idsNoOptional section ids, as `get_event_sections` keys them.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description's job is to add context — and it does: sellers are anonymized into letters, letters reflect arrival order rather than rank, and they match the event page. It also discloses the 10-live-listing threshold and the 720-hour cap, though it says nothing about empty results or error behavior.

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?

Front-loads the resource, then walks the three views in a compact parallel structure with the default flagged inline. It is dense and slightly run-on, but nearly every clause carries information an agent needs.

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

Completeness4/5

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

With no output schema, the description must carry the return-value burden, and it names the concrete metrics per view (active sellers, top shares, hhi, coverage; hour-by-hour movement; prices and listings per section). Coverage is good for a three-mode tool, though output shape and pagination remain only lightly sketched.

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 genuine semantics beyond the schema: letters are an arrival order not a rank and align with the event page, and the market view's 10-listing eligibility rule explains when the 'sellers' parameter can be populated at all.

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 the resource precisely ('One event's sellers, anonymously and by letter') and enumerates three concrete views (now/series/market) with what each returns. It also names the three sibling tools it supersedes, so an agent can distinguish it from get_event_seller_concentration, get_event_seller_series, and get_event_seller_market without opening any schema.

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?

Gives per-view selection criteria: 'view now (the default)' for concentration, 'view series' for hour-by-hour movement, 'view market' for chosen sellers' prices and listings. It also states the gating condition for the market view ('only a seller that reached 10 live listings can be chosen') and explicitly declares it replaces three named siblings.

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

get_event_seller_seriesEvent Seller SeriesB
Read-only
Inspect

Renamed: use get_event_sellers with view "series".

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoHow many of the most recent hours to return. Default 168, maximum 720.
event_idYesThe event to read.

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds no behavioral context of its own beyond the redirect – no return shape, no scope, no deprecation semantics beyond the word 'Renamed'. As a stub it is acceptable but contributes essentially nothing behavioral.

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?

A single terse sentence with zero waste, and the redirect is front-loaded. It is appropriately sized for a deprecation stub, though it is arguably too thin to be self-sufficient.

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

Completeness3/5

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

For a renamed/deprecated alias the key need is telling the agent where to go, which it does. However it leaves gaps: it does not say whether calling it still works, and it gives no hint about the returned data, which an agent must resolve by opening get_event_sellers.

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

Parameters3/5

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

Schema description coverage is 100%, so event_id and hours are fully documented in the schema; baseline 3 applies. The description adds no meaning about either parameter – notably it does not explain how 'series' related to event_id or hours.

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

Purpose3/5

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

The description never states what the tool itself returns; it only announces a rename and points elsewhere. 'view "series"' hints at the resource (seller series data), but an agent learns the purpose only indirectly. It is better than a pure tautology because it names the replacement, yet it does not describe the tool's own function.

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?

It explicitly tells the agent not to use this tool and names the exact alternative plus the parameter value (get_event_sellers with view "series"). The when/when-not routing is unambiguous and requires no inference.

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

get_event_workspaceGet Event WorkspaceC
Read-only
Inspect

Removed: The section map's saved view is app-only state. Use get_event_sections for the section data.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe event to read.

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered structurally. The description adds one genuinely useful behavioral fact: the section map's saved view is app-only state and therefore not part of this payload. It says nothing about permissions, rate limits, or payload shape beyond that single exclusion.

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?

A single short sentence with no padding, so it is not verbose. But the sentence leads with 'Removed:' rather than the tool's function, which is the opposite of front-loading the payload's purpose, and its content is thin relative to the space it occupies.

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

Completeness2/5

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

With no output schema, the description carries the burden of explaining what an 'event workspace' contains, and it never does — it only documents an exclusion and a redirect. For a read tool whose return value is entirely opaque, this leaves an agent guessing about the payload it will receive.

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

Parameters3/5

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

Schema description coverage is 100% for the single event_id parameter, which the schema already documents as 'The event to read.' The description adds no syntax, format, or semantics beyond the schema, so the baseline 3 applies.

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

Purpose2/5

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

The description never says what get_event_workspace returns or does; it only announces that a 'section map's saved view' was removed and points elsewhere for section data. From the text alone an agent cannot tell what a 'workspace' here contains, other than that it is not section data. It gestures at the resource but never gives a verb-plus-resource statement of purpose.

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

Usage Guidelines3/5

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

It does name an explicit alternative and condition: 'Use get_event_sections for the section data,' which routes the agent away from this tool for one specific need. However, it gives no positive guidance on when to call get_event_workspace itself or what question it answers. Implied usage only, not a real when/when-not rule.

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

get_issueRead One Digest IssueC
Read-only
Inspect

Removed: The Digest is an email and a file. Read the Digest email or its file.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRows per page, default 100.
offsetNoRows to skip, default 0.
view_idYesThe View (from list_views).
issue_idYesThe Issue (from list_issues).

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds nothing about behavior — no note on pagination (limit/offset), what a returned issue contains, or the email-vs-file distinction it raises. The "Removed:" prefix is noise that risks misreading the tool's status.

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

Conciseness2/5

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

The text is short, but the leading "Removed:" fragment is pure waste and actively misleading, and the substantive sentence about reading the Digest is not front-loaded. Two sentences that a reader has to mentally repair is not effective conciseness.

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

Completeness2/5

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

With no output schema, the description carries the burden of explaining what an issue read returns, and it does not. It also says nothing about pagination behavior or how view_id and issue_id relate, leaving an agent without enough context to use the tool confidently.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (view_id, issue_id, limit, offset) are already documented in the schema, which sets the baseline at 3. The description adds no parameter meaning and introduces an "email or its file" dichotomy that maps to none of the actual parameters.

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

Purpose2/5

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

The description opens with the fragment "Removed:", which suggests the tool has been deleted and actively undercuts an agent's confidence that get_issue is callable. The remainder ("Read the Digest email or its file") gives a verb and resource but never states that it reads a single issue identified by view_id/issue_id, nor distinguishes it from list_issues or list_digests.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of the sibling alternatives (list_issues, list_digests) that an agent would need to choose between. The only routing hint — "email or its file" — refers to a choice that has no corresponding parameter in the schema, so it cannot guide invocation.

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

get_matchGet MatchB
Read-only
Inspect

Renamed: use list_matches with match_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
match_idYesThe match id (from list_matches' match_id field).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read behavior is covered. The description adds the important redirect behavior (this tool is superseded), which is not in the annotations, but says nothing about this tool's own behavior, errors, or auth.

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?

Single short sentence, front-loaded with the key fact. It is efficient and unambiguous, though terse to the point of omitting any statement of purpose.

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

Completeness3/5

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

For a deprecated tool whose job is to redirect, the critical information is present. However, it never states whether the tool still functions or what it returns, and with no output schema an agent gets no confirmation of behavior.

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 description coverage is 100% and there is one required parameter, so the baseline is 4. The description adds a hint that match_id comes from list_matches, which is consistent with the schema and mildly useful, but not beyond structured fields.

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

Purpose2/5

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

The description does not state what the tool does. It only says 'Renamed: use list_matches with match_id,' which is a deprecation notice, not a purpose. An agent cannot tell from this text what get_match retrieves or why it existed.

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?

It explicitly routes the agent to list_matches and even names the argument to use (match_id). That is exactly the guidance needed for a deprecated tool: what to use instead and how.

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

get_performer_analyticsPerformer AnalyticsA
Read-only
Inspect

One performer's numbers as they read now: popularity rank, average prices across its events, listings, X activity, playoff odds and prediction markets. Pass range for its popularity rank over time, one row per date, where a higher rank is better and null means unranked, not zero. Use get_event_analytics for one event. Replaces get_performer_rank_chart.

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNoLookback window over snapshot_date: 7d | 14d | 28d | 90d | all (all is bounded to ~1 year). Default 28d.
renderNoA rendered chart (a PNG image content block) is included ahead of the data by default. Pass render:false for a data-only (smaller) response.
columnsNoSpecific performer_analytics columns to return (bare names). Omit for the full row.
performer_idYesThe performer to look up. Ticker performer id, `pf` plus ten characters, as returned by every tool here. A marketplace id also resolves with its `vs:` prefix, and bare until 2027-09-13.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description adds genuinely useful semantics beyond that: 'as they read now' conveys snapshot behavior, and 'higher rank is better and null means unranked, not zero' disambiguates a subtle data trait that annotations cannot express.

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?

Front-loads the core output ('One performer's numbers as they read now') before drilling into range semantics and routing. Slightly dense and the range sentence is a touch awkward, but nearly every sentence carries useful information.

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

Completeness4/5

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

With no output schema, the description does the work of naming returned fields and the range semantics. For a read-only analytics tool with full schema coverage and covered annotations, this is essentially complete, though explicit 'when not to use' guidance is absent.

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 description coverage is 100%, so the baseline is 3. The description adds value over the schema by clarifying what 'range' actually governs — the performer's popularity rank over time, one row per date — which the schema only vaguely frames as a 'lookback window over snapshot_date'.

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 and resource ('get performer analytics') and enumerates exactly what it returns: popularity rank, average prices, listings, X activity, playoff odds, and prediction markets. It explicitly routes the agent away from get_event_analytics and names the sibling it replaces (get_performer_rank_chart), so it is distinguishable without opening a schema.

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

Usage Guidelines4/5

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

It names the alternative ('Use get_event_analytics for one event') and declares itself the replacement for get_performer_rank_chart, which gives clear routing context. However, it does not spell out an explicit when-not-to-use condition for this tool beyond the sibling pointer.

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

get_performer_rank_chartPerformer Rank ChartC
Read-only
Inspect

Renamed: use get_performer_analytics with range.

ParametersJSON Schema
NameRequiredDescriptionDefault
rangeNoLookback window over snapshot_date: 7d | 14d | 28d | 90d | all (all is bounded to ~1 year). Default 28d.28d
renderNoA rendered chart (a PNG image content block) is included ahead of the data by default. Pass render:false for a data-only (smaller) response.
performer_idYesThe performer to chart. Ticker performer id, `pf` plus ten characters, as returned by every tool here. A marketplace id also resolves with its `vs:` prefix, and bare until 2027-09-13.

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds no behavioral context at all — no note on whether the tool still works, what it returns, or how the redirect interacts with existing callers.

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?

Eight words, front-loaded with the most important fact for an agent (this tool is superseded). It is genuinely concise rather than padded, but the terseness borders on under-specification given it is the entire documentation for a live three-parameter tool.

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

Completeness2/5

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

For a tool that still appears in the active tool list with a required performer_id and two optional behavior-altering parameters, the description omits whether calls still succeed, what a rendered vs. data-only response contains, and what happens to existing integrations. The routing hint is present but the definition is not complete enough to invoke the tool knowingly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents performer_id, range (with its enum and default), and render. The phrase 'with range' adds only a hint that the range parameter carries over to the replacement, which is marginal value over the schema. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose2/5

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

The description never states what the tool does; it only announces that the tool was renamed and points elsewhere. The name suggests a performer rank chart, but the text itself conveys no verb+resource purpose and gives no distinguishing detail versus siblings like get_performer_chart or get_performer_analytics.

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

Usage Guidelines4/5

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

It explicitly routes the agent to an alternative ('use get_performer_analytics with range'), which is the single most useful instruction an agent could get for a superseded tool. It stops short of a 5 because it never states when, if ever, calling this tool itself is still appropriate, nor whether it remains functional.

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

get_venue_scheduleVenue ScheduleA
Read-only
Inspect

Shows the upcoming events at one venue, soonest first, with sale dates and the get-in price, plus its roof and a 7-day forecast. view venues finds venues instead: by name, or by state, country and capacity range, with their ids and upcoming event counts; use the official name, not a nickname. Use screen_events to rank a venue's events. Replaces find_venue.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoHow far forward to look, in days. Default 30, maximum 365.
viewNoschedule (default): one venue's events. venues: find venues and their ids.
limitNoMost events to return. Default and maximum 200.
stateNoKeep venues in this state or province, e.g. "TX". Matched against the same grouping key the venue directory orders by: the region code where the venue has one, its country code otherwise.
countryNoKeep venues in this country, by two-letter code, e.g. "US".
venue_idNoThe venue to read. Ticker venue id, `vn` plus ten characters, as returned by find_venue. A marketplace id also resolves with its `vs:` prefix, and bare until 2027-09-13. Omit it only when passing `venue_name`.
venue_nameNoA venue name. schedule: the best match is read. venues: the name to search for, or part of it.
capacity_maxNoKeep venues that hold at most this many people. Venues whose capacity is unknown are left out whenever either bound is given.
capacity_minNoKeep venues that hold at least this many people. Venues whose capacity is unknown are left out whenever either bound is given.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds behavioral value beyond that: ordering (soonest first), the fields returned (sale dates, get-in price, roof, forecast), and a deprecation/migration note. It does not cover rate limits or auth, hence not a 5.

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

Conciseness5/5

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

Core behavior is front-loaded in the first sentence, followed by tightly packed routing constraints. Every clause carries information (return content, alternatives, deprecation) with no filler.

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

Completeness4/5

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

For a 9-parameter, optional-only tool with no output schema, the description covers what gets returned and which mode to use, and flags that find_venue is superseded. Remaining gaps (seed parameter interplay, pagination) are minor.

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. The description meaningfully supplements the schema by explaining the two view modes and, notably, the 'official name, not a nickname' rule for venue_name — semantics the schema's maxLength/minLength text 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?

Opens with a specific verb and resource ('Shows the upcoming events at one venue'), states ordering (soonest first) and return content (sale dates, get-in price, roof, 7-day forecast). It then explicitly separates itself from the venue-search mode and names sibling find_venue, so an agent can distinguish the two without opening schemas.

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?

Gives explicit routing: use view=venues to find venues (by name, state, country, capacity), use screen_events to rank a venue's events, and notes this 'Replaces find_venue'. It also warns to use the official name, not a nickname — a concrete when-to/how-to constraint.

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

get_view_alert_previewPreview a View's AlertsA
Read-only
Inspect

Shows what one View would have emailed in the last 24 hours under the owner's current settings, and sends nothing. Call it after create_view or update_view. Use list_matches for the Matches it recorded and whether each was sent.

ParametersJSON Schema
NameRequiredDescriptionDefault
view_idYesThe View to preview (from list_views).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, so safety is covered; the description reinforces this with 'sends nothing' and adds a genuinely new behavioral constraint, the 24-hour lookback window. It does not describe whether the preview is rate-limited or how large the preview can get.

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

Conciseness5/5

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

Three short sentences, purpose front-loaded, no filler. Each sentence carries distinct information: what it does, the no-send guarantee, sequencing, and alternative routing.

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

Completeness4/5

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

For a one-parameter read-only preview with no output schema, the description conveys the temporal scope and what the preview represents. It stops short of describing the preview's shape (e.g., counts vs. full email bodies), which is the only meaningful gap.

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

Parameters3/5

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

Schema coverage is 100% and the single view_id parameter is already documented as a UUID sourced from list_views. The description's phrase 'one View' and 'owner's current settings' adds only marginal context beyond the schema, so the baseline 3 applies.

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 precise verb and resource: it previews what a View would have emailed in the last 24 hours, under current owner settings. It also distinguishes itself from list_matches, which answers the different question of what was actually recorded/sent.

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?

Gives explicit sequencing ('Call it after create_view or update_view') and routes a neighboring use case to the correct sibling ('Use list_matches for the Matches it recorded and whether each was sent'). An agent knows both when to call it and when to call something else.

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

get_watch_defaultsGet Watchlist DefaultsA
Read-only
Inspect

Removed: Watch defaults are an account setting. Change them in the Ticker web app under Settings.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only declare a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), which would mislead an agent into thinking this is a functioning read. The description adds the crucial behavioral fact that the tool no longer exists. It does not say whether a call errors or returns empty, so it stops short of full transparency.

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

Conciseness5/5

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

A single sentence, front-loaded with the decisive 'Removed:' marker so the agent gets the critical fact first. No filler.

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

Completeness4/5

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

For a zero-parameter, no-output tool this covers everything an agent needs: it is gone and where the setting now lives. The only gap is the runtime behavior of an actual call and whether the related set_watch_defaults sibling is similarly affected.

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?

The tool takes zero parameters, so there is nothing to disambiguate and the baseline of 4 applies. The description correctly makes no attempt to describe inputs.

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

Purpose4/5

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

The description states a specific, actionable fact about the tool: it has been removed and watch defaults are now an account setting. That is clear and prevents a wasted call, though it never says what the tool originally did and does not differentiate this stub from the still-listed sibling set_watch_defaults.

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?

It gives an explicit when-not (the tool is removed) and an explicit alternative destination ('Change them in the Ticker web app under Settings'), leaving nothing for the agent to infer about where to go instead.

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

list_destinationsList Alert DestinationsA
Read-only
Inspect

Lists the account's alert destinations (Slack, Discord and other channels besides email) with each id, whether it is paused, and the plan's limit and used. list_views shows which Views deliver to each. New destinations are added in the Ticker web app under Settings.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description goes beyond them by disclosing the return payload (id, paused, plan limit/used) and flagging that creation happens externally in the web app, which is genuinely useful context. Pagination behavior is unmentioned, a minor gap.

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?

Three tight sentences with the core purpose front-loaded, followed by sibling routing and the external-creation caveat. Every sentence carries information; nothing is padding.

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

Completeness4/5

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

No output schema or parameters exist, and annotations cover the safety profile, so the description's job is mainly to describe what comes back and how it relates to siblings. It does that adequately, leaving only pagination/volume behavior unspecified.

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?

The tool takes zero parameters, so the baseline is 4; there are no parameter semantics for the description to add or omit.

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 (Lists) and resource (the account's alert destinations), and clarifies scope by naming the channel types (Slack, Discord, non-email) and the returned fields (id, paused, plan limit/used). An agent can distinguish this from list_views and list_digests without opening a schema.

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

Usage Guidelines4/5

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

Points to list_views for the related question of which Views deliver to each destination, and notes that new destinations are added in the Ticker web app rather than via any tool (there is no create_destination sibling). Clear routing context, though it never states an explicit 'use this when' trigger.

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

list_digestsList DigestsC
Read-only
Inspect

Removed: The Digest is an email and a file. list_views says which Views send one: each View carries digest.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false. The description adds no additional behavioral context (no return shape, no note that the call is a no-op or deprecated). It only implies the underlying concept was removed, without clarifying what invoking it does.

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

Conciseness2/5

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

It is short, but the leading "Removed:" fragment is confusing and not front-loaded with a purpose statement. The sentence structure reads like a changelog note rather than tool documentation.

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

Completeness2/5

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

For a zero-parameter list tool with no output schema, the description should at least state what is returned or whether the tool is still callable. Instead it is a cryptic deprecation note that leaves an agent unsure whether to invoke it or defer to list_views.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No parameter semantics are required or missing.

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

Purpose2/5

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

The description opens with "Removed:", a tombstone that never states what list_digests actually does or returns. It obliquely explains what a Digest is ("an email and a file") but gives no usable statement of purpose for this tool; an agent cannot tell what calling it would accomplish.

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

Usage Guidelines3/5

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

It does route the agent elsewhere by naming list_views as the source of digest information ("list_views says which Views send one"), which is a usable alternative pointer. However, it never says when this tool itself should be used, so the guidance is partial and ambiguous.

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

list_issuesList a View's Digest IssuesD
Read-only
Inspect

Removed: The Digest is an email and a file. Read the Digest email or its file.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoIssues per page, default 30.
beforeNoOnly Issues sent before this time (an `issued_at`).
view_idYesThe View (from list_views).

TDQS

D1.4/5.0
Behavior1/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so safety needs no elaboration. Instead of adding behavioral context, the description inserts a 'Removed:' claim that implies the tool is unavailable, which is misleading for a live callable read endpoint and contributes nothing about pagination or return shape.

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

Conciseness2/5

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

It is short, but brevity here reflects under-specification rather than economy. The front-loaded 'Removed:' is misleading and the following sentence does not earn its place by clarifying the tool's function.

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

Completeness1/5

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

For a three-parameter list tool with no output schema, the description should at minimum explain the resource being listed and how results are scoped. It provides none of that, leaving the agent with no usable context beyond the title and schema.

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

Parameters3/5

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

Schema description coverage is 100%, and all three parameters (limit, before, view_id) are individually documented in the schema. The description adds no parameter meaning whatsoever, so the baseline of 3 applies.

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

Purpose1/5

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

The description never states what the tool does. Instead of a verb+resource for listing a View's Digest Issues, it leads with 'Removed:' and then talks about the Digest being an email and a file, which is misleading rather than descriptive. An agent cannot tell from this text that the tool lists issues.

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

Usage Guidelines1/5

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

The only guidance offered is 'Read the Digest email or its file,' which steers the agent toward non-tool behavior instead of explaining when to call list_issues versus siblings like get_issue or list_digests. No preconditions, no exclusions, and the 'Removed' framing actively discourages use.

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

list_matchesList MatchesA
Read-only
Inspect

Lists the events that entered the caller's Views, newest first, with delivery_status; with view_id it adds a summary of the View. With match_id it shows one Match in full: the event and its numbers frozen when it entered the View. Read delivery_status, never a timestamp, for whether an email went out. Replaces get_match.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
sinceNoISO 8601 timestamp; only matches at/after this. Default: 7 days ago.
view_idNo
event_idNo
match_idNoThe match id (from list_matches' match_id field).
delivery_statusNoDELIVERY TRUTH: read `delivery_status`, never infer delivery from a timestamp: 'sent' = an alert email actually carried this Match; 'not_sent' = terminally dropped and never sent (see `delivery_reason`, e.g. muted_view, locked_view, email_digests_off (the owner turned alert emails off), view_disabled); 'pending' = not processed yet, may still be sent; 'not_applicable' = was never eligible for an alert email (a baseline Match, or a View that delivers only to alert destinations). `notified_at` is non-null ONLY when delivery_status is 'sent'; `consumed_at` is when the Match was claimed whatever the outcome. NEVER report a Match as delivered unless delivery_status is 'sent'. Only Matches in this delivery state. Use 'sent' for "which alert emails actually went out" and 'not_sent' for "what was dropped, and why"; do NOT infer either from a timestamp. Note: the 'not_applicable' filter matches baseline Matches only; destination-only Views are labeled not_applicable on the row but are not selected by this filter.
include_snapshotNoInline the full frozen snapshot (event + event_analytics + performer_analytics) on every row. Heavy: a page can exceed the tool result token cap. Prefer the compact default + get_match for drill-down.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safe read profile (readOnlyHint/destructiveHint/openWorldHint), yet the description adds real behavior: newest-first ordering, that match_id returns the event and its numbers frozen at View-entry time, and the delivery-status truth rule. It does not mention pagination limits or the heavy-payload risk of snapshots, which live only in the schema.

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?

Front-loads the default behavior, then the two modifier modes, then the delivery-status rule, ending with the replacement note. Four dense sentences with no filler; the 'Replaces get_match' clause is terse but useful rather than wasteful.

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

Completeness4/5

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

No output schema exists, but the description covers the primary mode semantics, ordering, and the critical delivery-status interpretation, so an agent can call it correctly. The remaining gaps (event_id's effect, pagination behavior) are minor for the common paths.

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?

At 50% schema coverage the description carries part of the load: it explains what view_id and match_id change about the response, which the schema only types. The richest parameter semantics (delivery_status enum meanings, include_snapshot heaviness) sit in the schema itself, and event_id/page/limit remain unexplained in both.

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?

Specific verb+resource ('Lists the events that entered the caller's Views') with ordering (newest first) and a clear disambiguation of its three modes keyed by view_id and match_id. It also names the sibling it replaces (get_match), so an agent can route without opening either schema.

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

Usage Guidelines4/5

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

Gives explicit conditions for each mode ('with view_id it adds...', 'With match_id it shows one Match in full') and a firm usage rule ('Read delivery_status, never a timestamp'), plus the replacement relationship to get_match. It stops short of stating when NOT to use it or naming a live alternative for the single-match case.

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

list_screen_columnsList Screener ColumnsA
Read-only
Inspect

Lists every column a screen_events, create_view or update_view predicate can name, with its meaning, unit and the plan that includes it; a venue's name is v.venue_name. Pass search with every word you need in one call (price, demand, inventory, rank, date, category) for only the matching columns. Call it before you write a predicate; column names must be used exactly. Use get_event_analytics for the values on one event.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoSkip this many columns. The catalog comes back in parts: a cut answer's meta.next gives the offset for the next part.
searchNoOne or more words, e.g. "price demand": only the columns whose name, group or meaning contains any of them. Omit for the whole catalog.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description's job is to add what they don't: that a 'venue's name is v.venue_name' (a concrete naming gotcha), and that multiple search words should be passed together in one call rather than looped. It does not discuss result volume or rate limits, which is the remaining gap.

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?

Dense but front-loaded: the resource and payload come first, then the search tactic, then the precondition and the alternative. The semicolon chain packs a lot into few sentences with no wasted clauses, though the density borders on cramped.

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?

With no output schema, the description still describes the return contents (meaning, unit, plan) and the description/schema pair covers pagination via the offset parameter and meta.next. For a two-parameter read-only lookup tool, nothing an agent needs to call it correctly 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 baseline is 3. The description still adds value by naming candidate search terms (price, demand, inventory, rank, date, category) and by directing that all needed words go into a single call instead of being issued separately, which the schema's 'any of them' wording does not make obvious.

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 (Lists) and resource (every column a screen_events, create_view or update_view predicate can name), plus the return payload (meaning, unit, plan). It anchors itself to the exact sibling tools whose predicates consume these columns, so an agent can place it without opening a schema.

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 precondition: 'Call it before you write a predicate; column names must be used exactly.' Explicit alternative: 'Use get_event_analytics for the values on one event.' Both the when-to-use and the when-to-use-something-else are stated.

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

list_viewsList Saved ViewsA
Read-only
Inspect

Lists the caller's saved Views with each one's predicate, on or paused state, events held now (member_count), Matches in the last 7 days, its destinations and whether it sends a Digest; view_id reads one View. Use list_matches for which events entered them, and get_view_alert_preview for what one View would email. Replaces list_view_targets.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
enabledNoFilter by enabled state if provided.
view_idNoRead this one View instead of a page.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description goes further by enumerating what the response contains, which is meaningful since no output schema exists, though it says nothing about pagination or result-size behavior.

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?

Dense but front-loaded, leading with the verb and resource before the field list. The field enumeration is a long run-on clause, but no sentence is pure waste; 'Replaces list_view_targets' is useful migration context.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden well by listing the fields returned. It stops short of explaining pagination behavior or whether view_id bypasses paging, a minor gap for a 4-param listing tool.

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

Parameters3/5

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

Schema description coverage is 50%: 'enabled' and 'view_id' are documented in the schema, while 'page' and 'limit' are not. The description reinforces view_id's read-one-View semantics but adds nothing about paging or limit, so it only partly compensates for the coverage gap.

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?

Names a specific verb and resource ('Lists the caller's saved Views') and enumerates the returned fields (predicate, on/paused state, member_count, Matches in last 7 days, destinations, Digest), which distinguishes it clearly from siblings like list_matches and get_view_alert_preview.

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?

Routes the agent conditionally: 'Use list_matches for which events entered them, and get_view_alert_preview for what one View would email', and explains that view_id reads one View instead of a page. It also flags that it 'Replaces list_view_targets', which is present as a sibling.

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

list_view_targetsList a View's Delivery DestinationsB
Read-only
Inspect

Renamed: use list_views with view_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
view_idYesThe View to read (from list_views). The posting URL of a destination is never returned here or anywhere else on this surface.

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral fact not in the annotations — that this tool is deprecated/superseded — but says nothing about return contents or failure behavior.

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?

One short sentence, front-loaded with the essential instruction and zero waste. It is appropriately sized for a deprecated alias, though it is terse to the point of saying nothing about the tool's actual behavior.

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

Completeness3/5

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

For a superseded tool, telling the agent where to go is arguably the minimum viable content, and the rich schema covers the parameter. However, it omits whether the tool still works, what it returns, and any error behavior, so an agent lacks the full picture.

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

Parameters3/5

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

Schema description coverage is 100% and there is a single parameter, so the schema carries the semantics, including the notable constraint that destination posting URLs are never returned. The description adds nothing about view_id beyond the schema. Baseline 3 applies.

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

Purpose2/5

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

The description never states what the tool does; it only announces a rename and points elsewhere. The function is inferable only from the tool name and title, not from the description text itself. It is not misleading, but it is a redirect rather than a purpose statement.

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

Usage Guidelines4/5

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

It gives the single most important routing instruction an agent needs: use list_views with view_id instead. The alternative is named explicitly. It stops short of 5 because it never says whether this tool still functions or under what conditions it should ever be called.

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

list_watchlistList WatchlistA
Read-only
Inspect

Lists the events the account watches, with current prices, armed triggers, alert counts and alerts_live. Watches of events that ended over a week ago are left out unless include_archived is true. Use list_views for saved screens.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sortNocreated_at
limitNo
orderNodesc
searchNoFilter by event name.
include_archivedNoAlso return watches archived because their event finished more than a week ago.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description still adds real behavioral context: which fields are returned and the non-obvious rule that watches whose event ended more than a week ago are silently omitted unless include_archived is set. It does not mention pagination behavior for a paged list.

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

Conciseness5/5

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

Three tight sentences: what it returns, the archival edge case, then the sibling pointer. Nothing is redundant and the most decision-relevant content leads.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the returned fields, and it covers the key filtering caveat. It is slightly incomplete for a 6-parameter list tool with no pagination or sort/order semantics documented anywhere.

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

Parameters3/5

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

Schema description coverage is only 33% — search and include_archived are documented, while page, sort, limit and order are bare. The description reinforces include_archived's semantics ('left out unless include_archived is true'), which is genuine compensation, but the four pagination/sorting parameters remain unexplained in both places.

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 and resource ('Lists the events the account watches') and immediately scopes the return payload (current prices, armed triggers, alert counts, alerts_live). It also explicitly distinguishes itself from list_views, so an agent can route between them without opening schemas.

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

Usage Guidelines4/5

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

Provides one explicit alternative and its condition: 'Use list_views for saved screens.' It also explains the default exclusion of old ended events and how include_archived changes it. No guidance is given on other watch-related siblings (list_watch_triggers, get_watch_defaults), so it stops short of full when/when-not coverage.

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

list_watch_triggersList Watch TriggersA
Read-only
Inspect

Removed: The trigger list is part of watch_event's inputs. Read the triggers input of watch_event.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered by structured data. The description adds the genuinely useful fact that the endpoint is removed, but does not say what happens if an agent calls it anyway (error vs. empty result) or what the replacement field contains.

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

Conciseness5/5

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

Two short sentences with the deprecation status front-loaded in the first word, followed by the redirect. No filler and no ambiguity about the action to take.

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?

Given zero parameters, no output schema and a removed endpoint, the description supplies everything an agent needs: do not call this, use watch_event's `triggers` input instead. There is no meaningful return value or parameter detail left unexplained.

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?

The tool takes zero parameters and the schema correctly enforces that with additionalProperties=false, so there is no parameter semantics to explain. Baseline 4 applies; nothing in the description is needed or missing here.

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

Purpose4/5

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

The description does not describe the original listing behavior at all; instead it declares the tool removed and names the authoritative replacement field (watch_event's `triggers` input). For a tombstoned tool that is the relevant purpose, and it is unambiguous, though it never says what the tool used to return.

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?

It states outright that the tool is gone and gives the exact alternative: read the `triggers` input of watch_event. An agent has a clear when-not-to-use signal plus a concrete redirection, with nothing left to infer.

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

remove_view_targetDetach a Destination from a ViewA
Destructive
Inspect

Renamed: use update_view with detach_destination.

ParametersJSON Schema
NameRequiredDescriptionDefault
view_idYesThe View to change (from list_views).
delivery_target_idYesThe destination to detach (from list_view_targets).

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds the critical behavioral fact that the tool has been renamed, which is not in annotations, but it does not describe what gets detached, required permissions, or whether the old endpoint still functions.

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

Conciseness5/5

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

One short sentence, front-loaded with the key action word 'Renamed' and the alternative. Every word earns its place.

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

Completeness3/5

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

For a deprecated alias, the description gives the essential redirect, and annotations cover destructiveness. However, it omits whether this tool still works or will error, and doesn't restate the operation, leaving the agent to infer the deprecation's effect.

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

Parameters3/5

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

Schema coverage is 100%, and the schema describes both view_id and delivery_target_id with sources. The description only mentions detach_destination, which belongs to update_view, so it adds no meaning to this tool's parameters.

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

Purpose3/5

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

The description does not state what remove_view_target does; it only announces a rename and points to update_view. It does distinguish the tool's replacement, so an agent can avoid the wrong tool, but the original operation (detach a destination) is left to the title. This is a vague purpose for the tool itself.

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 names the replacement and the parameter to use ('use update_view with detach_destination'), which is exactly the routing an agent needs. There is no ambiguity about when to use this tool versus the alternative.

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

research_eventResearch Event ContextAInspect

Recent cited news and social coverage on why one event may be moving, not live figures, saved for 24 hours unless force is set. Use it after screen_events or get_event_analytics flags a move; use get_event_analytics for the numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoBypass the cache and the stale-price guard; always fetch fresh. Quota is only consumed on a FRESH result with findings; cached serves and status:'empty' results are free, and empty results are never stored, so a later call re-checks. Resale-marketplace listing pages are excluded from the search: results are coverage.
sourcesNoWhich providers to query (e.g. ['perplexity']). Omit to query all enabled providers.
event_idYesThe event to research. Ticker event id, `ev` plus ten characters, as returned by every tool here. A marketplace id also resolves when it carries its source prefix (`vs:`, `tm:`, `tp:`), and a bare marketplace id resolves until 2027-09-13.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare openWorldHint=true and readOnlyHint=false, and the description adds behavior beyond them: results are a 24-hour cache, they are not live figures, and force bypasses the cache. It does not contradict annotations. Quota semantics live in the schema rather than the description, which is the only notable gap.

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?

Two sentences, no filler, with the scope caveat ('not live figures') placed early and the routing guidance second. The first sentence is dense but each clause carries information.

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

Completeness4/5

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

Given no output schema and rich annotation/schema coverage, the description supplies what an agent most needs: what the tool returns, how long results persist, and when to reach for it versus a sibling. Only the output shape and source-selection nuance are absent, and those are partly covered by the schema.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents event_id, sources, and force in detail, including the quota and cache-bypass behavior. The description only adds that force overrides the 24-hour save window, which is largely redundant with the schema text. Baseline 3 is appropriate.

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 and resource: recent cited news and social coverage explaining why one event may be moving. It explicitly distinguishes itself from get_event_analytics ('for the numbers'), so an agent can separate the qualitative-context tool from the quantitative one without opening schemas.

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?

Gives an explicit trigger ('after screen_events or get_event_analytics flags a move') and names the alternative for the adjacent need ('use get_event_analytics for the numbers'). This is a textbook when-to-use/when-to-use-other statement.

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

screen_eventsScreen EventsA
Read-only
Inspect

Finds and ranks upcoming events by price, demand and inventory, using a predicate over the columns list_screen_columns names; the predicate input carries the grammar and the column rules. Use it for "which events" questions; use search_events to find one event by name and get_event_analytics for every number on one event.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sortNoServer-side ranking: sorts the FULL match set by `col` (NULLS LAST, event_id tiebreak) so the page is the true top-N, not an event_id slice. Omit for default event_id ASC. Fast on the ranking primitives (`ea.price_self_z_7d_pct_rank_subcat_tte`, `ea.price_self_z_7d_xs_z_subcat_tte`, `ea.inventory_velocity_1d_xs_z_subcat_tte`, `ea.pace_z_3d_vs_14d_xs_z_subcat_tte`); sorting other columns over a broad predicate may time out; narrow the predicate.
countNoCompute the total number of matches (up to 10,000, surfaced as `total`; `countCapped` true means at least that many). Default false: counting roughly DOUBLES query cost and is usually not needed to answer with a page of events. Set true ONLY when the user's ask is about how many events match ("how many…", "count the…") or you must paginate exhaustively. When false, `total`, `totalPages` and `countCapped` are null.
limitNoRows per page. A page too large for one tool result comes back as the first rows plus `meta.truncated` and `meta.total_rows`; narrow the predicate, project fewer columns, or page, rather than repeating the call.
columnsNoSnapshot columns to return, as namespaced refs (e.g. ["ea.median_price_current","e.event_name"]). A bare namespace ("ea") returns that whole bag; ["*"] returns the full ea+e+pa snapshot. Omit for a compact default (identity + headline signals) that keeps the payload small. Request more only when you need them. Names must come from list_screen_columns, spelled exactly; an unknown one is REJECTED by name, not dropped, so fix it and call again. EVERY ROW IS ALREADY LINKED: `event_id` and `event_url` are on every row already and do not need projecting.
predicateNoA pure boolean FILTER, not an ordering. Omit or pass {} to screen the whole live universe. To surface the most interesting rows first, use the `sort` parameter; the predicate cannot express ordering. Predicate DSL (recursive JSON): a leaf is {col, op, val}; composites are {all:[...]} (AND) or {any:[...]} (OR). Columns are prefixed: "ea." = event_analytics, "e." = events, "pa." = performer_analytics, "p." = performers (p.name, the act the row is about), "v." = venues (v.venue_name, the venue's name; v.city, v.state, v.country_code, v.capacity). Ops: =, !=, >, >=, <, <=, between (val=[lo,hi]), in (val=[...]), contains (case-insensitive substring on a TEXT column; val is a plain string), not_contains (removes the rows whose TEXT column holds val as a case-insensitive substring; a row with no value stays; % and _ in val match themselves, while contains reads them as wildcards). Example: {"all":[{"col":"ea.price_self_z_7d_xs_z_subcat_tte","op":">=","val":2},{"col":"ea.days_to_event","op":"between","val":[7,60]}]}. NAMED ACTS / TEAMS / PERFORMERS, use p.name. When the user names the act the events are BY (a musician like 'Taylor Swift', a team like 'Lakers', a comedian, a touring show), filter the performer column: {col:'p.name', op:'contains', val:'Taylor Swift'}. p.name is the act the row is KEYED on. e.event_name is the TITLE, which reads 'A at B' for a sports event and so also returns the opponent's home games, and for a concert also returns parking and support billings. A performer or team ask NEVER goes to e.event_name. Keep writing 'contains' for an act name. When what was typed IS a whole act name in the catalog, the server rewrites that leaf to op '=' and says so; anything else stays a substring. REMOVING ROWS BY A WORD. 'NOT Little', 'not the Lakers', 'without Taylor', 'excluding Hamilton' remove every row whose title contains the word: {col:'e.event_name', op:'not_contains', val:'Little'}. Never write '!=' for a word: '!=' compares the WHOLE value, so e.event_name != 'Manilow' removes nothing. A MISSPELLED superlative is still a superlative. 'htotest', 'hotest', 'bigest movers', 'chepest', 'lowset price' read as the word they intend and take the ordering that word takes. A ranking word is NEVER a name: never put it in a 'contains' leaf on e.event_name or p.name, and never answer with sort null because the spelling was odd. ECONOMIC FLOOR. The server already ANDs ea.listings_current >= 25 AND ea.median_price_current >= 40 into every screen. Do NOT add a listings-depth floor of your own. A column whose name ends in d1 or 1d is a ONE-DAY CHANGE, not yesterday's value. 'Inventory dropping' or 'listings falling' is a SEVEN-DAY change or an absorption column, never a one-day ratio. A stale row, or an event that is not active, is NEVER a move: its numbers describe the last day it was priced. Gate a movement ask on ea.last_price_snapshot_date with a relative date. The economic floor CAN be turned off at the call site (apply_floor=false, or apply_economic_floor=false on a rule), only when you explicitly want the raw universe. A freshness gate is NOT applied by default, so supply it yourself: {"col":"ea.last_price_snapshot_date","op":">=","val":{"days_ago":1}} means "priced within the last day" and compiles to CURRENT_DATE - 1, re-evaluated every tick, where a literal date string silently rots. The {"days_ago": N} value form is valid on any date/timestamp column. A weekend is {"col":"e.local_date","op":"between","val":{"weekend":"this","tz":"America/New_York"}} ("next" for the one after): the coming Friday to Sunday in tz, from today on a Friday to Sunday, resolved on every run. e.event_id, e.venue_id and e.performer_id take the ids rows carry (ev..., vn..., pf...). Authoritative validation runs in SQL; an invalid predicate returns a clear error. A window of event dates from today ('the next week', 'the next 30 days') is ea.days_to_event between [0, N]. NON-ADMISSION SKUs ARE ALWAYS EXCLUDED: parking and shuttle / no-admission passes (sub_category_id 75, or an event_name matching '%parking%') never appear in a screen, and a screen that asks for sub_category_id 75 alone is refused. Also screenable: marketplace demand levels/changes (ea.interest*, ea.sales*; young series, gate freshness on ea.demand_asof_date), PERFORMER-grain demand (pa.interest*, pa.sales*, pa.demand_asof_date; a separate performer-resource reading, NOT a rollup of that performer's events; filtering on it selects every event of a matching performer, so use it to find hot performers and ea.demand_* to pick among their events; gate on pa.demand_asof_date), performer popularity-rank momentum (pa.popularity_rank*; positive change = climbing), and sale-timing/ops columns: e.presale1_date and e.onsale_date (timestamptz; NULL = unknown/TBD and NULL never matches a range predicate; negative days_ago means the FUTURE: 'on sale in the next 7 days' is {"all":[{"col":"e.onsale_date","op":">=","val":{"days_ago":0}},{"col":"e.onsale_date","op":"<=","val":{"days_ago":-7}}]}) and e.monitoring_priority (monitoring priority from P1, highest, to P10, lowest, stored as 1 to 10). Count changes come as counts (ea.listings_delta_*, ea.tickets_delta_*) AND as percents (ea.listings_pct_1d/_7d, ea.tickets_pct_1d/_7d): 'listings down 10%' is ea.listings_pct_7d <= -10, never a count of 10. ea.median_price_7d_ago is the median of 7 days earlier, a past level. ea.tm_tickets_pct_3d is the primary market's 3-day percent change (-100 = none left after some 3 days ago), and e.tm_sells is true when TM sells the event as its own primary sale ('not on TM' is false); both are primary-market columns. ONLY EVENTS DATED TODAY OR LATER (UTC) ARE SCREENED, whatever active_only says: a screen whose e.local_date range ended two or more days ago is refused. ABSORPTION IS DELISTING, NOT SALES: ea.absorption_count_1d/7d, ea.absorption_rate_7d and ea.listings_added_count_* count listings that LEFT (or joined) the marketplace: a broker withdrawal, a move to another exchange, or an expiry counts the same as a sale. NEVER report them as tickets bought or as sales volume; say 'absorbed' / 'delisted'. A predicate or sort on an absorption column adds ea.absorption_data_quality, ea.absorption_grain and ea.absorption_asof_date to the projection; quote the quality and the as-of day with any absorption number. The as-of day is yesterday (UTC) for every covered event; an event without seat block ledger coverage is NULL in every absorption column, never 0. Quality ranges from 0 to 1 and reflects observation coverage and listing-tracking quality. Lower values warrant more caution when comparing activity. Published counts can decrease after revisions and can be negative when returns exceed departures.
active_onlyNoRestrict to the active event universe (status='active'). Only events dated today or later are screened either way; false adds inactive events in that window, whose rows can be frozen at the last computation or hollow (partial_row true: treat their nulls as unknown). Default true: inactive/closed events are stale and should not rank as live signals. Set false to include them.
apply_floorNoApply the economic floor (listings_current >= 25 AND median_price_current >= 40). Default true. Set false only when explicitly screening the raw universe.
diagnosticsNoExplain the result set. EMPTY RESULTS ARE EXPLAINED, NOT GUESSED AT: the block carries `rows_evaluated` (events the predicate was measured against, after the active, parking, economic floor and freshness gates), `system_gates` (how many survived each gate), `root` and a per-leg `passed`/`failed`/`null` breakdown. Read the `warnings` before answering: ALL_NULL means that column is NULL for EVERY row evaluated, so the screen is broken, NOT a real no-match; say the signal is not computed for these events and offer another column, never 'no events match'. A real no-match has legs with non-zero `passed`: loosen the thresholds. HIGH_NULL_RATE (>50% NULL): the results are real but cover part of the universe, so say so. NO_ROWS_EVALUATED: the scope flags, not the predicate, are the problem. A leg's `marginal` is how many more rows dropping that leg adds. If `diagnostics.status` is "unavailable" the events are still correct. "on_empty" (the default) runs the analysis only when this page came back with zero rows, so an empty screen is never reported as a plain 'no matches' when it is really an ALL_NULL column. true runs it always (useful to check how much of the universe a signal actually covers); false never runs it. The analysis is a second aggregate query over the whole candidate universe and adds ~5s, so don't set true routinely.on_empty
exclude_staleNoDrop stale rows: events last priced more than 3 days behind the market frontier (last_price_snapshot_date). Default true; a 4-day-old snapshot is not a live signal. Set false only when the user explicitly wants stale rows included.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnlyHint/destructiveHint/openWorldHint), but the description adds substantial behavior beyond them: the auto-applied economic floor, mandatory exclusion of parking/no-admission SKUs and refusal of sub_category_id 75, the today-or-later freshness scope, absorption = delisting not sales, cost implications of count (~2x) and diagnostics (~5s), and SQL-side validation with clear errors.

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?

It is front-loaded correctly (purpose and alternatives first), but the body is a single unstructured wall of DSL rules that in places restates what the predicate schema parameter already documents. For a 10-parameter DSL tool length is defensible, yet the lack of grouping and the duplication keep it from earning full marks.

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?

Given a complex recursive predicate, 10 parameters and no output schema, the description covers the gates, exclusions, error semantics, cost tradeoffs and the performer-vs-event-name distinction, so an agent has what it needs to call the tool correctly without a return-value contract.

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 description coverage is 90%, so the baseline is 3; the description adds meaning by routing act/team asks to p.name rather than e.event_name, warning that '!=' compares whole values while not_contains removes by word, and clarifying the {days_ago}/{weekend} relative value forms. Much of this overlaps the predicate schema text, so it is additive but not fully independent of structured data.

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?

Specific verb+resource+scope: 'Finds and ranks upcoming events by price, demand and inventory' built on a predicate over the columns list_screen_columns names. It also explicitly distinguishes itself from siblings, routing 'which events' questions here, name lookups to search_events, and single-event metrics to get_event_analytics.

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 routing: 'Use it for which events questions; use search_events ... get_event_analytics ...'. It also carries conditional usage guidance for individual flags (count only for cardinality asks, diagnostics only on empty, apply_floor false only for the raw universe, exclude_stale false only on explicit request), which is when-to-use at parameter granularity.

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

search_eventsSearch EventsA
Read-only
Inspect

Finds events by name, performer, venue or date, and by on-sale, presale or added dates, and gives their event ids. Use screen_events to rank or filter by price, demand or inventory. Rows from other tools already carry event_id and event_url, so do not search again for a link.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNoRows per page. A page too large for one tool result comes back as the first rows plus `meta.truncated` and `meta.total_rows`; narrow the search or the dates rather than repeating the call.
queryNoAlias for `search`; prefer `search`. Ignored when `search` is also present.
searchNoRanking words (hottest, best, top, movers) are a sort on screen_events, never search text. NOT A LINK RESOLVER: rows from other tools already carry `event_id` and `event_url`; matching a row by name can land on a different event. Names only: event, performer or venue (min 2 chars), e.g. "taylor swift", "lakers", "Madison Square Garden". Words match in any order: each word of 3 or more letters must be in the event's name, its performer or its venue, so "Red Sox Yankees" finds the game. Joining words (vs, and, the) are ignored. Rows whose name holds every word come first. Not a ranking word (hottest, best, top, movers) and not a typo of one. A venue term returns the events playing there. Venues are stored under their official name, so expand a nickname ("MSG") before searching. Omit to browse by filters alone; use screen_events to rank.
statusNoFilter by event status. Omit for all statuses; pass 'active' for the live universe. When a filtered search finds nothing it is re-run over every status and the result says retried_including_inactive: true; each row carries currently_priced (false = the event exists but is not priced right now). 'active' for the live universe.
date_toNoEvent date on/before this instant (ISO 8601, offset ok, over utc_date).
sort_byNoSort key. Sorting by onsale_date or presale1_date implicitly filters to events where that date is known (only a minority carry sale dates). Default utc_date.utc_date
venue_idNoRestrict to one venue. Ticker venue id, `vn` plus ten characters. A marketplace id also resolves with its `vs:` prefix, and bare until 2027-09-13.
date_fromNoEvent date on/after this instant (ISO 8601, offset ok, over utc_date).
onsale_toNoPublic on-sale on/before this instant. Events with no known on-sale date are excluded.
created_toNoTicker discovered the event on/before this instant.
presale_toNoFirst presale on/before this instant. Events with no known presale date are excluded.
sort_orderNoDefault asc (soonest first), the natural discovery order. The REST endpoint defaults to desc; this tool flips it.asc
onsale_fromNoPublic on-sale on/after this instant. Events with no known on-sale date are excluded.
created_fromNoTicker discovered the event on/after this instant.
include_pastNoInclude events whose date is already past. Default false (upcoming only). When true without an explicit date_from, results are bounded to the last 90 days.
performer_idNoRestrict to events headlined by one performer. Ticker performer id, `pf` plus ten characters, as returned by every tool here. A marketplace id also resolves with its `vs:` prefix, and bare until 2027-09-13.
presale_fromNoFirst presale on/after this instant. Events with no known presale date are excluded.
monitoring_priorityNoFilter by exact coverage tier (1=high … 10=low).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds non-obvious workflow context: that it hands back event ids and that a name match can be unnecessary when a link already exists. It stops short of describing pagination/truncation behavior at the top level, but that lives in the schema.

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

Conciseness5/5

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

Three short sentences, each earning its place: purpose and scope, sibling routing, and a duplicate-work warning. The core capability is front-loaded before the alternative tool is mentioned.

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

Completeness4/5

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

With 19 optional parameters at 95% schema coverage and no output schema, the definition is nearly complete; it states that event ids are returned, partially covering the return surface. It does not, however, hint at pagination or truncation at the top level, leaving that burden entirely to the limit parameter description.

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

Parameters3/5

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

Schema description coverage is 95% and the per-parameter descriptions are unusually detailed (search semantics, status retry behavior, sort implications, id formats). The description only restates the filter dimensions, adding essentially nothing beyond what the schema already supplies, so the baseline 3 applies.

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 (finds) and resource (events), enumerates the searchable dimensions (name, performer, venue, date, on-sale/presale/added dates), and names the return value (event ids). It explicitly separates itself from screen_events, so an agent can route correctly without opening schemas.

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?

Names the alternative (screen_events) and the exact condition that selects it (rank or filter by price, demand, inventory). It also gives a negative rule of thumb — do not re-search for a link when rows already carry event_id and event_url — which is a concrete when-not-to-call case.

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

set_view_targetAttach a Destination to a ViewA
Destructive
Inspect

Renamed: use update_view with attach_destination.

ParametersJSON Schema
NameRequiredDescriptionDefault
cadenceNoHow often THIS View delivers to THIS destination.instant
view_idYesThe View to deliver (from list_views).
delivery_target_idYesThe destination to deliver it to (from list_destinations).

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, openWorldHint=true and readOnlyHint=false. The description adds the non-obvious behavioral fact that the tool has been renamed/deprecated, which annotations do not convey, but says nothing about what happens if it is still invoked or what state it mutates.

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

Conciseness5/5

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

A single sentence, front-loaded with the deprecation and immediately followed by the redirect. Nothing extraneous; for a tombstoned tool this is exactly the right size.

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

Completeness4/5

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

For a renamed/deprecated alias with no output schema, the description supplies the essential information an agent needs (stop using this, go here). It does not clarify whether the call still functions or how to map cadence/delivery_target_id onto update_view's attach_destination, a minor gap.

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

Parameters3/5

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

Schema description coverage is 100% (view_id, delivery_target_id, cadence all documented with sourcing hints and cadence semantics), so the baseline is 3. The mention of 'attach_destination' hints at a parameter of the replacement tool but adds no meaning to this tool's own parameters.

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

Purpose3/5

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

The description itself does not state what the tool does (attach a delivery destination to a view); that only comes from the title. It does communicate that the tool is renamed/deprecated and where the replacement lives, which is the most decision-relevant fact, but an agent reading the description alone gets no verb+resource description.

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

Usage Guidelines4/5

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

It explicitly names the alternative to use instead ('use update_view with attach_destination'), which is the strongest routing guidance possible for a deprecated tool. It omits whether calling this tool is still safe or errors out, but the when-not-to-use direction is unambiguous.

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

set_watch_defaultsSet Watchlist DefaultsA
Destructive
Inspect

Removed: Watch defaults are an account setting. Change them in the Ticker web app under Settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
triggersNoPer-event trigger settings, e.g. {"price_z":{"enabled":true,"params":{"threshold":2.5}}}. Each key says what it alerts on and the range of its params. Omit to use the saved defaults. A value outside its range is refused with an error naming the field and its min and max, and nothing is written.
destination_idsNoDestinations a new watch delivers to by default, from list_destinations. An empty array clears them.
notification_modeNoHow a new watch delivers by default: `instant`, `batched` or `muted`. 'digest' is the old name of 'batched', accepted until 2026-11-30 and stored as 'batched'.

TDQS

A4.2/5.0
Behavior4/5

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

The annotations describe an active mutation (readOnlyHint=false, destructiveHint=true, openWorldHint=true), and the description adds the far more important behavioral fact that the capability has been removed — information the structured fields do not carry. It stops short of saying whether invocation errors or silently no-ops, which leaves a minor gap.

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

Conciseness5/5

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

A single short sentence, front-loaded with the status change and followed immediately by the redirect. Zero waste; every clause earns its place.

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

Completeness4/5

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

For a removed tool, the description covers what an agent needs: don't call it, use Settings instead. The only omission is the exact behavior on invocation (error vs no-op), which matters somewhat given the annotations still advertise a destructive write.

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

Parameters3/5

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

Schema description coverage is 100% and the input schema documents all three parameters (including the nested trigger structure) in detail, so the baseline of 3 applies. The description adds nothing about parameters, but nothing is needed since the tool is removed.

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

Purpose4/5

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

The description opens with 'Removed:' and identifies the resource (watch defaults), making the tool's actual status unambiguous. It doesn't restate what the tool used to do, but for a deprecated endpoint the operative fact — it no longer works — is stated plainly and distinguishes it from the live sibling get_watch_defaults.

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?

It explicitly tells the agent when not to use it and where to go instead ('Change them in the Ticker web app under Settings'). That is a complete when-not plus alternative routing, the strongest form of usage guidance.

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

unwatch_eventUnwatch EventA
Destructive
Inspect

Takes one event off the watchlist. Its alerts stop at once, unsent ones are dropped, and past ones stay in list_matches. Use watch_event instead to keep the star and turn triggers off.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesEvent to stop watching.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description goes further by disclosing concrete consequences: alerts stop immediately, unsent alerts are dropped (data loss), and past alerts remain in list_matches — exactly the kind of detail annotations cannot convey.

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

Conciseness5/5

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

Two sentences with zero filler; the core action is front-loaded and the routing hint follows immediately. Every clause carries distinct information.

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

Completeness4/5

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

For a simple one-parameter mutation with no output schema and annotations covering safety, the description is nearly complete: it covers action, side effects, and the alternative. It stops short of mentioning error/not-found behavior or whether the event must currently be watched, a minor gap.

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

Parameters3/5

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

Only one parameter and schema description coverage is 100%, so the schema already documents event_id fully. The description adds no syntax, format, or edge-case guidance for the parameter; baseline 3 applies.

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+resource ('Takes one event off the watchlist') and immediately distinguishes itself from the sibling watch_event. An agent can tell this apart from watch_event and update_watch without opening any schema.

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 names the alternative ('Use watch_event instead') along with the condition that selects it ('to keep the star and turn triggers off'), making the when-to-use vs when-not decision unambiguous.

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

update_destinationUpdate Alert DestinationC
Destructive
Inspect

Removed: Destinations are managed in the Ticker web app. Rename, pause or delete one under Settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNo
enabledNofalse pauses delivery to this destination; true resumes it (after a fresh test message). Omit to leave unchanged.
destination_idYesThe destination to update (id from list_destinations).

TDQS

C2.4/5.0
Behavior1/5

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

The annotations declare readOnlyHint=false, destructiveHint=true, and openWorldHint=true, i.e. a live destructive write operation. The description states the tool has been removed and performs no such action, directly contradicting the declared write/destructive behavior. Per the rules this is an annotation contradiction.

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?

A single short sentence with the most important token ('Removed:') front-loaded, so an agent skimming the description immediately learns the tool is gone. No filler or repetition.

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

Completeness4/5

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

For a retired tool, the description delivers the one fact an agent needs: don't call this, manage destinations in the web app. It omits whether invocation returns an error or silently no-ops, and references no in-surface replacement, but otherwise it is complete for its purpose.

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

Parameters2/5

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

Schema description coverage is 67%, with label, enabled, and destination_id defined in the schema (enabled and destination_id carry their own descriptions). The tool description adds nothing about parameters at all, so it fails to compensate for the uncovered 'label' parameter.

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

Purpose2/5

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

The description never states what update_destination does; it only announces that the tool is removed. The verb+resource pairing is absent, replaced by a deprecation notice that redirects to the Ticker web app. It conveys the resource domain (alert destinations/settings) but not the operation, so an agent cannot infer functionality from it.

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

Usage Guidelines3/5

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

It does give a use/don't-use signal: rename, pause, or delete destinations via Settings in the web app rather than this tool. That is actionable guidance, but it names no MCP sibling alternative (delete_destination still appears in the sibling list) and doesn't say what happens if the tool is invoked anyway.

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

update_viewUpdate Saved ViewA
Destructive
Inspect

Changes a saved View: name, predicate, channels, email mode, destinations, paused state or Digest. Only the fields passed change; attach_destination and detach_destination change where it delivers. Use create_view for a new View, and delete_view to remove one for good. Replaces set_view_target and remove_view_target.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
tagsNoReplace this View's organization tags (max 5; [] clears them). Omit to leave unchanged. Tags only group/filter Views in the app; they never change matching or delivery.
colorNoSet the View's accent color (red, orange, amber, green, teal, blue, violet, pink). Pass null to clear; omit to leave unchanged. Cosmetic only.
digestNoThe View's Digest: each Issue is the View's events with Movers, New and Gone against the previous Issue. Only the fields you pass change. Turning it on past the plan's Digest count is refused with the plan that carries more.
enabledNoSet false to pause the View, true to resume.
view_idYesThe View to update (from list_views).
channelsNo
predicateNoReplacement predicate, the grammar create_view's predicate takes. Omit to leave the predicate unchanged.
notification_modeNoPer-alert EMAIL delivery mode: 'instant' (email each match), 'batched' (the Matches wait and go out together in one email, at the pace notification_cadence sets: `hourly` or `daily`), or 'muted' (Matches recorded, never emailed). 'instant' and 'muted' override notification_cadence. 'digest' is the old name of 'batched', accepted until 2026-11-30 and stored as 'batched'. Alert destinations are unaffected: they always deliver instantly. Pass null to fall back to the cadence-derived behavior; omit to leave unchanged.
attach_destinationNoDeliver this View's Matches to one more destination, or change the cadence of one it has. A fresh attach starts with the next Match. Email is not touched.
delivery_target_idNoAttach an alert destination (id from list_destinations; new destinations are added in the Ticker web app under Settings) so this alert also delivers there the moment it fires. Pass null to DETACH and go email-only; omit to leave the destination unchanged.
detach_destinationNoStop this View delivering to this destination. The destination keeps serving other Views, and a View left with none goes back to email alone.
apply_economic_floorNo
max_firings_per_evalNo
notification_cadenceNoHow often this alert's Matches may leave as EMAIL: `immediate` (each match), `hourly`, `daily` (batched), or `off` (Matches recorded but never emailed). Only paces EMAIL; an attached alert destination always delivers the instant a Match fires, regardless of this. Pass null to reset to the account default; omit to leave unchanged.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations supply the safety profile (destructiveHint=true, readOnlyHint=false, openWorldHint=true), so the bar is lower. The description adds genuine behavioral context beyond that: partial-update semantics ('Only the fields passed change') and that attach/detach govern delivery routing. It does not warn that predicate/channel replacement overwrites prior values, which is the destructive edge the annotation implies.

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?

Four tight sentences, front-loaded with what the tool changes before the routing guidance. No filler, though the 'Replaces set_view_target and remove_view_target' sentence packs two facts that could be tighter.

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

Completeness4/5

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

For a 15-parameter mutation with nested Digest objects and no output schema, the description covers purpose, patch semantics, routing, and delivery behavior; the deep field detail lives in the schema. It never states what a successful call returns or whether there are permission/plan gates, though the digest schema partially covers plan refusals.

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

Parameters3/5

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

Schema coverage is 73% with rich per-field descriptions (tags, color, digest, notification_mode, attach/detach), so the schema does the heavy lifting. The description lists field groups at a high level but adds no syntax or constraint detail beyond the schema, which is the correct baseline of 3.

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 ('Changes') and resource ('saved View'), then enumerates the updatable field groups (name, predicate, channels, email mode, destinations, paused state, Digest). It also names the siblings it is not (create_view, delete_view), so an agent can distinguish it without opening a schema.

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 routing: 'Use create_view for a new View, and delete_view to remove one for good,' plus 'Replaces set_view_target and remove_view_target.' This tells the agent both when to use this tool and which legacy/sibling tools it supersedes.

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

update_watchUpdate WatchC
Destructive
Inspect

Renamed: use watch_event.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe watched event to update.
triggersNoPer-event trigger settings, e.g. {"price_z":{"enabled":true,"params":{"threshold":2.5}}}. Each key says what it alerts on and the range of its params. Omit to use the saved defaults. A value outside its range is refused with an error naming the field and its min and max, and nothing is written.
notification_modeNo`instant`, `batched` or `muted`. 'digest' is the old name of 'batched', accepted until 2026-11-30 and stored as 'batched'.

TDQS

C2.8/5.0
Behavior2/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, i.e. a mutating write tool, yet the description says nothing about whether calls still mutate a watch, silently alias to watch_event, or hard-fail. For a superseded mutation endpoint, that ambiguity is the single most important thing to disclose. It adds no behavioral context beyond what annotations already imply.

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

Conciseness5/5

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

One short sentence, front-loaded with the status and the redirect. Every word earns its place for a deprecation stub.

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

Completeness2/5

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

For a 3-parameter tool with nested trigger objects, an agent needs to know whether the endpoint is live-but-deprecated or removed; the description leaves that unresolved. It also fails to state the effective cutoff for the old name, unlike the schema's own 'digest' note, so it is not complete for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, with event_id, triggers, and notification_mode all documented in-schema (including trigger ranges and the 'digest' deprecation note), so the baseline is 3. The description adds nothing about parameters, which is acceptable but not additive.

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

Purpose2/5

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

The description never states what update_watch actually does — it only announces a rename. There is no verb+resource describing behavior for this entry, just a pointer. It does at least signal status (superseded), which keeps it from being purely misleading.

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

Usage Guidelines4/5

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

It explicitly names the replacement tool ('use watch_event'), which is exactly the routing an agent needs when it lands on this entry. It lacks any statement of when a call here still works versus errors out, so it falls short of a 5.

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

watch_eventWatch EventA
Destructive
Inspect

Stars one event and arms its alerts, or changes the triggers or email mode of an event already starred; only what you pass changes, and the triggers input lists every trigger and its range. If dormanted is not empty, tell the person: those events stopped alerting. Use create_view for alerts on every event a screen finds. Replaces update_watch.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesEvent to watch (from search_events or screen_events).
triggersNoPer-event trigger settings, e.g. {"price_z":{"enabled":true,"params":{"threshold":2.5}}}. Each key says what it alerts on and the range of its params. Omit to use the saved defaults. A value outside its range is refused with an error naming the field and its min and max, and nothing is written.
notification_modeNo`instant` = email each alert as it happens (default); `batched` = the alerts go out together in one email; `muted` = record alerts without sending them. 'digest' is the old name of 'batched', accepted until 2026-11-30 and stored as 'batched'.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare a destructive, non-read-only, open-world mutation, so the bar is lower. The description adds real value: 'only what you pass changes' clarifies this is a partial update rather than a destructive overwrite, and it documents that out-of-range trigger parameters are refused with an error and nothing is written. The 'dormanted' sentence hints at a return field but is opaque and references a field absent from the schema.

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?

Front-loaded with the core action and compressed into a few dense clauses with little waste. The mid-sentence 'dormanted' aside interrupts the flow and is not obviously tied to any visible field, slightly reducing clarity.

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

Completeness4/5

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

For a nested, 3-parameter mutation tool with no output schema, the description covers the action, the partial-update semantics, validation failure behavior, and sibling routing. It does not mention return values or any permission/auth requirements, but the 'dormanted' note gives partial insight into output.

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

Parameters3/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. The description mostly restates what the schema already says ('the triggers input lists every trigger and its range', omit-to-use-defaults), adding only the partial-update framing. It does not disambiguate whether triggers must be supplied wholesale.

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+resource ('Stars one event and arms its alerts') and covers the update case ('changes the triggers or email mode of an event already starred'). It explicitly distinguishes itself from create_view and notes it 'Replaces update_watch', so an agent can route without opening a schema.

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?

Names the alternative (create_view) and the selecting condition ('for alerts on every event a screen finds'), implying watch_event is for single events. It also flags the deprecated update_watch sibling, which is exactly the kind of routing an agent needs.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedcreate_view3 fields changed
      • changedInput schema / properties / digest / properties / sections / description
        Previous value: -"Sections each Issue shows: movers, new, gone (default all three). The rest of the table always shows."New value: +"Sections each Issue shows: movers, new, gone (default all three). The rest of the table always shows. When the Digest reads triggers (its triggers are not null), only new and gone are kept here and movers turns the pct_move trigger on."
      • removedInput schema / properties / digest / properties / sections / minItems
        Removed value: -1
      • addedInput schema / properties / digest / properties / triggers
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "The Digest's trigger sections: each trigger on is a section of the events where it fired since the previous Issue, the same conditions a starred event alerts on, e.g. {\"weather\":{\"enabled\":true},\"pct_move\":{\"enabled\":true,\"params\":{\"threshold\":20}}}. Only the triggers you pass change. Refused while the Digest's triggers read null (trigger sections not available).",
        +  "properties": {
        +    "absorption": {
        +      "additionalProperties": false,
        +      "description": "Tickets leaving fast: A large share of the listed tickets leaves the marketplace. Off by default. Measures listings that disappear, which is not the same as confirmed sales. params: threshold 0.3 to 0.9 (default 0.5).",
        +      "properties": {
        +        "enabled": {
        +          "type": "boolean"
        +        },
        +        "params": {
        +          "additionalProperties": {
        +            "type": [
        +              "number",
        +              "string"
        +            ]
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "demand": {
        +      "additionalProperties": false,
        +      "description": "Demand spike: Interest in this event's listings rises versus the day before. Off by default. A change in Interest from one date to the next, not a z-score. Coverage is still filling in, so quiet events may never trigger it. params: threshold 1 to 50 (default 5).",
        +      "properties": {
        +        "enabled": {
        +          "type": "boolean"
        +        },
        +        "params": {
        +          "additionalProperties": {
        +            "type": [
        +              "number",
        +              "string"
        +            ]
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "lifecycle": {
        +      "additionalProperties": false,
        +      "description": "On-sale, presale, event week, low inventory: Fires when an on-sale or presale is announced, event week begins, or listed inventory runs low. On by default. params: event_week_days 1 to 30  days out (default 7); low_inventory_percent 1 to 50 % (default 10).",
        +      "properties": {
        +        "enabled": {
        +          "type": "boolean"
        +        },
        +        "params": {
        +          "additionalProperties": {
        +            "type": [
        +              "number",
        +              "string"
        +            ]
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "pct_move": {
        +      "additionalProperties": false,
        +      "description": "Price % move: The price changes by more than this percentage. Off by default. params: metric lowest | median (default lowest); window 1d | 7d (default 1d); threshold 5 to 100 % (default 15).",
        +      "properties": {
        +        "enabled": {
        +          "type": "boolean"
        +        },
        +        "params": {
        +          "additionalProperties": {
        +            "type": [
        +              "number",
        +              "string"
        +            ]
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "price_z": {
        +      "additionalProperties": false,
        +      "description": "Unusual price move: Fires when the 7-day price move is at least 2× this event's own normal swing, in either direction. On by default. params: threshold 1 to 5 (default 2).",
        +      "properties": {
        +        "enabled": {
        +          "type": "boolean"
        +        },
        +        "params": {
        +          "additionalProperties": {
        +            "type": [
        +              "number",
        +              "string"
        +            ]
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "weather": {
        +      "additionalProperties": false,
        +      "description": "Weather: Fires when the forecast for the event turns bad, and again when it clears. On by default.",
        +      "properties": {
        +        "enabled": {
        +          "type": "boolean"
        +        },
        +        "params": {
        +          "additionalProperties": {
        +            "type": [
        +              "number",
        +              "string"
        +            ]
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedupdate_view3 fields changed
      • changedInput schema / properties / digest / properties / sections / description
        Previous value: -"Sections each Issue shows: movers, new, gone (default all three). The rest of the table always shows."New value: +"Sections each Issue shows: movers, new, gone (default all three). The rest of the table always shows. When the Digest reads triggers (its triggers are not null), only new and gone are kept here and movers turns the pct_move trigger on."
      • removedInput schema / properties / digest / properties / sections / minItems
        Removed value: -1
      • addedInput schema / properties / digest / properties / triggers
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "The Digest's trigger sections: each trigger on is a section of the events where it fired since the previous Issue, the same conditions a starred event alerts on, e.g. {\"weather\":{\"enabled\":true},\"pct_move\":{\"enabled\":true,\"params\":{\"threshold\":20}}}. Only the triggers you pass change. Refused while the Digest's triggers read null (trigger sections not available).",
        +  "properties": {
        +    "absorption": {
        +      "additionalProperties": false,
        +      "description": "Tickets leaving fast: A large share of the listed tickets leaves the marketplace. Off by default. Measures listings that disappear, which is not the same as confirmed sales. params: threshold 0.3 to 0.9 (default 0.5).",
        +      "properties": {
        +        "enabled": {
        +          "type": "boolean"
        +        },
        +        "params": {
        +          "additionalProperties": {
        +            "type": [
        +              "number",
        +              "string"
        +            ]
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "demand": {
        +      "additionalProperties": false,
        +      "description": "Demand spike: Interest in this event's listings rises versus the day before. Off by default. A change in Interest from one date to the next, not a z-score. Coverage is still filling in, so quiet events may never trigger it. params: threshold 1 to 50 (default 5).",
        +      "properties": {
        +        "enabled": {
        +          "type": "boolean"
        +        },
        +        "params": {
        +          "additionalProperties": {
        +            "type": [
        +              "number",
        +              "string"
        +            ]
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "lifecycle": {
        +      "additionalProperties": false,
        +      "description": "On-sale, presale, event week, low inventory: Fires when an on-sale or presale is announced, event week begins, or listed inventory runs low. On by default. params: event_week_days 1 to 30  days out (default 7); low_inventory_percent 1 to 50 % (default 10).",
        +      "properties": {
        +        "enabled": {
        +          "type": "boolean"
        +        },
        +        "params": {
        +          "additionalProperties": {
        +            "type": [
        +              "number",
        +              "string"
        +            ]
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "pct_move": {
        +      "additionalProperties": false,
        +      "description": "Price % move: The price changes by more than this percentage. Off by default. params: metric lowest | median (default lowest); window 1d | 7d (default 1d); threshold 5 to 100 % (default 15).",
        +      "properties": {
        +        "enabled": {
        +          "type": "boolean"
        +        },
        +        "params": {
        +          "additionalProperties": {
        +            "type": [
        +              "number",
        +              "string"
        +            ]
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "price_z": {
        +      "additionalProperties": false,
        +      "description": "Unusual price move: Fires when the 7-day price move is at least 2× this event's own normal swing, in either direction. On by default. params: threshold 1 to 5 (default 2).",
        +      "properties": {
        +        "enabled": {
        +          "type": "boolean"
        +        },
        +        "params": {
        +          "additionalProperties": {
        +            "type": [
        +              "number",
        +              "string"
        +            ]
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "weather": {
        +      "additionalProperties": false,
        +      "description": "Weather: Fires when the forecast for the event turns bad, and again when it clears. On by default.",
        +      "properties": {
        +        "enabled": {
        +          "type": "boolean"
        +        },
        +        "params": {
        +          "additionalProperties": {
        +            "type": [
        +              "number",
        +              "string"
        +            ]
        +          },
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
  2. 5 tool updates
    • Changedget_event_seat_history1 field changed
      • addedInput schema / properties / all_in
        Added value: +{
        +  "default": true,
        +  "description": "Adds each price after fees beside it. On by default; false returns the prices before fees alone.",
        +  "type": "boolean"
        +}
    • Changedget_event_seats1 field changed
      • addedInput schema / properties / all_in
        Added value: +{
        +  "description": "Adds each open seat's price after fees and whether it is an estimate, same position as `open`. On by default; false returns the prices before fees alone. Not served with `at`.",
        +  "type": "boolean"
        +}
    • Changedget_event_seats_live1 field changed
      • addedInput schema / properties / all_in
        Added value: +{
        +  "default": true,
        +  "description": "Adds each open seat's price after fees and whether it is an estimate, same position as `open`. On by default; false returns the prices before fees alone. Not served with `at`.",
        +  "type": "boolean"
        +}
    • Changedget_event_seats_recent1 field changed
      • addedInput schema / properties / all_in
        Added value: +{
        +  "default": true,
        +  "description": "Adds each price after fees beside it. On by default; false returns the prices before fees alone.",
        +  "type": "boolean"
        +}
    • Changedget_event_sections_live1 field changed
      • changedInput schema / properties / all_in / description
        Previous value: -"Adds each section's lowest price after fees and whether it is an estimate. On by default; false returns the prices before fees alone."New value: +"Adds each section's lowest, median and highest price after fees and whether the lowest is an estimate. On by default; false returns the prices before fees alone."
  3. 2 tool updates
    • Changedcreate_view1 field changed
      • changedInput schema / properties / predicate / description
        Previous value: -"{} = always-true, combined with max_firings_per_eval to get a \"top-N of the universe\" alert. Predicate DSL (recursive JSON): a leaf is {col, op, val}; composites are {all:[...]} (AND) or {any:[...]} (OR). Columns are prefixed: \"ea.\" = event_analytics, \"e.\" = events, \"pa.\" = performer_analytics, \"p.\" = performers (p.name, the act the row is about), \"v.\" = venues (v.venue_name, the venue's name; v.city, v.state, v.country_code, v.capacity). Ops: =, !=, >, >=, <, <=, between (val=[lo,hi]), in (val=[...]), contains (case-insensitive substring on a TEXT column; val is a plain string), not_contains (removes the rows whose TEXT column holds val as a case-insensitive substring; a row with no value stays; % and _ in val match themselves, while contains reads them as wildcards). Example: {\"all\":[{\"col\":\"ea.price_self_z_7d_xs_z_subcat_tte\",\"op\":\">=\",\"val\":2},{\"col\":\"ea.days_to_event\",\"op\":\"between\",\"val\":[7,60]}]}. NAMED ACTS / TEAMS / PERFORMERS, use p.name. When the user names the act the events are BY (a musician like 'Taylor Swift', a team like 'Lakers', a comedian, a touring show), filter the performer column: {col:'p.name', op:'contains', val:'Taylor Swift'}. p.name is the act the row is KEYED on. e.event_name is the TITLE, which reads 'A at B' for a sports event and so also returns the opponent's home games, and for a concert also returns parking and support billings. A performer or team ask NEVER goes to e.event_name. Keep writing 'contains' for an act name. When what was typed IS a whole act name in the catalog, the server rewrites that leaf to op '=' and says so; anything else stays a substring. REMOVING ROWS BY A WORD. 'NOT Little', 'not the Lakers', 'without Taylor', 'excluding Hamilton' remove every row whose title contains the word: {col:'e.event_name', op:'not_contains', val:'Little'}. Never write '!=' for a word: '!=' compares the WHOLE value, so e.event_name != 'Manilow' removes nothing. A MISSPELLED superlative is still a superlative. 'htotest', 'hotest', 'bigest movers', 'chepest', 'lowset price' read as the word they intend and take the ordering that word takes. A ranking word is NEVER a name: never put it in a 'contains' leaf on e.event_name or p.name, and never answer with sort null because the spelling was odd. ECONOMIC FLOOR. The server already ANDs ea.listings_current >= 25 AND ea.median_price_current >= 40 into every screen. Do NOT add a listings-depth floor of your own. A column whose name ends in d1 or 1d is a ONE-DAY CHANGE, not yesterday's value. 'Inventory dropping' or 'listings falling' is a SEVEN-DAY change or an absorption column, never a one-day ratio. A stale row, or an event that is not active, is NEVER a move: its numbers describe the last day it was priced. Gate a movement ask on ea.last_price_snapshot_date with a relative date. The economic floor CAN be turned off at the call site (apply_floor=false, or apply_economic_floor=false on a rule), only when you explicitly want the raw universe. A freshness gate is NOT applied by default, so supply it yourself: {\"col\":\"ea.last_price_snapshot_date\",\"op\":\">=\",\"val\":{\"days_ago\":1}} means \"priced within the last day\" and compiles to CURRENT_DATE - 1, re-evaluated every tick, where a literal date string silently rots. The {\"days_ago\": N} value form is valid on any date/timestamp column. e.event_id, e.venue_id and e.performer_id take the ids rows carry (ev..., vn..., pf...). Authoritative validation runs in SQL; an invalid predicate returns a clear error."New value: +"{} = always-true, combined with max_firings_per_eval to get a \"top-N of the universe\" alert. Predicate DSL (recursive JSON): a leaf is {col, op, val}; composites are {all:[...]} (AND) or {any:[...]} (OR). Columns are prefixed: \"ea.\" = event_analytics, \"e.\" = events, \"pa.\" = performer_analytics, \"p.\" = performers (p.name, the act the row is about), \"v.\" = venues (v.venue_name, the venue's name; v.city, v.state, v.country_code, v.capacity). Ops: =, !=, >, >=, <, <=, between (val=[lo,hi]), in (val=[...]), contains (case-insensitive substring on a TEXT column; val is a plain string), not_contains (removes the rows whose TEXT column holds val as a case-insensitive substring; a row with no value stays; % and _ in val match themselves, while contains reads them as wildcards). Example: {\"all\":[{\"col\":\"ea.price_self_z_7d_xs_z_subcat_tte\",\"op\":\">=\",\"val\":2},{\"col\":\"ea.days_to_event\",\"op\":\"between\",\"val\":[7,60]}]}. NAMED ACTS / TEAMS / PERFORMERS, use p.name. When the user names the act the events are BY (a musician like 'Taylor Swift', a team like 'Lakers', a comedian, a touring show), filter the performer column: {col:'p.name', op:'contains', val:'Taylor Swift'}. p.name is the act the row is KEYED on. e.event_name is the TITLE, which reads 'A at B' for a sports event and so also returns the opponent's home games, and for a concert also returns parking and support billings. A performer or team ask NEVER goes to e.event_name. Keep writing 'contains' for an act name. When what was typed IS a whole act name in the catalog, the server rewrites that leaf to op '=' and says so; anything else stays a substring. REMOVING ROWS BY A WORD. 'NOT Little', 'not the Lakers', 'without Taylor', 'excluding Hamilton' remove every row whose title contains the word: {col:'e.event_name', op:'not_contains', val:'Little'}. Never write '!=' for a word: '!=' compares the WHOLE value, so e.event_name != 'Manilow' removes nothing. A MISSPELLED superlative is still a superlative. 'htotest', 'hotest', 'bigest movers', 'chepest', 'lowset price' read as the word they intend and take the ordering that word takes. A ranking word is NEVER a name: never put it in a 'contains' leaf on e.event_name or p.name, and never answer with sort null because the spelling was odd. ECONOMIC FLOOR. The server already ANDs ea.listings_current >= 25 AND ea.median_price_current >= 40 into every screen. Do NOT add a listings-depth floor of your own. A column whose name ends in d1 or 1d is a ONE-DAY CHANGE, not yesterday's value. 'Inventory dropping' or 'listings falling' is a SEVEN-DAY change or an absorption column, never a one-day ratio. A stale row, or an event that is not active, is NEVER a move: its numbers describe the last day it was priced. Gate a movement ask on ea.last_price_snapshot_date with a relative date. The economic floor CAN be turned off at the call site (apply_floor=false, or apply_economic_floor=false on a rule), only when you explicitly want the raw universe. A freshness gate is NOT applied by default, so supply it yourself: {\"col\":\"ea.last_price_snapshot_date\",\"op\":\">=\",\"val\":{\"days_ago\":1}} means \"priced within the last day\" and compiles to CURRENT_DATE - 1, re-evaluated every tick, where a literal date string silently rots. The {\"days_ago\": N} value form is valid on any date/timestamp column. A weekend is {\"col\":\"e.local_date\",\"op\":\"between\",\"val\":{\"weekend\":\"this\",\"tz\":\"America/New_York\"}} (\"next\" for the one after): the coming Friday to Sunday in tz, from today on a Friday to Sunday, resolved on every run. e.event_id, e.venue_id and e.performer_id take the ids rows carry (ev..., vn..., pf...). Authoritative validation runs in SQL; an invalid predicate returns a clear error."
    • Changedscreen_events1 field changed
      • changedInput schema / properties / predicate / description
        Previous value: -"A pure boolean FILTER, not an ordering. Omit or pass {} to screen the whole live universe. To surface the most interesting rows first, use the `sort` parameter; the predicate cannot express ordering. Predicate DSL (recursive JSON): a leaf is {col, op, val}; composites are {all:[...]} (AND) or {any:[...]} (OR). Columns are prefixed: \"ea.\" = event_analytics, \"e.\" = events, \"pa.\" = performer_analytics, \"p.\" = performers (p.name, the act the row is about), \"v.\" = venues (v.venue_name, the venue's name; v.city, v.state, v.country_code, v.capacity). Ops: =, !=, >, >=, <, <=, between (val=[lo,hi]), in (val=[...]), contains (case-insensitive substring on a TEXT column; val is a plain string), not_contains (removes the rows whose TEXT column holds val as a case-insensitive substring; a row with no value stays; % and _ in val match themselves, while contains reads them as wildcards). Example: {\"all\":[{\"col\":\"ea.price_self_z_7d_xs_z_subcat_tte\",\"op\":\">=\",\"val\":2},{\"col\":\"ea.days_to_event\",\"op\":\"between\",\"val\":[7,60]}]}. NAMED ACTS / TEAMS / PERFORMERS, use p.name. When the user names the act the events are BY (a musician like 'Taylor Swift', a team like 'Lakers', a comedian, a touring show), filter the performer column: {col:'p.name', op:'contains', val:'Taylor Swift'}. p.name is the act the row is KEYED on. e.event_name is the TITLE, which reads 'A at B' for a sports event and so also returns the opponent's home games, and for a concert also returns parking and support billings. A performer or team ask NEVER goes to e.event_name. Keep writing 'contains' for an act name. When what was typed IS a whole act name in the catalog, the server rewrites that leaf to op '=' and says so; anything else stays a substring. REMOVING ROWS BY A WORD. 'NOT Little', 'not the Lakers', 'without Taylor', 'excluding Hamilton' remove every row whose title contains the word: {col:'e.event_name', op:'not_contains', val:'Little'}. Never write '!=' for a word: '!=' compares the WHOLE value, so e.event_name != 'Manilow' removes nothing. A MISSPELLED superlative is still a superlative. 'htotest', 'hotest', 'bigest movers', 'chepest', 'lowset price' read as the word they intend and take the ordering that word takes. A ranking word is NEVER a name: never put it in a 'contains' leaf on e.event_name or p.name, and never answer with sort null because the spelling was odd. ECONOMIC FLOOR. The server already ANDs ea.listings_current >= 25 AND ea.median_price_current >= 40 into every screen. Do NOT add a listings-depth floor of your own. A column whose name ends in d1 or 1d is a ONE-DAY CHANGE, not yesterday's value. 'Inventory dropping' or 'listings falling' is a SEVEN-DAY change or an absorption column, never a one-day ratio. A stale row, or an event that is not active, is NEVER a move: its numbers describe the last day it was priced. Gate a movement ask on ea.last_price_snapshot_date with a relative date. The economic floor CAN be turned off at the call site (apply_floor=false, or apply_economic_floor=false on a rule), only when you explicitly want the raw universe. A freshness gate is NOT applied by default, so supply it yourself: {\"col\":\"ea.last_price_snapshot_date\",\"op\":\">=\",\"val\":{\"days_ago\":1}} means \"priced within the last day\" and compiles to CURRENT_DATE - 1, re-evaluated every tick, where a literal date string silently rots. The {\"days_ago\": N} value form is valid on any date/timestamp column. e.event_id, e.venue_id and e.performer_id take the ids rows carry (ev..., vn..., pf...). Authoritative validation runs in SQL; an invalid predicate returns a clear error. A window of event dates from today ('the next week', 'the next 30 days') is ea.days_to_event between [0, N]. NON-ADMISSION SKUs ARE ALWAYS EXCLUDED: parking and shuttle / no-admission passes (sub_category_id 75, or an event_name matching '%parking%') never appear in a screen, and a screen that asks for sub_category_id 75 alone is refused. Also screenable: marketplace demand levels/changes (ea.interest*, ea.sales*; young series, gate freshness on ea.demand_asof_date), PERFORMER-grain demand (pa.interest*, pa.sales*, pa.demand_asof_date; a separate performer-resource reading, NOT a rollup of that performer's events; filtering on it selects every event of a matching performer, so use it to find hot performers and ea.demand_* to pick among their events; gate on pa.demand_asof_date), performer popularity-rank momentum (pa.popularity_rank*; positive change = climbing), and sale-timing/ops columns: e.presale1_date and e.onsale_date (timestamptz; NULL = unknown/TBD and NULL never matches a range predicate; negative days_ago means the FUTURE: 'on sale in the next 7 days' is {\"all\":[{\"col\":\"e.onsale_date\",\"op\":\">=\",\"val\":{\"days_ago\":0}},{\"col\":\"e.onsale_date\",\"op\":\"<=\",\"val\":{\"days_ago\":-7}}]}) and e.monitoring_priority (monitoring priority from P1, highest, to P10, lowest, stored as 1 to 10). Count changes come as counts (ea.listings_delta_*, ea.tickets_delta_*) AND as percents (ea.listings_pct_1d/_7d, ea.tickets_pct_1d/_7d): 'listings down 10%' is ea.listings_pct_7d <= -10, never a count of 10. ea.median_price_7d_ago is the median of 7 days earlier, a past level. ea.tm_tickets_pct_3d is the primary market's 3-day percent change (-100 = none left after some 3 days ago), and e.tm_sells is true when TM sells the event as its own primary sale ('not on TM' is false); both are primary-market columns. ONLY EVENTS DATED TODAY OR LATER (UTC) ARE SCREENED, whatever active_only says: a screen whose e.local_date range ended two or more days ago is refused. ABSORPTION IS DELISTING, NOT SALES: ea.absorption_count_1d/7d, ea.absorption_rate_7d and ea.listings_added_count_* count listings that LEFT (or joined) the marketplace: a broker withdrawal, a move to another exchange, or an expiry counts the same as a sale. NEVER report them as tickets bought or as sales volume; say 'absorbed' / 'delisted'. A predicate or sort on an absorption column adds ea.absorption_data_quality, ea.absorption_grain and ea.absorption_asof_date to the projection; quote the quality and the as-of day with any absorption number. The as-of day is yesterday (UTC) for every covered event; an event without seat block ledger coverage is NULL in every absorption column, never 0. Quality ranges from 0 to 1 and reflects observation coverage and listing-tracking quality. Lower values warrant more caution when comparing activity. Published counts can decrease after revisions and can be negative when returns exceed departures."New value: +"A pure boolean FILTER, not an ordering. Omit or pass {} to screen the whole live universe. To surface the most interesting rows first, use the `sort` parameter; the predicate cannot express ordering. Predicate DSL (recursive JSON): a leaf is {col, op, val}; composites are {all:[...]} (AND) or {any:[...]} (OR). Columns are prefixed: \"ea.\" = event_analytics, \"e.\" = events, \"pa.\" = performer_analytics, \"p.\" = performers (p.name, the act the row is about), \"v.\" = venues (v.venue_name, the venue's name; v.city, v.state, v.country_code, v.capacity). Ops: =, !=, >, >=, <, <=, between (val=[lo,hi]), in (val=[...]), contains (case-insensitive substring on a TEXT column; val is a plain string), not_contains (removes the rows whose TEXT column holds val as a case-insensitive substring; a row with no value stays; % and _ in val match themselves, while contains reads them as wildcards). Example: {\"all\":[{\"col\":\"ea.price_self_z_7d_xs_z_subcat_tte\",\"op\":\">=\",\"val\":2},{\"col\":\"ea.days_to_event\",\"op\":\"between\",\"val\":[7,60]}]}. NAMED ACTS / TEAMS / PERFORMERS, use p.name. When the user names the act the events are BY (a musician like 'Taylor Swift', a team like 'Lakers', a comedian, a touring show), filter the performer column: {col:'p.name', op:'contains', val:'Taylor Swift'}. p.name is the act the row is KEYED on. e.event_name is the TITLE, which reads 'A at B' for a sports event and so also returns the opponent's home games, and for a concert also returns parking and support billings. A performer or team ask NEVER goes to e.event_name. Keep writing 'contains' for an act name. When what was typed IS a whole act name in the catalog, the server rewrites that leaf to op '=' and says so; anything else stays a substring. REMOVING ROWS BY A WORD. 'NOT Little', 'not the Lakers', 'without Taylor', 'excluding Hamilton' remove every row whose title contains the word: {col:'e.event_name', op:'not_contains', val:'Little'}. Never write '!=' for a word: '!=' compares the WHOLE value, so e.event_name != 'Manilow' removes nothing. A MISSPELLED superlative is still a superlative. 'htotest', 'hotest', 'bigest movers', 'chepest', 'lowset price' read as the word they intend and take the ordering that word takes. A ranking word is NEVER a name: never put it in a 'contains' leaf on e.event_name or p.name, and never answer with sort null because the spelling was odd. ECONOMIC FLOOR. The server already ANDs ea.listings_current >= 25 AND ea.median_price_current >= 40 into every screen. Do NOT add a listings-depth floor of your own. A column whose name ends in d1 or 1d is a ONE-DAY CHANGE, not yesterday's value. 'Inventory dropping' or 'listings falling' is a SEVEN-DAY change or an absorption column, never a one-day ratio. A stale row, or an event that is not active, is NEVER a move: its numbers describe the last day it was priced. Gate a movement ask on ea.last_price_snapshot_date with a relative date. The economic floor CAN be turned off at the call site (apply_floor=false, or apply_economic_floor=false on a rule), only when you explicitly want the raw universe. A freshness gate is NOT applied by default, so supply it yourself: {\"col\":\"ea.last_price_snapshot_date\",\"op\":\">=\",\"val\":{\"days_ago\":1}} means \"priced within the last day\" and compiles to CURRENT_DATE - 1, re-evaluated every tick, where a literal date string silently rots. The {\"days_ago\": N} value form is valid on any date/timestamp column. A weekend is {\"col\":\"e.local_date\",\"op\":\"between\",\"val\":{\"weekend\":\"this\",\"tz\":\"America/New_York\"}} (\"next\" for the one after): the coming Friday to Sunday in tz, from today on a Friday to Sunday, resolved on every run. e.event_id, e.venue_id and e.performer_id take the ids rows carry (ev..., vn..., pf...). Authoritative validation runs in SQL; an invalid predicate returns a clear error. A window of event dates from today ('the next week', 'the next 30 days') is ea.days_to_event between [0, N]. NON-ADMISSION SKUs ARE ALWAYS EXCLUDED: parking and shuttle / no-admission passes (sub_category_id 75, or an event_name matching '%parking%') never appear in a screen, and a screen that asks for sub_category_id 75 alone is refused. Also screenable: marketplace demand levels/changes (ea.interest*, ea.sales*; young series, gate freshness on ea.demand_asof_date), PERFORMER-grain demand (pa.interest*, pa.sales*, pa.demand_asof_date; a separate performer-resource reading, NOT a rollup of that performer's events; filtering on it selects every event of a matching performer, so use it to find hot performers and ea.demand_* to pick among their events; gate on pa.demand_asof_date), performer popularity-rank momentum (pa.popularity_rank*; positive change = climbing), and sale-timing/ops columns: e.presale1_date and e.onsale_date (timestamptz; NULL = unknown/TBD and NULL never matches a range predicate; negative days_ago means the FUTURE: 'on sale in the next 7 days' is {\"all\":[{\"col\":\"e.onsale_date\",\"op\":\">=\",\"val\":{\"days_ago\":0}},{\"col\":\"e.onsale_date\",\"op\":\"<=\",\"val\":{\"days_ago\":-7}}]}) and e.monitoring_priority (monitoring priority from P1, highest, to P10, lowest, stored as 1 to 10). Count changes come as counts (ea.listings_delta_*, ea.tickets_delta_*) AND as percents (ea.listings_pct_1d/_7d, ea.tickets_pct_1d/_7d): 'listings down 10%' is ea.listings_pct_7d <= -10, never a count of 10. ea.median_price_7d_ago is the median of 7 days earlier, a past level. ea.tm_tickets_pct_3d is the primary market's 3-day percent change (-100 = none left after some 3 days ago), and e.tm_sells is true when TM sells the event as its own primary sale ('not on TM' is false); both are primary-market columns. ONLY EVENTS DATED TODAY OR LATER (UTC) ARE SCREENED, whatever active_only says: a screen whose e.local_date range ended two or more days ago is refused. ABSORPTION IS DELISTING, NOT SALES: ea.absorption_count_1d/7d, ea.absorption_rate_7d and ea.listings_added_count_* count listings that LEFT (or joined) the marketplace: a broker withdrawal, a move to another exchange, or an expiry counts the same as a sale. NEVER report them as tickets bought or as sales volume; say 'absorbed' / 'delisted'. A predicate or sort on an absorption column adds ea.absorption_data_quality, ea.absorption_grain and ea.absorption_asof_date to the projection; quote the quality and the as-of day with any absorption number. The as-of day is yesterday (UTC) for every covered event; an event without seat block ledger coverage is NULL in every absorption column, never 0. Quality ranges from 0 to 1 and reflects observation coverage and listing-tracking quality. Lower values warrant more caution when comparing activity. Published counts can decrease after revisions and can be negative when returns exceed departures."
  4. 1 tool update
    • Changedlist_screen_columns1 field changed
      • addedInput schema / properties / search
        Added value: +{
        +  "description": "One or more words, e.g. \"price demand\": only the columns whose name, group or meaning contains any of them. Omit for the whole catalog.",
        +  "type": "string"
        +}
  5. 24 tool updates
    • Changedcreate_view1 field changed
      • changedInput schema / properties / predicate / description
        Previous value: -"Predicate DSL object (see tool description). {} = always-true, combined with max_firings_per_eval to get a \"top-N of the universe\" alert."New value: +"{} = always-true, combined with max_firings_per_eval to get a \"top-N of the universe\" alert. Predicate DSL (recursive JSON): a leaf is {col, op, val}; composites are {all:[...]} (AND) or {any:[...]} (OR). Columns are prefixed: \"ea.\" = event_analytics, \"e.\" = events, \"pa.\" = performer_analytics, \"p.\" = performers (p.name, the act the row is about), \"v.\" = venues (v.venue_name, the venue's name; v.city, v.state, v.country_code, v.capacity). Ops: =, !=, >, >=, <, <=, between (val=[lo,hi]), in (val=[...]), contains (case-insensitive substring on a TEXT column; val is a plain string), not_contains (removes the rows whose TEXT column holds val as a case-insensitive substring; a row with no value stays; % and _ in val match themselves, while contains reads them as wildcards). Example: {\"all\":[{\"col\":\"ea.price_self_z_7d_xs_z_subcat_tte\",\"op\":\">=\",\"val\":2},{\"col\":\"ea.days_to_event\",\"op\":\"between\",\"val\":[7,60]}]}. NAMED ACTS / TEAMS / PERFORMERS, use p.name. When the user names the act the events are BY (a musician like 'Taylor Swift', a team like 'Lakers', a comedian, a touring show), filter the performer column: {col:'p.name', op:'contains', val:'Taylor Swift'}. p.name is the act the row is KEYED on. e.event_name is the TITLE, which reads 'A at B' for a sports event and so also returns the opponent's home games, and for a concert also returns parking and support billings. A performer or team ask NEVER goes to e.event_name. Keep writing 'contains' for an act name. When what was typed IS a whole act name in the catalog, the server rewrites that leaf to op '=' and says so; anything else stays a substring. REMOVING ROWS BY A WORD. 'NOT Little', 'not the Lakers', 'without Taylor', 'excluding Hamilton' remove every row whose title contains the word: {col:'e.event_name', op:'not_contains', val:'Little'}. Never write '!=' for a word: '!=' compares the WHOLE value, so e.event_name != 'Manilow' removes nothing. A MISSPELLED superlative is still a superlative. 'htotest', 'hotest', 'bigest movers', 'chepest', 'lowset price' read as the word they intend and take the ordering that word takes. A ranking word is NEVER a name: never put it in a 'contains' leaf on e.event_name or p.name, and never answer with sort null because the spelling was odd. ECONOMIC FLOOR. The server already ANDs ea.listings_current >= 25 AND ea.median_price_current >= 40 into every screen. Do NOT add a listings-depth floor of your own. A column whose name ends in d1 or 1d is a ONE-DAY CHANGE, not yesterday's value. 'Inventory dropping' or 'listings falling' is a SEVEN-DAY change or an absorption column, never a one-day ratio. A stale row, or an event that is not active, is NEVER a move: its numbers describe the last day it was priced. Gate a movement ask on ea.last_price_snapshot_date with a relative date. The economic floor CAN be turned off at the call site (apply_floor=false, or apply_economic_floor=false on a rule), only when you explicitly want the raw universe. A freshness gate is NOT applied by default, so supply it yourself: {\"col\":\"ea.last_price_snapshot_date\",\"op\":\">=\",\"val\":{\"days_ago\":1}} means \"priced within the last day\" and compiles to CURRENT_DATE - 1, re-evaluated every tick, where a literal date string silently rots. The {\"days_ago\": N} value form is valid on any date/timestamp column. e.event_id, e.venue_id and e.performer_id take the ids rows carry (ev..., vn..., pf...). Authoritative validation runs in SQL; an invalid predicate returns a clear error."
    • Changedget_event_analytics2 fields changed
      • changedInput schema / properties / columns / description
        Previous value: -"Specific event_analytics columns to return (bare names, no namespace). Omit for the full row; this is the drill-down tool, so full is the default."New value: +"event_analytics columns to return (bare names). Now: omit for the full row; `presales` and `onsale` name the sale windows. With range: omit for the headline signal set."
      • addedInput schema / properties / range
        Added value: +{
        +  "description": "Lookback window over as_of_date: 7d | 14d | 28d | 90d | all (all is bounded to ~1 year). Default 90d.",
        +  "enum": [
        +    "7d",
        +    "14d",
        +    "28d",
        +    "90d",
        +    "all"
        +  ],
        +  "type": "string"
        +}
    • Addedget_event_bundle
    • Addedget_event_chart
    • Changedget_event_demand_chart1 field changed
      • changedInput schema / properties / render / description
        Previous value: -"A rendered chart (a PNG image content block) is included ahead of the data by default. Pass false for a data-only (smaller) response."New value: +"A rendered chart (a PNG image content block) is included ahead of the data by default. Pass render:false for a data-only (smaller) response."
    • Changedget_event_price_chart2 fields changed
      • changedInput schema / properties / render / description
        Previous value: -"A rendered chart (a PNG image content block) is included ahead of the data by default. Pass false for a data-only (smaller) response."New value: +"A rendered chart (a PNG image content block) is included ahead of the data by default. Pass render:false for a data-only (smaller) response."
      • changedInput schema / properties / source / description
        Previous value: -"Comparison source: vs | tp | tm | tmr | gt | sg | sh | mlb | sgp. Default vs (this tool's classic per-date rollup shape); tm is the primary market, tmr the resale market, and vs, tp, tmr, gt, sg and sh are all resale. Never mix a primary and a resale source into one series. Every code serves the price (before fees) in floor and the all-in price (with fees) in floorAip; compare like with like. mlb is the club box office of an mlb game, a primary market of disclosed face values with their disclosed all-in beside them. sgp is the sg primary market; sg is the sg resale market only."New value: +"Comparison source: vs | tp | tm | tmr | gt | sg | sh | mlb | sgp. vs answers the per-date rollup; every other code answers the per-source series envelope ({source, meta:{coverageStart, lastMeasuredAt, granularity, mapped, bases}, series:[{date, floor, median, p25, p75, floorAip, medianAip, p25Aip, p75Aip, listings, tickets}]}), data only; mapped:false means the event has no link to that source. Default vs (this tool's classic per-date rollup shape); tm is the primary market, tmr the resale market, and vs, tp, tmr, gt, sg and sh are all resale. Never mix a primary and a resale source into one series. Every code serves the price (before fees) in floor and the all-in price (with fees) in floorAip; compare like with like. mlb is the club box office of an mlb game, a primary market of disclosed face values with their disclosed all-in beside them. sgp is the sg primary market; sg is the sg resale market only."
    • Changedget_event_seat_history3 fields changed
      • changedInput schema / properties / cursor / description
        Previous value: -"next_cursor from the previous page, for older changes."New value: +"next_cursor from the previous page: one seat's older changes, or the next seats of a section or event read."
      • addedInput schema / properties / rows
        Added value: +{
        +  "default": false,
        +  "description": "scope section or event: each seat's changes, up to 25 seats a page in seat order, instead of the summary. A seat with more than 50 rows is truncated and carries its own next_cursor for scope seat.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / scope
        Added value: +{
        +  "default": "seat",
        +  "description": "seat (default): one seat. section: every seat of `section` that changed since `since`. event: every seat of the event that changed. A section or event read answers a summary per section unless `rows` is true.",
        +  "enum": [
        +    "seat",
        +    "section",
        +    "event"
        +  ],
        +  "type": "string"
        +}
    • Addedget_event_seats
    • Changedget_event_section_series1 field changed
      • changedInput schema / properties / bucket / description
        Previous value: -"Point size: 5m for the last few hours, 1h for days."New value: +"Point size: 5m for the last few hours, 1h for days. `open_count` is exact at every bucket. THE PRICES ARE NOT: they are exact on the newest bucket only; on every earlier bucket they are the seats open now valued at the prices recorded for that bucket, an approximation. Never present an earlier bucket's price as the price at that time."
    • Changedget_event_sections_live11 fields changed
      • removedInput schema / properties / all_in / default
        Removed value: -true
      • addedInput schema / properties / at
        Added value: +{
        +  "description": "The instant to read the house at, ISO 8601. Defaults to now.",
        +  "format": "date-time",
        +  "type": "string"
        +}
      • addedInput schema / properties / bucket
        Added value: +{
        +  "description": "Point size: 5m for the last few hours, 1h for days. `open_count` is exact at every bucket. THE PRICES ARE NOT: they are exact on the newest bucket only; on every earlier bucket they are the seats open now valued at the prices recorded for that bucket, an approximation. Never present an earlier bucket's price as the price at that time.",
        +  "enum": [
        +    "5m",
        +    "1h"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "next_cursor from the previous page, for newer points. A page after the first carries the points alone.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / limit / default
        Removed value: -60
      • changedInput schema / properties / limit / description
        Previous value: -"Cap on sections returned when `sections` is omitted. The widest events draw 650 sections; `sections_total` is always the true count."New value: +"now: sections returned when `sections` is omitted, default 60. ga: points per page, default 200."
      • addedInput schema / properties / occurrence
        Added value: +{
        +  "description": "0 unless the event lists the code twice, as `sections` shows. `section` and `occurrence` together name one section.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / section
        Added value: +{
        +  "description": "series: the section's ticket code, e.g. \"104\" (required). ga: a general admission section's code, to add its exact points.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / since
        Added value: +{
        +  "description": "Oldest point to include, ISO 8601. Defaults to 24 hours ago.",
        +  "format": "date-time",
        +  "type": "string"
        +}
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "now (default), at (a past moment), series (one section over time), ga (general admission over time).",
        +  "enum": [
        +    "now",
        +    "at",
        +    "series",
        +    "ga"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / width
        Added value: +{
        +  "description": "Instead of pages: the shape of the whole history in one answer, as the first, last, lowest and highest point of each of `width` equal slices of time from the section's first observation to now. At most four points a slice. Use it for the shape of a busy section, which can hold tens of thousands of changes.",
        +  "maximum": 2000,
        +  "minimum": 50,
        +  "type": "integer"
        +}
    • Addedget_event_sellers
    • Changedget_performer_analytics2 fields changed
      • addedInput schema / properties / range
        Added value: +{
        +  "description": "Lookback window over snapshot_date: 7d | 14d | 28d | 90d | all (all is bounded to ~1 year). Default 28d.",
        +  "enum": [
        +    "7d",
        +    "14d",
        +    "28d",
        +    "90d",
        +    "all"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / render
        Added value: +{
        +  "description": "A rendered chart (a PNG image content block) is included ahead of the data by default. Pass render:false for a data-only (smaller) response.",
        +  "type": "boolean"
        +}
    • Changedget_performer_rank_chart1 field changed
      • changedInput schema / properties / render / description
        Previous value: -"A rendered chart (a PNG image content block) is included ahead of the data by default. Pass false for a data-only (smaller) response."New value: +"A rendered chart (a PNG image content block) is included ahead of the data by default. Pass render:false for a data-only (smaller) response."
    • Changedget_venue_schedule6 fields changed
      • addedInput schema / properties / capacity_max
        Added value: +{
        +  "description": "Keep venues that hold at most this many people. Venues whose capacity is unknown are left out whenever either bound is given.",
        +  "maximum": 1000000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / capacity_min
        Added value: +{
        +  "description": "Keep venues that hold at least this many people. Venues whose capacity is unknown are left out whenever either bound is given.",
        +  "maximum": 1000000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "Keep venues in this country, by two-letter code, e.g. \"US\".",
        +  "maxLength": 120,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / state
        Added value: +{
        +  "description": "Keep venues in this state or province, e.g. \"TX\". Matched against the same grouping key the venue directory orders by: the region code where the venue has one, its country code otherwise.",
        +  "maxLength": 120,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / venue_name / description
        Previous value: -"A venue name instead of an id. The best match is used; when two venues share a name this picks one, so prefer find_venue and an id when the answer matters."New value: +"A venue name. schedule: the best match is read. venues: the name to search for, or part of it."
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "schedule (default): one venue's events. venues: find venues and their ids.",
        +  "enum": [
        +    "schedule",
        +    "venues"
        +  ],
        +  "type": "string"
        +}
    • Changedlist_matches5 fields changed
      • changedInput schema / properties / delivery_status / description
        Previous value: -"Only Matches in this delivery state. Use 'sent' for \"which alert emails actually went out\" and 'not_sent' for \"what was dropped, and why\"; do NOT infer either from a timestamp. Note: the 'not_applicable' filter matches baseline Matches only; destination-only Views are labeled not_applicable on the row but are not selected by this filter."New value: +"DELIVERY TRUTH: read `delivery_status`, never infer delivery from a timestamp: 'sent' = an alert email actually carried this Match; 'not_sent' = terminally dropped and never sent (see `delivery_reason`, e.g. muted_view, locked_view, email_digests_off (the owner turned alert emails off), view_disabled); 'pending' = not processed yet, may still be sent; 'not_applicable' = was never eligible for an alert email (a baseline Match, or a View that delivers only to alert destinations). `notified_at` is non-null ONLY when delivery_status is 'sent'; `consumed_at` is when the Match was claimed whatever the outcome. NEVER report a Match as delivered unless delivery_status is 'sent'. Only Matches in this delivery state. Use 'sent' for \"which alert emails actually went out\" and 'not_sent' for \"what was dropped, and why\"; do NOT infer either from a timestamp. Note: the 'not_applicable' filter matches baseline Matches only; destination-only Views are labeled not_applicable on the row but are not selected by this filter."
      • removedInput schema / properties / include_snapshot / default
        Removed value: -false
      • removedInput schema / properties / limit / default
        Removed value: -20
      • addedInput schema / properties / match_id
        Added value: +{
        +  "description": "The match id (from list_matches' match_id field).",
        +  "format": "uuid",
        +  "type": "string"
        +}
      • removedInput schema / properties / page / default
        Removed value: -1
    • Changedlist_view_targets1 field changed
      • changedInput schema / properties / view_id / description
        Previous value: -"The View to read (from list_views)."New value: +"The View to read (from list_views). The posting URL of a destination is never returned here or anywhere else on this surface."
    • Changedlist_views1 field changed
      • addedInput schema / properties / view_id
        Added value: +{
        +  "description": "Read this one View instead of a page.",
        +  "format": "uuid",
        +  "type": "string"
        +}
    • Changedresearch_event1 field changed
      • changedInput schema / properties / force / description
        Previous value: -"Bypass the cache and the stale-price guard; always fetch fresh."New value: +"Bypass the cache and the stale-price guard; always fetch fresh. Quota is only consumed on a FRESH result with findings; cached serves and status:'empty' results are free, and empty results are never stored, so a later call re-checks. Resale-marketplace listing pages are excluded from the search: results are coverage."
    • Changedscreen_events5 fields changed
      • changedInput schema / properties / active_only / description
        Previous value: -"Restrict to the active event universe (status='active'). Default true: inactive/closed events are stale and should not rank as live signals. Set false to include them."New value: +"Restrict to the active event universe (status='active'). Only events dated today or later are screened either way; false adds inactive events in that window, whose rows can be frozen at the last computation or hollow (partial_row true: treat their nulls as unknown). Default true: inactive/closed events are stale and should not rank as live signals. Set false to include them."
      • changedInput schema / properties / columns / description
        Previous value: -"Snapshot columns to return, as namespaced refs (e.g. [\"ea.median_price_current\",\"e.event_name\"]). A bare namespace (\"ea\") returns that whole bag; [\"*\"] returns the full ea+e+pa snapshot. Omit for a compact default (identity + headline signals) that keeps the payload small. Request more only when you need them. Names must come from list_screen_columns, spelled exactly; an unknown one is rejected by name rather than dropped. `event_id` and `event_url` are on every row already and do not need projecting."New value: +"Snapshot columns to return, as namespaced refs (e.g. [\"ea.median_price_current\",\"e.event_name\"]). A bare namespace (\"ea\") returns that whole bag; [\"*\"] returns the full ea+e+pa snapshot. Omit for a compact default (identity + headline signals) that keeps the payload small. Request more only when you need them. Names must come from list_screen_columns, spelled exactly; an unknown one is REJECTED by name, not dropped, so fix it and call again. EVERY ROW IS ALREADY LINKED: `event_id` and `event_url` are on every row already and do not need projecting."
      • changedInput schema / properties / diagnostics / description
        Previous value: -"Explain the result set (see EMPTY RESULTS in the tool description). \"on_empty\" (the default) runs the analysis only when this page came back with zero rows, so an empty screen is never reported as a plain 'no matches' when it is really an ALL_NULL column. true runs it always (useful to check how much of the universe a signal actually covers); false never runs it. The analysis is a second aggregate query over the whole candidate universe and adds ~5s, so don't set true routinely."New value: +"Explain the result set. EMPTY RESULTS ARE EXPLAINED, NOT GUESSED AT: the block carries `rows_evaluated` (events the predicate was measured against, after the active, parking, economic floor and freshness gates), `system_gates` (how many survived each gate), `root` and a per-leg `passed`/`failed`/`null` breakdown. Read the `warnings` before answering: ALL_NULL means that column is NULL for EVERY row evaluated, so the screen is broken, NOT a real no-match; say the signal is not computed for these events and offer another column, never 'no events match'. A real no-match has legs with non-zero `passed`: loosen the thresholds. HIGH_NULL_RATE (>50% NULL): the results are real but cover part of the universe, so say so. NO_ROWS_EVALUATED: the scope flags, not the predicate, are the problem. A leg's `marginal` is how many more rows dropping that leg adds. If `diagnostics.status` is \"unavailable\" the events are still correct. \"on_empty\" (the default) runs the analysis only when this page came back with zero rows, so an empty screen is never reported as a plain 'no matches' when it is really an ALL_NULL column. true runs it always (useful to check how much of the universe a signal actually covers); false never runs it. The analysis is a second aggregate query over the whole candidate universe and adds ~5s, so don't set true routinely."
      • addedInput schema / properties / limit / description
        Added value: +"Rows per page. A page too large for one tool result comes back as the first rows plus `meta.truncated` and `meta.total_rows`; narrow the predicate, project fewer columns, or page, rather than repeating the call."
      • changedInput schema / properties / predicate / description
        Previous value: -"Predicate DSL object (see tool description), a pure boolean FILTER, not an ordering. Omit or pass {} to screen the whole live universe. To surface the most interesting rows first, use the `sort` parameter; the predicate cannot express ordering."New value: +"A pure boolean FILTER, not an ordering. Omit or pass {} to screen the whole live universe. To surface the most interesting rows first, use the `sort` parameter; the predicate cannot express ordering. Predicate DSL (recursive JSON): a leaf is {col, op, val}; composites are {all:[...]} (AND) or {any:[...]} (OR). Columns are prefixed: \"ea.\" = event_analytics, \"e.\" = events, \"pa.\" = performer_analytics, \"p.\" = performers (p.name, the act the row is about), \"v.\" = venues (v.venue_name, the venue's name; v.city, v.state, v.country_code, v.capacity). Ops: =, !=, >, >=, <, <=, between (val=[lo,hi]), in (val=[...]), contains (case-insensitive substring on a TEXT column; val is a plain string), not_contains (removes the rows whose TEXT column holds val as a case-insensitive substring; a row with no value stays; % and _ in val match themselves, while contains reads them as wildcards). Example: {\"all\":[{\"col\":\"ea.price_self_z_7d_xs_z_subcat_tte\",\"op\":\">=\",\"val\":2},{\"col\":\"ea.days_to_event\",\"op\":\"between\",\"val\":[7,60]}]}. NAMED ACTS / TEAMS / PERFORMERS, use p.name. When the user names the act the events are BY (a musician like 'Taylor Swift', a team like 'Lakers', a comedian, a touring show), filter the performer column: {col:'p.name', op:'contains', val:'Taylor Swift'}. p.name is the act the row is KEYED on. e.event_name is the TITLE, which reads 'A at B' for a sports event and so also returns the opponent's home games, and for a concert also returns parking and support billings. A performer or team ask NEVER goes to e.event_name. Keep writing 'contains' for an act name. When what was typed IS a whole act name in the catalog, the server rewrites that leaf to op '=' and says so; anything else stays a substring. REMOVING ROWS BY A WORD. 'NOT Little', 'not the Lakers', 'without Taylor', 'excluding Hamilton' remove every row whose title contains the word: {col:'e.event_name', op:'not_contains', val:'Little'}. Never write '!=' for a word: '!=' compares the WHOLE value, so e.event_name != 'Manilow' removes nothing. A MISSPELLED superlative is still a superlative. 'htotest', 'hotest', 'bigest movers', 'chepest', 'lowset price' read as the word they intend and take the ordering that word takes. A ranking word is NEVER a name: never put it in a 'contains' leaf on e.event_name or p.name, and never answer with sort null because the spelling was odd. ECONOMIC FLOOR. The server already ANDs ea.listings_current >= 25 AND ea.median_price_current >= 40 into every screen. Do NOT add a listings-depth floor of your own. A column whose name ends in d1 or 1d is a ONE-DAY CHANGE, not yesterday's value. 'Inventory dropping' or 'listings falling' is a SEVEN-DAY change or an absorption column, never a one-day ratio. A stale row, or an event that is not active, is NEVER a move: its numbers describe the last day it was priced. Gate a movement ask on ea.last_price_snapshot_date with a relative date. The economic floor CAN be turned off at the call site (apply_floor=false, or apply_economic_floor=false on a rule), only when you explicitly want the raw universe. A freshness gate is NOT applied by default, so supply it yourself: {\"col\":\"ea.last_price_snapshot_date\",\"op\":\">=\",\"val\":{\"days_ago\":1}} means \"priced within the last day\" and compiles to CURRENT_DATE - 1, re-evaluated every tick, where a literal date string silently rots. The {\"days_ago\": N} value form is valid on any date/timestamp column. e.event_id, e.venue_id and e.performer_id take the ids rows carry (ev..., vn..., pf...). Authoritative validation runs in SQL; an invalid predicate returns a clear error. A window of event dates from today ('the next week', 'the next 30 days') is ea.days_to_event between [0, N]. NON-ADMISSION SKUs ARE ALWAYS EXCLUDED: parking and shuttle / no-admission passes (sub_category_id 75, or an event_name matching '%parking%') never appear in a screen, and a screen that asks for sub_category_id 75 alone is refused. Also screenable: marketplace demand levels/changes (ea.interest*, ea.sales*; young series, gate freshness on ea.demand_asof_date), PERFORMER-grain demand (pa.interest*, pa.sales*, pa.demand_asof_date; a separate performer-resource reading, NOT a rollup of that performer's events; filtering on it selects every event of a matching performer, so use it to find hot performers and ea.demand_* to pick among their events; gate on pa.demand_asof_date), performer popularity-rank momentum (pa.popularity_rank*; positive change = climbing), and sale-timing/ops columns: e.presale1_date and e.onsale_date (timestamptz; NULL = unknown/TBD and NULL never matches a range predicate; negative days_ago means the FUTURE: 'on sale in the next 7 days' is {\"all\":[{\"col\":\"e.onsale_date\",\"op\":\">=\",\"val\":{\"days_ago\":0}},{\"col\":\"e.onsale_date\",\"op\":\"<=\",\"val\":{\"days_ago\":-7}}]}) and e.monitoring_priority (monitoring priority from P1, highest, to P10, lowest, stored as 1 to 10). Count changes come as counts (ea.listings_delta_*, ea.tickets_delta_*) AND as percents (ea.listings_pct_1d/_7d, ea.tickets_pct_1d/_7d): 'listings down 10%' is ea.listings_pct_7d <= -10, never a count of 10. ea.median_price_7d_ago is the median of 7 days earlier, a past level. ea.tm_tickets_pct_3d is the primary market's 3-day percent change (-100 = none left after some 3 days ago), and e.tm_sells is true when TM sells the event as its own primary sale ('not on TM' is false); both are primary-market columns. ONLY EVENTS DATED TODAY OR LATER (UTC) ARE SCREENED, whatever active_only says: a screen whose e.local_date range ended two or more days ago is refused. ABSORPTION IS DELISTING, NOT SALES: ea.absorption_count_1d/7d, ea.absorption_rate_7d and ea.listings_added_count_* count listings that LEFT (or joined) the marketplace: a broker withdrawal, a move to another exchange, or an expiry counts the same as a sale. NEVER report them as tickets bought or as sales volume; say 'absorbed' / 'delisted'. A predicate or sort on an absorption column adds ea.absorption_data_quality, ea.absorption_grain and ea.absorption_asof_date to the projection; quote the quality and the as-of day with any absorption number. The as-of day is yesterday (UTC) for every covered event; an event without seat block ledger coverage is NULL in every absorption column, never 0. Quality ranges from 0 to 1 and reflects observation coverage and listing-tracking quality. Lower values warrant more caution when comparing activity. Published counts can decrease after revisions and can be negative when returns exceed departures."
    • Changedsearch_events2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Rows per page. A page too large for one tool result comes back as the first rows plus `meta.truncated` and `meta.total_rows`; narrow the search or the dates rather than repeating the call."
      • changedInput schema / properties / search / description
        Previous value: -"Names only: event, performer or venue (min 2 chars), e.g. \"taylor swift\", \"lakers\", \"Madison Square Garden\". Words match in any order: each word of 3 or more letters must be in the event's name, its performer or its venue, so \"Red Sox Yankees\" finds the game. Joining words (vs, and, the) are ignored. Rows whose name holds every word come first. Not a ranking word (hottest, best, top, movers) and not a typo of one. A venue term returns the events playing there. Venues are stored under their official name, so expand a nickname (\"MSG\") before searching. Omit to browse by filters alone; use screen_events to rank."New value: +"Ranking words (hottest, best, top, movers) are a sort on screen_events, never search text. NOT A LINK RESOLVER: rows from other tools already carry `event_id` and `event_url`; matching a row by name can land on a different event. Names only: event, performer or venue (min 2 chars), e.g. \"taylor swift\", \"lakers\", \"Madison Square Garden\". Words match in any order: each word of 3 or more letters must be in the event's name, its performer or its venue, so \"Red Sox Yankees\" finds the game. Joining words (vs, and, the) are ignored. Rows whose name holds every word come first. Not a ranking word (hottest, best, top, movers) and not a typo of one. A venue term returns the events playing there. Venues are stored under their official name, so expand a nickname (\"MSG\") before searching. Omit to browse by filters alone; use screen_events to rank."
    • Changedset_watch_defaults7 fields changed
      • changedInput schema / properties / triggers / description
        Previous value: -"Per-event trigger overrides, e.g. {\"price_z\":{\"enabled\":true,\"params\":{\"threshold\":2.5}}}. Omit to use your saved defaults. A value outside its range in list_watch_triggers is refused with an error naming the field and its min and max, and nothing is written."New value: +"Per-event trigger settings, e.g. {\"price_z\":{\"enabled\":true,\"params\":{\"threshold\":2.5}}}. Each key says what it alerts on and the range of its params. Omit to use the saved defaults. A value outside its range is refused with an error naming the field and its min and max, and nothing is written."
      • addedInput schema / properties / triggers / properties / absorption / description
        Added value: +"Tickets leaving fast: A large share of the listed tickets leaves the marketplace. Off by default. Measures listings that disappear, which is not the same as confirmed sales. params: threshold 0.3 to 0.9 (default 0.5)."
      • addedInput schema / properties / triggers / properties / demand / description
        Added value: +"Demand spike: Interest in this event's listings rises versus the day before. Off by default. A change in Interest from one date to the next, not a z-score. Coverage is still filling in, so quiet events may never trigger it. params: threshold 1 to 50 (default 5)."
      • addedInput schema / properties / triggers / properties / lifecycle / description
        Added value: +"On-sale, presale, event week, low inventory: Fires when an on-sale or presale is announced, event week begins, or listed inventory runs low. On by default. params: event_week_days 1 to 30  days out (default 7); low_inventory_percent 1 to 50 % (default 10)."
      • addedInput schema / properties / triggers / properties / pct_move / description
        Added value: +"Price % move: The price changes by more than this percentage. Off by default. params: metric lowest | median (default lowest); window 1d | 7d (default 1d); threshold 5 to 100 % (default 15)."
      • addedInput schema / properties / triggers / properties / price_z / description
        Added value: +"Unusual price move: Fires when the 7-day price move is at least 2× this event's own normal swing, in either direction. On by default. params: threshold 1 to 5 (default 2)."
      • addedInput schema / properties / triggers / properties / weather / description
        Added value: +"Weather: Fires when the forecast for the event turns bad, and again when it clears. On by default."
    • Changedupdate_view3 fields changed
      • addedInput schema / properties / attach_destination
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Deliver this View's Matches to one more destination, or change the cadence of one it has. A fresh attach starts with the next Match. Email is not touched.",
        +  "properties": {
        +    "cadence": {
        +      "default": "instant",
        +      "description": "How often THIS View delivers to THIS destination: `instant`, `hourly` or `daily`.",
        +      "enum": [
        +        "instant",
        +        "hourly",
        +        "daily"
        +      ],
        +      "type": "string"
        +    },
        +    "delivery_target_id": {
        +      "description": "The destination (an id from list_destinations).",
        +      "format": "uuid",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "delivery_target_id"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / detach_destination
        Added value: +{
        +  "description": "Stop this View delivering to this destination. The destination keeps serving other Views, and a View left with none goes back to email alone.",
        +  "format": "uuid",
        +  "type": "string"
        +}
      • changedInput schema / properties / predicate / description
        Previous value: -"Replacement predicate DSL object (see tool description). Omit to leave the predicate unchanged."New value: +"Replacement predicate, the grammar create_view's predicate takes. Omit to leave the predicate unchanged."
    • Changedupdate_watch7 fields changed
      • changedInput schema / properties / triggers / description
        Previous value: -"Per-event trigger overrides, e.g. {\"price_z\":{\"enabled\":true,\"params\":{\"threshold\":2.5}}}. Omit to use your saved defaults. A value outside its range in list_watch_triggers is refused with an error naming the field and its min and max, and nothing is written."New value: +"Per-event trigger settings, e.g. {\"price_z\":{\"enabled\":true,\"params\":{\"threshold\":2.5}}}. Each key says what it alerts on and the range of its params. Omit to use the saved defaults. A value outside its range is refused with an error naming the field and its min and max, and nothing is written."
      • addedInput schema / properties / triggers / properties / absorption / description
        Added value: +"Tickets leaving fast: A large share of the listed tickets leaves the marketplace. Off by default. Measures listings that disappear, which is not the same as confirmed sales. params: threshold 0.3 to 0.9 (default 0.5)."
      • addedInput schema / properties / triggers / properties / demand / description
        Added value: +"Demand spike: Interest in this event's listings rises versus the day before. Off by default. A change in Interest from one date to the next, not a z-score. Coverage is still filling in, so quiet events may never trigger it. params: threshold 1 to 50 (default 5)."
      • addedInput schema / properties / triggers / properties / lifecycle / description
        Added value: +"On-sale, presale, event week, low inventory: Fires when an on-sale or presale is announced, event week begins, or listed inventory runs low. On by default. params: event_week_days 1 to 30  days out (default 7); low_inventory_percent 1 to 50 % (default 10)."
      • addedInput schema / properties / triggers / properties / pct_move / description
        Added value: +"Price % move: The price changes by more than this percentage. Off by default. params: metric lowest | median (default lowest); window 1d | 7d (default 1d); threshold 5 to 100 % (default 15)."
      • addedInput schema / properties / triggers / properties / price_z / description
        Added value: +"Unusual price move: Fires when the 7-day price move is at least 2× this event's own normal swing, in either direction. On by default. params: threshold 1 to 5 (default 2)."
      • addedInput schema / properties / triggers / properties / weather / description
        Added value: +"Weather: Fires when the forecast for the event turns bad, and again when it clears. On by default."
    • Changedwatch_event7 fields changed
      • changedInput schema / properties / triggers / description
        Previous value: -"Per-event trigger overrides, e.g. {\"price_z\":{\"enabled\":true,\"params\":{\"threshold\":2.5}}}. Omit to use your saved defaults. A value outside its range in list_watch_triggers is refused with an error naming the field and its min and max, and nothing is written."New value: +"Per-event trigger settings, e.g. {\"price_z\":{\"enabled\":true,\"params\":{\"threshold\":2.5}}}. Each key says what it alerts on and the range of its params. Omit to use the saved defaults. A value outside its range is refused with an error naming the field and its min and max, and nothing is written."
      • addedInput schema / properties / triggers / properties / absorption / description
        Added value: +"Tickets leaving fast: A large share of the listed tickets leaves the marketplace. Off by default. Measures listings that disappear, which is not the same as confirmed sales. params: threshold 0.3 to 0.9 (default 0.5)."
      • addedInput schema / properties / triggers / properties / demand / description
        Added value: +"Demand spike: Interest in this event's listings rises versus the day before. Off by default. A change in Interest from one date to the next, not a z-score. Coverage is still filling in, so quiet events may never trigger it. params: threshold 1 to 50 (default 5)."
      • addedInput schema / properties / triggers / properties / lifecycle / description
        Added value: +"On-sale, presale, event week, low inventory: Fires when an on-sale or presale is announced, event week begins, or listed inventory runs low. On by default. params: event_week_days 1 to 30  days out (default 7); low_inventory_percent 1 to 50 % (default 10)."
      • addedInput schema / properties / triggers / properties / pct_move / description
        Added value: +"Price % move: The price changes by more than this percentage. Off by default. params: metric lowest | median (default lowest); window 1d | 7d (default 1d); threshold 5 to 100 % (default 15)."
      • addedInput schema / properties / triggers / properties / price_z / description
        Added value: +"Unusual price move: Fires when the 7-day price move is at least 2× this event's own normal swing, in either direction. On by default. params: threshold 1 to 5 (default 2)."
      • addedInput schema / properties / triggers / properties / weather / description
        Added value: +"Weather: Fires when the forecast for the event turns bad, and again when it clears. On by default."
  6. 4 tool updates
    • Changedget_event_price_chart1 field changed
      • changedInput schema / properties / source / description
        Previous value: -"Comparison source: vs | tp | tm | tmr | gt | sg | sh | mlb | sgp. Default vs (this tool's classic per-date rollup shape); tm is the primary market, tmr the resale market, and vs, tp, tmr, gt, sg and sh are all resale. Never mix a primary and a resale source into one series. gt, sg and sh quote ALL-IN prices, so they sit above vs and tp on the same seats. mlb is the club box office of an mlb game, a primary market of disclosed face values with their disclosed all-in beside them. sgp is the sg primary market, quoted ALL-IN; sg is the sg resale market only."New value: +"Comparison source: vs | tp | tm | tmr | gt | sg | sh | mlb | sgp. Default vs (this tool's classic per-date rollup shape); tm is the primary market, tmr the resale market, and vs, tp, tmr, gt, sg and sh are all resale. Never mix a primary and a resale source into one series. Every code serves the price (before fees) in floor and the all-in price (with fees) in floorAip; compare like with like. mlb is the club box office of an mlb game, a primary market of disclosed face values with their disclosed all-in beside them. sgp is the sg primary market; sg is the sg resale market only."
    • Changedget_event_sections_live1 field changed
      • changedInput schema / properties / all_in / description
        Previous value: -"Adds each section's lowest price after fees and whether it is an estimate. On by default; false returns the list prices alone."New value: +"Adds each section's lowest price after fees and whether it is an estimate. On by default; false returns the prices before fees alone."
    • Removedget_league
    • Changedlist_screen_columns1 field changed
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "Skip this many columns. The catalog comes back in parts: a cut answer's meta.next gives the offset for the next part.",
        +  "minimum": 0,
        +  "type": "integer"
        +}
  7. 3 tool updates
    • Removedcreate_destination
    • Changedcreate_view2 fields changed
      • changedInput schema / properties / channels / description
        Previous value: -"Delivery channels, at least one. \"email\" mails the Matches to the account's address. The other value routes them to the destinations attached to this View instead, which is how a Slack or Discord channel receives them: create one with create_destination, then attach it with set_view_target. A View may carry both."New value: +"Delivery channels, at least one. \"email\" mails the Matches to the account's address. The other value routes them to the destinations attached to this View instead, which is how a Slack or Discord channel receives them: add one in the Ticker web app under Settings, then attach it with set_view_target. A View may carry both."
      • changedInput schema / properties / delivery_target_id / description
        Previous value: -"Optionally attach an alert destination (an id from list_destinations or create_destination) so this alert's Matches are delivered there the instant they fire, in addition to email. Omit for email-only."New value: +"Optionally attach an alert destination (an id from list_destinations; new destinations are added in the Ticker web app under Settings) so this alert's Matches are delivered there the instant they fire, in addition to email. Omit for email-only."
    • Changedupdate_view1 field changed
      • changedInput schema / properties / delivery_target_id / description
        Previous value: -"Attach an alert destination (id from list_destinations / create_destination) so this alert also delivers there the moment it fires. Pass null to DETACH and go email-only; omit to leave the destination unchanged."New value: +"Attach an alert destination (id from list_destinations; new destinations are added in the Ticker web app under Settings) so this alert also delivers there the moment it fires. Pass null to DETACH and go email-only; omit to leave the destination unchanged."
  8. 1 tool update
    • Changedget_league1 field changed
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "mlb"
        -]New value: +[
        +  "mlb",
        +  "nfl"
        +]
  9. 1 tool update
    • Changedget_event_price_chart2 fields changed
      • changedInput schema / properties / source / description
        Previous value: -"Comparison source: vs | tp | tm | tmr | gt | sg | sh | mlb. Default vs (this tool's classic per-date rollup shape); tm is the primary market, tmr the resale market, and vs, tp, tmr, gt, sg and sh are all resale. Never mix a primary and a resale source into one series. gt, sg and sh quote ALL-IN prices, so they sit above vs and tp on the same seats. mlb is the club box office of an mlb game, a primary market of disclosed face values with their disclosed all-in beside them."New value: +"Comparison source: vs | tp | tm | tmr | gt | sg | sh | mlb | sgp. Default vs (this tool's classic per-date rollup shape); tm is the primary market, tmr the resale market, and vs, tp, tmr, gt, sg and sh are all resale. Never mix a primary and a resale source into one series. gt, sg and sh quote ALL-IN prices, so they sit above vs and tp on the same seats. mlb is the club box office of an mlb game, a primary market of disclosed face values with their disclosed all-in beside them. sgp is the sg primary market, quoted ALL-IN; sg is the sg resale market only."
      • changedInput schema / properties / source / enum
        Previous value: -[
        -  "vs",
        -  "tp",
        -  "tm",
        -  "tmr",
        -  "gt",
        -  "sg",
        -  "sh",
        -  "mlb"
        -]New value: +[
        +  "vs",
        +  "tp",
        +  "tm",
        +  "tmr",
        +  "gt",
        +  "sg",
        +  "sh",
        +  "mlb",
        +  "sgp"
        +]
  10. 1 tool update
    • Changedget_league2 fields changed
      • changedInput schema / properties / view / description
        Previous value: -"Which read: `schedule` (the default), `bracket`, or `game` (needs `event_id`)."New value: +"Which read: `schedule` (the default), `bracket`, `standings`, or `game` (needs `event_id`)."
      • changedInput schema / properties / view / enum
        Previous value: -[
        -  "schedule",
        -  "bracket",
        -  "game"
        -]New value: +[
        +  "schedule",
        +  "bracket",
        +  "standings",
        +  "game"
        +]
  11. 5 tool updates
    • Changedcreate_view1 field changed
      • addedInput schema / properties / digest
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "The View's Digest: each Issue is the View's events with Movers, New and Gone against the previous Issue. Only the fields you pass change. Turning it on past the plan's Digest count is refused with the plan that carries more.",
        +  "properties": {
        +    "columns": {
        +      "description": "Which get-in the Digest page opens on: primary or secondary.",
        +      "enum": [
        +        "primary",
        +        "secondary"
        +      ],
        +      "type": "string"
        +    },
        +    "destination_ids": {
        +      "description": "Destinations (ids from list_destinations) that also receive each Issue. [] clears them.",
        +      "items": {
        +        "format": "uuid",
        +        "type": "string"
        +      },
        +      "maxItems": 50,
        +      "type": "array"
        +    },
        +    "enabled": {
        +      "description": "Turn the Digest on or off.",
        +      "type": "boolean"
        +    },
        +    "extra_columns": {
        +      "description": "Extra columns: absorption adds Absorbed 7d to the Issue page, email and files. [] removes it.",
        +      "items": {
        +        "enum": [
        +          "absorption"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "formats": {
        +      "description": "The files each Issue links: csv, xlsx, pdf, md.",
        +      "items": {
        +        "enum": [
        +          "csv",
        +          "xlsx",
        +          "pdf",
        +          "md"
        +        ],
        +        "type": "string"
        +      },
        +      "minItems": 1,
        +      "type": "array"
        +    },
        +    "hour": {
        +      "description": "The hour (0 to 23) in the account's timezone when the Issue is built.",
        +      "maximum": 23,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "sections": {
        +      "description": "Sections each Issue shows: movers, new, gone (default all three). The rest of the table always shows.",
        +      "items": {
        +        "enum": [
        +          "movers",
        +          "new",
        +          "gone"
        +        ],
        +        "type": "string"
        +      },
        +      "minItems": 1,
        +      "type": "array"
        +    },
        +    "table_columns": {
        +      "description": "Screener columns each Issue's table shows, in order: column names from list_screen_columns (e.g. ea.lowest_aip_price_current). Each must be a column the plan unlocks. [] restores the default table.",
        +      "items": {
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "maxItems": 255,
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedget_issue
    • Addedlist_digests
    • Addedlist_issues
    • Changedupdate_view1 field changed
      • addedInput schema / properties / digest
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "The View's Digest: each Issue is the View's events with Movers, New and Gone against the previous Issue. Only the fields you pass change. Turning it on past the plan's Digest count is refused with the plan that carries more.",
        +  "properties": {
        +    "columns": {
        +      "description": "Which get-in the Digest page opens on: primary or secondary.",
        +      "enum": [
        +        "primary",
        +        "secondary"
        +      ],
        +      "type": "string"
        +    },
        +    "destination_ids": {
        +      "description": "Destinations (ids from list_destinations) that also receive each Issue. [] clears them.",
        +      "items": {
        +        "format": "uuid",
        +        "type": "string"
        +      },
        +      "maxItems": 50,
        +      "type": "array"
        +    },
        +    "enabled": {
        +      "description": "Turn the Digest on or off.",
        +      "type": "boolean"
        +    },
        +    "extra_columns": {
        +      "description": "Extra columns: absorption adds Absorbed 7d to the Issue page, email and files. [] removes it.",
        +      "items": {
        +        "enum": [
        +          "absorption"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "formats": {
        +      "description": "The files each Issue links: csv, xlsx, pdf, md.",
        +      "items": {
        +        "enum": [
        +          "csv",
        +          "xlsx",
        +          "pdf",
        +          "md"
        +        ],
        +        "type": "string"
        +      },
        +      "minItems": 1,
        +      "type": "array"
        +    },
        +    "hour": {
        +      "description": "The hour (0 to 23) in the account's timezone when the Issue is built.",
        +      "maximum": 23,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "sections": {
        +      "description": "Sections each Issue shows: movers, new, gone (default all three). The rest of the table always shows.",
        +      "items": {
        +        "enum": [
        +          "movers",
        +          "new",
        +          "gone"
        +        ],
        +        "type": "string"
        +      },
        +      "minItems": 1,
        +      "type": "array"
        +    },
        +    "table_columns": {
        +      "description": "Screener columns each Issue's table shows, in order: column names from list_screen_columns (e.g. ea.lowest_aip_price_current). Each must be a column the plan unlocks. [] restores the default table.",
        +      "items": {
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "maxItems": 255,
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
  12. 6 tool updates
    • Changedcreate_view2 fields changed
      • changedInput schema / properties / notification_mode / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "instant",
        -      "digest",
        -      "muted"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "instant",
        +      "batched",
        +      "muted",
        +      "digest"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / notification_mode / description
        Previous value: -"Per-alert EMAIL delivery mode: 'instant' (email each match), 'digest' (the Matches wait and go out together in one email, at the pace notification_cadence sets: `hourly` or `daily`), or 'muted' (Matches recorded, never emailed). 'instant' and 'muted' override notification_cadence. Alert destinations are unaffected: they always deliver instantly."New value: +"Per-alert EMAIL delivery mode: 'instant' (email each match), 'batched' (the Matches wait and go out together in one email, at the pace notification_cadence sets: `hourly` or `daily`), or 'muted' (Matches recorded, never emailed). 'instant' and 'muted' override notification_cadence. 'digest' is the old name of 'batched', accepted until 2026-11-30 and stored as 'batched'. Alert destinations are unaffected: they always deliver instantly."
    • Changedget_event_price_chart1 field changed
      • changedInput schema / properties / source / description
        Previous value: -"Comparison source: vs | tp | tm | tmr | gt | sg | sh | mlb. Default vs (this tool's classic per-date rollup shape); tm is the primary inventory book, tmr the resale book, and vs, tp, tmr, gt, sg and sh are all resale. Never mix a primary and a resale book into one series. gt, sg and sh quote ALL-IN prices, so they sit above vs and tp on the same seats. mlb is the club box office of an mlb game, a primary book of disclosed face values with their disclosed all-in beside them."New value: +"Comparison source: vs | tp | tm | tmr | gt | sg | sh | mlb. Default vs (this tool's classic per-date rollup shape); tm is the primary market, tmr the resale market, and vs, tp, tmr, gt, sg and sh are all resale. Never mix a primary and a resale source into one series. gt, sg and sh quote ALL-IN prices, so they sit above vs and tp on the same seats. mlb is the club box office of an mlb game, a primary market of disclosed face values with their disclosed all-in beside them."
    • Changedset_watch_defaults2 fields changed
      • changedInput schema / properties / notification_mode / description
        Previous value: -"How a new watch delivers by default."New value: +"How a new watch delivers by default: `instant`, `batched` or `muted`. 'digest' is the old name of 'batched', accepted until 2026-11-30 and stored as 'batched'."
      • changedInput schema / properties / notification_mode / enum
        Previous value: -[
        -  "instant",
        -  "digest",
        -  "muted"
        -]New value: +[
        +  "instant",
        +  "batched",
        +  "muted",
        +  "digest"
        +]
    • Changedupdate_view2 fields changed
      • changedInput schema / properties / notification_mode / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "instant",
        -      "digest",
        -      "muted"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "instant",
        +      "batched",
        +      "muted",
        +      "digest"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / notification_mode / description
        Previous value: -"Per-alert EMAIL delivery mode: 'instant' (email each match), 'digest' (the Matches wait and go out together in one email, at the pace notification_cadence sets: `hourly` or `daily`), or 'muted' (Matches recorded, never emailed). 'instant' and 'muted' override notification_cadence. Alert destinations are unaffected: they always deliver instantly. Pass null to fall back to the cadence-derived behavior; omit to leave unchanged."New value: +"Per-alert EMAIL delivery mode: 'instant' (email each match), 'batched' (the Matches wait and go out together in one email, at the pace notification_cadence sets: `hourly` or `daily`), or 'muted' (Matches recorded, never emailed). 'instant' and 'muted' override notification_cadence. 'digest' is the old name of 'batched', accepted until 2026-11-30 and stored as 'batched'. Alert destinations are unaffected: they always deliver instantly. Pass null to fall back to the cadence-derived behavior; omit to leave unchanged."
    • Changedupdate_watch2 fields changed
      • addedInput schema / properties / notification_mode / description
        Added value: +"`instant`, `batched` or `muted`. 'digest' is the old name of 'batched', accepted until 2026-11-30 and stored as 'batched'."
      • changedInput schema / properties / notification_mode / enum
        Previous value: -[
        -  "instant",
        -  "digest",
        -  "muted"
        -]New value: +[
        +  "instant",
        +  "batched",
        +  "muted",
        +  "digest"
        +]
    • Changedwatch_event2 fields changed
      • changedInput schema / properties / notification_mode / description
        Previous value: -"`instant` = email each alert as it happens (default); `digest` = the alerts go out together in one email; `muted` = record alerts without sending them."New value: +"`instant` = email each alert as it happens (default); `batched` = the alerts go out together in one email; `muted` = record alerts without sending them. 'digest' is the old name of 'batched', accepted until 2026-11-30 and stored as 'batched'."
      • changedInput schema / properties / notification_mode / enum
        Previous value: -[
        -  "instant",
        -  "digest",
        -  "muted"
        -]New value: +[
        +  "instant",
        +  "batched",
        +  "muted",
        +  "digest"
        +]
  13. 14 tool updates
    • Changedfind_venue1 field changed
      • removedInput schema / properties / limit / maximum
        Removed value: -25
    • Changedget_event_ga_history1 field changed
      • removedInput schema / properties / limit / maximum
        Removed value: -1000
    • Changedget_event_seat_history1 field changed
      • removedInput schema / properties / limit / maximum
        Removed value: -200
    • Changedget_event_seats_live1 field changed
      • removedInput schema / properties / limit / maximum
        Removed value: -5000
    • Changedget_event_seats_recent1 field changed
      • removedInput schema / properties / limit / maximum
        Removed value: -500
    • Changedget_event_sections1 field changed
      • removedInput schema / properties / limit / maximum
        Removed value: -200
    • Changedget_event_sections_live1 field changed
      • removedInput schema / properties / limit / maximum
        Removed value: -650
    • Changedget_league2 fields changed
      • removedInput schema / properties / page_size / maximum
        Removed value: -50
      • changedInput schema / properties / sort_by / description
        Previous value: -"With view `schedule`: `date` (the default, soonest first) or a market column. `sh` and `sg` do not sort; `secondary` sorts by the cheapest resale each game shows (vs, tmr, sh, sg); `resale_to_primary` sorts by the ratio each game shows. A column the plan does not include is refused with a plan_required error."New value: +"With view `schedule`: `date` (the default, soonest first) or a market column. `sh` and `sg` do not sort; `primary` sorts by the primary price each game shows (tm or mlb); `secondary` sorts by the cheapest resale each game shows (vs, tmr, sh, sg); `resale_to_primary` sorts by the ratio each game shows. A column the plan does not include is refused with a plan_required error."
    • Changedget_venue_schedule2 fields changed
      • removedInput schema / properties / days / maximum
        Removed value: -365
      • removedInput schema / properties / limit / maximum
        Removed value: -200
    • Changedlist_matches2 fields changed
      • removedInput schema / properties / limit / maximum
        Removed value: -100
      • changedInput schema / properties / since / description
        Previous value: -"ISO 8601 timestamp; only matches at/after this."New value: +"ISO 8601 timestamp; only matches at/after this. Default: 7 days ago."
    • Changedlist_views1 field changed
      • removedInput schema / properties / limit / maximum
        Removed value: -100
    • Changedlist_watchlist1 field changed
      • removedInput schema / properties / limit / maximum
        Removed value: -100
    • Changedscreen_events1 field changed
      • removedInput schema / properties / limit / maximum
        Removed value: -100
    • Changedsearch_events1 field changed
      • removedInput schema / properties / limit / maximum
        Removed value: -100
  14. 3 tool updates
    • Changedset_watch_defaults1 field changed
      • addedInput schema / properties / triggers / properties / weather
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "enabled": {
        +      "type": "boolean"
        +    },
        +    "params": {
        +      "additionalProperties": {
        +        "type": [
        +          "number",
        +          "string"
        +        ]
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedupdate_watch1 field changed
      • addedInput schema / properties / triggers / properties / weather
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "enabled": {
        +      "type": "boolean"
        +    },
        +    "params": {
        +      "additionalProperties": {
        +        "type": [
        +          "number",
        +          "string"
        +        ]
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedwatch_event1 field changed
      • addedInput schema / properties / triggers / properties / weather
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "enabled": {
        +      "type": "boolean"
        +    },
        +    "params": {
        +      "additionalProperties": {
        +        "type": [
        +          "number",
        +          "string"
        +        ]
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "type": "object"
        +}
  15. 1 tool update
    • Changedget_league1 field changed
      • changedInput schema / properties / sort_by / description
        Previous value: -"With view `schedule`: `date` (the default, soonest first) or a market column. `sh` and `sg` do not sort; `secondary` sorts by the stored resale floors (vs, tmr); `resale_to_primary` sorts by the ratio each game shows. A column the plan does not include is refused with a plan_required error."New value: +"With view `schedule`: `date` (the default, soonest first) or a market column. `sh` and `sg` do not sort; `secondary` sorts by the cheapest resale each game shows (vs, tmr, sh, sg); `resale_to_primary` sorts by the ratio each game shows. A column the plan does not include is refused with a plan_required error."
  16. 1 tool update
    • Changedget_league1 field changed
      • changedInput schema / properties / sort_by / description
        Previous value: -"With view `schedule`: `date` (the default, soonest first) or a market column. `sh` and `sg` do not sort; `secondary` sorts by the stored resale floors (vs, tmr). A column the plan does not include is refused with a plan_required error."New value: +"With view `schedule`: `date` (the default, soonest first) or a market column. `sh` and `sg` do not sort; `secondary` sorts by the stored resale floors (vs, tmr); `resale_to_primary` sorts by the ratio each game shows. A column the plan does not include is refused with a plan_required error."
  17. 1 tool update
    • Changedget_league2 fields changed
      • changedInput schema / properties / sort_by / description
        Previous value: -"With view `schedule`: `date` (the default, soonest first) or a market column. `sh` and `sg` do not sort. A column the plan does not include is refused with a plan_required error."New value: +"With view `schedule`: `date` (the default, soonest first) or a market column. `sh` and `sg` do not sort; `secondary` sorts by the stored resale floors (vs, tmr). A column the plan does not include is refused with a plan_required error."
      • changedInput schema / properties / sort_by / enum
        Previous value: -[
        -  "date",
        -  "primary",
        -  "primary_left",
        -  "vs",
        -  "qty",
        -  "resale_to_primary",
        -  "interest",
        -  "sales"
        -]New value: +[
        +  "date",
        +  "primary",
        +  "primary_left",
        +  "secondary",
        +  "vs",
        +  "qty",
        +  "resale_to_primary",
        +  "interest",
        +  "sales"
        +]
  18. 1 tool update
    • Changedget_event_sections_live2 fields changed
      • changedInput schema / properties / all_in / default
        Previous value: -falseNew value: +true
      • changedInput schema / properties / all_in / description
        Previous value: -"True adds each section's lowest price after fees and whether it is an estimate."New value: +"Adds each section's lowest price after fees and whether it is an estimate. On by default; false returns the list prices alone."
  19. 1 tool update
    • Changedget_league1 field changed
      • changedInput schema / properties / if_necessary / description
        Previous value: -"With schedule_section `postseason`: true also lists the if-necessary games the section folds away."New value: +"With schedule_section `postseason`: the if-necessary games no series is sure to reach are listed by default; false leaves them out."

Publisher details

Operator
Ticker Intelligence Inc. · Publisher source
Operator website
https://findticker.com
Vendor relationship
First-party · Publisher source
Trust center
Not available
Restrictions
A Ticker account is required. Every new account starts with 14 days of Ultra, free. After the trial: Pro, $149 a month, 3,000 MCP requests a month; Max, $399 a month, 30,000 MCP requests a month; Ultra, $699 a month, unlimited. Plans: https://findticker.com/plans · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Deliver real-time investment research with extensive private and public market data.
    3
    85 npm
    147
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables scanning and querying stock market data across thousands of US tickers and top cryptos, with tools for signal analysis, historical replay, and webhook subscriptions.
    35
    30 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Provides live cryptocurrency market data including spot prices, OHLCV candles, order books, funding rates, and technical indicators via public exchange APIs.
    8
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Daily stock screens, RS ratings, market breadth and group rankings for 12 markets. No API keys.
    20
    6
    351
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources