Skip to content

Gaplessly Booking

by gaplessly.com · remote · no sign-in to list tools · v1.1.0 · published by com.gaplessly

Find free times at Gaplessly businesses on a plan with AI booking, then get a link to book.

Changes · 2

5 tools: 2 change things and 3 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http booking https://gaplessly.com/api/mcp

Findings

Matches of fixed checks, with the text they matched.

2 warn
  • The server marks "start_appointment_booking" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "start_appointment_booking" says "start": a word for a change.

    What this check looks for
  • The server marks "start_table_booking" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "start_table_booking" says "start": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

5 tools

Changes things 2Claude Code: ask
  • start_appointment_bookingTurn a time from find_appointment_times into a link the guest taps to finish booking.1 finding

    Why it is in this group

    • The name "start_appointment_booking" says "start": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "start_appointment_booking" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "start_appointment_booking" says "start": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Turn a time from find_appointment_times into a link the guest taps to finish booking. This does NOT book anything: it returns a short-lived URL on the venue's own booking page, already opened at that service, that staff member and that exact time, where the guest enters their own name, email and phone and confirms. Give the guest the `url` and say plainly that the booking is not made until they open it. Never ask the guest for their contact details to pass here; this tool does not take them, and the page collects them directly. Nothing is reserved in the meantime, so a popular time can still go before they tap.

    Annotations the server declares

    • title: Start an appointment booking
    • readOnlyHint: true
    • idempotentHint: true
    • destructiveHint: false
    • openWorldHint: false
  • start_table_bookingTurn a time from find_table_times into a link the guest taps to finish booking.1 finding

    Why it is in this group

    • The name "start_table_booking" says "start": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "start_table_booking" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "start_table_booking" says "start": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Turn a time from find_table_times into a link the guest taps to finish booking. This does NOT book anything: it returns a short-lived URL on the venue's own booking page, already opened at that party size and that exact sitting, where the guest enters their own details and confirms. The venue holds the table from the moment the guest opens the link, for about ten minutes, which is what gives them time to fill the form in. Until they open it nothing is held, so give them the `url` promptly and say the table is not theirs until they do.

    Annotations the server declares

    • title: Start a table booking
    • readOnlyHint: true
    • idempotentHint: true
    • destructiveHint: false
    • openWorldHint: false
Only reads 3Claude Code: allow
  • find_appointment_timesFree appointment times at one venue for one service, over up to two weeks.No findings

    Why it is in this group

    • The name "find_appointment_times" says "find": a word for reading.
    Description, as the server wrote it
    Free appointment times at one venue for one service, over up to two weeks. For salons, clinics, studios and anywhere a guest books a named service with a provider. Use find_table_times for a restaurant instead. Needs a service id from get_venue. Each returned time has an `at` label to show the guest and a `slotToken`. The token is the booking handle: it is signed, it expires in about 30 minutes, and it is the only way a time can be booked later. Pass it back exactly as given, never edited, and never reuse one from a different venue. An empty `times` array for a day means that day is genuinely unavailable, not that something failed.

    Annotations the server declares

    • title: Find appointment times
    • readOnlyHint: true
    • idempotentHint: true
    • destructiveHint: false
    • openWorldHint: false
  • find_table_timesFree table times at one restaurant or venue for one party size, over up to two weeks.No findings

    Why it is in this group

    • The name "find_table_times" says "find": a word for reading.
    Description, as the server wrote it
    Free table times at one restaurant or venue for one party size, over up to two weeks. Use find_appointment_times for a salon or clinic instead. Each returned time has an `at` label to show the guest and a `slotToken`. The token is the booking handle: it is signed, it expires in about 30 minutes, and it is the only way a time can be booked later. Pass it back exactly as given, never edited, and never reuse one from a different venue. An empty `times` array for a day means the venue has nothing at that party size that day, which usually means closed or fully booked; for a large party the venue may take it by phone even when nothing shows here.

    Annotations the server declares

    • title: Find table times
    • readOnlyHint: true
    • idempotentHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_venueRead a venue's public booking profile: what it is, where it is, what can be booked, and what time it is THERE right now.No findings

    Why it is in this group

    • The name "get_venue" says "get": a word for reading.
    Description, as the server wrote it
    Read a venue's public booking profile: what it is, where it is, what can be booked, and what time it is THERE right now. Call this first: the other tools need this venue's slug, and appointment searches need a service id from here. Returns `venueClock`, which is the venue's own current date and time. Every date you ask for later is resolved against `venueClock.today`, not against your own today: the two are routinely different days. Times are given as text on purpose and there is no timezone identifier anywhere in the result, because converting them is how a booking ends up hours off.

    Annotations the server declares

    • title: Look up a venue
    • readOnlyHint: true
    • idempotentHint: true
    • destructiveHint: false
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http booking https://gaplessly.com/api/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__booking__get_venue",
      "mcp__booking__find_appointment_times",
      "mcp__booking__find_table_times"
    ],
    "ask": [
      "mcp__booking__start_appointment_booking",
      "mcp__booking__start_table_booking"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as booking. Review it before you use it.