tickets
Agenda and ticketing for Toots Jazz Club, Brussels: browse concerts, check seats, reserve tickets.
Sollte ich dies verwenden
Qualität und Sicherheit
Befunde (3)
- HIGH
- MEDIUMin pay_with_shared_payment_token
- INFOin redeem_pass
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"tickets": {
"url": "https://toots.brussels/mcp"
}
}
}Remote-Endpunkte
https://toots.brussels/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (13)
🟢list_events(locale)
All upcoming concerts with date, line-up, genres and a price/availability summary. Amounts are euro cents.
Eingabe-Schema
{
"type": "object",
"properties": {
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
}
}Ausgabe-Schema
{
"type": "object",
"properties": {
"result": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
}
},
"required": [
"result"
]
}🟢get_event(event_id, locale)
Full details of one concert: bio, line-up, other dates of the same run, prices and availability.
Eingabe-Schema
{
"type": "object",
"properties": {
"event_id": {
"type": "string",
"description": "The event_id from list_events."
},
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
},
"required": [
"event_id"
]
}Ausgabe-Schema
{
"type": "object",
"properties": {
"result": {
"type": "object",
"additionalProperties": true
}
},
"required": [
"result"
]
}🟢get_availability(event_id, locale)
Live ticket availability for a concert, per session: the stock_id, category_id and price_id values that hold_tickets needs, with prices in euro cents and the maximum quantity per line.
Eingabe-Schema
{
"type": "object",
"properties": {
"event_id": {
"type": "string",
"description": "The event_id from list_events."
},
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
},
"required": [
"event_id"
]
}Ausgabe-Schema
{
"type": "object",
"properties": {
"result": {
"type": "object",
"properties": {
"sessions": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"as_of": {
"type": "string"
},
"max_age_seconds": {
"type": "integer"
}
},
"required": [
"sessions"
],
"additionalProperties": true
}
},
"required": [
"result"
]
}🟢get_venue_info(locale)
Address, contact details and the venue's FAQ (house rules, practical questions). Use this to answer buyer questions about the club instead of guessing.
Eingabe-Schema
{
"type": "object",
"properties": {
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
}
}Ausgabe-Schema
{
"type": "object",
"properties": {
"result": {
"type": "object",
"additionalProperties": true
}
},
"required": [
"result"
]
}⚪hold_tickets(event_id, items, idempotency_key, locale)
Reserves tickets and returns a booking_uuid. The hold expires after 15 minutes if the order is not paid, releasing the seats. Only call this once the buyer has chosen; do not hold speculatively.
Eingabe-Schema
{
"type": "object",
"properties": {
"event_id": {
"type": "string",
"description": "The event_id from list_events."
},
"items": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"stock_id": {
"type": "string",
"description": "From get_availability."
},
"category_id": {
"type": "string",
"description": "From get_availability."
},
"price_id": {
"type": "string",
"description": "From get_availability."
},
"quantity": {
"type": "integer",
"minimum": 1
}
},
"required": [
"stock_id",
"category_id",
"price_id",
"quantity"
]
}
},
"idempotency_key": {
"type": "string",
"description": "Optional deduplication key of your choosing. Retrying a timed-out hold with the same key returns the original booking instead of reserving twice."
},
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
},
"required": [
"event_id",
"items"
]
}Ausgabe-Schema
{
"type": "object",
"properties": {
"result": {
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"awaiting_contact",
"awaiting_payment",
"paid",
"expired"
]
},
"payment_url": {
"type": [
"string",
"null"
]
},
"ticket_url": {
"type": "string"
},
"ticket_pdf_url": {
"type": "string"
},
"total_cents": {
"type": "integer"
},
"amount_to_pay_cents": {
"type": "integer"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"expires_in_seconds": {
"type": [
"integer",
"null"
]
}
},
"required": [
"booking_uuid",
"status"
],
"additionalProperties": true
}
},
"required": [
"result"
]
}🟡set_contact(booking_uuid, firstname, lastname, email, terms_accepted, ...)
Attaches the buyer to a held booking and returns the payment_url. Give that URL to the human buyer: payment (card or Bancontact) happens in their browser, never through this API. The tickets will be emailed to the address given here.
Eingabe-Schema
{
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"firstname": {
"type": "string"
},
"lastname": {
"type": "string"
},
"email": {
"type": "string",
"description": "The buyer's email; the tickets are sent there."
},
"terms_accepted": {
"type": "boolean",
"description": "Must be true, and only after the buyer explicitly accepted the terms of sale."
},
"zip": {
"type": "string"
},
"country": {
"type": "string",
"description": "Two-letter ISO code, e.g. BE."
},
"promo_code": {
"type": "string"
},
"newsletter_opt_in": {
"type": "boolean",
"description": "Only true if the buyer explicitly asked to subscribe."
}
},
"required": [
"booking_uuid",
"firstname",
"lastname",
"email",
"terms_accepted"
]
}Ausgabe-Schema
{
"type": "object",
"properties": {
"result": {
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"awaiting_contact",
"awaiting_payment",
"paid",
"expired"
]
},
"payment_url": {
"type": [
"string",
"null"
]
},
"ticket_url": {
"type": "string"
},
"ticket_pdf_url": {
"type": "string"
},
"total_cents": {
"type": "integer"
},
"amount_to_pay_cents": {
"type": "integer"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"expires_in_seconds": {
"type": [
"integer",
"null"
]
}
},
"required": [
"booking_uuid",
"status"
],
"additionalProperties": true
}
},
"required": [
"result"
]
}🟡redeem_pass(booking_uuid, code, locale)
Applies a Toots Pass code (given to you by the buyer; format XXX-XXXXXX-XXX) to a held booking, after set_contact. Covers as many tickets as the pass has concerts left. If the order is fully covered the booking completes immediately (status paid); otherwise the response carries the payment_url for the balance. The code is a venue credential, not a payment instrument.
Eingabe-Schema
{
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"code": {
"type": "string",
"description": "The Toots Pass code, exactly as the buyer gave it."
},
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
},
"required": [
"booking_uuid",
"code"
]
}Ausgabe-Schema
{
"type": "object",
"properties": {
"result": {
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"awaiting_contact",
"awaiting_payment",
"paid",
"expired"
]
},
"payment_url": {
"type": [
"string",
"null"
]
},
"ticket_url": {
"type": "string"
},
"ticket_pdf_url": {
"type": "string"
},
"total_cents": {
"type": "integer"
},
"amount_to_pay_cents": {
"type": "integer"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"expires_in_seconds": {
"type": [
"integer",
"null"
]
}
},
"required": [
"booking_uuid",
"status"
],
"additionalProperties": true
}
},
"required": [
"result"
]
}🟡redeem_gift_card(booking_uuid, code, locale)
Applies a Toots gift card code (given to you by the buyer) to a held booking, after set_contact. Uses as much of the card's balance as the order needs. Fully covered orders complete immediately (status paid); otherwise the response carries the payment_url for the balance.
Eingabe-Schema
{
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"code": {
"type": "string",
"description": "The gift card code, exactly as the buyer gave it."
},
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
},
"required": [
"booking_uuid",
"code"
]
}Ausgabe-Schema
{
"type": "object",
"properties": {
"result": {
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"awaiting_contact",
"awaiting_payment",
"paid",
"expired"
]
},
"payment_url": {
"type": [
"string",
"null"
]
},
"ticket_url": {
"type": "string"
},
"ticket_pdf_url": {
"type": "string"
},
"total_cents": {
"type": "integer"
},
"amount_to_pay_cents": {
"type": "integer"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"expires_in_seconds": {
"type": [
"integer",
"null"
]
}
},
"required": [
"booking_uuid",
"status"
],
"additionalProperties": true
}
},
"required": [
"result"
]
}🟡pay_with_shared_payment_token(booking_uuid, shared_payment_token, locale)
Pays the remaining balance of a booking (after set_contact, and after any pass or gift card) with a Shared Payment Token from the buyer's Link agent wallet. Request the token for exactly amount_to_pay_cents in EUR, scoped to the Stripe network profile profile_61VNUTvZyhaQmxLgqA6VNUTv7A9CUusxmQZ0xC5doSoy; the buyer approves that spend in Link. Charges the buyer, so only call it once they confirmed the purchase. On success the booking is paid and carries ticket_url; if the response says otherwise (payment_status, next_step) or errors, give the payment_url to the human buyer instead — the booking stays open until its hold expires.
Eingabe-Schema
{
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"shared_payment_token": {
"type": "string",
"description": "The spt_… token granted by the buyer's Link wallet."
},
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
},
"required": [
"booking_uuid",
"shared_payment_token"
]
}Ausgabe-Schema
{
"type": "object",
"properties": {
"result": {
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"awaiting_contact",
"awaiting_payment",
"paid",
"expired"
]
},
"payment_url": {
"type": [
"string",
"null"
]
},
"ticket_url": {
"type": "string"
},
"ticket_pdf_url": {
"type": "string"
},
"total_cents": {
"type": "integer"
},
"amount_to_pay_cents": {
"type": "integer"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"expires_in_seconds": {
"type": [
"integer",
"null"
]
}
},
"required": [
"booking_uuid",
"status"
],
"additionalProperties": true
}
},
"required": [
"result"
]
}🔴release_booking(booking_uuid, locale)
Gives an unpaid hold's seats back immediately, instead of letting them sit reserved until the 15-minute expiry. Call this when the buyer changes their mind. Paid bookings cannot be released.
Eingabe-Schema
{
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
},
"required": [
"booking_uuid"
]
}Ausgabe-Schema
{
"type": "object",
"properties": {
"result": {
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"awaiting_contact",
"awaiting_payment",
"paid",
"expired"
]
},
"payment_url": {
"type": [
"string",
"null"
]
},
"ticket_url": {
"type": "string"
},
"ticket_pdf_url": {
"type": "string"
},
"total_cents": {
"type": "integer"
},
"amount_to_pay_cents": {
"type": "integer"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"expires_in_seconds": {
"type": [
"integer",
"null"
]
}
},
"required": [
"booking_uuid",
"status"
],
"additionalProperties": true
}
},
"required": [
"result"
]
}🟢wait_for_payment(booking_uuid, timeout_seconds, locale)
Like get_booking_status, but holds the request open (up to 25 seconds) and returns as soon as the booking is paid. Call it after handing the buyer the payment_url instead of polling in a loop; repeat while status is still awaiting_payment and the hold has time left.
Eingabe-Schema
{
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"timeout_seconds": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 20
},
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
},
"required": [
"booking_uuid"
]
}Ausgabe-Schema
{
"type": "object",
"properties": {
"result": {
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"awaiting_contact",
"awaiting_payment",
"paid",
"expired"
]
},
"payment_url": {
"type": [
"string",
"null"
]
},
"ticket_url": {
"type": "string"
},
"ticket_pdf_url": {
"type": "string"
},
"total_cents": {
"type": "integer"
},
"amount_to_pay_cents": {
"type": "integer"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"expires_in_seconds": {
"type": [
"integer",
"null"
]
}
},
"required": [
"booking_uuid",
"status"
],
"additionalProperties": true
}
},
"required": [
"result"
]
}🟢get_booking_status(booking_uuid, locale)
Current status of a booking: awaiting_contact, awaiting_payment (with payment_url and amount left), paid or expired. A paid booking carries ticket_url — the one link to share with the buyer, which adapts to their device (wallet on a phone, PDF and choices elsewhere) — plus the explicit ticket_pdf_url and, when configured, apple_wallet_url / google_wallet_url.
Eingabe-Schema
{
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
},
"required": [
"booking_uuid"
]
}Ausgabe-Schema
{
"type": "object",
"properties": {
"result": {
"type": "object",
"properties": {
"booking_uuid": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"awaiting_contact",
"awaiting_payment",
"paid",
"expired"
]
},
"payment_url": {
"type": [
"string",
"null"
]
},
"ticket_url": {
"type": "string"
},
"ticket_pdf_url": {
"type": "string"
},
"total_cents": {
"type": "integer"
},
"amount_to_pay_cents": {
"type": "integer"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"expires_in_seconds": {
"type": [
"integer",
"null"
]
}
},
"required": [
"booking_uuid",
"status"
],
"additionalProperties": true
}
},
"required": [
"result"
]
}🟢recover_tickets(email, locale)
For a buyer who lost their tickets: sends the ticket links of their past paid orders to their email address. The links go to the inbox only — the response never contains them — so the inbox is the proof of ownership. Tell the buyer to check their email (and spam folder).
Eingabe-Schema
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "The email address the buyer ordered with."
},
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
},
"required": [
"email"
]
}Ausgabe-Schema
{
"type": "object",
"properties": {
"result": {
"type": "object",
"properties": {
"message": {
"type": "string"
}
},
"required": [
"message"
],
"additionalProperties": true
}
},
"required": [
"result"
]
}Empfohlene Prompts
get_eventget_eventlist_eventslist_eventslist_eventsget_eventCommunity
Nachweis