Skip to main content
Glama

GridGarden purchase via AI assistant (temporarily unavailable)

studio_bom_to_cart
Destructive

Purchasing through an AI assistant is temporarily unavailable. The customer can buy on https://gridgarden.eu. This tool does not create a cart; use studio_pricing_quote for the bill of materials and price.

Input Schema

NameRequiredDescriptionDefault
shapeYesDesign type and the dimension fields it needs (all in mm, auto-snapped to the 60mm build grid): rectangle → length + width; lshape → length1 + width1 + length2 + width2; ushape → topLength + topWidth + arm1Length + arm1Width + arm2Length + arm2Width; wall → wallLength. Layers: raised beds 2–13, walls 1–25. Call studio_templates_list for ready example dimensions.
widthNoRectangle: outer width in mm.
layersYesNumber of brick layers. Raised beds 2-13, walls 1-25 (1 = a single 60mm top-cap course). Each layer ≈120mm tall (top layer +60mm).
lengthNoRectangle: outer length in mm.
width1NoL-shape: first leg width in mm.
width2NoL-shape: second leg width in mm.
countryNoDelivery market as an ISO-3166-1 alpha-2 code (e.g. "DE", "AT", "SK"). Prices differ by market: SK is the base price list; every other market (CZ included) has its own list where structural pieces cost a little more (weight-based delivery surcharge; connector pins stay at base). Ask which country the order ships to; omit only if unknown — that returns SK (base) prices.
length1NoL-shape: first leg length in mm.
length2NoL-shape: second leg length in mm.
topWidthNoU-shape: back (top) width in mm.
arm1WidthNoU-shape: arm 1 width in mm.
arm2WidthNoU-shape: arm 2 width in mm.
topLengthNoU-shape: back (top) length in mm.
arm1LengthNoU-shape: arm 1 length in mm.
arm2LengthNoU-shape: arm 2 length in mm.
utm_sourceNoAttribution source recorded on the Shopify cart (UTM). Defaults to "mcp".
wallLengthNoWall: single straight segment length in mm.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / country / description
      Previous value: -"Delivery market as an ISO-3166-1 alpha-2 code (e.g. \"DE\", \"AT\", \"SK\"). Prices differ by market: SK and CZ are base, every other EU market adds €1 per structural piece. Ask which country the order ships to; omit only if unknown — that returns base (SK/CZ) prices."New value: +"Delivery market as an ISO-3166-1 alpha-2 code (e.g. \"DE\", \"AT\", \"SK\"). Prices differ by market: SK is the base price list; every other market (CZ included) has its own list where structural pieces cost a little more (weight-based delivery surcharge; connector pins stay at base). Ask which country the order ships to; omit only if unknown — that returns SK (base) prices."
    • changedOutput schema / (root)
      Previous value: -{
      -  "$schema": "http://json-schema.org/draft-07/schema#",
      -  "additionalProperties": false,
      -  "properties": {
      -    "cart_id": {
      -      "type": "string"
      -    },
      -    "checkout_url": {
      -      "type": "string"
      -    },
      -    "currency": {
      -      "const": "EUR",
      -      "type": "string"
      -    },
      -    "editor_url": {
      -      "type": "string"
      -    },
      -    "line_items": {
      -      "items": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "quantity": {
      -            "type": "number"
      -          },
      -          "variant_id": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "variant_id",
      -          "quantity"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "price_basis": {
      -      "const": "shopify_cart",
      -      "type": "string"
      -    },
      -    "snapped": {
      -      "items": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "field": {
      -            "type": "string"
      -          },
      -          "requested": {
      -            "type": "number"
      -          },
      -          "used": {
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "field",
      -          "requested",
      -          "used"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "summary": {
      -      "type": "string"
      -    },
      -    "total_eur": {
      -      "type": "number"
      -    },
      -    "total_quantity": {
      -      "type": "number"
      -    }
      -  },
      -  "required": [
      -    "checkout_url",
      -    "cart_id",
      -    "total_eur",
      -    "total_quantity",
      -    "currency",
      -    "price_basis",
      -    "line_items",
      -    "summary",
      -    "editor_url"
      -  ],
      -  "type": "object"
      -}New value: +null
  2. Changed3 schema fields changed
    • addedInput schema / properties / country
      Added value: +{
      +  "description": "Delivery market as an ISO-3166-1 alpha-2 code (e.g. \"DE\", \"AT\", \"SK\"). Prices differ by market: SK and CZ are base, every other EU market adds €1 per structural piece. Ask which country the order ships to; omit only if unknown — that returns base (SK/CZ) prices.",
      +  "maxLength": 2,
      +  "minLength": 2,
      +  "type": "string"
      +}
    • addedOutput schema / properties / price_basis
      Added value: +{
      +  "const": "shopify_cart",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "checkout_url",
      -  "cart_id",
      -  "total_eur",
      -  "total_quantity",
      -  "currency",
      -  "line_items",
      -  "summary",
      -  "editor_url"
      -]New value: +[
      +  "checkout_url",
      +  "cart_id",
      +  "total_eur",
      +  "total_quantity",
      +  "currency",
      +  "price_basis",
      +  "line_items",
      +  "summary",
      +  "editor_url"
      +]
  3. First observed

TDQS

A3.5/5.0
Behavior3/5

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

Against annotations that declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, the description adds genuinely useful state information (no cart is produced, service is offline, buy externally instead). It does not, however, say what invoking the tool actually returns or errors with, nor reconcile the 'does not create a cart' claim with the declared destructive-write/open-world profile, so the agent cannot tell whether calling it fails, no-ops, or still hits Shopify.

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?

Three sentences, zero filler, and the most decision-relevant fact (unavailable) is front-loaded ahead of the redirect. Nothing needs to be trimmed.

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 disabled tool, 'unavailable + buy here + use studio_pricing_quote for BOM/pricing' is close to what an agent needs, and no output schema exists to explain. It is slightly short of complete because the elaborate 17-parameter schema is left orphaned with no statement of whether it is inert, and the failure behavior on invocation is unstated.

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 100% across all 17 parameters (shape enum with per-shape dimensions, layers ranges, country pricing semantics, utm_source), so the schema carries the full parameter burden. The description contributes nothing about any parameter — baseline 3 is the correct ceiling when the schema already does all the work.

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

Purpose3/5

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

The description never states what the tool does (convert a bill of materials into a Shopify cart) — it only negates it: 'This tool does not create a cart.' Its actual operative message is a status statement ('purchasing through an AI assistant is temporarily unavailable') plus a redirect. An agent can infer the tool is a dead end, but the purpose is defined by negation plus the name and title rather than by the description itself.

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?

It gives explicit routing: the customer should buy on https://gridgarden.eu, and the agent should use studio_pricing_quote 'for the bill of materials and price' — a named alternative with its own scope. The one gap is that it never says outright 'do not call this tool' or what happens if it is invoked, leaving the exclusion implicit in 'temporarily unavailable.'

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