{"auth":"bearer_api_key","authDescription":"Authorization: Bearer \u003capi-key\u003e. Keys are SHA-256 hashed and revocable; each resolves to a customer account. Obtain via Gate → API Keys.","endpoint":"/mcp","notes":"Orders are not paid online. Payment is arranged offline (cash, Revolut, MBWay). This is a non-critical ordering surface — security is calibrated for usability over hardening.","protocolVersion":"2025-06-18","server":{"name":"lavanda-mcp","version":"1.0.0"},"tools":[{"description":"List the laundry service types this MCP server can create orders for, with pricing unit (per kg / per piece / catalog) and current rates from business rules. Call this first to know what to offer and how to price.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"},"name":"list_services"},{"description":"List laundry stores the customer can order from, with id, name, city and address. Use the returned id as storeId when creating an order or requesting a quote. Optionally filter by city name (case-insensitive).","inputSchema":{"description":"List stores, optionally filtered by city.","properties":{"city":{"description":"Optional city name to filter (e.g. 'Lisboa', 'Alfama'). Case-insensitive.","type":"string"}},"type":"object"},"name":"list_stores"},{"description":"Estimate the price and planned deposit for a laundry order before creating it. Provide storeId + serviceType, then either weightKg (for per-kg services like wash_dry) or itemsCount (for per-piece services like iron). For catalog services (dry_clean, wash_dry_iron) you may pass an itemKey to price a specific item; without one, the available catalog items are returned.","inputSchema":{"description":"Request a price quote.","properties":{"deliveryAddressId":{"description":"Optional delivery address ID. When provided, the quote includes the transport fee for the delivery zone.","type":"string"},"itemKey":{"description":"Optional catalog item key (e.g. a shirt type) for dry_clean / wash_dry_iron. Without it, the available catalog items are returned.","type":"string"},"itemsCount":{"description":"Number of items (required for iron; informational for catalog services without itemKey).","minimum":1,"type":"integer"},"pickupAddressId":{"description":"Optional pickup address ID. When provided, the quote includes the transport fee for the pickup zone.","type":"string"},"serviceType":{"description":"Service type. Per-kg services (wash_dry) need weightKg; per-piece (iron) need itemsCount; catalog (dry_clean, wash_dry_iron) accept an itemKey.","enum":["wash_dry","wash_dry_iron","iron","dry_clean"],"type":"string"},"storeId":{"description":"Store ID (from list_stores).","type":"string"},"weightKg":{"description":"Weight in kg (required for wash_dry).","minimum":0.1,"type":"number"}},"required":["storeId","serviceType"],"type":"object"},"name":"get_quote"},{"description":"Create a laundry order for the customer associated with your API key. Returns the order id, status, tracking URL and planned deposit. Payment is NOT collected online — it is arranged offline (cash, Revolut, MBway). Required: storeId, serviceType, pickupAddress, and either weightKg (for wash_dry) or itemsCount (for other services). deliveryAddress defaults to the pickup address if omitted.","inputSchema":{"description":"Create a laundry order.","properties":{"deliveryAddress":{"description":"Delivery address. Omit or set to 'same' to use the pickup address.","type":"string"},"estimatedCost":{"description":"Optional caller-supplied estimated cost in EUR (for catalog services where the agent negotiated a price).","minimum":0,"type":"number"},"itemsCount":{"description":"Number of items — required for iron, dry_clean, wash_dry_iron.","minimum":1,"type":"integer"},"notes":{"description":"Optional notes / special instructions.","type":"string"},"pickupAddress":{"description":"Pickup address (street, number, city).","type":"string"},"serviceType":{"description":"Service type to order. wash_dry needs weightKg; all others need itemsCount.","enum":["wash_dry","wash_dry_iron","iron","dry_clean"],"type":"string"},"storeId":{"description":"Store ID (from list_stores).","type":"string"},"weightKg":{"description":"Weight in kg — required for wash_dry, not allowed for others.","minimum":0.1,"type":"number"}},"required":["storeId","serviceType","pickupAddress"],"type":"object"},"name":"create_order"},{"description":"Look up the status of one of the customer's orders by order id or order number. Only returns orders belonging to the API key's customer account. Includes status, service, costs and a public tracking URL.","inputSchema":{"description":"Look up an order.","properties":{"orderId":{"description":"Order UUID, or the numeric order number (e.g. '42').","type":"string"}},"required":["orderId"],"type":"object"},"name":"get_order_status"},{"description":"List the most recent orders for the API key's customer account (max 10), newest first, with status and tracking URL. Useful to answer 'where is my order?' questions.","inputSchema":{"description":"List the customer's recent orders.","properties":{"limit":{"description":"Max number of orders to return (default 10, max 50).","type":"integer"}},"type":"object"},"name":"list_my_orders"},{"description":"List the accepted payment methods (e.g. cash, Revolut, MBway). Payment is ALWAYS arranged offline — no online payment is processed by this server. Use this to tell the customer how they will pay the driver/laundry.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"},"name":"list_payment_methods"},{"description":"Get the live tracking snapshot for one of the customer's orders: status, tracking URL, and — when the order is out_for_delivery — the driver's current GPS position. Use this to answer 'where is my order / where is the driver?'.","inputSchema":{"description":"Get live tracking for an order.","properties":{"orderId":{"description":"Order UUID, or the numeric order number (e.g. '124').","type":"string"}},"required":["orderId"],"type":"object"},"name":"get_tracking"}],"transport":"streamable_http"}
