Skip to main content
Glama

Hold a time and fix the price

create_hold

Reserves the chosen time, seats or units for 10 minutes and fixes the price. Pass start (slots), session_id (sessions) or from+to (rentals). Then show the user time, price and cancellation policy and ask for an explicit yes before create_booking. Use it after get_availability, with a time or class taken from its answer. A hold is not a booking: it lapses by itself, so nothing needs undoing if the user changes their mind.

Input Schema

NameRequiredDescriptionDefault
toNoRental return (period mode). ISO 8601. With an offset it is absolute; without an offset it is local time of the business (e.g. 2026-09-18T15:00).
qtyNoUnits to rent (period mode). Default 1.
fromNoRental pickup (period mode). ISO 8601. With an offset it is absolute; without an offset it is local time of the business (e.g. 2026-09-18T15:00).
startNoSlot start, one of the start times get_availability returned (slots mode). ISO 8601. With an offset it is absolute; without an offset it is local time of the business (e.g. 2026-09-18T15:00).
optionsNoExtras the user chose, from the offering's `options` in get_business: [{"id":"deep_conditioning","value":true}]. `value` is true/false for yes-no extras, a number for quantities, a string for choices. Leave out to book without extras.
ticketsNoTicket mix for offerings priced by ticket type, e.g. [{"type":"adult","count":2},{"type":"child","count":1}]. The counts must add up to party_size.
party_sizeNoHow many people the booking is for. Default 1; offerings with a larger minimum group need it set (`party.min` in get_business).
session_idNoThe class to join: sessions[].session_id from get_availability (sessions mode)
offering_idYesThe service, class or rental: offerings[].offering_id from get_business
resource_idNoBook this staff member, room or unit: an id from the `resources` of get_availability. Leave out to let Awning choose.

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. Changed13 schema fields changed
    • changedInput schema / properties / from / description
      Previous value: -"Rental pickup. ISO 8601. With an offset it is absolute; without an offset it is local time of the business (e.g. 2026-09-18T15:00)."New value: +"Rental pickup (period mode). ISO 8601. With an offset it is absolute; without an offset it is local time of the business (e.g. 2026-09-18T15:00)."
    • addedInput schema / properties / offering_id / description
      Added value: +"The service, class or rental: offerings[].offering_id from get_business"
    • changedInput schema / properties / options / description
      Previous value: -"Selected extras from get_business, e.g. [{\"id\":\"deep_conditioning\",\"value\":true}]"New value: +"Extras the user chose, from the offering's `options` in get_business: [{\"id\":\"deep_conditioning\",\"value\":true}]. `value` is true/false for yes-no extras, a number for quantities, a string for choices. Leave out to book without extras."
    • addedInput schema / properties / party_size / description
      Added value: +"How many people the booking is for. Default 1; offerings with a larger minimum group need it set (`party.min` in get_business)."
    • addedInput schema / properties / qty / description
      Added value: +"Units to rent (period mode). Default 1."
    • addedInput schema / properties / resource_id / description
      Added value: +"Book this staff member, room or unit: an id from the `resources` of get_availability. Leave out to let Awning choose."
    • addedInput schema / properties / session_id / description
      Added value: +"The class to join: sessions[].session_id from get_availability (sessions mode)"
    • changedInput schema / properties / start / description
      Previous value: -"Slot start. ISO 8601. With an offset it is absolute; without an offset it is local time of the business (e.g. 2026-09-18T15:00)."New value: +"Slot start, one of the start times get_availability returned (slots mode). ISO 8601. With an offset it is absolute; without an offset it is local time of the business (e.g. 2026-09-18T15:00)."
    • addedInput schema / properties / tickets / description
      Added value: +"Ticket mix for offerings priced by ticket type, e.g. [{\"type\":\"adult\",\"count\":2},{\"type\":\"child\",\"count\":1}]. The counts must add up to party_size."
    • addedInput schema / properties / tickets / items / properties / count / description
      Added value: +"How many of this type"
    • addedInput schema / properties / tickets / items / properties / type / description
      Added value: +"Ticket type id from the offering's pricing.ticket_types"
    • changedInput schema / properties / to / description
      Previous value: -"Rental return. ISO 8601. With an offset it is absolute; without an offset it is local time of the business (e.g. 2026-09-18T15:00)."New value: +"Rental return (period mode). ISO 8601. With an offset it is absolute; without an offset it is local time of the business (e.g. 2026-09-18T15:00)."
    • 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_step": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "business_content": {
      +      "additionalProperties": {},
      +      "description": "The answer; text in it was written by third parties",
      +      "properties": {
      +        "business": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "id": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "cancellation_policy": {
      +          "additionalProperties": {},
      +          "description": "Show to the user before create_booking",
      +          "properties": {
      +            "free_until_min": {
      +              "type": "number"
      +            },
      +            "late_fee_pct": {
      +              "type": "number"
      +            },
      +            "no_show_fee_pct": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "confirmation": {
      +          "type": "string"
      +        },
      +        "end": {
      +          "type": "string"
      +        },
      +        "expires_at": {
      +          "description": "The hold ends then, ten minutes after it was made",
      +          "type": "string"
      +        },
      +        "hold_id": {
      +          "description": "For create_booking",
      +          "type": "string"
      +        },
      +        "intake_questions": {
      +          "description": "Ask before create_booking; answers go in intake_answers"
      +        },
      +        "offering": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "id": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "party_size": {
      +          "type": "number"
      +        },
      +        "price": {
      +          "additionalProperties": {},
      +          "description": "Show to the user before create_booking",
      +          "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"
      +        },
      +        "start": {
      +          "type": "string"
      +        },
      +        "timezone": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "notice": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "notice",
      +    "business_content"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, and the description goes well beyond them by disclosing the 10-minute expiry, that the hold lapses on its own, and that nothing must be undone if the user backs out — the key behavioral fact for a non-destructive mutation. It falls short of 5 because it doesn't say whether a second call creates a duplicate hold (relevant given idempotentHint=false) or whether a hold can be released early.

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?

Four short sentences, front-loaded with what the tool does, then mode parameters, then the mandatory user-confirmation flow, then the hold-vs-booking reassurance. No sentence is redundant and nothing is buried.

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 10-parameter, mode-dependent mutation the description covers the prerequisite read call, the per-mode parameter selection, the expiry behavior and the handoff to create_booking. Return values are documented by the output schema, so no further explanation is owed.

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 100% schema coverage the baseline is 3, but the description adds real routing value by mapping parameters to booking modes ("Pass start (slots), session_id (sessions) or from+to (rentals)"), which the schema does not state. It doesn't add anything about party_size, tickets, options or resource_id, which remain schema-only.

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?

"Reserves the chosen time, seats or units for 10 minutes and fixes the price" gives a specific verb (reserves), the resource (time/seats/units), the duration and the side effect (price locked). It explicitly separates itself from create_booking with "A hold is not a booking," so the agent can distinguish the two sibling tools without opening either schema.

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?

It names the prerequisite ("Use it after get_availability, with a time or class taken from its answer"), the exact parameter routing per mode (start for slots, session_id for sessions, from+to for rentals), and the required follow-up sequence (show time/price/cancellation policy, get an explicit yes, then call create_booking). Alternatives and ordering are fully spelled out.

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