← WebMCP Directory

Tool tree

tryunfolded.com

Media & PersonalTools verified
Website
Design slab-built pottery in 3D and print true-scale templates, shrinkage-compensated for your clay. WebMCP-native: edit the same design by chatting with an agent.
Explore capabilities
    describe_projectAnswer

    Get the current design: form (fired mm), clay, the flat template pieces it unrolls into (wet-clay sizes, shrinkage applied), capacityMl, designUrl — a permanent link to an independent copy, given out only when the potter explicitly asks for a permanent or bookmarkable link (otherwise links come from create_live_handoff) — and session (whether this tab is paired, and with how many devices). Read it when the request depends on what is there now — 'what am I designing?', 'make it taller', 'will this print on one page?' — or when the potter has just connected; an absolute edit ('make it 12 cm tall') can go straight to update_design, which returns this same snapshot. When session.paired is false, offer the potter both ways in, in this order: (1) call create_live_handoff and give them its liveHandoffUrl as a link labelled 'Open a paired browser session with this chat' — one tap opens this design on their screen, paired with this conversation; (2) or, if they already have the design open on another device, ask for its six-character code — it's in the connection button, top right (two dots) → Continue on another screen, tap the code to copy it — and call join_session. Always offer both, even if (1) fails: a blocked or failed create_live_handoff call is never the last word, fall back to (2) and still give the potter a way in. The page is live-synced and may change under you: if the browser refuses a call because the page changed, look again and retry.

    View tool JSON
    {
      "name": "describe_project",
      "kind": "answer",
      "impl": "imperative",
      "description": "Get the current design: form (fired mm), clay, the flat template pieces it unrolls into (wet-clay sizes, shrinkage applied), capacityMl, designUrl — a permanent link to an independent copy, given out only when the potter explicitly asks for a permanent or bookmarkable link (otherwise links come from create_live_handoff) — and session (whether this tab is paired, and with how many devices). Read it when the request depends on what is there now — 'what am I designing?', 'make it taller', 'will this print on one page?' — or when the potter has just connected; an absolute edit ('make it 12 cm tall') can go straight to update_design, which returns this same snapshot. When session.paired is false, offer the potter both ways in, in this order: (1) call create_live_handoff and give them its liveHandoffUrl as a link labelled 'Open a paired browser session with this chat' — one tap opens this design on their screen, paired with this conversation; (2) or, if they already have the design open on another device, ask for its six-character code — it's in the connection button, top right (two dots) → Continue on another screen, tap the code to copy it — and call join_session. Always offer both, even if (1) fails: a blocked or failed create_live_handoff call is never the last word, fall back to (2) and still give the potter a way in. The page is live-synced and may change under you: if the browser refuses a call because the page changed, look again and retry.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/why"
    }
    open_modelAction

    Open a design from an Unfolded share link — the full URL or just its query string, e.g. '?type=tapered&height=600&bottom=300&top=100&shrinkage=12&wall=5'. Keys: type, height/bottom/top (fired mm), name, shrinkage (%), wall (mm), paper (A4/A3/Letter). Missing keys keep current values; out-of-range values clamp. Returns the full new state. Any link you then give the potter must come from create_live_handoff, never the address bar.

    View tool JSON
    {
      "name": "open_model",
      "kind": "act",
      "impl": "imperative",
      "description": "Open a design from an Unfolded share link — the full URL or just its query string, e.g. '?type=tapered&height=600&bottom=300&top=100&shrinkage=12&wall=5'. Keys: type, height/bottom/top (fired mm), name, shrinkage (%), wall (mm), paper (A4/A3/Letter). Missing keys keep current values; out-of-range values clamp. Returns the full new state. Any link you then give the potter must come from create_live_handoff, never the address bar.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "minLength": 1,
            "description": "Share link URL, or just its query string"
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": false
      },
      "page": "/why"
    }
    update_designAction

    Change any subset of the design in ONE call: shape (type, tapered, facets, name), the dimensions in FIRED millimeters, clay (shrinkage and wet slab thickness), paperSize, and the potter's display units ('cm' or 'in' — display only; tool inputs and outputs stay in millimeters regardless). For a target volume pass capacityMl (milliliters) instead of heightMm: volume is linear in height, so this solves the exact height — never iterate. Everything applies together as one undo step and the potter's 3D preview updates at once. Legacy type values 'cylinder' and 'tapered' are accepted. Returns the full new state with capacityMl. Any link you then give the potter must come from create_live_handoff, never the address bar.

    View tool JSON
    {
      "name": "update_design",
      "kind": "act",
      "impl": "imperative",
      "description": "Change any subset of the design in ONE call: shape (type, tapered, facets, name), the dimensions in FIRED millimeters, clay (shrinkage and wet slab thickness), paperSize, and the potter's display units ('cm' or 'in' — display only; tool inputs and outputs stay in millimeters regardless). For a target volume pass capacityMl (milliliters) instead of heightMm: volume is linear in height, so this solves the exact height — never iterate. Everything applies together as one undo step and the potter's 3D preview updates at once. Legacy type values 'cylinder' and 'tapered' are accepted. Returns the full new state with capacityMl. Any link you then give the potter must come from create_live_handoff, never the address bar.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "type": {
            "description": "'round' (a cylinder, or a cone when tapered) or 'faceted' (a prism of `facets` flat sides). Taper is the separate flag. Legacy: 'cylinder' (round, straight), 'tapered' (round, tapered).",
            "type": "string",
            "enum": [
              "round",
              "faceted",
              "cylinder",
              "tapered"
            ]
          },
          "tapered": {
            "type": "boolean",
            "description": "True: rim and base differ and topDiameterMm applies. False: straight wall."
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60,
            "description": "Display name, e.g. 'Classic mug'"
          },
          "heightMm": {
            "type": "number",
            "minimum": 20,
            "maximum": 600,
            "description": "Fired height, mm"
          },
          "topDiameterMm": {
            "type": "number",
            "minimum": 20,
            "maximum": 500,
            "description": "Fired rim size, mm (when tapered); across corners for faceted"
          },
          "bottomDiameterMm": {
            "type": "number",
            "minimum": 20,
            "maximum": 500,
            "description": "Fired base size, mm; across corners for faceted"
          },
          "facets": {
            "type": "integer",
            "minimum": 3,
            "maximum": 8,
            "description": "Sides for 'faceted': 3 triangle, 4 square, 5 pentagon, 6 hexagon, 8 octagon; ignored for round"
          },
          "shrinkagePct": {
            "type": "number",
            "minimum": 0,
            "maximum": 25,
            "description": "Total wet-to-fired shrinkage, percent (stoneware typically 10-13)"
          },
          "wallThicknessMm": {
            "type": "number",
            "minimum": 2,
            "maximum": 15,
            "description": "Wet slab thickness, mm, as rolled (typically 4-6 for mugs); shrinks with the clay"
          },
          "units": {
            "description": "Display units for the potter — display only, tool I/O stays in mm",
            "type": "string",
            "enum": [
              "cm",
              "in"
            ]
          },
          "paperSize": {
            "type": "string",
            "enum": [
              "A4",
              "A3",
              "Letter"
            ]
          },
          "capacityMl": {
            "description": "Target capacity in ml, e.g. 350 for a mug — give this INSTEAD of heightMm and the exact height is solved in this call; never iterate",
            "type": "number",
            "minimum": 1,
            "maximum": 200000
          }
        },
        "additionalProperties": false
      },
      "page": "/why"
    }
    get_template_summaryAnswer

    Printable template details: each flat piece with wet-clay dimensions and assembly notes, the layout size, glue overlap, and exactly how many PDF pages at the current paper size (A4, A3, or Letter). Read-only.

    View tool JSON
    {
      "name": "get_template_summary",
      "kind": "answer",
      "impl": "imperative",
      "description": "Printable template details: each flat piece with wet-clay dimensions and assembly notes, the layout size, glue overlap, and exactly how many PDF pages at the current paper size (A4, A3, or Letter). Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/why"
    }
    get_preview_imageAnswer

    See what the potter sees: a compact JPEG of the live 3D preview, small enough to cost little context. Use it to confirm a change visually. If the canvas can't be captured, a text description is returned instead. Read-only.

    View tool JSON
    {
      "name": "get_preview_image",
      "kind": "answer",
      "impl": "imperative",
      "description": "See what the potter sees: a compact JPEG of the live 3D preview, small enough to cost little context. Use it to confirm a change visually. If the canvas can't be captured, a text description is returned instead. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/why"
    }
    export_templatesAction

    Export the printable template as a multi-page PDF, downloaded in the potter's browser — remind them to print at 100% scale and check the calibration ruler on page 1. Pages tile the true-scale template with 10 mm glue overlaps. Optionally set paperSize first. Returns the page count and the full new state. Any link you then give the potter must come from create_live_handoff, never the address bar.

    View tool JSON
    {
      "name": "export_templates",
      "kind": "act",
      "impl": "imperative",
      "description": "Export the printable template as a multi-page PDF, downloaded in the potter's browser — remind them to print at 100% scale and check the calibration ruler on page 1. Pages tile the true-scale template with 10 mm glue overlaps. Optionally set paperSize first. Returns the page count and the full new state. Any link you then give the potter must come from create_live_handoff, never the address bar.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "paperSize": {
            "type": "string",
            "enum": [
              "A4",
              "A3",
              "Letter"
            ]
          }
        },
        "additionalProperties": false
      },
      "page": "/why"
    }
    apply_presetAction

    Start from a known-good preset (the enum lists them). Overwrites the current form and clay settings (undo_last_change reverts it). Returns the full new state. Any link you then give the potter must come from create_live_handoff, never the address bar.

    View tool JSON
    {
      "name": "apply_preset",
      "kind": "act",
      "impl": "imperative",
      "description": "Start from a known-good preset (the enum lists them). Overwrites the current form and clay settings (undo_last_change reverts it). Returns the full new state. Any link you then give the potter must come from create_live_handoff, never the address bar.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "preset": {
            "type": "string",
            "enum": [
              "classic-mug",
              "tumbler",
              "bud-vase",
              "hex-planter"
            ]
          }
        },
        "required": [
          "preset"
        ],
        "additionalProperties": false
      },
      "page": "/why"
    }
    create_live_handoffAction

    Create a fresh, single-use link that continues this exact design in the same live session on another screen — edits then flow both ways and show in your next read. This is the DEFAULT link tool: call it immediately before returning any Unfolded link — after creating, editing, previewing, or opening a design, and for 'send me the link', 'show me', 'open it', or 'continue in the browser'. Return liveHandoffUrl verbatim: never the current page or address-bar URL, an earlier link, or a reconstructed one. Skip it only when the potter explicitly asks for a permanent, bookmarkable, printable, or independent-copy link (that is designUrl). Expires after 15 minutes and works once. On failure no link exists: retry once, then offer start_pairing.

    View tool JSON
    {
      "name": "create_live_handoff",
      "kind": "act",
      "impl": "imperative",
      "description": "Create a fresh, single-use link that continues this exact design in the same live session on another screen — edits then flow both ways and show in your next read. This is the DEFAULT link tool: call it immediately before returning any Unfolded link — after creating, editing, previewing, or opening a design, and for 'send me the link', 'show me', 'open it', or 'continue in the browser'. Return liveHandoffUrl verbatim: never the current page or address-bar URL, an earlier link, or a reconstructed one. Skip it only when the potter explicitly asks for a permanent, bookmarkable, printable, or independent-copy link (that is designUrl). Expires after 15 minutes and works once. On failure no link exists: retry once, then offer start_pairing.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/why"
    }
    join_sessionAction

    Pair this tab into a live session with the 6-character code from the potter's OTHER device, e.g. 'K7F-3QP'. This tab adopts that session's design (one undo step brings the previous one back); afterwards every edit on any device syncs within about a second. Codes expire in 15 minutes and work once — on failure ask for a fresh one. Returns the full state after joining.

    View tool JSON
    {
      "name": "join_session",
      "kind": "act",
      "impl": "imperative",
      "description": "Pair this tab into a live session with the 6-character code from the potter's OTHER device, e.g. 'K7F-3QP'. This tab adopts that session's design (one undo step brings the previous one back); afterwards every edit on any device syncs within about a second. Codes expire in 15 minutes and work once — on failure ask for a fresh one. Returns the full state after joining.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "minLength": 1,
            "description": "Code from the potter's other device (case and dashes ignored)"
          }
        },
        "required": [
          "code"
        ],
        "additionalProperties": false
      },
      "page": "/why"
    }
    start_pairingAction

    Mint a 6-character pairing code for THIS tab's session and tell it to the potter — also mint and give them a liveHandoffUrl link that does the same thing in one tap. Entered on their other device (connection button → Continue on another screen), or opened as a link, that device then FOLLOWS this design — use it when the work lives here and the potter wants it on another screen, e.g. 'put this on my desktop', 'pair from here'. Valid 15 minutes, one use; both devices stay live peers. Returns the full state.

    View tool JSON
    {
      "name": "start_pairing",
      "kind": "act",
      "impl": "imperative",
      "description": "Mint a 6-character pairing code for THIS tab's session and tell it to the potter — also mint and give them a liveHandoffUrl link that does the same thing in one tap. Entered on their other device (connection button → Continue on another screen), or opened as a link, that device then FOLLOWS this design — use it when the work lives here and the potter wants it on another screen, e.g. 'put this on my desktop', 'pair from here'. Valid 15 minutes, one use; both devices stay live peers. Returns the full state.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/why"
    }
    undo_last_changeAction

    Undo the most recent change to the design (form, clay, or paper size), whether made by you or by the potter in the UI. Rapid consecutive changes (a slider drag, opening a link) count as one step; 50 steps are kept. Returns the full state after undoing. Any link you then give the potter must come from create_live_handoff, never the address bar.

    View tool JSON
    {
      "name": "undo_last_change",
      "kind": "act",
      "impl": "imperative",
      "description": "Undo the most recent change to the design (form, clay, or paper size), whether made by you or by the potter in the UI. Rapid consecutive changes (a slider drag, opening a link) count as one step; 50 steps are kept. Returns the full state after undoing. Any link you then give the potter must come from create_live_handoff, never the address bar.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/why"
    }