Skip to main content
Glama

tickets.dev AI: ask for the cheapest 2 seats for the Eagles at Sphere, get the same seats priced on TickPick, SeatGeek, Vivid Seats and Gametime

Tickets.dev AI

This repo is the home for using Tickets.dev with AI agents. Tickets.dev returns live ticket listings, all-in prices and seat maps from Ticketmaster, StubHub, SeatGeek, Vivid Seats, TickPick, Gametime, Viagogo and more, in one schema.

Tickets.dev is a standard HTTP API, so any agent that can make web requests can use it. This repo adds an agent skill, plugins for popular agent tools, and an MCP server.

What you can ask

I have 2 seats in section 110, row 36 for the Eagles at Sphere. What are the same and nearby seats listed for on each marketplace?

Show the seat map for this StubHub event with the cheapest all-in price in each section.

How many tickets are listed for each Sphere show next month, and what's the get-in price?

Write a script that saves the listed tickets and get-in price for these events every morning.

Related MCP server: mcp-web-search

Use the API with any agent

Give your agent the OpenAPI spec, the agent docs and your API key. Get a key at tickets.dev and send it in the x-api-key header.

Most tasks take two calls. Find the event, then capture one marketplace page:

curl "https://api.tickets.dev/v1/events?query=eagles%20sphere" \
  -H "x-api-key: $TICKETS_DEV_KEY"

curl -G "https://api.tickets.dev/v1/capture" \
  --data-urlencode "url=https://www.ticketmaster.com/eagles-live-at-sphere-las-vegas-nevada-12-11-2026/event/17006483D6FAFC60" \
  -H "x-api-key: $TICKETS_DEV_KEY"

Agent skill

The tickets-dev skill covers the details of ticket data that agents tend to get wrong, such as all-in prices, sellable quantities, and why a listing that disappears isn't proof of a sale. It's plain Markdown, so you can add it to any agent's instructions.

Plugins

If you use one of these agent tools, we recommend installing the Tickets.dev plugin. It includes the skill and tools your agent can call directly.

Claude Code

Run these commands in Claude Code:

/plugin marketplace add Tickets-dot-dev/ai
/plugin install tickets-dev@tickets-dev

Codex

Run this command:

codex plugin marketplace add Tickets-dot-dev/ai

Then restart Codex and install Tickets.dev from the Plugins directory.

Cursor

Install the plugin from cursor.directory, or use the MCP server.

Gemini CLI

Run this command:

gemini extensions install https://github.com/Tickets-dot-dev/ai

Grok Build

The plugin is coming to the Grok Build marketplace. Until then, use the MCP server.

MCP server

Any MCP client can run the tools directly. Add this to your client's MCP configuration, for example .cursor/mcp.json or Claude Desktop's claude_desktop_config.json:

{
  "mcpServers": {
    "tickets-dev": {
      "command": "npx",
      "args": ["-y", "tickets-dev-mcp"],
      "env": { "TICKETS_DEV_KEY": "tk_live_..." }
    }
  }
}

Tool

What it does

find_events

Finds upcoming events and their URL on every marketplace. Free.

get_listings

Returns every listing on one event page, with all-in prices.

compare_prices

Ranks one event's listings across marketplaces by all-in price.

get_seat_map

Returns the section and seat maps, the cheapest price per section and, where the map gives it, venue capacity.

list_marketplaces

Lists supported marketplaces. Free.

The tools only read data. They can't buy, hold or list tickets.

API key

The plugins and the MCP server read your key from the TICKETS_DEV_KEY environment variable:

export TICKETS_DEV_KEY=tk_live_...

Restart your agent after setting it. Don't paste your key into a chat. If the key is missing, the agent tells you how to add it.

Each capture of one event on one marketplace is billed. To limit spending, set TICKETS_DEV_MAX_CAPTURES (default 25 per session). See pricing.

More from Tickets.dev

Development

npm install
node --test                                  # offline tests
TICKETS_DEV_E2E_KEY=<your key> node --test   # end-to-end tests (uses a few captures)

License

MIT. Not affiliated with any ticket marketplace.

Available Tools

5 tools
compare_pricesCompare prices across marketplacesA
Read-only

Find one event, capture it on each marketplace, and rank the cheapest tickets for a quantity by all-in price (fees included). Each marketplace captured is one billed Tickets.dev capture. Captures up to max_marketplaces (default 7).

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoRows to return, default 10
eventYesEvent name or any marketplace event URL
quantityNoTickets wanted, default 2
max_marketplacesNoMost marketplaces to capture, default 7

TDQS

A3.9/5.0
Behavior4/5

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

Goes well beyond the readOnly/openWorld annotations by disclosing the non-obvious cost model: each marketplace captured is a separate billed capture, bounded by max_marketplaces. It still doesn't say what happens when an event isn't found on a marketplace or whether partial results are returned, so it's strong but not complete.

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, front-loaded with the core action, then cost, then the cap. The final sentence largely duplicates the schema's max_marketplaces default, which costs it a point.

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 necessary work of explaining the return shape (cheapest tickets ranked by all-in price for a quantity). Only failure modes and the exact cost per capture remain unstated.

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 event/quantity/top/max_marketplaces are already documented. The description repeats the max_marketplaces default (already in schema) and adds no format guidance for the event parameter, so it earns baseline only.

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 multi-step action: resolve one event, capture it on every marketplace, rank results by all-in price for a given quantity. It names the ranking criterion (fees included), which is the distinguishing value versus single-marketplace siblings like get_listings or get_seat_map.

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?

The description implies its niche (cross-marketplace price comparison for a ticket quantity) but never explicitly says when to prefer it over get_listings or find_events, nor when not to use it. An agent must infer the routing from context rather than being told.

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

find_eventsFind eventsA
Read-only

Find upcoming events by name, performer, venue or any marketplace event URL, with the same event's URL on every marketplace that lists it (Ticketmaster, StubHub, SeatGeek, Vivid Seats, TickPick, Gametime, Viagogo and more). Never billed.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLatest date, ISO 8601
fromNoEarliest date, ISO 8601
queryYese.g. "eagles sphere" or a stubhub.com event URL

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover read-only and open-world behavior, so the bar is lower, and the description adds real value: results include each event's URL across eight named marketplaces, and 'Never billed' signals no cost to the caller. It stops short of describing pagination or how many results are returned.

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 sentence, front-loaded with the verb and lookup keys, with the marketplace list placed in a parenthetical rather than leading. The trailing 'Never billed' is a slight non sequitur but is short and useful.

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 return-shape duty and does so by explaining that results pair each event with its URLs on multiple marketplaces. The main gap is how the from/to date filters interact with 'upcoming' and what the result set ordering is.

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, but the description extends the meaning of `query` beyond the schema's examples by stating it accepts performer names, venue names, and any marketplace event URL (not just StubHub). The from/to window is only loosely implied by 'upcoming'.

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 (find) and resource (upcoming events), plus the accepted lookup keys (name, performer, venue, marketplace URL) and the distinctive cross-marketplace URL aggregation. This clearly separates it from get_listings and compare_prices, which operate on an already-identified event.

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?

The description implies this is the discovery entry point before get_listings/compare_prices/get_seat_map, but it never names those siblings or states when not to use it. An agent can infer the workflow, but nothing explicit routes it.

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

get_listingsGet live listingsA
Read-only

Every listing on one marketplace event page right now: section, row, seats, quantities it can sell, face price, fee and all-in price per ticket, cheapest first. Each marketplace captured is one billed Tickets.dev capture. A listing that disappears later may have sold, been delisted or been repriced; it is not proof of a sale.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoHow many to return, default 20
urlYesOne marketplace event page URL (from find_events or the user)
quantityNoOnly listings that can sell exactly this many
max_priceNoOnly listings at or below this all-in price per ticket

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds genuinely useful behavioral context beyond the annotations: each marketplace capture is billed, and a listing disappearing is not proof of a sale, which prevents an important misinterpretation.

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 description is front-loaded with the core purpose and uses three efficient sentences with no filler. Every sentence adds value: what is returned, the billing implication, and the sold/delisted/repriced caveat.

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 read-only listing tool with full schema coverage and no output schema, the description is nearly complete: it enumerates the returned fields, ordering, billing implication, and interpretation caveat. It would be stronger if it explicitly positioned itself against compare_prices and get_seat_map, but the essential call context is present.

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 already documented in the input schema. The description adds useful output/ordering context such as all-in price per ticket and cheapest first, but it does not add parameter-specific meaning beyond the schema, so the baseline of 3 is appropriate.

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 clearly states the verb and resource: it returns every live listing on one marketplace event page, with concrete fields like section, row, seats, prices, and ordering. This is easy to distinguish from list_marketplaces, but it does not explicitly contrast itself with compare_prices or get_seat_map, so it falls short of full sibling differentiation.

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?

Usage is implied by the scope: one event page URL, live listings, cheapest first. The schema mentions that the URL comes from find_events or the user, but the description itself gives no explicit when-to-use guidance, exclusions, or alternatives such as compare_prices or get_seat_map.

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

get_seat_mapGet seat mapA
Read-only

The marketplace's own section and seat maps (SVG URLs) for an event, the cheapest all-in price per section, and the venue map's seat capacity where the marketplace gives one. Each marketplace captured is one billed Tickets.dev capture.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesOne marketplace event page URL

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the readOnlyHint/openWorldHint annotations, it discloses a genuine operational trait: each marketplace captured is one billed Tickets.dev capture, which matters for cost-aware invocation. It also flags that capacity is only present 'where the marketplace gives one', warning of partial data. No detail on failure modes for unsupported marketplaces.

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 compact sentences: the first front-loads exactly what is returned, the second carries the billing caveat. No filler, and the cost note is separated so it is easy to scan.

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 the return fields (SVG URLs, per-section all-in price, capacity). What it still leaves open is response shape — whether results are grouped per marketplace or per section, and whether sections without maps are omitted.

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% for the single 'url' parameter with its own description ('One marketplace event page URL'). The description adds nothing beyond that — no note on URL format variations or what happens if the URL is not an event page — so the baseline 3 applies.

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 names the concrete resource set: per-section seat maps as SVG URLs, cheapest all-in price per section, and venue seat capacity for an event. It is distinguishable from siblings like get_listings and compare_prices by its map/geometry focus, though it never explicitly contrasts itself with them.

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?

Usage is only implied — an agent infers it is for when seat-map visuals or per-section pricing are needed. No when-not-to-use condition and no pointer to compare_prices or get_listings as alternatives for pricing-only questions.

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

list_marketplacesList marketplacesA
Read-only

The marketplaces Tickets.dev can capture and the hosts that route to each. Never billed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 and openWorldHint=true, so the safety profile is largely covered. The description adds one genuine behavioral trait not in annotations — 'Never billed' — but the phrase is cryptic (does it mean accessing this list is free, or that these marketplaces never incur capture charges?). It says nothing about return format or stability of the list.

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 short, front-loaded fragments with no filler. The trailing 'Never billed.' is terse to the point of ambiguity, which slightly undercuts clarity, 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?

With no parameters and no output schema, the description carries the burden of describing what comes back, and it does so only loosely ('marketplaces ... and the hosts that route to each'). The ambiguous pricing remark leaves an agent unsure what 'billed' refers to. Adequate but with clear gaps for a reference-data tool.

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 of 4 applies; the description need not explain any inputs and correctly does not.

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?

States the resource clearly: marketplaces and the hosts that route to each, with the qualifier that these are the ones Tickets.dev can capture. That is a specific and understandable scope. No sibling (find_events, get_listings, compare_prices, get_seat_map) is similar enough to need an explicit distinction, though naming it as a discovery/reference lookup would sharpen 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?

Usage is only implied — an agent is expected to infer that this is a static reference lookup to run when it needs the supported marketplace/host universe. There is no explicit 'use when' statement, no mention of when not to call it, and no routing to alternates (though no real alternate exists for this resource).

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. 5 tool updatesv0.1.0
    • First observedcompare_prices
    • First observedfind_events
    • First observedget_listings
    • First observedget_seat_map
    • First observedlist_marketplaces

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation4/5

The primary overlap is between get_listings and compare_prices/ get_seat_map, since all three capture marketplace data; however, the descriptions make the boundary fairly clear (single marketplace event page vs. multi-marketplace ranking vs. seat maps). find_events and list_marketplaces are cleanly distinct discovery tools.

Naming Consistency5/5

All five tools follow a consistent snake_case verb_noun pattern: find_events, get_listings, compare_prices, get_seat_map, list_marketplaces. Verbs are used appropriately to signal the operation type.

Tool Count5/5

Five tools is a well-scoped surface for a ticket price comparison service: two free discovery tools, three billed capture tools. Each tool earns its place with no obvious redundancy.

Completeness4/5

The core workflow (find event, compare prices, inspect listings and seat maps) is fully covered. Minor gaps exist—no dedicated event-detail tool or historical price lookup—but agents can work around these via find_events and fresh captures.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Safe, read-only market data for AI trading agents, offering 44 tools to query prediction markets, perpetuals, and cross-venue signals without the ability to execute trades.
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides protocol-neutral market intelligence for the AI agent economy, with read-only tools to search agents, retrieve details and histories, compare agents, list categories, view category rankings, and access methodology.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to discover and query public web data across web search, YouTube, Reddit, TikTok, Instagram, LinkedIn, maps, shopping, jobs, real estate, and finance through three tools for finding endpoints, inspecting their inputs and costs, and executing calls that return markdown or JSON.
    287 npm
    MIT