Skip to main content
Glama

Book a delivery

book_delivery
DestructiveIdempotent

Book a $2.99 robot delivery from a registered store in one call. Send store_id, dropoff_address and dropoff_phone; order_ref is the store's own order number (required at an open store); ready_at starts the 2-hour promise and defaults to now. The answer is yes or no now: a decline carries retry_after_seconds and a capacity.available webhook follows when capacity frees. A live key holds the posted price from the organization's Wallet; a test key creates a simulated robot delivery.

Input Schema

NameRequiredDescriptionDefault
parcelNo
metadataNo
ready_atNo
store_idNo
order_refNo
pickup_nameNo
pickup_phoneNo
dropoff_phoneYes
pickup_addressNo
dropoff_addressYes
idempotency_keyYes
robomart_versionNo
declared_value_centsNo
merchant_order_referenceNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedInput schema / anyOf
      Added value: +[
      +  {
      +    "required": [
      +      "store_id"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "pickup_address"
      +    ]
      +  }
      +]
    • addedInput schema / properties / order_ref
      Added value: +{
      +  "maxLength": 200,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / ready_at
      Added value: +{
      +  "format": "date-time",
      +  "type": "string"
      +}
    • changedInput schema / properties / robomart_version / enum
      Previous value: -[
      -  "2026-09-04",
      -  "2026-09-06"
      -]New value: +[
      +  "2026-09-04",
      +  "2026-09-06",
      +  "2026-10-06"
      +]
    • addedInput schema / properties / store_id
      Added value: +{
      +  "format": "uuid",
      +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "pickup_address",
      -  "pickup_name",
      -  "dropoff_address",
      -  "dropoff_phone",
      -  "idempotency_key"
      -]New value: +[
      +  "dropoff_address",
      +  "dropoff_phone",
      +  "idempotency_key"
      +]
  2. Changed4 schema fields changed
    • addedInput schema / properties / dropoff_address / pattern
      Added value: +"\\S"
    • changedInput schema / properties / dropoff_phone / pattern
      Previous value: -"^[0-9+()\\-.\\s]+$"New value: +"^(?=(?:\\D*\\d){7,15}\\D*$)\\+?[0-9()\\-.\\s]+$"
    • addedInput schema / properties / pickup_address / pattern
      Added value: +"\\S"
    • changedInput schema / properties / pickup_phone / pattern
      Previous value: -"^[0-9+()\\-.\\s]+$"New value: +"^(?=(?:\\D*\\d){7,15}\\D*$)\\+?[0-9()\\-.\\s]+$"
  3. Changed13 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • changedInput schema / properties / declared_value_cents / maximum
      Previous value: -9007199254740991New value: +10000000
    • addedInput schema / properties / metadata / additionalProperties / maxLength
      Added value: +500
    • addedInput schema / properties / metadata / maxProperties
      Added value: +20
    • addedInput schema / properties / metadata / propertyNames / maxLength
      Added value: +40
    • addedInput schema / properties / metadata / propertyNames / minLength
      Added value: +1
    • addedInput schema / properties / parcel / additionalProperties
      Added value: +false
    • addedInput schema / properties / parcel / properties / height_in / maximum
      Added value: +200
    • addedInput schema / properties / parcel / properties / length_in / maximum
      Added value: +200
    • addedInput schema / properties / parcel / properties / weight_lb / maximum
      Added value: +1000
    • addedInput schema / properties / parcel / properties / width_in / maximum
      Added value: +200
    • removedInput schema / properties / robomart_version / const
      Removed value: -"2026-09-04"
    • addedInput schema / properties / robomart_version / enum
      Added value: +[
      +  "2026-09-04",
      +  "2026-09-06"
      +]
  4. Changed3 schema fields changed
    • addedInput schema / properties / merchant_order_reference
      Added value: +{
      +  "maxLength": 200,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / pickup_name
      Added value: +{
      +  "maxLength": 120,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "pickup_address",
      -  "dropoff_address",
      -  "idempotency_key"
      -]New value: +[
      +  "pickup_address",
      +  "pickup_name",
      +  "dropoff_address",
      +  "dropoff_phone",
      +  "idempotency_key"
      +]
  5. Changed2 schema fields changed
    • removedInput schema / properties / policy
      Removed value: -{
      -  "enum": [
      -    "allow_roaming",
      -    "on_network_only"
      -  ],
      -  "type": "string"
      -}
    • changedInput schema / properties / robomart_version / const
      Previous value: -"2026-08-27"New value: +"2026-09-04"
  6. First observed

TDQS

A4/5.0
Behavior5/5

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

Annotations already declare non-read-only, idempotent and destructive, but the description adds substantial context beyond them: key-mode behavior (live key holds the posted price from the Wallet, test key simulates), synchronous accept/decline semantics, retry_after_seconds on decline, and a capacity.available webhook. This is the kind of operational detail an agent cannot infer from structured fields.

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 dense sentences, each carrying distinct load (core inputs, order_ref/ready_at semantics, synchronous outcome plus webhook, key-mode pricing). Front-loaded with the essential action and price, with zero filler.

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

Completeness3/5

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

With no output schema and a complex nested request, the description does cover return semantics (yes/no now, retry_after_seconds, webhook follow-up), which is valuable. It omits the pickup_address/store_id either-or path and parcel/declared-value constraints, leaving an agent under-informed about the full request surface.

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 0% across 14 parameters, so the description carries the full burden, and it only explains store_id, dropoff_address, dropoff_phone, order_ref and ready_at. Parcel dimensions, metadata, pickup_* fields, declared_value_cents, robomart_version, merchant_order_reference and the idempotency_key are left undocumented, which is a large gap on a 14-param tool.

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?

States a specific verb (book), resource (robot delivery), price ($2.99), precondition (registered store) and mode (one call). An agent can trivially separate this from cancel_delivery, track_delivery, or find_stores without opening the schema.

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

Usage Guidelines3/5

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

Usage context is implied rather than stated: it assumes store_id comes from a registered store (implying prior find_stores/register_store, but never naming them), and it distinguishes live vs test key behavior. There is no explicit when-not-to-use or alternative routing, so this is minimum viable.

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