Skip to main content
Glama

Place order

place_order

Place an order. Two modes: (A) VIP wholesale: provide lineUserId of a registered VIP customer. (B) Guest retail: provide customerName, phone, items array, and a delivery address — shippingAddress, shippingProvince and email are all required, and an order missing any of them is rejected. Guest orders are priced at tier-linked retail rates (server-calculated) and the total is final at this point; a confirmation email with a PromptPay QR follows. Without customerKey or a personal token URL connection, every order creates a new customer with a new customerKey, even when the email was used before (orders are never linked to an existing customer by email); the new key is returned in the response and the confirmation email — tell the user to save it. Inventory is NOT deducted — orders go to the pick queue for staff fulfillment. Delivery is available within Thailand only, so the province must be a Thai one. International addresses are not accepted. (C) LINE VIP customer connected through a personal token URL (get_catalog says ordering is available in this chat): send vipItems only — one entry per item, with fishName, status and tier exactly as get_catalog shows them and the quantity in the form get_catalog gives for that item (bands, packs or kg). The server calculates prices, shipping and the total; the total is an estimate, billing is by invoice after picking, and no payment is taken now. Call with dryRun: true first, show the user the lines and the estimate, and place the order only after the user confirms.

Input Schema

NameRequiredDescriptionDefault
langNo(Guest mode, optional) Language of the confirmation email. Defaults to en.
memoNo(Optional) Order notes
emailNo(Guest mode) Email address for the order confirmation — required for guest orders
itemsNo(Guest mode) Order items
phoneNo(Guest mode) Contact phone number
dryRunNo(LINE VIP mode only) true = return the lines and the estimated total without placing the order
fishNameNo(VIP mode) Fish name (romaji)
totalThbNo(VIP mode) Total amount in THB
vipItemsNo(LINE VIP mode only) Order lines for a LINE VIP customer connected through a personal token URL. Ignored in other modes.
lineUserIdNoLINE user ID of VIP customer (VIP mode). Omit for guest mode.
referrerIdNo(Optional) Referrer ID for tracking
customerKeyNo(Guest mode) Registered customer key (from register_customer). Resolves name/phone/shipping automatically. If you are connected through a personal token URL the customer is already resolved: send items[] alone and omit this, customerName, phone and lineUserId.
requestedKgNo(VIP mode) Requested weight in kg
customerNameNo(Guest mode) Customer name
shippingAddressNo(Guest mode) Street address and building name — required for guest orders
shippingDistrictNo(Guest mode) Hua Hin / Pranburi 等の地元配達判定に必須。住所に含まれていれば自動判定するが、明示推奨 / District name. Required to detect local (free) delivery for Hua Hin / Pranburi. Auto-detected from shippingAddress when present, but explicit value recommended.
shippingProvinceNo(Guest mode) Thai province name, used for shipping cost — required for guest orders. Thailand only.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / vipItems / items / properties / kg / description
      Previous value: -"Kilograms in steps of 0.5 — only for items ordered by kg"New value: +"Kilograms in steps of 0.5, or exactly the stock shown — only for items ordered by kg"
  2. Changed2 schema fields changed
    • addedInput schema / properties / dryRun
      Added value: +{
      +  "description": "(LINE VIP mode only) true = return the lines and the estimated total without placing the order",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / vipItems
      Added value: +{
      +  "description": "(LINE VIP mode only) Order lines for a LINE VIP customer connected through a personal token URL. Ignored in other modes.",
      +  "items": {
      +    "properties": {
      +      "bands": {
      +        "additionalProperties": {
      +          "type": "number"
      +        },
      +        "description": "Packs per weight band, e.g. {\"140-180g\": 3} — only for items get_catalog marks as ordered by bands",
      +        "type": "object"
      +      },
      +      "fishName": {
      +        "type": "string"
      +      },
      +      "kg": {
      +        "description": "Kilograms in steps of 0.5 — only for items ordered by kg",
      +        "type": "number"
      +      },
      +      "packs": {
      +        "description": "Total packs — only for items ordered by packs",
      +        "type": "number"
      +      },
      +      "status": {
      +        "description": "As shown in get_catalog for this item",
      +        "type": "string"
      +      },
      +      "tier": {
      +        "description": "As shown in get_catalog (All for cooking, prepared and whole cooking items)",
      +        "enum": [
      +          "Fresh",
      +          "Tier1",
      +          "Tier2",
      +          "All"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "fishName",
      +      "status",
      +      "tier"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / items / items / properties / status
      Added value: +{
      +  "description": "Cut / preparation of the fish (e.g. \"sashimi fillet\"). Pass the status shown for this fish in get_catalog, verbatim. Optional: when omitted the server fills it in from stock, and asks which one if more than one cut is available.",
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / shippingDistrict / description
      Previous value: -"(Guest mode, optional) District name"New value: +"(Guest mode) Hua Hin / Pranburi 等の地元配達判定に必須。住所に含まれていれば自動判定するが、明示推奨 / District name. Required to detect local (free) delivery for Hua Hin / Pranburi. Auto-detected from shippingAddress when present, but explicit value recommended."
  5. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Given readOnlyHint=false and idempotentHint=false, the description adds substantial non-obvious context: inventory is NOT deducted (orders go to the pick queue), guest totals are final while VIP totals are estimates billed by invoice, a PromptPay QR confirmation email follows guest orders, and every order without customerKey creates a new customer even for a reused email. It does not contradict any annotation. It stops short of 5 because failure handling beyond guest-address rejection is unstated.

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 purpose and mode routing, and most sentences carry real load (permissions, pricing finality, inventory, delivery scope). Minor friction: it announces "Two modes" then lists three (A/B/C), and the customerKey guidance is partially duplicated between the description and the parameter doc.

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 17-parameter, no-output-schema, openWorld mutation tool this is close to complete: it covers mode prerequisites, required guest fields, pricing semantics, delivery geography, dryRun, and one returned value (customerKey). What remains thin is the full response shape — the description notes the key is returned but does not say what else comes back for either mode, leaving the agent to infer.

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

Parameters5/5

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

Despite 100% schema coverage, the description supplies the decisive fact the schema omits: the schema declares zero required parameters, yet the description states shippingAddress, shippingProvince and email are all mandatory for guest orders and that a guest order missing any is rejected. It also constrains shippingProvince to a Thai province and explains that vipItems entries must mirror get_catalog's fishName/status/tier and quantity form verbatim, which is meaning beyond field-level docs.

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?

Opens with a specific verb+resource ("Place an order") and immediately enumerates three distinct order paths (VIP wholesale via lineUserId, guest retail, LINE VIP via personal token URL), each with its own identifying input. It also differentiates from siblings by naming get_catalog (for ordering availability and item shapes) and register_customer (for customerKey), so an agent can tell which tool starts which flow.

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?

Explicit selection rules per mode: use lineUserId for registered VIPs, customerName/phone/items/address/email for guests, vipItems alone when connected through a personal token URL. It goes further with a procedural rule — "Call with dryRun: true first, show the user the lines and the estimate, and place the order only after the user confirms" — which is exactly the when-and-how guidance an agent needs before a mutating call.

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