Test an AI booking agent against a sandbox over MCP
Point your AI agent at a Bookatu sandbox through the MCP server. It books and cancels for made-up clients, and no real client or real money is ever touched.
An AI agent that books appointments chooses for itself which tool to call. You want to watch it find a time, book and cancel before it does any of that at a real business. A sandbox gives it somewhere safe to practise, and gives you a way to test an MCP server integration from start to finish.
Connect your MCP client
The business MCP server has one address for every business: https://bookatu.com/api/mcp. A credential reaches only its own business, so a sandbox's test key reaches that sandbox and nothing else. Send the key as a Bearer token, and send Bookatu-Livemode: false where your client allows it, so a live key pasted in by mistake is refused before anything runs.
POST https://bookatu.com/api/mcpAuthorization: Bearer bk_test_YOUR_KEYBookatu-Livemode: falseContent-Type: application/jsonMCP-Protocol-Version: 2025-06-18 {"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}With OAuth, the client signs in instead, and Bookatu's consent page lists your sandboxes marked (test). Claude Desktop adds the server as a custom connector, Cursor reads it from its MCP config file, and the MCP Inspector calls each tool by hand. Our developer guide Test your AI agent has the setup for each.
The three sandbox tools
- sandbox_outbox reads every message the sandbox kept instead of sending, newest first. It needs customers:read.
- sandbox_simulate makes one event happen to one booking: a deposit paid, a card declined, a checkout abandoned, the client cancelling, a no-show, or reminders coming due.
- sandbox_reset wipes the sandbox and puts the sample data back. It takes the sandbox's own test key, never a connected app.
They appear in tools/list only at a sandbox. At a live business each name is an unknown tool, so its tool list stays exactly as it was.
A test run, start to finish
- 01Find a time
Ask for a haircut slot on Tuesday afternoon. The agent should call list_services and get_availability, and answer on the business's clock.
- 02Book it
Ask it to book Mia, with an email at example.com. create_booking answers a ref and an appointmentId.
- 03Check what she was sent
sandbox_outbox shows the confirmation that would have gone out.
- 04Cancel it
cancel_booking cancels as the business, and the client is sent no message about it. If your agent says she was told, you have found a bug.
- 05Start again
Ask it to reset the sandbox. A good agent asks you first.
To test a client's own cancellation, use sandbox_simulate with booking.client_cancelled. It emails her a notice, kept in the outbox, only when Email clients when they cancel online is on in the sandbox's settings. That setting starts off.
Read livemode and the refusals
At a sandbox, every answer carries the Bookatu-Livemode header, set to false. Every tool result, a refusal included, says livemode in its _meta, and a successful one says it in structuredContent too. A refusal comes back with its code, such as APPOINTMENT_NOT_FOUND for a booking that is not the sandbox's, or NO_OPEN_CHECKOUT when deposit.paid finds no open test checkout. A good agent reads the code and tries something else.
Questions owners ask
Can an agent tested in a sandbox touch my real business?
Not with its test credential, which reaches its own sandbox only. To work on your business, it needs a live key or a connection you approve.
Will my clients get test messages?
No. A sandbox's clients are made up, and its messages are kept, never sent.
Will the sandbox tools show up at my business?
No. They exist only at a sandbox, and your business's tool list stays as it was.
Where to start
Make a sandbox, connect your client with its test key and run the five steps above. When the agent behaves, our developer guide Going live covers the switch to a live key.