Skip to main content
Glama
QasperAI

@qasperai/mcp-server

Official
by QasperAI

book_appointment

Destructive

Books an appointment with a local service business. Creates a booking record, adds it to the business calendar, and returns a reference number with status.

Instructions

Book an appointment with a local service business. Creates a booking record and adds the appointment to the business calendar. Returns a reference number and a status field indicating the actual resulting state — 'pending' (the business reviews each booking), 'confirmed' (auto-approved by the business), or 'completed' (the business auto-finalizes). Use a dateTime returned by check_availability 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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
slugYesThe exact URL slug returned by search_businesses or get_business_info. Copy it verbatim.
serviceNameYesThe name of the service to book
dateTimeYesAppointment start date and time in ISO 8601 format (e.g. '2026-04-07T14:00:00+03:00')
customerNameYesFull name of the customer
customerPhoneYesCustomer phone number
customerEmailYesCustomer email address
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.
Behavior5/5

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

Annotations mark destructiveHint=true, and the description adds critical behavioral details: return statuses (pending, confirmed, completed), idempotency via clientRequestId, and cautions about not misinterpreting status. It also explains booking respects bookingStartPolicy and maxParticipants, going beyond annotations.

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 well-structured with clear sections, but slightly verbose. It front-loads the purpose and returns, then adds usage notes. Could be tightened without losing information.

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?

Given no output schema, the description thoroughly covers return values and usage context. It includes prerequisites, conditional address requirement, idempotency guidance, and status interpretation rules. Completely addresses agent needs.

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

Parameters5/5

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

Despite 100% schema coverage, the description adds significant value: instructs to copy slug verbatim, use dateTime from check_availability, generate clientRequestId once and reuse for dedup, and conditionally provide customerAddress. This far exceeds baseline expectations.

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 tool books an appointment with a local service business, creates a booking record, and adds to the calendar. It distinguishes itself from sibling tools like check_availability and get_business_info, which are query tools.

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 provides explicit conditions for use: only call if the business has 'booking' in its enabledFeatures, and only after using check_availability for the dateTime. It also advises when to ask for address. However, it doesn't explicitly list when not to use it compared to other tools like send_inquiry, but context makes it clear.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/QasperAI/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server