Skip to main content
Glama

Place order

place_order
Idempotent

Place the order with the shop (like the checkout). Only after the customer confirmed the quoted order and accepted the terms (terms_url). Paid by card in advance on the shop's order page: returns the order number and order_url (with "Betal nu"; the shop gets the order when paid). The customer gets a confirmation e-mail when paid. With products with an age limit and no approved age_check_id, nothing is ordered: returns status age_check_required with the AltID card; call again with age_check_id when the age is confirmed.

Input Schema

NameRequiredDescriptionDefault
dateYesYYYY-MM-DD (from available_times)
shopNoThe "shop" value from find_shops (not needed on a shop's own address <shop>.lenius.app/mcp)
timeYesHH:MM (from available_times)
itemsYes
addressNoRequired for delivery
commentNoA note for the shop, e.g. "no onions"
customerNoRequired unless the customer is logged in on this shop (then taken from the account; my_profile shows it)
fulfillmentYes
other_stopsNoThe other orders you are placing for the customer in this conversation (other shops, same day): used only to warn when they are too far apart in time (trip_warnings). Nothing is looked up about the customer.
age_check_idNoProducts with an age limit: the approved age check (from start_age_check or the age_check_required card); one age check can be reused for 30 minutes across shops
accepted_termsYestrue when the customer has accepted the shop's terms (terms_url)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / customer / description
      Added value: +"Required unless the customer is logged in on this shop (then taken from the account; my_profile shows it)"
    • changedInput schema / required
      Previous value: -[
      -  "fulfillment",
      -  "date",
      -  "time",
      -  "items",
      -  "customer",
      -  "accepted_terms"
      -]New value: +[
      +  "fulfillment",
      +  "date",
      +  "time",
      +  "items",
      +  "accepted_terms"
      +]
  2. Changed1 schema field changed
    • addedInput schema / properties / other_stops
      Added value: +{
      +  "description": "The other orders you are placing for the customer in this conversation (other shops, same day): used only to warn when they are too far apart in time (trip_warnings). Nothing is looked up about the customer.",
      +  "items": {
      +    "properties": {
      +      "address": {
      +        "description": "Required for delivery",
      +        "properties": {
      +          "city": {
      +            "maxLength": 60,
      +            "minLength": 2,
      +            "type": "string"
      +          },
      +          "postal_code": {
      +            "maxLength": 10,
      +            "minLength": 3,
      +            "type": "string"
      +          },
      +          "street": {
      +            "description": "Street and number",
      +            "maxLength": 120,
      +            "minLength": 2,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "street",
      +          "postal_code",
      +          "city"
      +        ],
      +        "type": "object"
      +      },
      +      "date": {
      +        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +        "type": "string"
      +      },
      +      "fulfillment": {
      +        "enum": [
      +          "pickup",
      +          "delivery"
      +        ],
      +        "type": "string"
      +      },
      +      "shop": {
      +        "description": "The \"shop\" value from find_shops",
      +        "maxLength": 100,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "time": {
      +        "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "shop",
      +      "fulfillment",
      +      "date",
      +      "time"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 10,
      +  "type": "array"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / age_check_id
      Added value: +{
      +  "description": "Products with an age limit: the approved age check (from start_age_check or the age_check_required card); one age check can be reused for 30 minutes across shops",
      +  "maxLength": 64,
      +  "minLength": 1,
      +  "type": "string"
      +}
  4. Changed2 schema fields changed
    • changedInput schema / properties / items / items / properties / options / description
      Previous value: -"Answers to the product's options from get_menu (option_id + choice_id, or option_id + text). Required options must be answered; ask the customer, never pick for them."New value: +"Answers to the product's options from get_menu (option_id + choice_id, option_id + text, or option_id + choices for choose_many). Required options must be answered; ask the customer, never pick for them."
    • changedInput schema / properties / items / items / properties / options / items / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "choice_id": {
      -        "description": "choice_id from get_menu",
      -        "maxLength": 32,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "option_id": {
      -        "maxLength": 32,
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "option_id",
      -      "choice_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "option_id": {
      -        "maxLength": 32,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "text": {
      -        "description": "The customer's own words, e.g. \"uden løg\"",
      -        "maxLength": 500,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "option_id",
      -      "text"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "choice_id": {
      +        "description": "choice_id from get_menu",
      +        "maxLength": 32,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "option_id": {
      +        "maxLength": 32,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "option_id",
      +      "choice_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "option_id": {
      +        "maxLength": 32,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "text": {
      +        "description": "The customer's own words, e.g. \"uden løg\"",
      +        "maxLength": 500,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "option_id",
      +      "text"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "choices": {
      +        "description": "choose_many: the chosen choices; the total must be between min_total and max_total",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "choice_id": {
      +              "maxLength": 32,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "quantity": {
      +              "description": "1 unless the option has quantities",
      +              "maximum": 100,
      +              "minimum": 1,
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "choice_id",
      +            "quantity"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 100,
      +        "type": "array"
      +      },
      +      "option_id": {
      +        "maxLength": 32,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "option_id",
      +      "choices"
      +    ],
      +    "type": "object"
      +  }
      +]
  5. Changed1 schema field changed
    • addedInput schema / properties / items / items / properties / options
      Added value: +{
      +  "description": "Answers to the product's options from get_menu (option_id + choice_id, or option_id + text). Required options must be answered; ask the customer, never pick for them.",
      +  "items": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": false,
      +        "properties": {
      +          "choice_id": {
      +            "description": "choice_id from get_menu",
      +            "maxLength": 32,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "option_id": {
      +            "maxLength": 32,
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "option_id",
      +          "choice_id"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "properties": {
      +          "option_id": {
      +            "maxLength": 32,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "text": {
      +            "description": "The customer's own words, e.g. \"uden løg\"",
      +            "maxLength": 500,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "option_id",
      +          "text"
      +        ],
      +        "type": "object"
      +      }
      +    ]
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
  6. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the payment model (card in advance on the shop's order page), when the shop receives the order, the confirmation e-mail trigger, and the age-check failure behavior. This is substantial behavioral context for a tool that performs a real commercial action.

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 dense but appropriate for a complex checkout workflow. It is front-loaded with the main action and follows with payment, confirmation, and age-check conditions, though the single paragraph could be more scannable.

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 an 11-parameter, nested, no-output-schema tool, the description covers the critical workflow, payment state, key return values, and the important age-check fallback. It does not describe every failure mode or the role of other_stops, but the schema covers those details adequately.

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

Parameters3/5

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

Schema description coverage is high at 82%, so the schema already explains most parameters. The description reinforces accepted_terms and age_check_id semantics but largely repeats what those schema descriptions already say, so it meets the baseline rather than adding much new parameter-level meaning.

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?

The description states a specific verb and resource: placing an order with a shop, framed as checkout. It distinguishes itself from the quote step by requiring the customer to have confirmed the quoted order and accepted terms, and it names the key return values (order number, order_url).

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 gives explicit preconditions: only after the customer confirmed the quoted order and accepted terms. It also describes the age-limit branch clearly: without an approved age_check_id nothing is ordered, and the agent should call again with age_check_id once age is confirmed.

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