Skip to content

Custom Blinds Shop

by CustomBlinds · remote · no sign-in to list tools · v1.0.0 · published by GitHub user CustomBlinds

South Africa's first AI-transactable blinds, shutters and awnings catalogue with live ZAR pricing.

Deletes · 2Changes · 12

26 tools: 2 can delete or cancel things, 12 change things and 12 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http cb-shop https://shop.customblinds.co.za/mcp

Findings

Matches of fixed checks, with the text they matched.

1 info
  • The description mentions "credentials".

    Matched text

    description: "...out → complete_checkout) which needs no credentials. Use create_order only if you hold a Be..."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

26 tools

Deletes or cancels 2Claude Code: deny
  • cancel_cartPermanently delete a cart by cart_id.No findings

    Why it is in this group

    • The name "cancel_cart" says "cancel": a word for removing or ending something.
    • The description says "Permanently delete".
    Description, as the server wrote it
    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.
  • cancel_checkoutAbort an unpaid checkout and release its checkout_id.No findings

    Why it is in this group

    • The name "cancel_checkout" says "cancel": a word for removing or ending something.
    Description, as the server wrote it
    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.
Changes things 12Claude Code: ask
  • check_colour_stockVerify whether a specific colour is available before configure_product.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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 prevent a configure_product failure due to an out-of-stock selection.
  • complete_checkoutGenerate a Yoco card or Ozow instant-EFT payment link; this does NOT complete payment.No findings

    Why it is in this group

    • The name "complete_checkout" says "checkout": a word for a change.
    Description, as the server wrote it
    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 held. Retain a successful URL: repeat calls return payment_pending with no URL. Gateway failures raise an error, send no payment-link email and require team review rather than an automatic retry. Poll get_order with customer_email for payment status.
  • configure_productLock in a full blind specification: product, dimensions, colour, and mount type (inside recess or outside face-fix).No findings

    Why it is in this group

    • The description's first verb is "lock": a word for a change.
    Description, as the server wrote it
    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_stock first if availability is uncertain.
  • create_cartStart the open UCP purchase flow, no auth needed.No findings

    Why it is in this group

    • The name "create_cart" says "create": a word for a change.
    Description, as the server wrote it
    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 link.
  • create_checkoutPhase 1 of 2 in the purchase flow.No findings

    Why it is in this group

    • The name "create_checkout" says "create": a word for a change.
    Description, as the server wrote it
    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 before finalising.
  • create_orderLegacy auth-required tool, prefer the open UCP flow (create_cart → create_checkout → complete_checkout) which needs no credentials.1 finding

    Why it is in this group

    • The name "create_order" says "create": a word for a change.

    Findings

    • Info

      The description mentions "credentials".

      Matched text

      description: "...out → complete_checkout) which needs no credentials. Use create_order only if you hold a Be..."

      What this check looks for
    Description, as the server wrote it
    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 against the live pricing engine, agent-supplied prices are ignored. Returns a Yoco or Ozow payment_url.
  • get_whatsapp_handoffGenerate a pre-filled WhatsApp deep link to hand the customer off to the right contact.No findings

    Why it is in this group

    • The name "get_whatsapp_handoff" says "get": a word for reading.
    • The description's first verb is "generate": a word for a change.
    Description, as the server wrote it
    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 for a free in-home consultation, booked on the same WhatsApp line (+27760228410); all other South African locations route to that line too (+27760228410). It is WhatsApp only, no voice calls. Use when the customer prefers human assistance or when self-serve checkout isn't appropriate.
  • request_price_matchSubmit a price match claim when the customer has found the same blind at a lower price elsewhere.No findings

    Why it is in this group

    • The name "request_price_match" says "request": a word for a change.
    Description, as the server wrote it
    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: Blinds Direct (same supplier), clearance or flash-sale prices, or out-of-stock items. Requires product_id and competitor_price_zar at minimum.
  • 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).No findings

    Why it is in this group

    • The name "request_swatch" says "request": a word for a change.
    Description, as the server wrote it
    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). Custom Blinds does not post individual swatches or off-cuts. For orders over R8,000 the customer can ask for the full sample book via WhatsApp; if nothing suits, full refund with no fees. Never quote a sample-book price or courier cost.
  • submit_enquiryLegacy auth-required tool, prefer the open UCP flow (create_cart → create_checkout → complete_checkout) for credentialless checkout.No findings

    Why it is in this group

    • The name "submit_enquiry" says "submit": a word for a change.
    Description, as the server wrote it
    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 configure_product output plus customer name, email, and phone. Team responds within 24 hours.
  • update_cartModify an open cart before checkout.No findings

    Why it is in this group

    • The name "update_cart" says "update": a word for a change.
    Description, as the server wrote it
    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 modify a cart that already has a checkout in progress.
  • update_checkoutUpdate customer details or payment_method only before payment-link generation.No findings

    Why it is in this group

    • The name "update_checkout" says "update": a word for a change.
    Description, as the server wrote it
    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.
Only reads 12Claude Code: allow
  • get_ar_visualizer_urlReturns the link to the Custom Blinds measuring guide when a customer is unsure how to measure.No findings

    Why it is in this group

    • The name "get_ar_visualizer_url" says "get": a word for reading.
    Description, as the server wrote it
    Returns the link to the Custom Blinds measuring guide when a customer is unsure how to measure. There is no AR tool: the guide shows how to measure for an inside (recess) or outside (face fix) fit in two minutes, and a customer who is still unsure can order with best guess sizes, receive a free tape measure and confirm before production starts.
  • get_cartRetrieve live cart state by cart_id: full item list, calculated totals in ZAR, and any customer details stored so far.No findings

    Why it is in this group

    • The name "get_cart" says "get": a word for reading.
    Description, as the server wrote it
    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.
  • get_checkoutRead checkout by checkout_id.No findings

    Why it is in this group

    • The name "get_checkout" says "get": a word for reading.
    Description, as the server wrote it
    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 response in caller context.
  • get_delivery_estimateExplain the production lead time for a new order.No findings

    Why it is in this group

    • The name "get_delivery_estimate" says "get": a word for reading.
    Description, as the server wrote it
    Explain the production lead time for a new order. Production takes 5 to 7 working days, excluding transit times and outside peak seasons. Returns dispatch_date, production_days, and a plain-language summary safe to share with the customer. Never quote a final delivery date. Call this when a customer asks 'when will it arrive?' to give an honest production timeline.
  • get_orderRetrieve a confirmed order's status, items, and payment details by order_id.No findings

    Why it is in this group

    • The name "get_order" says "get": a word for reading.
    Description, as the server wrote it
    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 date once available.
  • get_payment_methodsList available payment processors and their capabilities.No findings

    Why it is in this group

    • The name "get_payment_methods" says "get": a word for reading.
    Description, as the server wrote it
    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_checkout and complete_checkout.
  • get_priceGet an exact ZAR price using product_id from search_catalog or lookup_catalog, width_mm and height_mm.No findings

    Why it is in this group

    • The name "get_price" says "get": a word for reading.
    Description, as the server wrote it
    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_product before creating a cart. Failure can return success:false or a JSON-RPC validation error.
  • get_productFetch complete details for one product by id (e.g.No findings

    Why it is in this group

    • The name "get_product" says "get": a word for reading.
    Description, as the server wrote it
    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 committing.
  • get_product_recommendationTranslate a customer's primary concern into a product recommendation.No findings

    Why it is in this group

    • The name "get_product_recommendation" says "get": a word for reading.
    Description, as the server wrote it
    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 product_id with rationale, pass it to get_price or configure_product next. Security concern routes to brochure MCP (Garden Route customers only).
  • lookup_catalogPreferred structured discovery.No findings

    Why it is in this group

    • The name "lookup_catalog" says "lookup": a word for reading.
    Description, as the server wrote it
    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 exact pair with get_price.
  • search_catalogPreferred free-text discovery.No findings

    Why it is in this group

    • The name "search_catalog" says "search": a word for reading.
    Description, as the server wrote it
    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.
  • search_productsLegacy discovery, retained for backward compatibility.No findings

    Why it is in this group

    • The name "search_products" says "search": a word for reading.
    Description, as the server wrote it
    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 as product_id to get_price or configure_product.

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http cb-shop https://shop.customblinds.co.za/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__cb-shop__search_products",
      "mcp__cb-shop__get_price",
      "mcp__cb-shop__search_catalog",
      "mcp__cb-shop__lookup_catalog",
      "mcp__cb-shop__get_product",
      "mcp__cb-shop__get_cart",
      "mcp__cb-shop__get_checkout",
      "mcp__cb-shop__get_order",
      "mcp__cb-shop__get_payment_methods",
      "mcp__cb-shop__get_product_recommendation",
      "mcp__cb-shop__get_ar_visualizer_url",
      "mcp__cb-shop__get_delivery_estimate"
    ],
    "ask": [
      "mcp__cb-shop__configure_product",
      "mcp__cb-shop__submit_enquiry",
      "mcp__cb-shop__create_order",
      "mcp__cb-shop__create_cart",
      "mcp__cb-shop__update_cart",
      "mcp__cb-shop__create_checkout",
      "mcp__cb-shop__update_checkout",
      "mcp__cb-shop__complete_checkout",
      "mcp__cb-shop__check_colour_stock",
      "mcp__cb-shop__request_swatch",
      "mcp__cb-shop__get_whatsapp_handoff",
      "mcp__cb-shop__request_price_match"
    ],
    "deny": [
      "mcp__cb-shop__cancel_cart",
      "mcp__cb-shop__cancel_checkout"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as cb-shop. Review it before you use it.