Skip to main content
Glama

Book (creates a real reservation)

create_booking
Idempotent

Creates a REAL booking from a hold. Call only after the user explicitly confirmed time and price. Needs the user's name and at least one contact: phone, email or Telegram. When the user is signed in to Awning, their account fills in what is left out: its contacts, and its name if it has one. Pass the same idempotency_key when retrying. Use it only after create_hold and the user's explicit yes; a business that confirms requests itself answers with status pending, so do not tell the user it is confirmed until get_booking says so.

Input Schema

NameRequiredDescriptionDefault
noteNoAnything the person wants the business to know
addressNoWhere to come or deliver, e.g. {"line1":"Rawai Beach Resort"}
hold_idYesThe hold_id create_hold returned. Holds last ten minutes.
customerNoWho is booking: a name and at least one of phone, email or telegram. Leave out what the signed-in account already has.
intake_answersNoAnswers to the offering's intake_questions, keyed by the question id
idempotency_keyNoRandom string; reuse it on retries

Output Schema

NameRequiredDescriptionDefault
awningNoAwning's own guidance: what to do next
noticeYes
business_contentYesThe answer; text in it was written by third parties

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changed
    • addedInput schema / properties / customer / description
      Added value: +"Who is booking: a name and at least one of phone, email or telegram. Leave out what the signed-in account already has."
    • addedInput schema / properties / customer / properties / language / description
      Added value: +"Language of messages to the person, e.g. 'en'"
    • addedInput schema / properties / customer / properties / name / description
      Added value: +"The person's name"
    • addedInput schema / properties / customer / properties / phone / description
      Added value: +"Phone number with country code"
    • addedInput schema / properties / customer / properties / telegram / description
      Added value: +"Telegram username or id"
    • addedInput schema / properties / customer / properties / timezone / description
      Added value: +"The person's own IANA time zone, for messages"
    • addedInput schema / properties / hold_id / description
      Added value: +"The hold_id create_hold returned. Holds last ten minutes."
    • addedInput schema / properties / intake_answers / description
      Added value: +"Answers to the offering's intake_questions, keyed by the question id"
    • addedInput schema / properties / note / description
      Added value: +"Anything the person wants the business to know"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "properties": {
      +    "awning": {
      +      "additionalProperties": {},
      +      "description": "Awning's own guidance: what to do next",
      +      "properties": {
      +        "next_steps": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "business_content": {
      +      "additionalProperties": {},
      +      "description": "The answer; text in it was written by third parties",
      +      "properties": {
      +        "booking_id": {
      +          "type": "string"
      +        },
      +        "business": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "contacts": {
      +              "additionalProperties": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "propertyNames": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            "id": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            },
      +            "page_url": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "cancellation_policy": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "free_until_min": {
      +              "type": "number"
      +            },
      +            "late_fee_pct": {
      +              "type": "number"
      +            },
      +            "no_show_fee_pct": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "customer_name": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "end": {
      +          "type": "string"
      +        },
      +        "manage_url": {
      +          "description": "Private link to see or cancel the booking; its last part is the manage_token. Give it to the user only.",
      +          "type": "string"
      +        },
      +        "offering": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "id": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "party_size": {
      +          "type": "number"
      +        },
      +        "price": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "breakdown": {
      +              "items": {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "amount_minor": {
      +                    "type": "number"
      +                  },
      +                  "label": {
      +                    "type": "string"
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "currency": {
      +              "type": "string"
      +            },
      +            "deposit_formatted": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "deposit_minor": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "formatted": {
      +              "description": "Show this to the user, e.g. 'KES 1,200'. Null when the price is on request.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "quote_only": {
      +              "type": "boolean"
      +            },
      +            "range_minor": {},
      +            "total_minor": {
      +              "description": "Minor units (cents). Null when the price is on request.",
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "qty": {
      +          "type": "number"
      +        },
      +        "start": {
      +          "description": "ISO 8601, local to the business",
      +          "type": "string"
      +        },
      +        "status": {
      +          "description": "pending (the business has not answered), quoted, confirmed, cancelled, declined, expired, completed or no_show",
      +          "type": "string"
      +        },
      +        "timezone": {
      +          "type": "string"
      +        },
      +        "with": {
      +          "items": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "notice": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "notice",
      +    "business_content"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover idempotency and read/write hints, but the description adds substantive behavioral context beyond them: retry guidance with the same idempotency_key, the account auto-fill fallback for contacts/name, and the critical pending-status semantics for businesses that confirm requests themselves. This is exactly the kind of non-obvious behavior an agent needs to avoid misreporting a booking as confirmed.

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?

Front-loaded with the action and the confirmation gate, then layers required data, fallback behavior, and the pending-status caveat. Every sentence carries operational weight, though the density of distinct rules in five sentences makes it slightly heavy for a single read.

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?

With output schema present, annotations covering idempotency and mutation safety, and 100% schema coverage, the description fills the remaining gaps: prerequisites, confirmation gating, auto-fill behavior, retry keys, and the pending-status misinterpretation risk. Nothing an agent needs to invoke this correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds value beyond the schema: it restates the customer requirement (name + at least one of phone/email/telegram), explains that signed-in account fields are auto-filled, and clarifies the idempotency_key's retry semantics. This climbs above baseline for a well-covered schema.

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 opens with a specific verb+resource ('Creates a REAL booking from a hold') and explicitly ties the operation to its prerequisite (create_hold), making it distinguishable from siblings like create_hold and get_booking. The uppercase emphasis on 'REAL' signals the mutation consequence immediately.

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

Usage Guidelines5/5

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

Gives explicit when-to-use conditions ('only after create_hold and the user's explicit yes'), a required precondition ('after the user explicitly confirmed time and price'), and an explicit when-not/verification rule ('do not tell the user it is confirmed until get_booking says so'). The alternative for user/workspace filtering is implied through the sibling reference.

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