Skip to main content
Glama

Lokuli: book local pros and get prices

Book an appointment (confirmed by text)

book_appointment

Holds an open time at a business for a person and texts them a link to confirm it. Nothing is booked, and the business isn't told, until they tap Confirm within 15 minutes; otherwise the time is released. After they confirm, the business accepts the request (or it's confirmed at once at instant-book businesses). Payment is at the business. Requires the person's name and US mobile number; the confirmation link is texted to that number. Businesses that take a card when booking return a booking page link instead of a hold.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "business": "<business>",
      "service_id": "<service_id>",
      "start": "<start>",
      "name": "<name>",
      "phone": "<phone>"
    },
    "name": "book_appointment"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameYesThe person's name
emailNoOptional email for the business's confirmation
notesNoOptional note for the business (300 characters max)
phoneYesThe person's US mobile number; the confirmation link is texted here
startYesThe open slot's start time (ISO), exactly as listed in the business's open times
businessYesThe business slug or lokuli.com/shop/... link
staff_idNoOptional team member id
service_idYesThe id of the service to book

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / service_id / description
      Previous value: -"A service id from get_business"New value: +"The id of the service to book"
    • changedInput schema / properties / staff_id / description
      Previous value: -"Optional team member id from get_business"New value: +"Optional team member id"
    • changedInput schema / properties / start / description
      Previous value: -"The slot's start exactly as get_available_times returned it (ISO time)"New value: +"The open slot's start time (ISO), exactly as listed in the business's open times"
  2. First observed

TDQS

A4.3/5.0
Behavior5/5

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

Well beyond the annotations: it discloses the 15-minute expiry, that the business is not notified until the person confirms, that the slot is released on timeout, that the business may still need to accept, that payment happens at the business, and that card-required businesses return a link instead of a hold. These are exactly the non-obvious side effects an agent needs before committing.

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 provisional-hold behavior is front-loaded and every sentence carries behavioral weight. The first sentence is dense and the variant behavior arrives last, but nothing is redundant.

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

Completeness4/5

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

With no output schema, the description does the heavy lifting by explaining what comes back in each branch (texted confirmation link vs. booking page link). It does not say what identifier the hold returns or how to check whether the person confirmed, which leaves a small gap for a multi-step flow.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains all eight parameters. The description only restates that name and a US mobile number are required and that the link is texted to that number, adding little beyond the schema's own wording.

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 first sentence states a specific verb (holds an open time) and resource (appointment slot), and immediately clarifies that the hold is provisional. That framing cleanly separates it from read-only siblings like get_available_times and from request_quotes, which does not hold inventory.

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?

It gives a clear triggering context (an open slot exists at a business, person's name and US mobile required) and explains the two business variants: instant-book confirmation versus a booking-page link for card-taking businesses. It stops short of naming which sibling to call first to obtain the slot, or when request_quotes would be preferred.

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