← WebMCP Directory

Tool tree

agentperf-demo.vercel.app

CommerceTools verified
Website
A 72-product store that publishes its own WebMCP tools — the heavy-page target in the AgentPerf benchmark, where DOM driving costs 13.8x the tokens.
Explore capabilities

    page: Every page

    get_page_stateAnswer

    Read a live snapshot of this page's application state, as compact JSON. Call this before acting so you work from what the page actually shows, not from a guess. Long values are pruned to stay small; a trailing '… +N more' marker means an array was elided.

    View tool JSON
    {
      "name": "get_page_state",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read a live snapshot of this page's application state, as compact JSON. Call this before acting so you work from what the page actually shows, not from a guess. Long values are pruned to stay small; a trailing '… +N more' marker means an array was elided.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/catalog"
    }

    page: Catalog

    search_productsAction

    Filter the catalogue and show the result on the page. Each call states the whole filter: arguments you leave out are cleared, not kept from the last call. query matches name, brand, category, tags and description and every term must match, so 'wireless keyboard' means both; category narrows to one department; minRating and maxPrice bound the numbers; inStockOnly drops sold-out products; sortBy orders the result (price ascending, rating descending, name A-Z, default price). Returns up to 20 rows plus the total match count — narrow the filters if there are more.

    View tool JSON
    {
      "name": "search_products",
      "kind": "act",
      "impl": "imperative",
      "description": "Filter the catalogue and show the result on the page. Each call states the whole filter: arguments you leave out are cleared, not kept from the last call. query matches name, brand, category, tags and description and every term must match, so 'wireless keyboard' means both; category narrows to one department; minRating and maxPrice bound the numbers; inStockOnly drops sold-out products; sortBy orders the result (price ascending, rating descending, name A-Z, default price). Returns up to 20 rows plus the total match count — narrow the filters if there are more.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string"
          },
          "category": {
            "type": "string",
            "enum": [
              "keyboards",
              "mice",
              "monitors",
              "headsets",
              "webcams",
              "docks"
            ]
          },
          "minRating": {
            "type": "number",
            "minimum": 0,
            "maximum": 5
          },
          "inStockOnly": {
            "type": "boolean"
          },
          "maxPrice": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "sortBy": {
            "type": "string",
            "enum": [
              "price",
              "rating",
              "name"
            ]
          }
        },
        "additionalProperties": false
      },
      "page": "/catalog"
    }
    get_productAction

    Full record for one product by id — price, rating, review count, stock, tags and description. Opens that card's detail panel on the page so the person sees what you looked at. Product ids come from search_products or get_page_state.

    View tool JSON
    {
      "name": "get_product",
      "kind": "act",
      "impl": "imperative",
      "description": "Full record for one product by id — price, rating, review count, stock, tags and description. Opens that card's detail panel on the page so the person sees what you looked at. Product ids come from search_products or get_page_state.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          }
        },
        "required": [
          "productId"
        ],
        "additionalProperties": false
      },
      "page": "/catalog"
    }
    add_to_cartAction

    Add a product to the cart, or increase the quantity if it is already there. Refused for unknown ids and for sold-out products. Returns the new quantity and cart total.

    View tool JSON
    {
      "name": "add_to_cart",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a product to the cart, or increase the quantity if it is already there. Refused for unknown ids and for sold-out products. Returns the new quantity and cart total.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          },
          "quantity": {
            "default": 1,
            "type": "integer",
            "minimum": 1,
            "maximum": 99
          }
        },
        "required": [
          "productId",
          "quantity"
        ],
        "additionalProperties": false
      },
      "page": "/catalog"
    }
    remove_from_cartAction

    Take a product out of the cart entirely, whatever its quantity. Only products already in the cart can be removed.

    View tool JSON
    {
      "name": "remove_from_cart",
      "kind": "act",
      "impl": "imperative",
      "description": "Take a product out of the cart entirely, whatever its quantity. Only products already in the cart can be removed.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string"
          }
        },
        "required": [
          "productId"
        ],
        "additionalProperties": false
      },
      "page": "/catalog"
    }
    place_orderSensitive Action

    Check out everything in the cart under this name and email, and show the confirmation on the page. Returns the order number (NW-XXXXX). Refused when the cart is empty or the email is not a valid address. Placing an order cannot be undone from this page.

    View tool JSON
    {
      "name": "place_order",
      "kind": "transact",
      "impl": "imperative",
      "description": "Check out everything in the cart under this name and email, and show the confirmation on the page. Returns the order number (NW-XXXXX). Refused when the cart is empty or the email is not a valid address. Placing an order cannot be undone from this page.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1
          },
          "email": {
            "type": "string",
            "format": "email",
            "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          }
        },
        "required": [
          "name",
          "email"
        ],
        "additionalProperties": false
      },
      "page": "/catalog"
    }

    page: Home

    get_benchmark_resultsAnswer

    Full measured results of the DOM-driving vs WebMCP-tools benchmark behind this page's claims, with caveats.

    View tool JSON
    {
      "name": "get_benchmark_results",
      "kind": "answer",
      "impl": "imperative",
      "description": "Full measured results of the DOM-driving vs WebMCP-tools benchmark behind this page's claims, with caveats.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "page": "/"
    }

    page: Demo

    search_servicesAction

    Filter the service list by a text query (matches names and tags like 'cut', 'color', 'beard'). The page updates so the person sees what you searched. Returns the matches.

    View tool JSON
    {
      "name": "search_services",
      "kind": "act",
      "impl": "imperative",
      "description": "Filter the service list by a text query (matches names and tags like 'cut', 'color', 'beard'). The page updates so the person sees what you searched. Returns the matches.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      },
      "page": "/demo/"
    }
    list_open_slotsAction

    List the free slots for one service over the next three days. Slot ids from here are what book_slot accepts. The page navigates to that service so the person follows along.

    View tool JSON
    {
      "name": "list_open_slots",
      "kind": "act",
      "impl": "imperative",
      "description": "List the free slots for one service over the next three days. Slot ids from here are what book_slot accepts. The page navigates to that service so the person follows along.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "serviceId": {
            "type": "string"
          }
        },
        "required": [
          "serviceId"
        ],
        "additionalProperties": false
      },
      "page": "/demo/"
    }
    book_slotSensitive Action

    Book one open slot for one service. Requires the person's name and email. Returns a confirmation code. Refused when the slot is taken, unknown, or belongs to another service.

    View tool JSON
    {
      "name": "book_slot",
      "kind": "transact",
      "impl": "imperative",
      "description": "Book one open slot for one service. Requires the person's name and email. Returns a confirmation code. Refused when the slot is taken, unknown, or belongs to another service.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "serviceId": {
            "type": "string"
          },
          "slotId": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "minLength": 1
          },
          "email": {
            "type": "string",
            "format": "email",
            "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          }
        },
        "required": [
          "serviceId",
          "slotId",
          "name",
          "email"
        ],
        "additionalProperties": false
      },
      "page": "/demo/"
    }
    cancel_bookingSensitive Action

    Cancel an existing booking by its confirmation code and free the slot again. Only bookings made on this page can be cancelled.

    View tool JSON
    {
      "name": "cancel_booking",
      "kind": "transact",
      "impl": "imperative",
      "description": "Cancel an existing booking by its confirmation code and free the slot again. Only bookings made on this page can be cancelled.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          }
        },
        "required": [
          "code"
        ],
        "additionalProperties": false
      },
      "page": "/demo/"
    }