Skip to main content
Glama

biletix-mcp 🇹🇷

mcp-name: io.github.mohammad-abbasi-sh/biletix-mcp

Unofficial read-only MCP server for biletix.com, Türkiye's dominant ticketing platform (Ticketmaster-owned) — concerts, theatre, festivals, sport: featured/trending events, keyword + city search over featured listings, full event details (venue, dates, price from, availability), events by category, venues and per-venue upcoming events.

Built by Mohammad Abbasi as part of the "Turkey MCP factory" (Sepehr-style pipeline). Not affiliated with biletix.com.

For AI agents

Add to your MCP client config (stdio):

{
  "mcpServers": {
    "biletix": {
      "command": "uvx",
      "args": ["biletix-mcp"]
    }
  }
}

Or run locally: python -m biletix_mcp.server (needs mcp<2, curl-cffi).

Related MCP server: Ticketmaster Discovery MCP Server

Tools

Tool

Description

biletix_trending

Featured events — section: "browse" ("Etkinliklere Göz Atın", 43 events), "starting_soon" ("24 Saat İçinde Başlayacaklar", 50 events), "all" (92 distinct events); limit 1..50

biletix_search_events

Keyword search over the homepage's featured events — query ("Simge", "caz"), optional city ("istanbul", "ankara"); limit 1..50

biletix_get_event

Full detail for one event — event_url (as returned by the trending/search tools); returns name, description, start/end, status, venue (+ city, geo, venue-page URL), price from in TRY, availability, image

biletix_list_by_category

Featured events in one category — category: the URL-slug prefix, e.g. "music"; also returns the categories present on the homepage today

biletix_list_venues

Distinct venues behind the featured events, with city and featured-event count; limit 1..50

biletix_venue_events

Upcoming events at one venue — venue_url (from biletix_get_event's venue_url field); limit 1..50

Example output (biletix_get_event / AURA, 16 Nov 2026, Bostancı Gösteri Merkezi):

{"name": "AURA", "start": "2026-11-16T20:00:00+03:00",
 "venue": "Bostancı Gösteri Merkezi", "city": "İstanbul",
 "latitude": 40.9569, "longitude": 29.1018,
 "price_from_try": 1680.0, "price_currency": "TRY",
 "availability": "LimitedAvailability",
 "venue_url": "https://www.biletix.com/mekan/340BG/TURKIYE/tr/bostanci-gosteri-merkezi-istanbul"}

How it works

biletix.com serves its homepage (/anasayfa/TURKIYE/tr), event detail pages (/etkinlik/<code>/TURKIYE/tr/<slug>), event-group pages (/etkinlik-grup/<id>/...) and venue pages (/mekan/<code>/...) fully server-rendered — no login, no API key, no session cookies. The bare homepage (/) is only a 1.1KB JS redirector shell (redirector.js → /anasayfa/TURKIYE/tr). Two homepage sections are SSR: "Etkinliklere Göz Atın" (43 cards) and "24 Saat İçinde Başlayacaklar" (50 cards); "Popüler Etkinlikler" and "Biletix'te Yeni Satışta" render client-side only. Event cards carry schema.org microdata (title, start/end, venue + city, price from in TRY, category + date + city in the slug, e.g. music-aura-16-11-2026-istanbul); group/tour cards (/etkinlik-grup/..., venue "Çeşitli Mekanlar") use the same markup. Detail pages carry a full Event JSON-LD block (description, venue with address + geo, offers price/availability). Prices are Turkish format in the display text ("1.995₺" → 1995.0, "3.171,25₺" → 3171.25). The /search and /category pages are Angular shells and the /api/v1/searchquery/searchSuggestion endpoint 302s to a 404 page for direct calls, so keyword search is scoped to the homepage's featured listings (92 distinct events at build time). Queue-it waiting-room scripts load on the search page but do not gate the SSR fetches. Transport uses Chrome TLS impersonation (curl-cffi, chrome120); requests are spaced ~0.8s apart; everything is read-only.

Install

uvx biletix-mcp        # run directly (needs uv)
# or
pip install biletix-mcp
biletix-mcp    # starts the MCP server on stdio

Tests

python -m venv .venv && .venv/bin/pip install -e .
.venv/bin/python -m unittest discover -s tests -v

Offline tests run on recorded fixtures (real pages fetched 2026-11-07); live tests hit biletix.com. 24/24 green at build time (15 offline + 9 live) plus an MCP stdio smoke test.

Roadmap

  • Full-catalogue search (needs the site's client-side search API or a sitemap of event URLs)

  • Ticket categories / seat-plan prices per event (currently only "from" price)

  • Artist pages (/etkinlik-grup/... already lists tour dates; a dedicated tool could add them)

License

MIT — see LICENSE.

Available Tools

6 tools
biletix_get_eventA

Full detail for one event. event_url: the event's biletix.com URL (as returned by the trending/search tools, e.g. "https://www.biletix.com/etkinlik/5BG07/TURKIYE/tr/music-aura-16-11-2026-istanbul"). Returns name, description, start/end, status, venue (+ city, geo coordinates, venue-page URL), price from in TRY, availability and image.

NameRequiredDescriptionDefault
event_urlYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are supplied, so the description must carry the behavioral burden, and it does disclose the read-only shape of the response (name, dates, status, venue with geo, TRY price, availability, image). It does not state what happens with a malformed or stale event_url, whether any authentication is required, or rate limits — gaps that matter for a web-scraping retrieval 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?

The purpose is front-loaded in one short sentence, followed by parameter guidance and the return fields with no filler. The long parenthetical with the example URL makes the sentence slightly tangled, but every element 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 one-parameter lookup, the definition covers purpose, input format and provenance of the input. The return-field list is largely redundant given an output schema exists, and error behavior for invalid URLs is unaddressed, but nothing essential to calling the tool correctly is missing.

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 0% and the single parameter is undocumented in the schema, but the description fully compensates: it states the parameter is the event's biletix.com URL, quotes a complete example format, and specifies where to obtain it. An agent can construct a valid call from the description alone.

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 opening sentence "Full detail for one event" names a single resource and implies a retrieval verb, so an agent can tell this apart from the sibling list/search/trending tools. What it lacks is an explicit contrast clause naming those siblings as the aggregators that feed this detail call.

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?

The parameter note "as returned by the trending/search tools" establishes the intended workflow: obtain an event_url from a discovery tool, then call this one for detail. There is no explicit when-not guidance (e.g. don't call this for browsing), but the context is clear enough to route correctly.

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

biletix_list_by_categoryA

Featured events in one category, from the homepage's SSR listings. category: the URL-slug prefix, e.g. "music" (concerts). limit 1..50. Returns events in that category plus the list of categories present on the homepage today (when the homepage is music-heavy, other categories may be empty — the site renders non-music categories client-side).

NameRequiredDescriptionDefault
limitNo
categoryYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations at all, the description carries the full load and does disclose non-obvious behavior: results come from server-side-rendered homepage listings, and the site renders non-music categories client-side, so other categories may legitimately return empty. That empty-result caveat is exactly the kind of thing an agent would otherwise misinterpret as an error. It does not cover rate limits, auth, or pagination, keeping it below 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.

Conciseness4/5

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

The purpose is front-loaded in the first clause, followed by parameter hints and then the rendering caveat, so the important information arrives early. It is compact with no filler, though the parenthetical caveat is dense and could be split for easier scanning.

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?

An output schema exists, so return values need only be sketched, and the description still notes that it returns both the events and the homepage's present categories. Combined with the parameter semantics and the SSR/client-side caveat, an agent has enough to call and interpret this tool; only explicit sibling routing 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 description coverage is 0%, so the description must compensate, and it does for both parameters: category is explained as the URL-slug prefix with a concrete example ("music" for concerts), and limit is bounded to 1..50. It omits the default value of 10 present in the schema, which is a minor gap rather than a serious one.

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 a specific verb and resource ("Featured events in one category") and pins the data source ("homepage's SSR listings"), which meaningfully separates it from search/trending siblings. It stops short of naming an alternative tool explicitly, so an agent still has to infer the boundary against biletix_trending and biletix_search_events.

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 gives operational context (category is a URL-slug prefix, limit is 1..50) and a usage-relevant caveat that non-music categories may render empty, which helps an agent interpret results. However, there is no explicit when-to-use/when-not guidance relative to the five sibling tools, so selection is only implied by the 'featured/homepage' framing.

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

biletix_list_venuesA

Venues behind the homepage's featured events: distinct venue names with city and featured-event count. limit 1..50. Use biletix_get_event to get a venue's page URL, then biletix_venue_events for its upcoming events.

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden and discloses the critical behavioral fact that results are limited to venues tied to featured homepage events, not a full venue directory. It also names the returned fields and the 1..50 bound, though it says nothing about ordering, pagination beyond limit, or empty-result 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?

Three short sentences, front-loaded with scope, then the numeric bound, then the chaining advice; no filler. The colon-led first clause is slightly clipped but still readable.

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?

An output schema exists, so return values need not be spelled out, and the description still names the key fields for orientation. For a one-parameter, read-only listing tool with no annotations, the combination of scope, bounds and chaining covers what an agent needs, with only ordering and pagination left 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?

Schema coverage is 0% and the single 'limit' parameter has no description or bounds in the schema, so the description's 'limit 1..50' supplies meaning the schema does not. It does not state what the default of 20 means or what happens when more venues exist than the limit, leaving a small 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?

The first sentence gives a specific verb (list), resource (venues) and a precise scope: venues behind the homepage's featured events, returning distinct venue names with city and featured-event count. That scope constraint is exactly what separates it from biletix_venue_events and biletix_get_event, so an agent can pick it without inspecting 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 Guidelines4/5

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

It explicitly routes downstream work: use biletix_get_event for a venue's page URL, then biletix_venue_events for upcoming events, which defines this tool's place in a chain. It offers no exclusions against biletix_trending, biletix_search_events or biletix_list_by_category, so the alternative-selection guidance is incomplete rather than exhaustive.

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

biletix_search_eventsA

Keyword search over biletix.com's currently featured events (the homepage's SSR listings — concerts, theatre, festivals, sport). query: e.g. "Simge", "Dolu Kadehi Ters Tut", "caz"; city: e.g. "istanbul", "ankara", "izmir" (matches the event's city). limit 1..50. Returns matching events (title, start/end, date text, venue, city, price from in TRY, category, event URL). Note: this searches featured listings only, not the full catalogue — the site's own search page renders client-side.

NameRequiredDescriptionDefault
cityNo
limitNo
queryYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations exist, so the description carries the full burden and largely meets it: it discloses the data source (SSR homepage listings), the hard limitation (featured only, not the catalogue), the limit range 1..50, and the returned fields including TRY pricing. It omits anything about request cost, rate limiting, or whether results are ordered — minor gaps for a read-only search.

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?

Purpose is front-loaded in the first clause, then parameters, then return shape, then the caveat — a clean descending-priority structure. Every sentence is load-bearing, including the closing note about the client-side search page.

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 three-parameter search with an output schema, the description covers source, scope, parameters, return fields and the key caveat, so an agent can call it correctly. It does not say what happens when limit truncates a larger result set, nor whether results are ranked, which is the remaining uncertainty.

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 0%, so the description must supply all meaning and does: query is exemplified with real artist/genre strings, city is exemplified with three cities and tied to the event's own city field, and limit is bounded to 1..50 (the schema itself imposes no such bound). It does not clarify city matching case sensitivity or partial matching, keeping it below 5.

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 ('keyword search over biletix.com's currently featured events') and immediately bounds the scope to the homepage SSR listings across concerts, theatre, festivals and sport. That scope statement is enough to separate it from biletix_trending, biletix_list_by_category and biletix_get_event 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 Guidelines4/5

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

Gives concrete query and city examples plus an explicit when-not clause: 'this searches featured listings only, not the full catalogue — the site's own search page renders client-side.' It never names a sibling as the alternative, so the agent must infer the fallback, which keeps it 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.

biletix_venue_eventsA

Upcoming events at one venue. venue_url: the venue's biletix.com page URL (as returned by biletix_get_event's venue_url field, e.g. "https://www.biletix.com/mekan/340BG/TURKIYE/tr/bostanci-gosteri-merkezi-istanbul"). limit 1..50. Returns the venue name + its events (title, start/end, date text, price from in TRY, event URL).

NameRequiredDescriptionDefault
limitNo
venue_urlYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full load; it does disclose that results are limited to upcoming events and the limit bound of 1..50, and it names the returned fields. It says nothing about pagination, ordering, error behavior for a malformed venue_url, or rate limits, which matter for a scraping-style endpoint.

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?

Front-loads the purpose in the first sentence, then attaches the parameter detail directly to the parameter name, and closes with the return shape. No redundant or filler wording.

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?

An output schema exists, so return values need not be spelled out, and the description nonetheless summarizes them. Combined with the concrete venue_url example and limit range, it covers what an agent needs, with only ordering/pagination left implicit.

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 0%, so the description must compensate for both parameters. It does well on venue_url by giving a concrete example format, and it states the 1..50 bound on limit, but neither is documented as an accepted alternate form (e.g. bare slug) and the semantics of what counts toward the limit are unstated.

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 a specific verb and resource ('Upcoming events at one venue'), which is clearly narrower than biletix_search_events and distinct from biletix_list_venues and biletix_get_event. The scope is unambiguous, though it never explicitly contrasts itself with the closest 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?

Provides real routing guidance by specifying that venue_url comes from biletix_get_event's venue_url field, which tells the agent how to chain the tools. It gives no when-not guidance (e.g. use search_events when the venue is unknown), leaving that to inference.

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. 6 tool updatesv0.1.0
    • First observedbiletix_get_event
    • First observedbiletix_list_by_category
    • First observedbiletix_list_venues
    • First observedbiletix_search_events
    • First observedbiletix_trending
    • First observedbiletix_venue_events

TDQS

A3.9/5.0

Scored across 6 tools

Disambiguation4/5

trending, search_events, and list_by_category all return featured events, which creates some overlap, but each has a distinct filter axis (featured/starting-soon, keyword+city, category). get_event, list_venues, and venue_events are clearly distinct and the descriptions explicitly explain their boundaries.

Naming Consistency4/5

All tools share the biletix_ prefix and snake_case, with verb_noun or verb_resource patterns (search_events, get_event, list_venues, list_by_category). Minor deviations: 'biletix_trending' uses a bare adjective and 'venue_events' drops the verb, but overall predictable.

Tool Count5/5

Six tools is a well-scoped set for a read-only event discovery server, with each tool earning its place (featured browsing, search, detail, category, venue lookup, venue events). Nothing feels redundant or padded.

Completeness3/5

The browsing lifecycle is mostly covered (list → search → detail → venue drill-down), but search only covers featured SSR listings, not the full catalogue, and there are no date-range or artist-specific filters. Agents wanting non-featured events hit a dead end the descriptions acknowledge.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    Enables discovery and search of Ticketmaster events, venues, and attractions with advanced filtering options including date ranges, location-based search, and event classifications through the Ticketmaster Partner API.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables browsing live event, venue, and lineup listings city by city, with optional category filtering for gigs, club nights, comedy, theatre, and talks. Also returns full detail for any single event, including dates, venue and address, on-sale window, starting price, billed artists, and highlights such as age restrictions.
    388 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables read-only access to B2match event and matchmaking data through tools for events, participants, organisations, opportunities, agenda, sessions, speakers, and authenticated meeting, schedule, conversation, and notification workflows. Supports anonymous public queries and secure local token-based access.
    2
    22
    92 npm
    MIT