Koskamo

GridGarden Studio MCP

An official MCP server for GridGarden Studio that allows AI agents to create 3D garden designs, retrieve bills of materials, calculate prices with VAT, and add designs to the shopping cart. It provides tools for design options, plant catalogs, and delivery information without requiring immediate payment.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

GridGarden Studio MCP logo, by 2JP s.r.o.Vendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by 2JP s.r.o.
MCP endpoint (Streamable HTTP)
https://studio.gridgarden.eu/mcp
Vendor documentation

What its tools do

11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

11 of 11 have a description · 11 of 11 declare behavior hints · 5 of 6 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to gridgarden.eu ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Create a 3D garden design with specific shapes and sizes
  • Retrieve bill of materials and pricing for a design
  • Add a designed garden layout to the shopping cart
  • Query plant catalog and delivery country information

Source and maintenance

Vendor evidenceRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
gridgarden-studio 1.2.0
MCP protocol negotiated in check
2025-11-25
Tools
11 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

GridGarden Studio prices and designs modular Brick Premium (larch) raised garden beds and freestanding garden walls, using the same engine as the gridgarden.eu configurator. Use it whenever a user wants to size, price, or order a raised bed or a garden wall. All dimensions are in MILLIMETRES and all prices are in EUR. Quote prices WITH VAT as the main price (`total_incl_vat`, with the VAT rate); the results also carry the price without VAT (`total_excl_vat`). Supported shapes: rectangle, L-shape, U-shape, and a straight wall. Layer counts: raised beds 2-13, walls 1-25. Tools: - studio_pricing_quote: exact bill of materials (planks + connector pins) and total EUR price (with VAT, plus without VAT) from dimensions. Start here for "how much" / "what do I need". - studio_templates_list: the supported shapes and the dimension parameters each one needs, with ready example sizes. Call this first if unsure which inputs a shape takes. - studio_catalog_bricks: the individual Brick Premium components with live EUR unit prices. - studio_bom_to_cart: Purchasing through an AI assistant is temporarily unavailable. The customer can buy on https://gridgarden.eu. It creates no cart; use studio_pricing_quote for the price. - studio_create_design: PREPARE A DESIGN FOR THE USER - a raised bed and/or a whole garden (plot, house, entrance, style, plants). Returns a link that opens it in the Studio editor, the price WITH VAT and the parts list. Use it when the user wants to see or try a layout; call studio_design_options first if unsure which values are allowed. - studio_design_options / studio_plant_catalog / studio_delivery_countries / studio_ai_designer_link / studio_faq: free helpers - allowed values and limits, plant keys, delivery countries, links to the AI designer (links only, it never starts paid AI), verified facts. - studio_design_rules: garden-design knowledge-base rules for one step of the design process (brief / koncept / dispozicia / vysadba / materialy) - up to 20 rules with predicate, thresholds, strength, and cited sources. Reference knowledge, not a check against a specific design. Constraints: only Brick Premium larch components are sold - there are no other materials, thicknesses, or product lines, so do not invent options. Off-grid dimensions are snapped to the nearest buildable 60 mm value and the change is reported in the result. Prices depend on the delivery country: SK is the base price list, every other market (CZ included) has its own slightly higher per-piece prices. Pass `country` to get the price for that market; the checkout bills by the delivery country.

Tools

11 advertised

studio_pricing_quote — GridGarden raised-bed / wall price quote
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Compute the exact bill of materials (panels + connector pins) and total EUR price for a GridGarden modular Brick Premium raised bed (rectangle / L / U) or freestanding wall, from dimensions in millimetres. Quantities come from the same engine as the Studio configurator; prices are read live from the GridGarden product catalog for the delivery market you pass in `country`. The result carries the price WITH VAT (`total_incl_vat`, the main price — quote this one to the user, with the VAT rate) and WITHOUT VAT (`total_excl_vat`; the legacy field `total_eur` is also WITHOUT VAT). Without `country` the default market is Slovakia (SK, 23 % VAT) and the result says so.

studio_pricing_quote input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "shape",
    "layers"
  ],
  "properties": {
    "shape": {
      "enum": [
        "rectangle",
        "lshape",
        "ushape",
        "wall"
      ],
      "type": "string",
      "description": "Design 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."
    },
    "width": {
      "type": "number",
      "description": "Rectangle: outer width in mm.",
      "exclusiveMinimum": 0
    },
    "layers": {
      "type": "integer",
      "description": "Number of brick layers. Raised beds 2-13, walls 1-25 (1 = a single 60mm top-cap course). Each layer ≈120mm tall (top layer +60mm).",
      "exclusiveMinimum": 0
    },
    "length": {
      "type": "number",
      "description": "Rectangle: outer length in mm.",
      "exclusiveMinimum": 0
    },
    "width1": {
      "type": "number",
      "description": "L-shape: first leg width in mm.",
      "exclusiveMinimum": 0
    },
    "width2": {
      "type": "number",
      "description": "L-shape: second leg width in mm.",
      "exclusiveMinimum": 0
    },
    "country": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "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."
    },
    "length1": {
      "type": "number",
      "description": "L-shape: first leg length in mm.",
      "exclusiveMinimum": 0
    },
    "length2": {
      "type": "number",
      "description": "L-shape: second leg length in mm.",
      "exclusiveMinimum": 0
    },
    "topWidth": {
      "type": "number",
      "description": "U-shape: back (top) width in mm.",
      "exclusiveMinimum": 0
    },
    "arm1Width": {
      "type": "number",
      "description": "U-shape: arm 1 width in mm.",
      "exclusiveMinimum": 0
    },
    "arm2Width": {
      "type": "number",
      "description": "U-shape: arm 2 width in mm.",
      "exclusiveMinimum": 0
    },
    "topLength": {
      "type": "number",
      "description": "U-shape: back (top) length in mm.",
      "exclusiveMinimum": 0
    },
    "arm1Length": {
      "type": "number",
      "description": "U-shape: arm 1 length in mm.",
      "exclusiveMinimum": 0
    },
    "arm2Length": {
      "type": "number",
      "description": "U-shape: arm 2 length in mm.",
      "exclusiveMinimum": 0
    },
    "wallLength": {
      "type": "number",
      "description": "Wall: single straight segment length in mm.",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
studio_pricing_quote output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "shape",
    "layers",
    "bom",
    "shopify_items",
    "total_eur",
    "currency",
    "country",
    "price_basis",
    "total_incl_vat",
    "total_excl_vat",
    "vat_amount",
    "vat_rate",
    "vat_rate_percent",
    "vat_country",
    "vat_market_defaulted",
    "vat_status",
    "price_source",
    "price_source_note",
    "price_note",
    "bom_source",
    "summary",
    "editor_url"
  ],
  "properties": {
    "bom": {
      "type": "object",
      "required": [
        "panels_middle",
        "panels_top",
        "pins"
      ],
      "properties": {
        "pins": {
          "type": "number"
        },
        "panels_top": {
          "type": "object",
          "additionalProperties": {
            "type": "number"
          }
        },
        "panels_middle": {
          "type": "object",
          "additionalProperties": {
            "type": "number"
          }
        }
      },
      "additionalProperties": false
    },
    "shape": {
      "enum": [
        "rectangle",
        "lshape",
        "ushape",
        "wall"
      ],
      "type": "string"
    },
    "layers": {
      "type": "number"
    },
    "country": {
      "type": [
        "string",
        "null"
      ]
    },
    "snapped": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "field",
          "requested",
          "used"
        ],
        "properties": {
          "used": {
            "type": "number"
          },
          "field": {
            "type": "string"
          },
          "requested": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "summary": {
      "type": "string"
    },
    "currency": {
      "type": "string",
      "const": "EUR"
    },
    "vat_rate": {
      "type": [
        "number",
        "null"
      ]
    },
    "total_eur": {
      "type": "number"
    },
    "bom_source": {
      "type": "string",
      "const": "studio_build"
    },
    "editor_url": {
      "type": "string"
    },
    "price_note": {
      "type": "string"
    },
    "vat_amount": {
      "type": [
        "number",
        "null"
      ]
    },
    "vat_status": {
      "enum": [
        "included",
        "unavailable"
      ],
      "type": "string"
    },
    "price_basis": {
      "type": "string",
      "const": "shopify_live"
    },
    "vat_country": {
      "type": [
        "string",
        "null"
      ]
    },
    "price_source": {
      "enum": [
        "catalog",
        "shopify"
      ],
      "type": "string"
    },
    "shopify_items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "sku",
          "quantity",
          "name"
        ],
        "properties": {
          "sku": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "unit": {
            "type": "string"
          },
          "price": {
            "type": "number"
          },
          "quantity": {
            "type": "number"
          },
          "is_optional": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      }
    },
    "total_excl_vat": {
      "type": "number"
    },
    "total_incl_vat": {
      "type": [
        "number",
        "null"
      ]
    },
    "vat_rate_percent": {
      "type": [
        "number",
        "null"
      ]
    },
    "price_source_note": {
      "type": "string"
    },
    "price_not_optimized": {
      "type": "boolean"
    },
    "vat_market_defaulted": {
      "type": [
        "boolean",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
studio_pricing_quote annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
studio_create_design — Create a GridGarden Studio design for the user
Advertised by the server during the last successful anonymous check.
Open-world

Prepare a design in GridGarden Studio for the user and return a link that opens it in the editor, plus the price WITH VAT and the parts list. Use it when the user wants to see/try a raised bed layout or a garden plan: a Brick Premium raised bed (rectangle / L / U / wall, mm) and optionally a whole garden (plot shape and size, house, entrance, style, wants, plants). Give what the user told you; for anything they did not say either omit it or pass it in `assumed` — never invent silently. Unknown values are rejected with a clear message (no silent fallback). The link opens the editor directly (no welcome window), the user can edit and order there. Price and parts are computed by Studio itself; quote `price.total_incl_vat` (with VAT) and say the country. Nothing is paid or ordered here, and no AI image generation is started. The design is saved anonymously (no personal data); anyone with the link can open it, the first edit makes the user their own copy.

studio_create_design input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "beds": {
      "type": "integer",
      "description": "How many identical beds (1–20). Needs shape. Price and parts are for all of them."
    },
    "link": {
      "type": "string",
      "maxLength": 2000,
      "description": "Optional: a ready GridGarden Studio link (https://gridgarden.eu/studio/<lang>/design/new?v=1&…). Its query is used as the input; the other fields below override it. Normally leave this out and pass the fields."
    },
    "plot": {
      "enum": [
        "rect",
        "narrow",
        "l",
        "other"
      ],
      "type": "string",
      "description": "Plot shape: rect | narrow | l | other (other = rectangle for now)."
    },
    "entry": {
      "enum": [
        "left",
        "middle",
        "right"
      ],
      "type": "string",
      "description": "Where the gate/entrance is: left | middle | right (on the street side unless entrySide)."
    },
    "house": {
      "enum": [
        "street",
        "middle",
        "back",
        "corner",
        "none"
      ],
      "type": "string",
      "description": "Where the house stands (street at the bottom): street | middle | back | corner | none."
    },
    "north": {
      "type": "number",
      "description": "North direction in degrees 0–360 (accepted, not used yet)"
    },
    "plotD": {
      "type": "number",
      "description": "Plot depth away from the street, mm (3000–200000)"
    },
    "plotW": {
      "type": "number",
      "description": "Plot width at the street, mm (3000–200000; 12 m = 12000)"
    },
    "shape": {
      "enum": [
        "rectangle",
        "lshape",
        "ushape",
        "wall"
      ],
      "type": "string",
      "description": "Raised bed / wall type: rectangle | lshape | ushape | wall. Needs its dimensions and layers (see studio_design_options)."
    },
    "style": {
      "enum": [
        "modern-minimal",
        "cottage",
        "scandinavian",
        "naturalistic",
        "family-productive",
        "mediterranean-gravel",
        "japanese",
        "formal",
        "open"
      ],
      "type": "string",
      "description": "Garden style: modern-minimal | cottage | scandinavian | naturalistic | family-productive | mediterranean-gravel | japanese | formal | open (let the design decide)."
    },
    "wants": {
      "type": "array",
      "items": {
        "enum": [
          "veg",
          "seating",
          "kids",
          "pets",
          "lowcare",
          "nolawn"
        ],
        "type": "string"
      },
      "maxItems": 6,
      "description": "What the user wants: veg, seating, kids, pets, lowcare, nolawn."
    },
    "width": {
      "type": "number",
      "description": "rectangle: outer width, mm"
    },
    "entryX": {
      "type": "number",
      "description": "Entrance position along the boundary, mm"
    },
    "houseD": {
      "type": "number",
      "description": "House depth, mm"
    },
    "houseW": {
      "type": "number",
      "description": "House width, mm"
    },
    "houseX": {
      "type": "number",
      "description": "House x, mm from the lower-left plot corner at the street (with houseY)"
    },
    "houseY": {
      "type": "number",
      "description": "House y, mm from the street (with houseX)"
    },
    "layers": {
      "type": "integer",
      "description": "Brick layers (raised beds 2–13, walls 1–25; each ≈120 mm tall)."
    },
    "length": {
      "type": "number",
      "description": "rectangle: outer length, mm"
    },
    "locale": {
      "enum": [
        "sk",
        "cs",
        "de",
        "en",
        "fr",
        "hu",
        "it",
        "nl",
        "pl",
        "ro"
      ],
      "type": "string",
      "description": "Language of the Studio page the user will open (sk cs de en fr hu it nl pl ro). Use the language the user speaks. Default en."
    },
    "plants": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 80
      },
      "maxItems": 30,
      "description": "Plant keys from studio_plant_catalog. They are saved as the user's planting wishes in the design; the planting itself (where each plant stands) is done in Studio."
    },
    "width1": {
      "type": "number",
      "description": "lshape: first leg width, mm"
    },
    "width2": {
      "type": "number",
      "description": "lshape: second leg width, mm"
    },
    "assumed": {
      "type": "array",
      "items": {
        "enum": [
          "plot",
          "plotW",
          "plotD",
          "house",
          "entry",
          "terrace",
          "style",
          "wants"
        ],
        "type": "string"
      },
      "maxItems": 8,
      "description": "Fields the user did NOT say and you guessed (they are shown as \"estimated\" in Studio). Always list them honestly."
    },
    "country": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "Delivery country, ISO-3166-1 alpha-2 (DE, AT, SK…). Prices differ by market; ask the user. Omit only if unknown (then SK base prices, said in the result)."
    },
    "length1": {
      "type": "number",
      "description": "lshape: first leg length, mm"
    },
    "length2": {
      "type": "number",
      "description": "lshape: whole second leg length incl. the corner, mm"
    },
    "plotCut": {
      "enum": [
        "ne",
        "nw",
        "se",
        "sw"
      ],
      "type": "string",
      "description": "plot=l: which corner is missing (default ne = back right; the street is at the bottom)."
    },
    "terrace": {
      "type": "string",
      "maxLength": 8,
      "description": "Existing terrace as a grid cell \"1\"–\"9\" (or \"none\")."
    },
    "plotArea": {
      "type": "number",
      "description": "Plot area in m2 if the user knows only that (9–40000); the plot becomes a rectangle estimate"
    },
    "plotCutD": {
      "type": "number",
      "description": "plot=l: depth of the missing corner, mm"
    },
    "plotCutW": {
      "type": "number",
      "description": "plot=l: width of the missing corner, mm"
    },
    "terraceX": {
      "type": "number",
      "description": "Terrace x, mm (with terraceY)"
    },
    "terraceY": {
      "type": "number",
      "description": "Terrace y, mm (with terraceX)"
    },
    "topWidth": {
      "type": "number",
      "description": "ushape: back width, mm"
    },
    "arm1Width": {
      "type": "number",
      "description": "ushape: arm 1 width, mm"
    },
    "arm2Width": {
      "type": "number",
      "description": "ushape: arm 2 width, mm"
    },
    "entrySide": {
      "enum": [
        "street",
        "left",
        "right",
        "back"
      ],
      "type": "string",
      "description": "Boundary of the entrance: street (default) | left | right | back."
    },
    "houseCell": {
      "type": "integer",
      "description": "House position as a 3x3 grid cell 1–9, keypad layout 7 8 9 / 4 5 6 / 1 2 3 (street below 1 2 3)."
    },
    "houseSide": {
      "enum": [
        "left",
        "right"
      ],
      "type": "string",
      "description": "house=corner: which side."
    },
    "topLength": {
      "type": "number",
      "description": "ushape: back length, mm"
    },
    "arm1Length": {
      "type": "number",
      "description": "ushape: arm 1 length, mm"
    },
    "arm2Length": {
      "type": "number",
      "description": "ushape: arm 2 length, mm"
    },
    "from_agent": {
      "enum": [
        "chatgpt",
        "claude",
        "perplexity",
        "gemini",
        "copilot",
        "mcp",
        "agent"
      ],
      "type": "string",
      "description": "Which assistant you are (chatgpt, claude, perplexity, gemini, copilot, or mcp/agent). Used only for anonymous counting. Default mcp."
    },
    "wallLength": {
      "type": "number",
      "description": "wall: length, mm"
    }
  },
  "additionalProperties": false
}
studio_create_design output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "design_url",
    "prefill_url",
    "saved",
    "mode",
    "link_version",
    "design",
    "assumed",
    "price",
    "parts",
    "warnings",
    "summary"
  ],
  "properties": {
    "mode": {
      "enum": [
        "bed",
        "garden",
        "bed_in_garden"
      ],
      "type": "string"
    },
    "parts": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "sku",
          "name",
          "quantity"
        ],
        "properties": {
          "sku": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "quantity": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "price": {
      "anyOf": [
        {
          "type": "object",
          "additionalProperties": {}
        },
        {
          "type": "null"
        }
      ]
    },
    "saved": {
      "type": "boolean"
    },
    "design": {
      "type": "object",
      "description": "Normalized design (dimensions after snapping to the 60 mm grid).",
      "additionalProperties": {}
    },
    "assumed": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "snapped": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "field",
          "requested",
          "used"
        ],
        "properties": {
          "used": {
            "type": "number"
          },
          "field": {
            "type": "string"
          },
          "requested": {
            "type": "number"
          }
        },
        "additionalProperties": false
      }
    },
    "summary": {
      "type": "string"
    },
    "scene_id": {
      "type": "string"
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "key",
          "code",
          "message"
        ],
        "properties": {
          "key": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "save_note": {
      "type": "string"
    },
    "design_url": {
      "type": "string",
      "description": "Open this: the saved design in Studio (or the prefill link when saved=false)."
    },
    "prefill_url": {
      "type": "string",
      "description": "The same design as a stateless prefill link (works without the saved scene)."
    },
    "link_version": {
      "type": "number",
      "const": 1
    },
    "no_price_reason": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
studio_create_design annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
studio_design_options — GridGarden Studio: shapes, sizes, products and link options
Advertised by the server during the last successful anonymous check.
Advertised read-only

Everything you can pass to studio_create_design (or put in a Studio link): bed shapes with their dimension keys and ready example sizes, plot shapes and size presets, house/entrance/style/wants values, limits, and the product line (Brick Premium only: 60 mm larch snap-in panels and connector pins). Call it first when unsure what values are allowed. Static, free, no prices (use studio_pricing_quote or studio_create_design for prices).

studio_design_options input schema
{
  "type": "object",
  "properties": {}
}
studio_design_options annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
studio_plant_catalog — GridGarden plant catalog (keys for planting)
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the GridGarden plant catalog (441 species) and get the keys you can pass as `plants` to studio_create_design. Filter by text, category, edible, sun, suitability for raised beds. Free, read-only. Returns at most 40 plants per call (see total).

studio_plant_catalog input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 60,
      "description": "Search text in Slovak, Czech, English, German or Latin name (e.g. \"basil\", \"rajčina\")."
    },
    "sun": {
      "enum": [
        "sun",
        "part-shade",
        "shade"
      ],
      "type": "string",
      "description": "Required light."
    },
    "limit": {
      "type": "integer",
      "maximum": 40,
      "minimum": 1
    },
    "edible": {
      "type": "boolean",
      "description": "true = only edible plants."
    },
    "category": {
      "enum": [
        "tree",
        "perennial",
        "shrub",
        "vegetable",
        "grass",
        "herb",
        "bulb",
        "climber",
        "fruit"
      ],
      "type": "string"
    },
    "raised_bed_ok": {
      "type": "boolean",
      "description": "true = only plants suitable for raised beds."
    }
  },
  "additionalProperties": false
}
studio_plant_catalog annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
studio_delivery_countries — Where GridGarden delivers
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the countries GridGarden delivers Brick Premium raised beds to (ISO codes). Use it before quoting: pass the user's country as `country` to studio_pricing_quote or studio_create_design. Shipping costs are NOT returned here - they are calculated at checkout from the postcode; do not guess them. Delivery to the USA is not offered.

studio_delivery_countries input schema
{
  "type": "object",
  "properties": {}
}
studio_delivery_countries annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
studio_ai_designer_link — Links to the GridGarden AI garden designer
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get links to GridGarden's AI garden design: the AI designer from a photo of the garden, and the AI design inside Studio. This tool ONLY returns links - it never starts AI generation (that costs money and needs the user's own action on the website). Use it when the user wants an AI-generated design or visualisation from a photo.

studio_ai_designer_link input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "locale": {
      "enum": [
        "sk",
        "cs",
        "de",
        "en",
        "fr",
        "hu",
        "it",
        "nl",
        "pl",
        "ro"
      ],
      "type": "string",
      "description": "Language of the pages. Default en."
    }
  },
  "additionalProperties": false
}
studio_ai_designer_link annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
studio_faq — GridGarden Studio facts / FAQ
Advertised by the server during the last successful anonymous check.
Advertised read-only

Verified short facts about GridGarden Studio for answering users: what Studio is, that it is free, what the free AI design offer is, the beta credits, the product line, and what an AI assistant can and cannot do here. Use it instead of guessing. Returns plain facts, no prices.

studio_faq input schema
{
  "type": "object",
  "properties": {}
}
studio_faq annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
studio_templates_list — GridGarden Studio templates
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the design shapes GridGarden Studio supports, with the dimension parameters each one needs.

studio_templates_list input schema
{
  "type": "object",
  "properties": {}
}
studio_templates_list output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "templates"
  ],
  "properties": {
    "templates": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "label",
          "params",
          "example"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "params": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "example": {
            "type": "object",
            "additionalProperties": {
              "type": [
                "string",
                "number"
              ]
            }
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
studio_templates_list annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
studio_catalog_bricks — GridGarden Brick Premium catalog + live prices
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List the GridGarden Brick Premium modular components — middle and TOP planks in XS–XL sizes (plus a 1200mm XXL TOP) and the connector pin — with live EUR unit prices and availability from Shopify. Brick Premium only; no other materials are sold. Read-only.

studio_catalog_bricks input schema
{
  "type": "object",
  "properties": {}
}
studio_catalog_bricks output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "catalog",
    "currency",
    "summary"
  ],
  "properties": {
    "catalog": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "variant_id",
          "sku",
          "title",
          "role",
          "price_eur",
          "currency",
          "available"
        ],
        "properties": {
          "sku": {
            "type": [
              "string",
              "null"
            ]
          },
          "role": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "available": {
            "type": "boolean"
          },
          "price_eur": {
            "type": "number"
          },
          "variant_id": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "summary": {
      "type": "string"
    },
    "currency": {
      "type": "string",
      "const": "EUR"
    }
  },
  "additionalProperties": false
}
studio_catalog_bricks annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
studio_bom_to_cart — GridGarden purchase via AI assistant (temporarily unavailable)
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

studio_bom_to_cart input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "shape",
    "layers"
  ],
  "properties": {
    "shape": {
      "enum": [
        "rectangle",
        "lshape",
        "ushape",
        "wall"
      ],
      "type": "string",
      "description": "Design 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."
    },
    "width": {
      "type": "number",
      "description": "Rectangle: outer width in mm.",
      "exclusiveMinimum": 0
    },
    "layers": {
      "type": "integer",
      "description": "Number of brick layers. Raised beds 2-13, walls 1-25 (1 = a single 60mm top-cap course). Each layer ≈120mm tall (top layer +60mm).",
      "exclusiveMinimum": 0
    },
    "length": {
      "type": "number",
      "description": "Rectangle: outer length in mm.",
      "exclusiveMinimum": 0
    },
    "width1": {
      "type": "number",
      "description": "L-shape: first leg width in mm.",
      "exclusiveMinimum": 0
    },
    "width2": {
      "type": "number",
      "description": "L-shape: second leg width in mm.",
      "exclusiveMinimum": 0
    },
    "country": {
      "type": "string",
      "maxLength": 2,
      "minLength": 2,
      "description": "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."
    },
    "length1": {
      "type": "number",
      "description": "L-shape: first leg length in mm.",
      "exclusiveMinimum": 0
    },
    "length2": {
      "type": "number",
      "description": "L-shape: second leg length in mm.",
      "exclusiveMinimum": 0
    },
    "topWidth": {
      "type": "number",
      "description": "U-shape: back (top) width in mm.",
      "exclusiveMinimum": 0
    },
    "arm1Width": {
      "type": "number",
      "description": "U-shape: arm 1 width in mm.",
      "exclusiveMinimum": 0
    },
    "arm2Width": {
      "type": "number",
      "description": "U-shape: arm 2 width in mm.",
      "exclusiveMinimum": 0
    },
    "topLength": {
      "type": "number",
      "description": "U-shape: back (top) length in mm.",
      "exclusiveMinimum": 0
    },
    "arm1Length": {
      "type": "number",
      "description": "U-shape: arm 1 length in mm.",
      "exclusiveMinimum": 0
    },
    "arm2Length": {
      "type": "number",
      "description": "U-shape: arm 2 length in mm.",
      "exclusiveMinimum": 0
    },
    "utm_source": {
      "enum": [
        "chatgpt",
        "claude",
        "cursor",
        "mcp"
      ],
      "type": "string",
      "description": "Attribution source recorded on the Shopify cart (UTM). Defaults to \"mcp\"."
    },
    "wallLength": {
      "type": "number",
      "description": "Wall: single straight segment length in mm.",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
studio_bom_to_cart annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": true
}
studio_design_rules — GridGarden garden-design rule book (by design step)
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the design-knowledge-base rules relevant to one step of designing a garden (brief / koncept / dispozicia / vysadba / materialy) — up to 20 rules, each with its predicate, numeric thresholds, strength (must/should/may), confidence tag, and cited sources. No garden scene is read or required; this is reference knowledge, not a check against a specific design. Deterministic: the same step always returns the same rule set.

studio_design_rules input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "step"
  ],
  "properties": {
    "step": {
      "enum": [
        "brief",
        "koncept",
        "dispozicia",
        "vysadba",
        "materialy"
      ],
      "type": "string",
      "description": "Design process step to fetch rules for: brief, koncept, dispozicia, vysadba, materialy. Call this once per step you are working on — do not assume one step's rules cover another."
    }
  },
  "additionalProperties": false
}
studio_design_rules output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "step",
    "rules",
    "total",
    "truncated",
    "summary"
  ],
  "properties": {
    "step": {
      "enum": [
        "brief",
        "koncept",
        "dispozicia",
        "vysadba",
        "materialy"
      ],
      "type": "string"
    },
    "rules": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "area",
          "strength",
          "tag",
          "when",
          "numbers",
          "textKey",
          "sources",
          "module"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "tag": {
            "enum": [
              "measured",
              "cited",
              "expert",
              "opinion"
            ],
            "type": "string"
          },
          "area": {
            "type": "string"
          },
          "when": {
            "type": "string"
          },
          "module": {
            "type": "string"
          },
          "numbers": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name",
                "url",
                "checkedAt"
              ],
              "properties": {
                "ref": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "checkedAt": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            }
          },
          "textKey": {
            "type": "string"
          },
          "strength": {
            "enum": [
              "must",
              "should",
              "may"
            ],
            "type": "string"
          },
          "legalNote": {
            "enum": [
              "not-law",
              "law-cz-only",
              "municipal-varies"
            ],
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "total": {
      "type": "number"
    },
    "summary": {
      "type": "string"
    },
    "truncated": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
studio_design_rules annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (3 of 3 answered).

  1. 2026-11-07: 2 of 2 checks answered
  2. 2026-11-09: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
985 ms
95th percentile latency
985 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 985 ms · metadata changed · 11 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http gridgarden-studio-mcp https://studio.gridgarden.eu/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add gridgarden-studio-mcp --url https://studio.gridgarden.eu/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable gridgarden-studio-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "gridgarden-studio-mcp": {
      "url": "https://studio.gridgarden.eu/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "gridgarden-studio-mcp": {
      "type": "streamableHttp",
      "url": "https://studio.gridgarden.eu/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start gridgarden-studio-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "gridgarden-studio-mcp": {
      "type": "http",
      "url": "https://studio.gridgarden.eu/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http gridgarden-studio-mcp https://studio.gridgarden.eu/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://studio.gridgarden.eu/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "gridgarden-studio-mcp": {
      "serverUrl": "https://studio.gridgarden.eu/mcp"
    }
  }
}

Let your agent find its tools

Find servers like GridGarden Studio MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run GridGarden Studio MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing