MCP servers for appointment booking with AI assistants
Bronjoy speaks the Model Context Protocol (MCP), so Claude or any other MCP client can search the Bronjoy catalog of service businesses in Uzbekistan, answer questions about a venue and book an appointment. There are two servers for two audiences: a free public server over the whole marketplace, and a private, authenticated server that a business connects its own assistant to. Both are documented publicly, with setup snippets for Claude Code and Claude Desktop, and the public server also works as a connector in Claude.
Key features
Marketplace server
- No account or token — a Streamable HTTP endpoint at
https://api.bronjoy.com/api/mcpexposes only what the public website already serves. - Six tools in booking order —
search-venues,get-venue,reveal-phone,check-availability,request-booking-codeandbook-appointment. - Bookable or directory-only — every result carries
is_bookable, and the server instructions tell the assistant to say plainly when a venue can only be phoned. - A code the assistant never sees —
request-booking-codesends six digits to the user's own email or phone; the user reads them back, and the code lasts five minutes for one booking. - Honest bookings — appointments are created as pending for the business to confirm, and venues that take prepayment return a payment link.
- Local data as-is — searches match across Latin and Cyrillic, and names and addresses come back in the Russian or Uzbek they were written in, ready to show a taxi driver.
Organization server
- Token-scoped access — an owner issues a token from the dashboard or the API; it reaches one organization only and expires after 90 days by default, 365 at most.
- Booking-only tools —
list-services,search-availability,create-appointment,check-appointmentandcancel-appointment, with the client's phone number verifying check and cancel. - Context in one read — an
organization://profileresource describes services, staff, branches, timezone and currency, and abooking-assistantprompt opens a booking conversation.
Architecture and security
Both servers are Laravel MCP classes registered beside the REST routes of the Laravel 12 backend, so the tools call the same search, availability and booking services as the website. Each tool declares MCP annotations such as read-only, idempotent or destructive, so a client can tell a search from a write.
The public server needed its own abuse controls. On the website the code endpoint sits behind Cloudflare Turnstile, which an MCP client cannot solve, so the server caps each caller at 30 requests a minute, 10 phone reveals a minute and 10 code sends an hour, on top of the existing per-recipient limit. Phone numbers are masked in get-venue and appear only through reveal-phone, which an assistant is told to call only for the venue the user chose.
The public server shipped together with a fix to guest booking on the website. The old flow created the appointment first and sent a code afterwards, so a name and any phone number could put a real booking on a partner's calendar. The verification service now requires the code before anything is written, and the MCP tools call that same service, so an assistant cannot book on terms a browser could not.
Organization tokens are Laravel Sanctum tokens bound to one organization by middleware, limited to 60 requests a minute per token and 120 per organization, and every operation is logged for audit. MCP access for a business is a paid plan feature.
Timeline and our role
We built the organization server in February 2026 as the first iteration of Bronjoy's AI integration, and added the public marketplace server in August 2026, the day after the marketplace went live. We designed the tool contracts and instructions, implemented the servers and limits, and wrote the public documentation.
Related work
This work is part of our AI integration and automation service. The venues the server searches come from the Bronjoy business directory pipeline, and the same rule of never claiming an action that did not happen runs through the Bronjoy AI receptionist.



