tickets
Agenda and ticketing for Toots Jazz Club, Brussels: browse concerts, check seats, reserve tickets.
使うべきか
品質と安全性
検出事項(3)
- HIGH
- MEDIUMpay_with_shared_payment_token 内
- INFOredeem_pass 内
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"tickets": {
"url": "https://toots.brussels/mcp"
}
}
}リモートエンドポイント
https://toots.brussels/mcpstreamable-httpできること
ツール一覧
ツール(13)
🟢list_events(locale)
All upcoming concerts with date, line-up, genres and a price/availability summary. Amounts are euro cents.
入力スキーマ
{
"type": "object",
"properties": {
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
}
}出力スキーマ
{
"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.
入力スキーマ
{
"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"
]
}出力スキーマ
{
"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.
入力スキーマ
{
"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"
]
}出力スキーマ
{
"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.
入力スキーマ
{
"type": "object",
"properties": {
"locale": {
"type": "string",
"enum": [
"fr",
"en",
"nl"
],
"description": "Language for titles, labels and the returned URLs. Defaults to fr."
}
}
}出力スキーマ
{
"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.
入力スキーマ
{
"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"
]
}出力スキーマ
{
"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.
入力スキーマ
{
"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"
]
}出力スキーマ
{
"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.
入力スキーマ
{
"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"
]
}出力スキーマ
{
"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.
入力スキーマ
{
"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"
]
}出力スキーマ
{
"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.
入力スキーマ
{
"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"
]
}出力スキーマ
{
"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.
入力スキーマ
{
"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"
]
}出力スキーマ
{
"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.
入力スキーマ
{
"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"
]
}出力スキーマ
{
"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.
入力スキーマ
{
"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"
]
}出力スキーマ
{
"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).
入力スキーマ
{
"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"
]
}出力スキーマ
{
"type": "object",
"properties": {
"result": {
"type": "object",
"properties": {
"message": {
"type": "string"
}
},
"required": [
"message"
],
"additionalProperties": true
}
},
"required": [
"result"
]
}推奨プロンプト
get_eventget_eventlist_eventslist_eventslist_eventsget_eventコミュニティ
エビデンス