biletix-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@biletix-mcpWhat concerts are trending on Biletix right now?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 |
| Featured events — |
| Keyword search over the homepage's featured events — |
| Full detail for one event — |
| Featured events in one category — |
| Distinct venues behind the featured events, with city and featured-event count; |
| Upcoming events at one venue — |
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 stdioTests
python -m venv .venv && .venv/bin/pip install -e .
.venv/bin/python -m unittest discover -s tests -vOffline 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 toolsbiletix_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.
| Name | Required | Description | Default |
|---|---|---|---|
| event_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| category | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | ||
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_trendingA
Trending/featured events on biletix.com. section: "browse" ("Etkinliklere Göz Atın", featured events), "starting_soon" ("24 Saat İçinde Başlayacaklar", starting within 24h), or "all" (every featured event on the homepage). limit 1..50. Returns events (title, start/end, date text, venue, city, price from in TRY, category, event URL; group/tour cards flagged is_group).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| section | No | browse |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the burden and does disclose useful operational detail: the 1..50 limit bound, the meaning of each section including that 'all' covers the entire homepage set, and that group/tour cards are flagged via is_group. It omits any statement about read-only status, rate limits, or pagination, which keeps it short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, followed by section semantics, the limit bound, and the return fields, with no filler sentences. The dense parenthetical style packs a lot of information into a short space despite slightly awkward line wrapping.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, zero-required listing tool with an output schema, the description covers what an agent needs: what it lists, how sections differ, and the limit range. The return-field enumeration is redundant given the output schema but harmless, and the absence of any read-only or rate-limit note is the only real omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 largely does: it defines all three accepted 'section' values with their Turkish labels and English meanings, and gives the 'limit 1..50' range that is absent from the schema. It does not say what the default limit is or whether limit interacts with the 'all' section, leaving a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and scope ('Trending/featured events on biletix.com') and enumerates the three sections it can return. It implicitly distinguishes itself from search/category/venue siblings by being limited to homepage-featured events, but never names an alternative to sharpen that boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'browse' is glossed as featured events, 'starting_soon' as events within 24h, and 'all' as every homepage featured event, which lets an agent infer when each applies. However, there is no explicit guidance on when to prefer this over biletix_search_events or biletix_list_by_category, and no exclusions.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| venue_url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v0.1.0- First observed
biletix_get_event - First observed
biletix_list_by_category - First observed
biletix_list_venues - First observed
biletix_search_events - First observed
biletix_trending - First observed
biletix_venue_events
TDQS
Scored across 6 tools
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.
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.
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.
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
Related MCP Connectors
Event ticketing: create and publish events, read orders, attendees and sales analytics.
Discover and book theatre, tours, attractions, and live experiences worldwide. No API key required.
Manage Eventbrite events, ticket classes, venues and discounts; read attendees, orders and reports.
Upcoming theatre, concerts, stand-up, exhibitions and festivals in Türkiye. Read-only, no sign-in.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables 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.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables discovery of events, venues, and attractions through the Ticketmaster Discovery API, with flexible search filters and multiple output formats.MIT
- AlicenseNot gradedqualityBmaintenanceEnables 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 npmMIT
- AlicenseAqualityAmaintenanceEnables 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.22292 npmMIT