{
  "name": "Northwind Coffee Co.",
  "url": "https://web.demo.busymate.ai",
  "description": "A working demonstration coffee store: a live Busymate AI assistant grounded in its own catalogue and policies, five of the page's own actions published over WebMCP, an MCP server holding the catalogue and order book, a provided demo customer for testing the identified experience, and a hand-off to a person.",
  "mcp": {
    "url": "https://web.demo.busymate.ai/mcp",
    "transport": "http",
    "auth": "none"
  },
  "webmcp": {
    "transport": "in-page",
    "registers": "document.modelContext"
  },
  "tools": [
    {
      "name": "search_coffee",
      "description": "Search Northwind Coffee's range by name, origin, roast, tasting note or use (espresso, filter, decaf, gift). Returns price, size and what is in stock.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "What the customer is after, e.g. 'fruity filter coffee' or 'decaf'"
          },
          "decafOnly": {
            "type": "boolean",
            "description": "Limit the results to decaffeinated coffee"
          }
        },
        "additionalProperties": false
      },
      "readOnlyHint": true,
      "access": "public",
      "transport": "mcp+webmcp"
    },
    {
      "name": "get_coffee",
      "description": "Full detail for one of Northwind's coffees, by SKU or by name.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sku": {
            "type": "string",
            "description": "The SKU or the product name"
          }
        },
        "required": [
          "sku"
        ],
        "additionalProperties": false
      },
      "readOnlyHint": true,
      "access": "public",
      "transport": "mcp"
    },
    {
      "name": "store_policy",
      "description": "Northwind's own wording for one of its policies: shipping, returns, subscription, brewing.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "policy": {
            "type": "string",
            "enum": [
              "shipping",
              "returns",
              "subscription",
              "brewing"
            ]
          }
        },
        "required": [
          "policy"
        ],
        "additionalProperties": false
      },
      "readOnlyHint": true,
      "access": "public",
      "transport": "mcp"
    },
    {
      "name": "contact_northwind",
      "description": "Leave a message for a person at Northwind — a question the assistant cannot answer, a problem with an order, or anything that needs a human. Collects a name, an email address and the message itself.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Who is writing"
          },
          "email": {
            "type": "string",
            "description": "Where Northwind should reply"
          },
          "message": {
            "type": "string",
            "description": "What they want to say"
          },
          "orderNumber": {
            "type": "string",
            "description": "The order this is about, if any"
          }
        },
        "required": [
          "name",
          "email",
          "message"
        ],
        "additionalProperties": false
      },
      "readOnlyHint": false,
      "access": "public",
      "transport": "mcp"
    },
    {
      "name": "get_order_status",
      "description": "Where one of the signed-in customer's orders is, with carrier, tracking number and expected delivery date. Answers only for the customer signed in on this page.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "orderNumber": {
            "type": "string",
            "description": "The order number, e.g. NW-10432"
          }
        },
        "required": [
          "orderNumber"
        ],
        "additionalProperties": false
      },
      "readOnlyHint": true,
      "access": "identified",
      "transport": "webmcp"
    },
    {
      "name": "start_return",
      "description": "Open a return for one item on one of the signed-in customer's orders and report the refund and what happens next.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "orderNumber": {
            "type": "string",
            "description": "The order the item came in"
          },
          "sku": {
            "type": "string",
            "description": "The SKU or name of the item going back"
          },
          "reason": {
            "type": "string",
            "description": "Why it is going back, in the customer's words"
          }
        },
        "required": [
          "orderNumber",
          "sku"
        ],
        "additionalProperties": false
      },
      "readOnlyHint": false,
      "access": "identified",
      "transport": "webmcp",
      "confirmationRequired": true
    },
    {
      "name": "add_to_cart",
      "description": "Put a bag of one of Northwind's coffees in this visitor's cart, by SKU or by name.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sku": {
            "type": "string"
          },
          "qty": {
            "type": "integer",
            "minimum": 1,
            "maximum": 12
          }
        },
        "required": [
          "sku"
        ],
        "additionalProperties": false
      },
      "readOnlyHint": false,
      "access": "public",
      "transport": "webmcp",
      "confirmationRequired": true
    },
    {
      "name": "view_cart",
      "description": "What is in the cart right now, with the subtotal, the delivery charge and the total.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "readOnlyHint": true,
      "access": "public",
      "transport": "webmcp"
    }
  ],
  "identity": {
    "supported": true,
    "docs": "https://busymate.ai/docs/guides/identified-visitors"
  },
  "humanHandoff": true
}
