Skip to main content
Glama

book_appointment

Destructive

Book an appointment with a local service business. Creates a booking record and may add the appointment to the business calendar. Fresh successful calls normally return 'pending', 'confirmed', or 'completed'. Retries and failures can return broader lifecycle states or 'reconciliation_required'. Always relay the exact returned status and statusDescription. Use a dateTime returned by a Qasper live or indexed availability result for the selected service so bookingStartPolicy is respected. For services with maxParticipants > 1, the start can be booked until remainingCapacity reaches 0. Read the status and statusDescription verbatim and relay them accurately: do NOT tell the customer 'confirmed' when the status is 'pending'. If the selected service has requiresCustomerAddress=true, ask the customer for their full service address before calling this tool and pass it as customerAddress. ONLY call this if the business has 'booking' in its enabledFeatures array. Clients should obtain explicit user confirmation before creating a booking; Qasper does not enforce a separate confirmation credential.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
slugYesThe exact URL slug returned by a Qasper discovery result. Copy it verbatim.
dateTimeYesAppointment start date and time in ISO 8601 format (e.g. '2026-04-07T14:00:00+03:00')
serviceNameYesThe name of the service to book
customerNameYesFull name of the customer
customerEmailYesCustomer email address
customerPhoneYesCustomer phone number
jobDescriptionYesDetailed description of the job or reason for appointment. Include any visual details about the issue — damage, location, severity, photos described in text form.
clientRequestIdYesREQUIRED. Stable UUID identifying this booking attempt. Generate ONCE at the moment you decide to book; reuse the SAME value on every retry of the same logical attempt so the server can dedup. A fresh value on retry will mint a duplicate calendar event.
customerAddressNoCustomer's full service address. Required when the selected service has requiresCustomerAddress=true; omit or leave blank for services that do not need an address.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / slug / description
      Previous value: -"The exact URL slug returned by search_businesses or get_business_info. Copy it verbatim."New value: +"The exact URL slug returned by a Qasper discovery result. Copy it verbatim."
  2. Changed1 schema field changed
    • addedInput schema / properties / customerAddress
      Added value: +{
      +  "default": null,
      +  "description": "Customer's full service address. Required when the selected service has requiresCustomerAddress=true; omit or leave blank for services that do not need an address.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  3. Changed2 schema fields changed
    • addedInput schema / properties / clientRequestId
      Added value: +{
      +  "description": "REQUIRED. Stable UUID identifying this booking attempt. Generate ONCE at the moment you decide to book; reuse the SAME value on every retry of the same logical attempt so the server can dedup. A fresh value on retry will mint a duplicate calendar event.",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "slug",
      -  "serviceName",
      -  "dateTime",
      -  "customerName",
      -  "customerPhone",
      -  "customerEmail",
      -  "jobDescription"
      -]New value: +[
      +  "slug",
      +  "serviceName",
      +  "dateTime",
      +  "customerName",
      +  "customerPhone",
      +  "customerEmail",
      +  "jobDescription",
      +  "clientRequestId"
      +]
  4. Changed1 schema field changed
    • changedInput schema / properties / slug / description
      Previous value: -"The URL slug identifying the business"New value: +"The exact URL slug returned by search_businesses or get_business_info. Copy it verbatim."
  5. First observed

TDQS

A4.6/5.0
Behavior5/5

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

The description goes well beyond the annotations, disclosing detailed behavioral traits: possible return states ('pending', 'confirmed', 'completed', 'reconciliation_required'), the need to relay status verbatim, the dedup behavior of clientRequestId on retries, the address requirement condition, and the caution not to misrepresent 'pending' as 'confirmed'. This is rich, accurate context that the annotations (openWorldHint, destructiveHint, idempotentHint) do not fully capture.

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

Conciseness4/5

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

The description is somewhat long but every sentence adds value—there is no fluff. It is front-loaded with the core action, then provides response handling, retry semantics, prerequisites, and a clear final instruction on when to call. Given the complexity of the tool, the length is justified and well structured, though it could be tightened slightly without losing clarity.

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?

The description is remarkably complete for a tool with no output schema and complex behavior. It covers when to call, what to pass, how to handle responses, dedup and retry behavior, address requirements, and the need for user confirmation. There is no obvious missing piece an agent would need to invoke this tool correctly, especially given the rich parameter semantics and behavioral transparency.

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?

While the schema covers all 9 parameters with descriptions, the tool description adds significant extra semantics for key parameters: it explains the clientRequestId must be generated once and reused on retry to avoid duplicate events, and it clarifies that customerAddress is only required when requiresCustomerAddress=true. It also instructs that dateTime should come from a Qasper availability result. These additions go beyond the schema and materially improve agent understanding, though the schema already handles most parameter meaning.

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?

The description clearly states the action (book an appointment), the resource (a booking record and calendar entry), and it is distinct from sibling tools like check_availability or get_services. It specifies the scope ('local service business') and the primary effect ('creates a booking record and may add the appointment to the business calendar'). This fully distinguishes the tool from the others.

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?

The description gives explicit conditions for when to call the tool: 'ONLY call this if the business has booking in its enabledFeatures array', and requires prior user confirmation. It also instructs to use a dateTime from a Qasper availability result and to obtain the address when required. However, it does not explicitly name alternatives or state when not to use this tool (e.g., 'use check_availability for availability checks'), but the context is clear enough that the agent can infer the tool's role.

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.