customblinds avatar

Custom Blinds Shop

customblinds/cb-shop-mcp

Connects Claude directly to a live South African window covering catalogue with real ZAR pricing and e-commerce workflows. You get five tools: open ones for searching products by type and colour, calculating prices by dimensions, and configuring validated product specs, plus bearer-gated endpoints for submitting enquiries to their sales email and creating draft orders with Yoco payment links. It's a streamable-HTTP remote server, so no local install. Reach for this if you're building conversational shopping flows for physical goods and want to see how a regional retailer wired up their inventory, quoting, and checkout to MCP. Bearer tokens issued on request from Custom Blinds in Stellenbosch.

tools
26
auth
Secret needed
transport
HTTP
last updated
May 28, 2026

Install

From registry metadata
$ npx add-mcp https://shop.customblinds.co.za/mcp --name cb-shop --header 'Authorization: Bearer ${API_TOKEN}'

Run in your terminal. add-mcp asks which agents to add it to, then asks for each value it needs. Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http cb-shop https://shop.customblinds.co.za/mcp --header 'Authorization: YOUR_AUTHORIZATION'

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 26 tools

Verified live against the running server on Nov 6, 2026.

search_productsLegacy discovery, retained for backward compatibility. Prefer search_catalog / lookup_catalog, then get_product. Filters by blind type, colour or maximum dimensions. Returns products with id (not product_id), name, description, features and in-stock colour count. Pass that id...5 params

Legacy discovery, retained for backward compatibility. Prefer search_catalog / lookup_catalog, then get_product. Filters by blind type, colour or maximum dimensions. Returns products with id (not product_id), name, description, features and in-stock colour count. Pass that id...

Parameters* required
colourstring
Colour name to search for (partial match)
max_height_mmnumber
Maximum height/drop in millimetres the product supports
max_width_mmnumber
Maximum width in millimetres the product supports
provincestring
Optional. Customer's South African province or city. Garden Route locations get Duncan's direct contact; other locations get the online shop contact.
typestring
Blind category to filter by: roller, venetian, honeycomb, vertical, outdoor
get_priceGet an exact ZAR price using product_id from search_catalog or lookup_catalog, width_mm and height_mm. Prices include VAT and delivery. Colour selects the bamboo price tier where applicable. A price is not a stock reservation: validate the exact colour and mount with configure...8 params

Get an exact ZAR price using product_id from search_catalog or lookup_catalog, width_mm and height_mm. Prices include VAT and delivery. Colour selects the bamboo price tier where applicable. A price is not a stock reservation: validate the exact colour and mount with configure...

Parameters* required
colourstring
Optional bamboo colour for colour-specific tier pricing
finishstring
Optional finish for aluminium products: Plain, Brushed, Woodgrain
height_mm*number
Height/drop in millimetres (e.g. 1500)
no_drillboolean
Optional. true for the no-drill option (tension brackets, inside the frame, max 2000mm wide; 1500mm on 25mm venetians). Adds the R65 no-drill kit per blind. Offered on indoor roller blinds, includi...
product_id*string
product_id from search_catalog or lookup_catalog (e.g. roller-blockout)
provincestring
Optional. Customer's South African province or city. Garden Route locations get Duncan's direct contact; other locations get the online shop contact.
quantitynumber
Number of blinds (default 1)
width_mm*number
Width in millimetres (e.g. 1200)
configure_productLock in a full blind specification: product, dimensions, colour, and mount type (inside recess or outside face-fix). Validates that the colour exists and is in stock, then prices the blind. Returns a configuration summary to pass directly into create_cart. Call check_colour_st...9 params

Lock in a full blind specification: product, dimensions, colour, and mount type (inside recess or outside face-fix). Validates that the colour exists and is in stock, then prices the blind. Returns a configuration summary to pass directly into create_cart. Call check_colour_st...

Parameters* required
colour*string
Colour name (must match available colours)
finishstring
Optional finish for aluminium venetians
height_mm*number
Height/drop in millimetres
mount_type*string
Use inside (recess) or outside (face-fix); handler requires a nonempty value
no_drillboolean
Optional. true for the no-drill option (tension brackets, inside the frame, max 2000mm wide; 1500mm on 25mm venetians). Adds the R65 no-drill kit per blind. Offered on indoor roller blinds, includi...
product_id*string
product_id from search_catalog or lookup_catalog
provincestring
Optional. Customer's South African province or city. Garden Route locations get Duncan's direct contact; other locations get the online shop contact.
quantitynumber
Number of blinds (default 1)
width_mm*number
Width in millimetres
submit_enquiryLegacy auth-required tool, prefer the open UCP flow (create_cart → create_checkout → complete_checkout) for credentialless checkout. Use submit_enquiry only when the customer wants a sales team follow-up by email rather than paying online. Requires Bearer token. Pass a configu...5 params

Legacy auth-required tool, prefer the open UCP flow (create_cart → create_checkout → complete_checkout) for credentialless checkout. Use submit_enquiry only when the customer wants a sales team follow-up by email rather than paying online. Requires Bearer token. Pass a configu...

Parameters* required
customer_email*string
Customer email address
customer_name*string
Customer full name
customer_phone*string
Customer phone number
message*string
Required enquiry message; at least 10 characters after trimming
product_config*object
Product configuration from configure_product
create_orderLegacy auth-required tool, prefer the open UCP flow (create_cart → create_checkout → complete_checkout) which needs no credentials. Use create_order only if you hold a Bearer token and want a single-call path to a payment link. All item prices are re-verified server-side again...7 params

Legacy auth-required tool, prefer the open UCP flow (create_cart → create_checkout → complete_checkout) which needs no credentials. Use create_order only if you hold a Bearer token and want a single-call path to a payment link. All item prices are re-verified server-side again...

Parameters* required
customer_addressstring
Delivery address
customer_citystring
Delivery city
customer_email*string
Customer email address
customer_name*string
Customer full name
customer_phone*string
Customer phone number
items*array
Array of configured blind items
payment_methodstring
Yoco card or Ozow instant EFTone of yoco · ozowdefault: yoco
search_catalogPreferred free-text discovery. Returns results containing product_id, name, category, description, product_url and colour_count_in_stock, plus total and currency. For structured filters use lookup_catalog. Pass product_id to get_product or get_price.1 params

Preferred free-text discovery. Returns results containing product_id, name, category, description, product_url and colour_count_in_stock, plus total and currency. For structured filters use lookup_catalog. Pass product_id to get_product or get_price.

Parameters* required
querystring
Free-text query, e.g. 'blockout' or 'venetian'
lookup_catalogPreferred structured discovery. Filter by category, partial colour name or required supported width/drop in mm. Returns results containing product_id, name, category and product_url, plus total. Width/drop filters check separate maximums, not every combination; confirm the exa...4 params

Preferred structured discovery. Filter by category, partial colour name or required supported width/drop in mm. Returns results containing product_id, name, category and product_url, plus total. Width/drop filters check separate maximums, not every combination; confirm the exa...

Parameters* required
categorystring
roller | venetian | honeycomb | vertical | outdoor
colourstring
max_height_mmnumber
max_width_mmnumber
get_productFetch complete details for one product by id (e.g. roller-blockout, venetian-25mm-aluwood). Returns all available colours with in-stock status, materials, features, and maximum supported dimensions. Use before configure_product to confirm a colour exists and is in stock before...1 params

Fetch complete details for one product by id (e.g. roller-blockout, venetian-25mm-aluwood). Returns all available colours with in-stock status, materials, features, and maximum supported dimensions. Use before configure_product to confirm a colour exists and is in stock before...

Parameters* required
product_id*string
create_cartStart the open UCP purchase flow, no auth needed. Creates a cart session and returns a cart_id (24-hour TTL). Optionally seed with pre-configured blind items and customer details. Next step: update_cart to add items, then create_checkout → complete_checkout to mint the payment...2 params

Start the open UCP purchase flow, no auth needed. Creates a cart session and returns a cart_id (24-hour TTL). Optionally seed with pre-configured blind items and customer details. Next step: update_cart to add items, then create_checkout → complete_checkout to mint the payment...

Parameters* required
customerobject
itemsarray
Optional configured items; all submitted prices are ignored
get_cartRetrieve live cart state by cart_id: full item list, calculated totals in ZAR, and any customer details stored so far. Call after update_cart to confirm changes are correct before proceeding to create_checkout. Cart expires after 24 hours of inactivity.1 params

Retrieve live cart state by cart_id: full item list, calculated totals in ZAR, and any customer details stored so far. Call after update_cart to confirm changes are correct before proceeding to create_checkout. Cart expires after 24 hours of inactivity.

Parameters* required
cart_id*string
update_cartModify an open cart before checkout. op: 'add' appends items, 'remove' drops items by 0-based index, 'set' replaces the full item list, 'clear' empties the cart. Merges customer details (name, email, phone) via the customer field. Call get_cart afterwards to confirm. Cannot mo...5 params

Modify an open cart before checkout. op: 'add' appends items, 'remove' drops items by 0-based index, 'set' replaces the full item list, 'clear' empties the cart. Merges customer details (name, email, phone) via the customer field. Call get_cart afterwards to confirm. Cannot mo...

Parameters* required
cart_id*string
customerobject
indicesarray
Item indices to remove (0-based) when op='remove'
itemsarray
opstring
one of add · remove · set · cleardefault: set
cancel_cartPermanently delete a cart by cart_id. Use when the customer abandons the session or wants to start over. Has no effect on any checkout or paid order already created from this cart. Irreversible, create a new cart to restart.1 params

Permanently delete a cart by cart_id. Use when the customer abandons the session or wants to start over. Has no effect on any checkout or paid order already created from this cart. Irreversible, create a new cart to restart.

Parameters* required
cart_id*string
create_checkoutPhase 1 of 2 in the purchase flow. Convert a cart (or inline items + customer) into a checkout. Customer name, email, and phone are required. Returns checkout_id. No payment link is minted yet, call complete_checkout for that. Use update_checkout to correct customer details be...4 params

Phase 1 of 2 in the purchase flow. Convert a cart (or inline items + customer) into a checkout. Customer name, email, and phone are required. Returns checkout_id. No payment link is minted yet, call complete_checkout for that. Use update_checkout to correct customer details be...

Parameters* required
cart_idstring
Either cart_id or items required
customerobject
itemsarray
payment_methodstring
Default 'yoco'one of yoco · ozow
get_checkoutRead checkout by checkout_id. Returns persisted order status, payment_status, payment_method, items, customer, total_zar and currency. Initial order status is started, not pending. This tool does not return a previously generated payment_url: retain the complete_checkout respo...1 params

Read checkout by checkout_id. Returns persisted order status, payment_status, payment_method, items, customer, total_zar and currency. Initial order status is started, not pending. This tool does not return a previously generated payment_url: retain the complete_checkout respo...

Parameters* required
checkout_id*string
update_checkoutUpdate customer details or payment_method only before payment-link generation. Paid, cancelled and payment-in-progress checkouts are rejected. Concurrent state changes are detected; retrieve the latest status before retrying.3 params

Update customer details or payment_method only before payment-link generation. Paid, cancelled and payment-in-progress checkouts are rejected. Concurrent state changes are detected; retrieve the latest status before retrying.

Parameters* required
checkout_id*string
customerobject
payment_methodstring
one of yoco · ozow
complete_checkoutGenerate a Yoco card or Ozow instant-EFT payment link; this does NOT complete payment. Rejects cancelled checkouts and rechecks stock and totals first. An atomic claim prevents competing gateway calls. Returns payment_url or null plus status and message; cloud callers may be h...2 params

Generate a Yoco card or Ozow instant-EFT payment link; this does NOT complete payment. Rejects cancelled checkouts and rechecks stock and totals first. An atomic claim prevents competing gateway calls. Returns payment_url or null plus status and message; cloud callers may be h...

Parameters* required
checkout_id*string
payment_methodstring
Overrides any value set in create_checkout/update_checkoutone of yoco · ozow
cancel_checkoutAbort an unpaid checkout and release its checkout_id. Use if the customer changes their mind after create_checkout but before completing payment. Has no effect on orders already confirmed by webhook. To restart, create a new cart and checkout from scratch.1 params

Abort an unpaid checkout and release its checkout_id. Use if the customer changes their mind after create_checkout but before completing payment. Has no effect on orders already confirmed by webhook. To restart, create a new cart and checkout from scratch.

Parameters* required
checkout_id*string
get_orderRetrieve a confirmed order's status, items, and payment details by order_id. customer_email is required as soft-auth and must exactly match the order record, prevents arbitrary order lookups. Returns payment status (paid | pending | failed), production status, and dispatch dat...2 params

Retrieve a confirmed order's status, items, and payment details by order_id. customer_email is required as soft-auth and must exactly match the order record, prevents arbitrary order lookups. Returns payment status (paid | pending | failed), production status, and dispatch dat...

Parameters* required
customer_email*string
order_id*string
check_colour_stockVerify whether a specific colour is available before configure_product. Returns in_stock boolean, expected_restock_date if out of stock, and up to 5 alternative in-stock colours ordered by similarity. Call this when a customer requests a named colour or when you want to preven...2 params

Verify whether a specific colour is available before configure_product. Returns in_stock boolean, expected_restock_date if out of stock, and up to 5 alternative in-stock colours ordered by similarity. Call this when a customer requests a named colour or when you want to preven...

Parameters* required
colour_name*string
product_id*string
request_swatchLog up to 5 colour codes against an EXISTING order for the team (order_ref required; without it the tool returns status order_required and logs nothing). Sample swatches, not off-cuts: on orders over R8,000 the customer can ask on WhatsApp for swatches in the colours they like...7 params

Log up to 5 colour codes against an EXISTING order for the team (order_ref required; without it the tool returns status order_required and logs nothing). Sample swatches, not off-cuts: on orders over R8,000 the customer can ask on WhatsApp for swatches in the colours they like...

Parameters* required
customer_email*string
Customer's email address.
customer_name*string
Customer's full name.
customer_phone*string
Used as WhatsApp number
order_ref*string
The order reference the swatches ship with. Required.
product_interest*string
e.g. 'Roller Blockout' or 'Honeycomb'
suburbstring
Optional delivery suburb
swatch_codesarray
Optional specific colour codes (max 5)
get_payment_methodsList available payment processors and their capabilities. Returns Yoco (card, immediate) and Ozow (instant EFT via South African bank account). Call when the customer asks 'how can I pay?' or before presenting options. The result informs the payment_method field in create_chec...1 params

List available payment processors and their capabilities. Returns Yoco (card, immediate) and Ozow (instant EFT via South African bank account). Call when the customer asks 'how can I pay?' or before presenting options. The result informs the payment_method field in create_chec...

Parameters* required
order_total_zarnumber
Optional. For future per-handler limit filtering.
get_whatsapp_handoffGenerate a pre-filled WhatsApp deep link to hand the customer off to the right contact. Garden Route locations (Knysna, Plett, George, Sedgefield, etc.) route to Duncan Kane on WhatsApp (+27795235407) for a free in-home consultation; all other South African locations route to...4 params

Generate a pre-filled WhatsApp deep link to hand the customer off to the right contact. Garden Route locations (Knysna, Plett, George, Sedgefield, etc.) route to Duncan Kane on WhatsApp (+27795235407) for a free in-home consultation; all other South African locations route to...

Parameters* required
customer_namestring
locationstring
City/suburb. Drives Duncan vs shop routing.
messagestring
Optional additional message to prefill
product_contextstring
e.g. 'roller blockout for bedroom'
get_product_recommendationTranslate a customer's primary concern into a product recommendation. primary_concern must be one of: blockout, heat, glare, moisture, privacy, security, automation. Optionally narrow by room (bedroom, lounge, etc.), location, budget, and aesthetic. Returns a recommended produ...5 params

Translate a customer's primary concern into a product recommendation. primary_concern must be one of: blockout, heat, glare, moisture, privacy, security, automation. Optionally narrow by room (bedroom, lounge, etc.), location, budget, and aesthetic. Returns a recommended produ...

Parameters* required
aestheticstring
locationstring
max_budget_zarnumber
primary_concern*string
one of blockout · heat · glare · moisture · privacy · security
roomstring
get_ar_visualizer_urlReturns the link to the Custom Blinds Visualiser (See it before you buy it), pre-selected to the product when it is supported. The customer adds a photo of their window (any angle), picks a blind and colour, and previews it on their own window. A preview of colour and style, n...2 params

Returns the link to the Custom Blinds Visualiser (See it before you buy it), pre-selected to the product when it is supported. The customer adds a photo of their window (any angle), picks a blind and colour, and previews it on their own window. A preview of colour and style, n...

Parameters* required
modestring
Which link goes in url: visualize (own-window visualiser), measure (measuring guide) or both (visualiser, the default). Both links are always returned.one of measure · visualize · both
product_idstring
Optional. Pre-select a product in the visualiser (e.g. roller-blockout, double-roller-zebra, outdoor-blinds).
get_delivery_estimateExplain the lead time for a new order. Production takes 5 to 7 working days once payment clears, outside peak seasons, then courier transit of about 2 to 5 working days. Returns the ranges and a plain-language summary safe to share. Never quote a dispatch or delivery date: wea...1 params

Explain the lead time for a new order. Production takes 5 to 7 working days once payment clears, outside peak seasons, then courier transit of about 2 to 5 working days. Returns the ranges and a plain-language summary safe to share. Never quote a dispatch or delivery date: wea...

Parameters* required
order_datestring
ISO date string of the order placement date (e.g. '2026-05-18'). Defaults to today.
request_price_matchSubmit a price match claim when the customer has found the same blind at a lower price elsewhere. Custom Blinds matches verified South African retailer prices for identical product, dimensions, and specs. Returns a pre-filled WhatsApp link to the claims team. Not applicable to...8 params

Submit a price match claim when the customer has found the same blind at a lower price elsewhere. Custom Blinds matches verified South African retailer prices for identical product, dimensions, and specs. Returns a pre-filled WhatsApp link to the claims team. Not applicable to...

Parameters* required
competitor_namestring
Name of the competitor (e.g. 'Blind Empire')
competitor_price_zar*number
Competitor's price in ZAR (incl. VAT)
competitor_urlstring
URL to competitor product page or quote
customer_namestring
Customer name
customer_whatsappstring
Customer WhatsApp number for follow-up
height_mmnumber
Window height/drop in mm
product_id*string
Product the customer wants to match (e.g. roller-blockout)
width_mmnumber
Window width in mm

Sponsors

Readme

Custom Blinds Shop MCP

South Africa's first AI-transactable window covering catalogue. Lets MCP-compatible AI agents (Claude, ChatGPT, Cowork, Cursor) search the Custom Blinds catalogue, get live ZAR pricing, configure made-to-measure blinds, and take a customer all the way from product discovery to a Yoco or Ozow payment link — direct from shop.customblinds.co.za. The full purchase flow is open and needs no credentials.

What it does

This is the transactional node of a two-node system. The shop MCP handles search, pricing, configuration, cart, checkout and payment. Product education and design advice live on the brochure MCP at customblinds.co.za. An agent can start cold on the brochure for guidance, then hand off to this shop MCP to complete the order.

The full UCP purchase flow is open (no authentication): search the catalogue, get exact VAT-included ZAR pricing, configure a blind, build a cart, create a checkout, and mint a Yoco or Ozow payment link without any credentials. Twenty-seven tools are exposed.


View the full README on GitHub

Details

Repository
github.com/customblinds/cb-shop-mcp
Transport
HTTP
Auth
Required
Registry
MCP registry, active
Tools verified
Nov 6, 2026