tickets
Agenda and ticketing for Toots Jazz Club, Brussels: browse concerts, check seats, reserve tickets.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (3)
- HIGH
- MEDIUMen pay_with_shared_payment_token
- INFOen redeem_pass
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"tickets": {
"url": "https://toots.brussels/mcp"
}
}
}Puntos de conexión remotos
https://toots.brussels/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (13)
🟢list_events(locale)
All upcoming concerts with date, line-up, genres and a price/availability summary. Amounts are euro cents.
Esquema de entrada
{
"type": "object",
"properties": {
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
}
}Esquema de salida
{
"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.
Esquema de entrada
{
"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"
]
}Esquema de salida
{
"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.
Esquema de entrada
{
"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"
]
}Esquema de salida
{
"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.
Esquema de entrada
{
"type": "object",
"properties": {
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
}
}Esquema de salida
{
"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.
Esquema de entrada
{
"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"
]
}Esquema de salida
{
"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.
Esquema de entrada
{
"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"
]
}Esquema de salida
{
"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.
Esquema de entrada
{
"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"
]
}Esquema de salida
{
"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.
Esquema de entrada
{
"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"
]
}Esquema de salida
{
"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.
Esquema de entrada
{
"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"
]
}Esquema de salida
{
"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.
Esquema de entrada
{
"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"
]
}Esquema de salida
{
"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.
Esquema de entrada
{
"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"
]
}Esquema de salida
{
"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.
Esquema de entrada
{
"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"
]
}Esquema de salida
{
"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).
Esquema de entrada
{
"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"
]
}Esquema de salida
{
"type": "object",
"properties": {
"result": {
"type": "object",
"properties": {
"message": {
"type": "string"
}
},
"required": [
"message"
],
"additionalProperties": true
}
},
"required": [
"result"
]
}Prompts recomendados
get_eventget_eventlist_eventslist_eventslist_eventsget_eventComunidad
Evidencia