Skip to main content
Glama

Surfing Dog Inbox

Place an order

create_order
Idempotent

Order products. Prices are in minor units. A line naming a product (productId or sku) costs the business's price from list_products, and the total follows; a different price you send is only noted for the business. A line naming no product waits for the business to price it. A priced order binds your person only once they confirmed it: without terms_sha nothing is sent, and you get the summary to show them (confirm.summary, confirm.terms_sha); call again with that terms_sha on their clear yes.

Input Schema

NameRequiredDescriptionDefault
keyNoThe person's key (sdkey1_…), if that is all you have: it is exchanged once for a pass, which comes back in identity.passes — keep the pass and send it next time instead. Never stored.
passNoThe person's passes (sdpass1_…), space-separated, at most 8: presented to the network that issued each, so the business recognises the customer. Or send them in the Sdi-Pass header. Never stored.
contactNo
messageNo
payloadYes
terms_shaNoThe fingerprint of the terms your person confirmed (details.terms_sha of the 409 confirm_terms a priced request without it gets). Nothing is sent to the business without it when the request carries a price.
attachmentsNoPhotos or plans of the job: JPEG, PNG, WebP or PDF, at most six of 10 MB each. Inline up to 4 MB each (8 MB a call), else by https address or upload_id. HEIC photos: send them as JPEG. Images are cleaned of where they were taken; a PDF is kept as sent.
idempotency_keyNoSame key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / idempotency_key / description
      Previous value: -"Same key + same request = same answer. Required for agents."New value: +"Same key + same request = same answer. Required for agents. Make it a fresh random UUID per request: a retry of a create with a random key gets its access token again."
  2. Changed8 schema fields changed
    • addedInput schema / properties / attachments
      Added value: +{
      +  "description": "Photos or plans of the job: JPEG, PNG, WebP or PDF, at most six of 10 MB each. Inline up to 4 MB each (8 MB a call), else by https address or upload_id. HEIC photos: send them as JPEG. Images are cleaned of where they were taken; a PDF is kept as sent.",
      +  "items": {
      +    "anyOf": [
      +      {
      +        "properties": {
      +          "upload_id": {
      +            "description": "What POST /v1/uploads answered, within its hour.",
      +            "pattern": "^upl_[A-Za-z0-9_-]{16,48}$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "upload_id"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "properties": {
      +          "data_base64": {
      +            "description": "The file's bytes in base64: JPEG, PNG, WebP or PDF, up to 4 MB (8 MB in one call).",
      +            "maxLength": 5592412,
      +            "minLength": 4,
      +            "type": "string"
      +          },
      +          "name": {
      +            "description": "The file's name, for the business to recognise it.",
      +            "maxLength": 200,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "data_base64"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "properties": {
      +          "name": {
      +            "maxLength": 200,
      +            "type": "string"
      +          },
      +          "url": {
      +            "description": "An https address the file can be fetched from, up to 10 MB.",
      +            "format": "uri",
      +            "maxLength": 2048,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "url"
      +        ],
      +        "type": "object"
      +      }
      +    ]
      +  },
      +  "maxItems": 6,
      +  "type": "array"
      +}
    • addedInput schema / properties / payload / properties / fulfil
      Added value: +{
      +  "properties": {
      +    "etaMin": {
      +      "maximum": 1440,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "fee": {
      +      "properties": {
      +        "currency": {
      +          "maxLength": 3,
      +          "minLength": 3,
      +          "type": "string"
      +        },
      +        "value": {
      +          "description": "Minor units of the currency's own ISO 4217 exponent (minorUnits): 4500 is CA$45.00 or ₹45.00, ¥4,500 in JPY, 4.500 in KWD.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "currency"
      +      ],
      +      "type": "object"
      +    },
      +    "geo": {
      +      "description": "The delivery address's point, when you have it: a ring zone is checked against it.",
      +      "properties": {
      +        "latitude": {
      +          "maximum": 90,
      +          "minimum": -90,
      +          "type": "number"
      +        },
      +        "longitude": {
      +          "maximum": 180,
      +          "minimum": -180,
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "latitude",
      +        "longitude"
      +      ],
      +      "type": "object"
      +    },
      +    "method": {
      +      "enum": [
      +        "pickup",
      +        "delivery",
      +        "dine_in"
      +      ],
      +      "type": "string"
      +    },
      +    "slot": {
      +      "properties": {
      +        "end": {
      +          "format": "date-time",
      +          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      +          "type": "string"
      +        },
      +        "start": {
      +          "format": "date-time",
      +          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "start"
      +      ],
      +      "type": "object"
      +    },
      +    "zone": {
      +      "properties": {
      +        "name": {
      +          "maxLength": 60,
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "name"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "method"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / payload / properties / kitchen
      Added value: +{
      +  "properties": {
      +    "hold": {
      +      "items": {
      +        "enum": [
      +          "allergens_unconfirmed",
      +          "over_cap",
      +          "made_to_order",
      +          "owner_accepts"
      +        ],
      +        "type": "string"
      +      },
      +      "maxItems": 4,
      +      "type": "array"
      +    },
      +    "instant": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "instant",
      +    "hold"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / payload / properties / orderedItem / items / properties / brief
      Added value: +{
      +  "properties": {
      +    "flavour": {
      +      "maxLength": 80,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "message": {
      +      "description": "The writing on it, within the length the business allows.",
      +      "maxLength": 200,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "servings": {
      +      "maximum": 500,
      +      "minimum": 1,
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / payload / properties / orderedItem / items / properties / note
      Added value: +{
      +  "maxLength": 140,
      +  "type": "string"
      +}
    • addedInput schema / properties / payload / properties / orderedItem / items / properties / options
      Added value: +{
      +  "items": {
      +    "properties": {
      +      "choiceId": {
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "groupId": {
      +        "maxLength": 64,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 120,
      +        "type": "string"
      +      },
      +      "portion": {
      +        "description": "On an item made in halves: whole, left or right.",
      +        "enum": [
      +          "whole",
      +          "left",
      +          "right"
      +        ],
      +        "type": "string"
      +      },
      +      "priceDelta": {
      +        "properties": {
      +          "currency": {
      +            "maxLength": 3,
      +            "minLength": 3,
      +            "type": "string"
      +          },
      +          "value": {
      +            "description": "Minor units of the currency's own ISO 4217 exponent (minorUnits): 4500 is CA$45.00 or ₹45.00, ¥4,500 in JPY, 4.500 in KWD.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "value",
      +          "currency"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "groupId",
      +      "choiceId"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 40,
      +  "type": "array"
      +}
    • addedInput schema / properties / payload / properties / progress
      Added value: +{
      +  "properties": {
      +    "at": {
      +      "format": "date-time",
      +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      +      "type": "string"
      +    },
      +    "etaAt": {
      +      "description": "When it expects it ready, or at the door.",
      +      "format": "date-time",
      +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      +      "type": "string"
      +    },
      +    "stage": {
      +      "enum": [
      +        "preparing",
      +        "ready",
      +        "out_for_delivery"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "stage",
      +    "at"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / payload / properties / tip
      Added value: +{
      +  "properties": {
      +    "amount": {
      +      "properties": {
      +        "currency": {
      +          "maxLength": 3,
      +          "minLength": 3,
      +          "type": "string"
      +        },
      +        "value": {
      +          "description": "Minor units of the currency's own ISO 4217 exponent (minorUnits): 4500 is CA$45.00 or ₹45.00, ¥4,500 in JPY, 4.500 in KWD.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "currency"
      +      ],
      +      "type": "object"
      +    },
      +    "percent": {
      +      "maximum": 50,
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
  3. Changed3 schema fields changed
    • addedInput schema / properties / payload / properties / orderedItem / items / properties / listPrice
      Added value: +{
      +  "properties": {
      +    "currency": {
      +      "maxLength": 3,
      +      "minLength": 3,
      +      "type": "string"
      +    },
      +    "value": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "value",
      +    "currency"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / payload / properties / personalised
      Added value: +{
      +  "properties": {
      +    "listPrice": {
      +      "properties": {
      +        "currency": {
      +          "maxLength": 3,
      +          "minLength": 3,
      +          "type": "string"
      +        },
      +        "value": {
      +          "maximum": 9007199254740991,
      +          "minimum": 0,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "currency"
      +      ],
      +      "type": "object"
      +    },
      +    "says": {
      +      "maxLength": 200,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "listPrice"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / terms_sha
      Added value: +{
      +  "description": "The fingerprint of the terms your person confirmed (details.terms_sha of the 409 confirm_terms a priced request without it gets). Nothing is sent to the business without it when the request carries a price.",
      +  "pattern": "^[A-Za-z0-9_-]{43}$",
      +  "type": "string"
      +}
  4. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations, the description discloses that product lines use the business’s list price, unpriced lines wait for business pricing, and a priced order is not sent or bound without terms_sha. It also explains the confirmation summary returned for the user, which is meaningful behavioral context for a write tool.

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 description is compact and front-loads purpose and pricing rules, with no obvious filler. The pricing sentence is dense but earns its place given the complexity of the order-pricing and confirmation semantics.

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?

For a complex write tool with no output schema, the description explains the confirmation summary but not the successful order response or broader return shape. Other nested parameters rely on the schema, leaving a clear output-side gap even though the critical confirmation flow is covered.

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?

The description adds significant meaning beyond the schema for orderedItem: productId/sku pricing, total-price derivation, and the effect of sending a different price. It also explains the terms_sha confirmation gate, while the schema already documents key, pass, attachments, and idempotency_key.

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?

“Order products” names a specific action and resource, and the pricing explanation distinguishes the tool from list_products by making list_products the price source rather than the order path. An agent can identify this as the product-ordering write operation.

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?

The two-step confirmation flow is explicit: call without terms_sha to get confirm.summary and confirm.terms_sha, then call again only after a clear yes. It does not explicitly route against sibling alternatives such as request_quote or make_offer, so it is clear context without full when/when-not guidance.

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.