Skip to main content
Glama

Add a booking

add_booking
Destructive

Adds a booking the owner took (phone, walk-in): service, start, customer details; series repeats weekly; resource: staff or a room. A clash is a 409 (force: true books anyway). Emailing the customer takes confirm_token first.

Input Schema

NameRequiredDescriptionDefault
nameNo
siteYes
emailNo
forceNo
notesNo
partyNo
phoneNo
startNoLocal "2026-10-15T14:00" (booking time zone) or "now"
seriesNoWeekly repeat: {every: week|fortnight, count 2-52 or until YYYY-MM-DD, on_clash: "skip"}
sourceNoDefault phone
answersNo{question id: answer} ("" removes one)
serviceNoService id or name
resourceNoStaff or room id or name (default any free)
plugin_idNoDefault: booking page
confirm_tokenNo
notify_customerNoEmail the customer (default true)

Output Schema

NameRequiredDescriptionDefault
item_idNo
agent_messageNo
confirm_tokenNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • removedInput schema / properties / confirm_token / description
      Removed value: -"After the user's yes"
    • changedInput schema / properties / plugin_id / description
      Previous value: -"Default: the booking page"New value: +"Default: booking page"
  2. Changed2 schema fields changed
    • removedInput schema / properties / site / description
      Removed value: -"Site name"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "agent_message": {
      +      "type": "string"
      +    },
      +    "confirm_token": {
      +      "type": "string"
      +    },
      +    "item_id": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  3. Changed15 schema fields changed
    • removedInput schema / properties / answers / additionalProperties
      Removed value: -{
      -  "maxLength": 500,
      -  "type": "string"
      -}
    • changedInput schema / properties / answers / description
      Previous value: -"{question id: answer} for the settings' questions (\"\" removes one)"New value: +"{question id: answer} (\"\" removes one)"
    • changedInput schema / properties / confirm_token / description
      Previous value: -"From the first call, after the user's yes"New value: +"After the user's yes"
    • removedInput schema / properties / email / maxLength
      Removed value: -254
    • removedInput schema / properties / force / description
      Removed value: -"Book even if it clashes"
    • removedInput schema / properties / name / maxLength
      Removed value: -100
    • removedInput schema / properties / notes / maxLength
      Removed value: -1000
    • changedInput schema / properties / notify_customer / description
      Previous value: -"Email the customer (default true when there is an email)"New value: +"Email the customer (default true)"
    • removedInput schema / properties / phone / maxLength
      Removed value: -40
    • changedInput schema / properties / plugin_id / description
      Previous value: -"Default: the site's booking page"New value: +"Default: the booking page"
    • removedInput schema / properties / resource / maxLength
      Removed value: -60
    • changedInput schema / properties / series / description
      Previous value: -"Weekly repeat: count or until (YYYY-MM-DD); on_clash \"skip\" leaves out the dates that clash"New value: +"Weekly repeat: {every: week|fortnight, count 2-52 or until YYYY-MM-DD, on_clash: \"skip\"}"
    • removedInput schema / properties / series / properties
      Removed value: -{
      -  "count": {
      -    "maximum": 52,
      -    "minimum": 2,
      -    "type": "integer"
      -  },
      -  "every": {
      -    "enum": [
      -      "week",
      -      "fortnight"
      -    ],
      -    "type": "string"
      -  },
      -  "on_clash": {
      -    "const": "skip",
      -    "type": "string"
      -  },
      -  "until": {
      -    "type": "string"
      -  }
      -}
    • changedInput schema / properties / site / description
      Previous value: -"Site name, e.g. brave-otter-4821"New value: +"Site name"
    • changedOutput schema / (root)
      Previous value: -{
      -  "additionalProperties": {},
      -  "properties": {
      -    "agent_message": {
      -      "type": "string"
      -    },
      -    "confirm_token": {
      -      "type": "string"
      -    },
      -    "error": {
      -      "description": "On failure (isError): {code, message}"
      -    }
      -  },
      -  "type": "object"
      -}New value: +null
  4. Changed2 schema fields changed
    • changedInput schema / properties / plugin_id / description
      Previous value: -"From list_plugins"New value: +"Default: the site's booking page"
    • changedInput schema / required
      Previous value: -[
      -  "site",
      -  "plugin_id"
      -]New value: +[
      +  "site"
      +]
  5. Added

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, openWorldHint=true, idempotentHint=false, so the safety profile is carried by structured data; the description adds genuinely new behavior: clash handling returns 409, force bypasses the conflict check (i.e. double-booking is possible), and confirm_token is a prerequisite for notifying the customer. It does not describe side effects like notifications defaulting on or what a series creates, leaving a small gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the purpose front-loaded, followed by the mutating edge cases (clash/force) and the prerequisite (confirm_token). No filler; every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-param, nested-object mutation tool, the description covers the creation flow, series behavior, conflict semantics, and the notification prerequisite, and an output schema exists so return values need no explanation. The remaining gaps are secondary optional fields, not blockers to correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 16 params at 50% schema coverage, the description does real compensatory work: it maps 'service, start, customer details', explains the weekly series semantics, characterizes resource as 'staff or a room', and covers force and confirm_token. Unmentioned params such as party, notes, answers, and plugin_id remain undocumented anywhere, so it is helpful but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Adds a booking') and immediately narrows scope to owner-taken bookings (phone, walk-in), which distinguishes it from the customer-facing booking flow and from edit_booking/approve_booking siblings. The clause listing service, start, customer details, weekly series, and staff/room resource tells an agent exactly what kind of record is created.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for use ('a booking the owner took (phone, walk-in)') and names two conditional paths: clashes return 409 and force:true overrides it, and emailing the customer requires confirm_token first. It does not explicitly say when to prefer edit_booking or get_free_slots instead, so it stops short of full when/when-not/alternatives guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources