Model Context Protocol · 5 tools · no authentication
Gaplessly's booking connector for AI assistants
One endpoint for the whole platform. An assistant connected to it can find free appointment and table times at any business that takes bookings through Gaplessly, and hand the guest a link to finish the booking themselves.
The endpoint
POST https://gaplessly.com/api/mcp
Streamable HTTP, JSON-RPC 2.0, stateless. No authentication, no API key and no OAuth, because nothing here reaches anything a member of the public cannot already see on a business's own booking page. Call tools/list against it for the authoritative tool definitions; the summary below is prose about the same thing.
There is no CORS and none is planned. An MCP client is a server-to-server HTTP client, so the browser-based Inspector cannot reach this and is not meant to. Use the Inspector CLI.
The five tools
Every one of them is read-only, including the two named book_. That is not a labelling convenience: they return a link and write nothing, and calling one twice produces the same link twice.
- get_venue
- Takes a venue slug. Returns the venue's public booking profile, its service list, and the venue's own current date and time. Call it first: everything else needs the slug, and appointment searches need a service id from here.
- find_appointment_times
- Takes a venue, a service, a day and a span of up to 14 days. Returns free times for that service, each as a display label plus a signed slot token.
- find_table_times
- Takes a venue, a party size, a day and a span of up to 14 days. Returns free sittings for that party size. An empty day says why it is empty when the venue told us, so "closed on Mondays" never reads as "fully booked".
- book_appointment
- Takes a venue, a slot token and the service it was found for. Returns a short-lived link to the venue's booking page, opened at that time. It books nothing.
- book_table
- Takes a venue, a slot token and the party size it was found for. Returns the same: a link, opened at that sitting. The venue holds the table from the moment the guest opens it, for about ten minutes.
Why nothing here books
An assistant cannot prove who it is speaking for. No mainstream assistant passes a verified human identity to a tool, so a connector that booked outright would be booking for whoever the model says, on details the model typed. Nobody in this industry does that: Resy's connector requires a sign-in, Google's AI links you to the booking page for the last step, and Calendly will not book without a code.
So the last step is a link and a tap. The person who taps is demonstrably the person in the conversation; their name, email and phone never pass through the assistant, because no tool accepts them; and a deposit, a house policy or a venue's own intake questions are all asked by the page that already knows how to ask them.
Times, and why they look like that
No tool ever returns a timezone, and no time comes back in a form a date library will parse. A model that sees an IANA zone beside a time converts it, and books hours wrong. Times come back as display text plus an opaque signed token, and every date you send is resolved against the venue's own today rather than yours, which are frequently different days.
A slot token is signed, expires in about thirty minutes, and carries the venue, the time, and what the slot was found for inside the signature. It cannot be edited, built by hand, moved between venues, or reused for a different service or party size. That is what stops a prompt injection redirecting a booking while the transcript still shows the right venue.
What to try first
get_venuefor a venue slug, to see the profile and the venue's current time.find_table_timesfor a party of two, next week. Then the same call on a day the venue is shut, to see the reason rather than an empty list.book_tablewith a token from that result, and open the link it returns.- The same call with a token from a different venue, or with a party size the token was not issued for. Both are refused, and the refusal says what to do instead.
Limits
The connector is rate limited per calling network address. An assistant platform's address is shared by everyone using it, so the budget is deliberately modest; a normal conversation is three calls.
There is no tool that reads or cancels an existing booking, and there is not going to be one by default. Both would need the private link that manages a booking, which is the one credential this design keeps away from assistants. A guest manages their booking from the link in their own confirmation email.