# brussels.toots/tickets

> Agenda and ticketing for Toots Jazz Club, Brussels: browse concerts, check seats, reserve tickets.

- name: brussels.toots/tickets
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 80/100 flags: no-repository
- quality: 88/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/brussels.toots%2Ftickets
- tools: https://api.protogrid.dev/v1/servers/brussels.toots%2Ftickets/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "tickets": {
      "type": "http",
      "url": "https://toots.brussels/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 85
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% ~updated-52d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 88/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 13 of 13 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 1 of 13 tools declare all four hints; missing: redeem_pass (openWorldHint); wait_for_payment (destructiveHint, idempotentHint, openWorldHint); recover_tickets (openWorldHint); …
- pass `tools.token_cost`: about 2,141 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 13, about 2,141 tokens to load them all
- tool set hash: 02db825a932ae8eb4f07e9cd81a2ccce
- badge: [![protogrid quality](https://protogrid.dev/badge/brussels.toots/tickets.svg)](https://protogrid.dev/servers/brussels.toots/tickets)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://toots.brussels/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (13)

- `get_availability`: 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.
- `get_booking_status`: 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.
- `get_event`: Full details of one concert: bio, line-up, other dates of the same run, prices and availability.
- `get_venue_info`: Address, contact details and the venue's FAQ (house rules, practical questions). Use this to answer buyer questions about the club instead of guessing.
- `hold_tickets`: 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.
- `list_events`: All upcoming concerts with date, line-up, genres and a price/availability summary. Amounts are euro cents.
- `pay_with_shared_payment_token`: 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.
- `recover_tickets`: 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).
- `redeem_gift_card`: 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.
- `redeem_pass`: 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.
- `release_booking`: 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.
- `set_contact`: 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.
- `wait_for_payment`: 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.
