AI Agents & Developers Guide
Debecker (Udo Debecker BV, Kortrijk, Belgium) sells tableware for hospitality and home: porcelain, glassware, cutlery and table lamps. This page explains how AI agents and developers can search the live catalogue, read product and store information, manage a shopper's cart and, for signed-in trade customers, read and repeat earlier orders. Every interface below uses the same tool names, descriptions and parameters.
Quick guide
- In the browser (WebMCP). Every shop page on www.debecker.be registers all 8 tools with
document.modelContext.registerToolbefore the app loads. A browser agent can call them directly instead of scraping the page. - MCP server.
https://www.debecker.be/mcp(Streamable HTTP, stateless, JSON responses). It exposes the server-backed tools:search_catalog,get_product,list_collections,get_store_info,b2b_order_history. - REST. The same server tools as
POST /api/agent/{tool}with a JSON body. Specification: /openapi.json, interactive: /openapi.html (Swagger UI).
Cart and checkout tools only exist in the browser, because the cart lives in the shopper's tab. No tool places an order or takes a payment: the shopper always pays in Stripe Checkout themselves.
Tools
| Name | Purpose | Bucket | Login | Available via |
|---|---|---|---|---|
search_catalog | Zoeken in de catalogus | 2: server-backed, public | None | WebMCP, MCP, REST |
get_product | Product opvragen | 2: server-backed, public | None | WebMCP, MCP, REST |
list_collections | Merken en collecties | 2: server-backed, public | None | WebMCP, MCP, REST |
get_store_info | Winkelinformatie | 2: server-backed, public | None | WebMCP, MCP, REST |
manage_cart | Winkelmand beheren | 1: page-local (in the browser tab) | None | WebMCP |
start_checkout | Naar afrekenen | 1: page-local (in the browser tab) | None | WebMCP |
b2b_order_history | B2B-orderhistoriek | 3: server-backed, private (B2B login) | B2B login | WebMCP, MCP, REST |
b2b_reorder | B2B opnieuw bestellen | 3: server-backed, private (B2B login) | B2B login | WebMCP |
search_catalog
Zoek in de live catalogus van Debecker (tafelgerei voor horeca en thuis: porselein, glaswerk, bestek, tafellampen, buffet). Gebruik dit zodra de shopper een producttype, merk, collectie, artikelnummer of budget noemt. Geeft maximaal 8 bestelbare producten met prijs in EUR en de product-URL. Met de login van een B2B-klant krijg je nettoprijzen excl. btw, anders prijzen incl. 21% btw. Roep daarna get_product aan voor varianten en verpakking.
query(required) string: Wat de shopper zoekt: producttype, merk, collectie of artikelnummer. Vier talen mogelijk.brandstring: Beperk tot één merk, exact zoals list_collections het teruggeeft.collectionstring: Beperk tot één collectie van dat merk.max_pricenumber: Maximale prijs in EUR per stuk.limitinteger: Aantal resultaten, 1 tot 8.language"nl" | "fr" | "en" | "de": Taal van titels, beschrijvingen en URL's. Standaard nl.
REST: POST /api/agent/search_catalog
get_product
Haal één product op: titel, korte beschrijving, prijs, verpakkingsgrootte (aantal stuks per verpakking), alle koopbare varianten met SKU en kleur, en de URL. Gebruik dit voor manage_cart met action add, om de juiste variant_sku te kiezen.
idstring: Product-id (uuid) uit search_catalog.handlestring: De slug uit de product-URL, bv. spiegelau-wit-wijnglas-met-arabeskpatroon-14aca83f.urlstring: Volledige product-URL op www.debecker.be.language"nl" | "fr" | "en" | "de": Taal van titels, beschrijvingen en URL's. Standaard nl.
REST: POST /api/agent/get_product
list_collections
Lijst de merken van de webshop, of de collecties van één merk met het aantal producten en de URL. Gebruik dit om te browsen of om een merk- of collectienaam exact te krijgen voor search_catalog.
brandstring: Merk waarvan je de collecties wilt. Zonder merk krijg je de merkenlijst.querystring: Filter op naam.language"nl" | "fr" | "en" | "de": Taal van titels, beschrijvingen en URL's. Standaard nl.
REST: POST /api/agent/list_collections
get_store_info
Feitelijke informatie over Debecker: verzendkosten en drempels per land, levering, retourbeleid, betaalmethodes, kortingen, contact en de openingsuren van de showroom in Kortrijk. Alles komt uit de site zelf; wat niet vastligt, staat als unknown met een link naar de pagina.
topic"shipping" | "returns" | "payment" | "contact" | "hours" | "discounts" | "all": Onderwerp; all geeft alles.language"nl" | "fr" | "en" | "de": Taal van titels, beschrijvingen en URL's. Standaard nl.
REST: POST /api/agent/get_store_info
manage_cart
Bekijk en wijzig het winkelmandje van de shopper in deze tab, zoals met de knoppen op de site. action view toont de inhoud; add legt een product in het mandje (geef product_id of handle, en variant_sku uit get_product als het product varianten heeft; quantity is het aantal verpakkingen); set_quantity wijzigt het aantal van een regel (line_id uit view, 0 verwijdert); remove verwijdert een regel; clear maakt het mandje leeg en vraagt confirm: true na akkoord van de shopper. Plaatst geen bestelling en start geen betaling.
action(required) "view" | "add" | "set_quantity" | "remove" | "clear": Wat er met het mandje moet gebeuren.product_idstring: Bij add: product-id uit search_catalog of get_product.handlestring: Bij add: alternatief voor product_id.variant_skustring: Bij add: SKU van de variant uit get_product.colorstring: Bij add: alternatief voor variant_sku, de kleur zoals get_product ze geeft.quantityinteger: Bij add en set_quantity: aantal verpakkingen.line_idstring: Bij set_quantity en remove: line_id uit action view.confirmboolean: Bij clear: true nadat de shopper akkoord gaf.
start_checkout
Breng de shopper naar het winkelmandje om af te rekenen. Plaatst geen bestelling en start geen betaling: de shopper klikt zelf op Afrekenen en betaalt in de beveiligde Stripe-checkout. Faalt als het mandje leeg is.
No parameters.
b2b_order_history
Toon de eerdere bestellingen van de ingelogde B2B-klant (webshop en facturen): ordernummer, datum, bedrag excl. btw en aantal regels. Met order_number krijg je ook de regels (artikel, SKU, aantal verpakkingen, prijs). Vereist de login van een goedgekeurde B2B-klant; zonder login krijg je AUTH_REQUIRED.
order_numberstring: Ordernummer of factuurnummer voor de regels van één bestelling.limitinteger: Aantal recentste bestellingen, 1 tot 20.language"nl" | "fr" | "en" | "de": Taal van titels, beschrijvingen en URL's. Standaard nl.
REST: POST /api/agent/b2b_order_history
b2b_reorder
Zet alle regels van een eerdere bestelling van de ingelogde B2B-klant terug in het winkelmandje, met dezelfde aantallen. Artikelen die niet meer in de webshop staan, komen erin als regel aan de prijs van de laatste factuur. Vraag eerst akkoord en stuur confirm: true mee. Plaatst geen bestelling; de klant rekent zelf af. Vereist de login van een goedgekeurde B2B-klant.
order_number(required) string: Ordernummer of factuurnummer uit b2b_order_history.confirm(required) true: Moet true zijn; vraag de klant eerst om akkoord.
Authentication
Public tools need no key and no login. Consumer prices include 21% Belgian VAT. Trade (B2B) prices and the B2B tools are only available for a signed-in, approved B2B customer. Authentication is two-hop: the agent sends the customer's own Supabase access token as Authorization: Bearer <token>, and the server queries the database with that same token, so the customer only ever sees their own data. In the browser this happens automatically when the customer is signed in. There are no API keys and no shared secrets; never ask a customer for their password.
Examples
curl -s https://www.debecker.be/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
curl -s https://www.debecker.be/api/agent/search_catalog \
-H 'Content-Type: application/json' \
-d '{"query":"wine glasses","limit":3,"language":"en"}'
Responses and errors
Every tool returns a JSON object. Success has ok: true. Errors never throw; they return { "ok": false, "code": "...", "message": "..." } with one of the codes VALIDATION, AUTH_REQUIRED, FORBIDDEN, NOT_FOUND, VARIANT_UNAVAILABLE, EMPTY_CART, CONFIRMATION_REQUIRED, UNAVAILABLE. Over REST the HTTP status follows the code (400, 401, 403, 404, 503). Please keep to about 120 requests per minute.
More
/llms.txt · /.well-known/webmcp.json · /openapi.json · Contact (info@debecker.be)