TicketsData
Real-time ticket listings, prices and fees across major ticket marketplaces.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"ticketsdata-mcp": {
"url": "https://mcp.ticketsdata.com/mcp"
}
}
}Remote endpoints
https://mcp.ticketsdata.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (5)
🟢list_marketplaces
List the marketplaces TicketsData supports, the URL or ID format each one expects, which ones support event discovery and cross-market comparison, and valid mode values. Free: uses no credits. Call this first when unsure how to format an input.
Input Schema
{
"type": "object",
"properties": {},
"title": "list_marketplacesArguments"
}🟢get_event_listings(platform, event_url, mode)
Fetch live ticket listings for ONE event on ONE marketplace: section, row, quantity, price and fees. Real time, not cached. Costs 1 API credit per call. Returns the complete TicketsData API response, unchanged: always as a link to a JSON file, and also inline (whole when small, otherwise the first part of the listings in the API's order). The body structure differs per marketplace. Primary platforms (ticketmaster, dice, eventbrite, axs) return face-value offers and ticket tiers rather than resale listings. axs needs a Pro plan or above. The result also says where the listings sit and what the price fields mean for that marketplace.
Input Schema
{
"type": "object",
"properties": {
"platform": {
"description": "Marketplace id: ticketmaster, stubhub, seatgeek, vividseats, gametime, tickpick, viagogo, dice, eventbrite, axs.",
"title": "Platform",
"type": "string"
},
"event_url": {
"description": "Full event URL on that marketplace. ticketmaster, gametime and dice also accept a bare event ID.",
"title": "Event Url",
"type": "string"
},
"mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional. gametime: 'all' (quantities 1 to 10) or 'qty=N'. ticketmaster: 'availability', 'pricing' or 'quickpicks'. Omit for other platforms.",
"title": "Mode"
}
},
"required": [
"platform",
"event_url"
],
"title": "get_event_listingsArguments"
}🟢find_events(platform, performer_url, venue_url)
List upcoming events for a performer, artist, team, organizer or venue page on one marketplace. Use it to discover event URLs, then pass one to get_event_listings or compare_marketplaces. Real time, costs 1 API credit. Returns the complete TicketsData API response, unchanged: always as a link to a JSON file, and also inline when it is small enough. Pass performer_url for most platforms. venue_url is for dice only (dice.fm/venue/... and dice.fm/promoters/... pages). For eventbrite pass the organizer page URL as performer_url. viagogo and axs are not supported here.
Input Schema
{
"type": "object",
"properties": {
"platform": {
"description": "Marketplace id: ticketmaster, stubhub, seatgeek, vividseats, gametime, tickpick, dice, eventbrite.",
"title": "Platform",
"type": "string"
},
"performer_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Performer, artist, team or organizer page URL on that marketplace.",
"title": "Performer Url"
},
"venue_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "dice only: venue or promoter page URL.",
"title": "Venue Url"
}
},
"required": [
"platform"
],
"title": "find_eventsArguments"
}🟢compare_marketplaces(event_url)
Cross-market report for ONE event. Give any marketplace's event URL: TicketsData finds the same event on the other marketplaces, fetches all of them live, and returns matched URLs, normalized listings per marketplace, per-market price and fee summaries, the cheapest all-in entry point and per-section price spreads between marketplaces. Returns the complete TicketsData API response, unchanged: always as a link to a JSON file, and also inline (the report's analytics in full, listings cut to the first part when large). The report also contains each matched marketplace's own full listings response, so there is no need to call get_event_listings for those marketplaces afterwards. EXPENSIVE: costs 1 report plus up to 12 API credits and takes 20 to 60 seconds. Needs a Pro plan or above. Only one can run at a time per account. Use get_event_listings instead when the user asks about a single marketplace.
Input Schema
{
"type": "object",
"properties": {
"event_url": {
"description": "Full event URL from ticketmaster, stubhub, seatgeek, vividseats, gametime, tickpick or viagogo.",
"title": "Event Url",
"type": "string"
}
},
"required": [
"event_url"
],
"title": "compare_marketplacesArguments"
}🟢analyze_listings(file, where, tickets, sort_by, descending, ...)
Work on the COMPLETE response of an earlier get_event_listings, compare_marketplaces or find_events call, including items too many to show inline. Pass the file link from that result. Free: spends no credits and makes no new fetch. Works for 15 minutes after the fetch, only for the account that made it. For marketplace listings it uses one standard row per listing with the same field names on every marketplace: section, row, quantity (tickets available), splits (quantities you can buy), price (per ticket before fees), fees, price_total (all-in per ticket), face_value, currency, notes, area, ticket_type, inventory_type, deal_score, delivery, is_parking, listing_id, marketplace. Any other field name is read from the original listing (prefix 'raw.' to force that). compare_marketplaces results merge every marketplace's listings into one list with a marketplace field. Filter with conditions (AND) and tickets, sort, pick fields, get min/median/max of a numeric field, and count or price items per group (per section, per marketplace, per row). Every reply includes an overview of all matches: count, tickets, price range and the cheapest listing.
Input Schema
{
"type": "object",
"properties": {
"file": {
"description": "The file link from an earlier result (https://mcp.ticketsdata.com/mcp?file=...) or just its token.",
"title": "File",
"type": "string"
},
"where": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/Condition"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Conditions every returned item must meet, combined with AND. Example: [{\"field\":\"price_total\",\"op\":\"<=\",\"value\":300},{\"field\":\"section\",\"op\":\"in\",\"value\":[\"101\",\"102\"]}].",
"title": "Where"
},
"tickets": {
"anyOf": [
{
"maximum": 100,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Keep only listings where exactly this many tickets can be bought together (uses splits, or quantity when the marketplace gives no splits).",
"title": "Tickets"
},
"sort_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Field to sort matches by, e.g. 'price_total'. Numbers (including prices written as text) sort numerically. Items without the field go last.",
"title": "Sort By"
},
"descending": {
"default": false,
"description": "Sort from highest to lowest.",
"title": "Descending",
"type": "boolean"
},
"fields": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Return only these fields of each item. Omit to return the standard rows (or raw items when there is no standard view).",
"title": "Fields"
},
"stats_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Numeric field to summarise over ALL matches: min, p25, median, p75, max, mean. Also adds min, median and max to each group.",
"title": "Stats Field"
},
"group_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Field to group matches by, e.g. 'section' or 'marketplace'. Returns count per group (and prices with stats_field), cheapest group first.",
"title": "Group By"
},
"limit": {
"default": 50,
"description": "How many matching items to return (0 for summary only). Default 50.",
"maximum": 500,
"minimum": 0,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"description": "Skip this many matching items, for paging.",
"minimum": 0,
"title": "Offset",
"type": "integer"
},
"include_raw": {
"default": false,
"description": "Add the original listing under 'raw' to each standard row.",
"title": "Include Raw",
"type": "boolean"
},
"list_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Dotted path of a list in the raw response to analyze instead, e.g. 'body.events'. Turns off the standard view.",
"title": "List Path"
}
},
"required": [
"file"
],
"$defs": {
"Condition": {
"properties": {
"field": {
"description": "Item field exactly as it appears in the result, dotted for nested values, e.g. 'rawPrice' or 'price.amount'.",
"title": "Field",
"type": "string"
},
"op": {
"default": "=",
"description": "Comparison. Number ops also read prices given as text like \"$225.00\". '=' on a list field (e.g. available quantities) matches when any element equals the value.",
"enum": [
"=",
"!=",
"<",
"<=",
">",
">=",
"contains",
"not_contains",
"in",
"not_in",
"exists",
"missing"
],
"title": "Op",
"type": "string"
},
"value": {
"default": null,
"description": "Value to compare with. A list for 'in' and 'not_in'. Not needed for 'exists' and 'missing'.",
"title": "Value"
}
},
"required": [
"field"
],
"title": "Condition",
"type": "object"
}
},
"title": "analyze_listingsArguments"
}Community
Evidence