← WebMCP Directory

Tool tree

hemloop.app

CommerceTools verified
Website
A two-sided, agent-native E-commerce loop: shoppers share demand without an identifier, merchants see the gap, and every promotion traces back to human-locked facts.
Explore capabilities
    get_wardrobeAnswer

    Read the shopper's wardrobe as compact rows (id, category, brand, size, colour, for), optional category filter, at most 12 rows plus the total. Rows stay on this page.

    View tool JSON
    {
      "name": "get_wardrobe",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the shopper's wardrobe as compact rows (id, category, brand, size, colour, for), optional category filter, at most 12 rows plus the total. Rows stay on this page.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "hoodie",
              "tee",
              "denim",
              "jacket",
              "footwear",
              "accessory"
            ]
          }
        },
        "additionalProperties": false
      },
      "page": "/"
    }
    get_my_sizesAnswer

    Sizes the shopper owns, optionally filtered by brand.

    View tool JSON
    {
      "name": "get_my_sizes",
      "kind": "answer",
      "impl": "imperative",
      "description": "Sizes the shopper owns, optionally filtered by brand.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "brand": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "page": "/"
    }
    find_gapsAnswer

    Categories missing or thin, plus categories whose oldest garment is past its replacement life (a `due` block: report it with report_demand_gap kind 'replace'). Carries only the date, months elapsed and size.

    View tool JSON
    {
      "name": "find_gaps",
      "kind": "answer",
      "impl": "imperative",
      "description": "Categories missing or thin, plus categories whose oldest garment is past its replacement life (a `due` block: report it with report_demand_gap kind 'replace'). Carries only the date, months elapsed and size.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    check_fitAnswer

    Fit advice for a store product handle, based on sizes the shopper already owns. Read-only; uses the store's public catalog.

    View tool JSON
    {
      "name": "check_fit",
      "kind": "answer",
      "impl": "imperative",
      "description": "Fit advice for a store product handle, based on sizes the shopper already owns. Read-only; uses the store's public catalog.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "handle": {
            "type": "string"
          }
        },
        "required": [
          "handle"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_preferencesAnswer

    Read the shopper's stated preferences: fit, colour family, materials to avoid, price ceiling, liked brands. Stays on this page unless the sharing level lets a field travel.

    View tool JSON
    {
      "name": "get_preferences",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the shopper's stated preferences: fit, colour family, materials to avoid, price ceiling, liked brands. Stays on this page unless the sharing level lets a field travel.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    add_garmentAction

    Add a garment the shopper owns to the private wardrobe.

    View tool JSON
    {
      "name": "add_garment",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a garment the shopper owns to the private wardrobe.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "enum": [
              "hoodie",
              "tee",
              "denim",
              "jacket",
              "footwear",
              "accessory"
            ]
          },
          "brand": {
            "type": "string"
          },
          "size": {
            "type": "string"
          },
          "colour": {
            "type": "string"
          }
        },
        "required": [
          "category",
          "brand",
          "size",
          "colour"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    report_demand_gapAction

    Send one data-minimized demand signal. The shopper must press Approve next request on the page first; one press releases one signal. Use kind 'replace' for a `due` gap. The sharing level sets which fields travel (0 blocks everything). Never a shopper id or wardrobe rows. Returns the exact payload sent.

    View tool JSON
    {
      "name": "report_demand_gap",
      "kind": "act",
      "impl": "imperative",
      "description": "Send one data-minimized demand signal. The shopper must press Approve next request on the page first; one press releases one signal. Use kind 'replace' for a `due` gap. The sharing level sets which fields travel (0 blocks everything). Never a shopper id or wardrobe rows. Returns the exact payload sent.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "gap",
              "fit",
              "want",
              "replace"
            ]
          },
          "category": {
            "type": "string",
            "enum": [
              "hoodie",
              "tee",
              "denim",
              "jacket",
              "footwear",
              "accessory"
            ]
          },
          "size": {
            "type": "string"
          },
          "handle": {
            "type": "string"
          },
          "occasion": {
            "type": "string",
            "enum": [
              "everyday",
              "season",
              "gift",
              "event"
            ]
          }
        },
        "required": [
          "category"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    import_receiptAction

    Import pasted receipt or order-email text (no OCR, no network). Adds each item to the purchase log and recognised items to the wardrobe. Nothing is sent to a merchant.

    View tool JSON
    {
      "name": "import_receipt",
      "kind": "act",
      "impl": "imperative",
      "description": "Import pasted receipt or order-email text (no OCR, no network). Adds each item to the purchase log and recognised items to the wardrobe. Nothing is sent to a merchant.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "maxLength": 4000
          }
        },
        "required": [
          "text"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_offersAnswer

    Read approved personal offers for requests this closet sent: size, price, code, validity, purchase link. Read-only; the shopper decides Bought or Passed on the page, no tool can buy.

    View tool JSON
    {
      "name": "get_offers",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read approved personal offers for requests this closet sent: size, price, code, validity, purchase link. Read-only; the shopper decides Bought or Passed on the page, no tool can buy.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    get_campaign_stateAnswer

    Read the campaign: facts (price, discount, code, dates, disclaimer), their human lock state, brief, scenes, and format. When facts are locked, agents cannot change them — write copy that matches.

    View tool JSON
    {
      "name": "get_campaign_state",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the campaign: facts (price, discount, code, dates, disclaimer), their human lock state, brief, scenes, and format. When facts are locked, agents cannot change them — write copy that matches.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    set_briefAction

    Set the creative brief (tone, pacing, angle). Free-form; not rendered copy.

    View tool JSON
    {
      "name": "set_brief",
      "kind": "act",
      "impl": "imperative",
      "description": "Set the creative brief (tone, pacing, angle). Free-form; not rendered copy.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "brief": {
            "type": "string"
          }
        },
        "required": [
          "brief"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    add_sceneAction

    Append a scene. heading/body are rendered copy, claim-validated against locked facts before anything is applied.

    View tool JSON
    {
      "name": "add_scene",
      "kind": "act",
      "impl": "imperative",
      "description": "Append a scene. heading/body are rendered copy, claim-validated against locked facts before anything is applied.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "hero",
              "product",
              "offer",
              "cta"
            ]
          },
          "heading": {
            "type": "string",
            "maxLength": 200
          },
          "body": {
            "type": "string",
            "maxLength": 400
          },
          "durationSec": {
            "type": "number",
            "minimum": 0.5,
            "maximum": 30
          }
        },
        "required": [
          "kind",
          "heading",
          "body",
          "durationSec"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    update_sceneAction

    Patch a scene's copy, kind, or duration. The patched result is claim-validated before it is applied.

    View tool JSON
    {
      "name": "update_scene",
      "kind": "act",
      "impl": "imperative",
      "description": "Patch a scene's copy, kind, or duration. The patched result is claim-validated before it is applied.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "hero",
              "product",
              "offer",
              "cta"
            ]
          },
          "heading": {
            "type": "string",
            "maxLength": 200
          },
          "body": {
            "type": "string",
            "maxLength": 400
          },
          "durationSec": {
            "type": "number",
            "minimum": 0.5,
            "maximum": 30
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    reorder_scenesAction

    Reorder scenes. Pass every current scene id exactly once.

    View tool JSON
    {
      "name": "reorder_scenes",
      "kind": "act",
      "impl": "imperative",
      "description": "Reorder scenes. Pass every current scene id exactly once.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "orderedIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "orderedIds"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    seek_previewAction

    Seek the live preview to a time (seconds). Deterministic, same t, same frame.

    View tool JSON
    {
      "name": "seek_preview",
      "kind": "act",
      "impl": "imperative",
      "description": "Seek the live preview to a time (seconds). Deterministic, same t, same frame.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "tSec": {
            "type": "number",
            "minimum": 0
          }
        },
        "required": [
          "tSec"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    validate_claimsAction

    Dry-run the claim validator over a piece of copy, or over the whole campaign when no text is given.

    View tool JSON
    {
      "name": "validate_claims",
      "kind": "act",
      "impl": "imperative",
      "description": "Dry-run the claim validator over a piece of copy, or over the whole campaign when no text is given.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "page": "/"
    }
    export_compositionAction

    Export the campaign as a standalone HyperFrames HTML composition; the page receives the download and the result carries size and scene count. Fails while any claim violation remains.

    View tool JSON
    {
      "name": "export_composition",
      "kind": "act",
      "impl": "imperative",
      "description": "Export the campaign as a standalone HyperFrames HTML composition; the page receives the download and the result carries size and scene count. Fails while any claim violation remains.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    get_offerAnswer

    Read the locked offer as data a shopping agent can act on: product, prices, promo code, validity dates, disclaimer, purchase link, sizes in stock. Pass requestId for the approved personal offer on one request.

    View tool JSON
    {
      "name": "get_offer",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the locked offer as data a shopping agent can act on: product, prices, promo code, validity dates, disclaimer, purchase link, sizes in stock. Pass requestId for the approved personal offer on one request.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "requestId": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "page": "/"
    }
    import_productAction

    Import product facts by handle from the connected demo storefront into the unlocked fact set. The merchant must review and lock afterward; import is refused while facts are locked.

    View tool JSON
    {
      "name": "import_product",
      "kind": "act",
      "impl": "imperative",
      "description": "Import product facts by handle from the connected demo storefront into the unlocked fact set. The merchant must review and lock afterward; import is refused while facts are locked.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "handle": {
            "type": "string"
          }
        },
        "required": [
          "handle"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }
    get_demandAnswer

    Consented demand grouped by category and size, with request ids for propose_offer and a verdict per group (can-offer, size-not-in-stock, category-mismatch). Counts are exact; at most 3 ids per group, so read total, groups and omitted. No shopper identifier travels.

    View tool JSON
    {
      "name": "get_demand",
      "kind": "answer",
      "impl": "imperative",
      "description": "Consented demand grouped by category and size, with request ids for propose_offer and a verdict per group (can-offer, size-not-in-stock, category-mismatch). Counts are exact; at most 3 ids per group, so read total, groups and omitted. No shopper identifier travels.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }
    propose_offerAction

    Propose a personal offer for one request inside the locked offer rules (cost, margin floor, max discount). Staged only; a human approves it before the shopper sees it. Returns the proposal and its margin check.

    View tool JSON
    {
      "name": "propose_offer",
      "kind": "act",
      "impl": "imperative",
      "description": "Propose a personal offer for one request inside the locked offer rules (cost, margin floor, max discount). Staged only; a human approves it before the shopper sees it. Returns the proposal and its margin check.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "requestId": {
            "type": "string"
          }
        },
        "required": [
          "requestId"
        ],
        "additionalProperties": false
      },
      "page": "/"
    }