Skip to main content
Glama

hold

Reserve one window from a quote: the quoted job becomes held (same transaction_id). An expired or replaced quote answers QUOTE_EXPIRED: quote again. M-19: pick a window of the quote's job_hours; a window of another length, or one no longer in the business's hours, answers OUTSIDE_HOURS. M-19b: the hold counts the job's cleaners (job_people) against the business's cleaners in all and keeps its time between jobs; a window that no longer fits answers CAPACITY_FULL. Holds expire; book before hold_expires_at. Refused with PRICE_MISMATCH when the quote does not state exactly the window's conditions (weekend, evening, holiday, same-day, next-day): quote again as the message says. M-18: the answer says what it holds (quote_id, price, window, booking_authority); a hold locks the price. If the business changed since the quote the job is judged again: a lower price is held and price_changed says so; a higher one is refused PRICE_CHANGED (old and new amount, reasons, a fresh quote_token) unless accept_price_up_to covers it. HOLD_EXISTS: you already hold this job at this business (transaction_id). BUSINESS_UNAVAILABLE: it stopped taking jobs or no longer does this one. Recoverable refusals carry alternatives (other times, other businesses; never one that breaks a must). Dead ends also carry if_changed: up to 2 businesses that could do the job if the customer gave up ONE thing (change.word), with the price then; never holdable from the item (no token, no slot): ask the customer, then search again without that word. Holds you let run out count: five in 24 hours and the next answers RATE_LIMITED with retry_after_seconds. M-21: a time that is too soon (notice, or the business's same-day / next-day No) answers INSUFFICIENT_NOTICE with error.earliest (RFC 3339, business offset): pick a later window or quote again; a weekend, evening or holiday No answers OUTSIDE_HOURS.

Input Schema

NameRequiredDescriptionDefault
quote_tokenYes
allocation_idYes
idempotency_keyYesUnique per write request (a UUID). Retrying with the same key returns the original result.
accept_price_up_toNoOptional. Your own ceiling for this call: a higher price at or under it is held and reported.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

B3.3/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so thoroughly: it details hold expiration, price locking, capacity checks, rate limiting, and numerous refusal codes (QUOTE_EXPIRED, OUTSIDE_HOURS, CAPACITY_FULL, PRICE_MISMATCH, etc.) with their meanings and recovery options. This is exceptionally transparent about tool behavior.

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

Conciseness2/5

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

The description is a single dense paragraph cramming many edge cases and error codes. It is not front-loaded for quick scanning and lacks structure (e.g., bullet points or headings). While information-dense, it is far from concise and could be significantly more digestible.

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?

For a complex, stateful tool with no annotations and no output schema, the description covers behavior comprehensively, including return values ('the answer says what it holds') and recovery paths. The main gap is lack of explanation for two required parameters, but overall contextual completeness is strong.

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

Parameters2/5

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

Schema description coverage is 50%; idempotency_key and accept_price_up_to have descriptions, but quote_token and allocation_id do not. The description mentions quote_token only in passing ('a fresh quote_token') and never explains allocation_id. It does not compensate for the missing parameter documentation, leaving required parameters semantically unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: 'Reserve one window from a quote: the quoted job becomes held'. This clearly distinguishes it from siblings like book (which finalizes a booking) and quote (which produces a quote). However, it does not explicitly name any sibling tool or contrast its purpose, so it falls short of the top score.

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

Usage Guidelines2/5

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

The description never says when to use this tool versus alternatives such as book or quote. It implies a workflow ('book before hold_expires_at') but provides no explicit guidance on prerequisites, when to prefer hold over book, or when not to use it. Usage must be inferred entirely from error behaviors.

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