Skip to content
Docs menu

Reference

MCP

MCP tools

Every tool on the TradeCatalog MCP server, its inputs, who can use it and what it returns.

Tools use your current workspace role on every call. Read-only connections keep working. Making changes requires the additional tradecatalog:write scope. Consequential actions show a Confirm/Cancel card in compatible clients, with a signed-in review link as a fallback, and run only after you approve. Results are JSON text; the original lookup tools format prices, while management tools use integer minor currency units and basis points (100 = 1%).

Most tools take a workspace: the workspace address from list_workspaces, like northgate. The AI app normally calls list_workspaces first on its own.

When a tool can’t do something, for example you aren’t staff at that workspace or the customer doesn’t exist, it returns an error message the AI app can read and act on, like “No customer "OAK99". Use list_customers for account codes.”

When a supplier’s catalogue is prices only for the selected customer, set_basket_quantity, send_order and reorder return that error. get_basket, list_buyer_orders and get_buyer_order still work, so existing orders stay readable. The supplier sets this in Settings, and can override it per customer (ordering: follow, prices_only or can_order on update_customer).

When the supplier has switched off price-list downloads, download_my_price_list returns an error and the signed-in CSV link answers 403.

quote_configured_product reads the selected buyer account's line price for productId, qty and optional configuration, without changing a basket. set_configured_basket_line creates a separate line or updates/removes its exact lineId (qty: 0 removes). Supply the full specification on edits. Re-read get_basket after changes and review all selections, measures and current prices before send_order. A specification or pricing-version change invalidates the old review even if the total is unchanged.

Staff can use save_product_family for shared variant metadata and save_ordering_draft for a reviewed advanced-pricing draft. The latter requires Pro and global pricing permission; publication uses the existing price-change review. Product imports accept optional family, order increment and ordering definitions. See trade catalogue setup.

Set up a supplier workspaceLink to this section#

create_workspace creates a Free supplier workspace for the signed-in, verified person, after they confirm a card. Ask for the business name, product currency, timezone and country. The person becomes its owner. No subscription or payment is created. Then call list_workspaces again and use the returned address for product and customer setup. Reviewer and guest logins cannot create workspaces.

Free includes up to 100 products and connected AI apps. Each SKU counts, including hidden and inactive products. At the allowance, existing products, edits and orders keep working; creating more products is unavailable. Explain this entitlement without promoting upgrades or starting subscription checkout in the plugin.

list_workspacesLink to this section#

Supplier workspaces you work in, and trade portals where you buy. Start here.

Who: anyone signed in. Inputs: none.

json
{
  "supplierWorkspaces": [
    { "workspace": "northgate", "name": "Northgate Fixings", "role": "owner" }
  ],
  "tradePortals": [
    {
      "workspace": "hartley-timber",
      "supplier": "Hartley Timber",
      "yourAccount": "Northgate Fixings",
      "accountId": "example-account-id"
    }
  ]
}

search_productsLink to this section#

Search a catalogue by SKU, manufacturer reference, name, brand or category. Returns up to 25 products.

Who: staff and buyers.

InputTypeRequiredDescription
workspacestringyesWorkspace address.
querystringyesWhat to search for. Empty lists products by name.
accountIdstringbuyers with more than one accountSelect your exact account from list_workspaces.
customerstringnoStaff only: a customer’s account code or name, to see their prices and only what they can see. Ignored for buyers.
  • Buyers always see their own account’s prices and only active products they can see.
  • Staff see list prices and every product, or a named customer’s view.
json
{
  "supplier": "Northgate Fixings",
  "pricesFor": "Oakfield Joinery",
  "taxNote": "ex VAT",
  "products": [
    {
      "sku": "HX-8510",
      "name": "Hex bolt M10 x 50 zinc",
      "unit": "Box of 100",
      "availability": "in_stock",
      "price": "£15.73",
      "listPrice": "£18.50",
      "why": "Brand discount −15%"
    }
  ]
}

When the supplier has switched off Show customers the standard price beside their own price, a buyer’s results leave out listPrice and why, and get_buyer_product, get_basket and get_buyer_order carry no list price or price reason either.

Try: “Search Northgate for M10 hex bolts at Oakfield’s prices.”

download_products_csv and download_my_price_listLink to this section#

These tools return a link to an existing CSV download in TradeCatalog. Open it while signed in; returning a link does not download or send the file into chat.

  • download_products_csv: staff choose workspace to download that supplier's product list.
  • download_my_price_list: buyers choose workspace and the exact accountId from list_workspaces to download only that account's agreed prices.
  • download_my_price_list_pdf: the same account, as a branded PDF (Pro). Both tools are blocked when the supplier has turned off price-list downloads.

check_priceLink to this section#

What a customer pays for a SKU at a quantity, and which rule set the price.

Who: staff only.

InputTypeRequiredDescription
workspacestringyesWorkspace address.
customerstringyesAccount code or name.
skustringyesThe SKU.
qtyintegerno1 to 1,000,000. Default 1.
json
{
  "customer": "Oakfield Joinery",
  "sku": "HX-8510",
  "name": "Hex bolt M10 x 50 zinc",
  "qty": 20,
  "unitPrice": "£15.73",
  "lineTotal": "£314.60",
  "listPrice": "£18.50",
  "why": "Brand discount −15%",
  "taxNote": "ex VAT"
}

Try: “What does OAK01 pay for 20 of HX-8510, and why?”

list_customersLink to this section#

Trade customers with account codes, contact emails, active status and account discount.

Who: staff only. Inputs: workspace.

json
[
  {
    "accountCode": "OAK01",
    "name": "Oakfield Joinery",
    "email": "accounts@oakfieldjoinery.co.uk",
    "active": true,
    "discount": "5%"
  }
]

Try: “Which customers have no discount set?”

list_ordersLink to this section#

Recent orders, newest first, up to 50.

Who: staff see every customer’s orders; buyers see their own account’s.

InputTypeRequiredDescription
workspacestringyesWorkspace address.
statusstringnonew, pending, acknowledged, processed, dispatched, completed or cancelled.
json
[
  {
    "reference": "SO-000142",
    "customer": "Oakfield Joinery",
    "status": "new",
    "total": "£314.60",
    "poNumber": "PO-88231",
    "placed": "2026-09-27T07:48:12.000Z"
  }
]

Try: “Any new orders since yesterday? Total them up by customer.”

recent_activityLink to this section#

The activity log of changes to customers, discounts and prices, newest first, up to 50 entries. Optionally one customer’s history.

Who: staff only. Owners and admins see the whole log; other staff see only changes about customers they can see.

InputTypeRequiredDescription
workspacestringyesWorkspace address.
customerstringnoAccount code or name.
json
[
  {
    "when": "2026-09-26T14:21:03.000Z",
    "who": "Jo Hartley",
    "customer": "Oakfield Joinery",
    "what": "Set Northgate brand discount to 15% (was 12.5%)"
  }
]

Try: “Who changed Oakfield’s prices this month?”

NotesLink to this section#

  • Customer names and account codes are matched without regard to case. An exact account code is safest.
  • list_workspaces returns buyer accountId values. Supply the intended one to search_products and every buyer action. Never guess between accounts.
  • Page product searches with offset and the returned nextOffset. Use list_buyer_orders for an explicitly selected buyer account.

Changes and confirmationsLink to this section#

Buyer basket edits, marking updates read and creating unpublished price drafts run immediately when authorised. Other writes return awaiting_confirmation, an actionId and a reviewUrl. ChatGPT and compatible clients display a card with the exact workspace and proposed change: choose Confirm or Cancel without leaving the conversation. Clients without cards use the signed-in review link. Reviews expire after 15 minutes and execute at most once. Disconnecting the app or removing the required workspace access invalidates pending reviews. Changed order baskets and price-change previews require a new review. Use get_action_status to read the outcome; a pending request is not a completed action.

The decide_action helper is available only to the card UI. Its short-lived confirmation capability is hidden from model output and bound to the requesting person, OAuth connection and proposal. A model message or an action ID cannot approve a change. The same role, snapshot, expiry and single-use checks apply to both card and browser approvals.

Every buyer action requires your exact accountId. For send_order, copy the basket fingerprint into expectedBasket, alongside expectedTotal. Prices, quantities and account are checked again before sending.

Use the separate handoff tools for work that finishes in the signed-in app: owners use open_api_key_settings, download_workspace_export and open_logo_settings; staff use open_import_page, open_product_image_upload and open_product_file_manager. The two product handoffs require a tenant-checked productId. File links from get_product and get_buyer_product require your signed-in browser; returning a link has not read the document or completed an upload, removal, export or credential creation. Platform administration is never delegated through OAuth.

Approved customer listsLink to this section#

Staff use get_customer to read the customer's catalogue scope and approved products. set_catalogue_scope changes between all and approved. approve_products adds explicit products or a category; unapprove_product removes one product. These changes require review of the exact customer, current list and affected products. Category membership is checked again at confirmation. Buyers remain limited to their selected account and products visible to that account.

Supplier and buyer toolsLink to this section#

create_workspace is available even when list_workspaces is empty. It creates a Free supplier workspace and owner membership only after confirmation. The optional /mcp/account connection also offers open_billing: owners can open secure subscription billing and confirm payment in Stripe, then check get_settings for the resulting state. Billing links do not complete payments. The standard /mcp connection used by the ChatGPT plugin does not expose open_billing. See sign-up and billing.

MCP 3.0.0 exposes every model-callable operation upfront with its own name, description, input schema and annotations. The previous bulk_products and open_workspace_action tools are replaced by the individual operations below; refresh your client’s tool definitions after updating. The MCP tools/list response is the authoritative input schema. The following tools supplement the lookup tools above:

ToolPurpose
open_api_key_settingsOwner only: return the signed-in API settings page for creating credentials. Opening the link does not create a key. Never ask users to paste secrets into chat.
download_workspace_exportOwner only: return the signed-in full workspace export link. The user must open the link to download it; this tool does not read or transfer the export.
open_logo_settingsOwner only: return the signed-in branding settings page for uploading a supplier logo. Opening the link does not upload or change the logo.
open_import_pageStaff: return the signed-in file import page. The user uploads and reviews the file in TradeCatalog; opening the link does not import anything.
open_product_image_uploadStaff: return the signed-in editor for an existing product to upload an image. Opening the link does not upload or change an image.
open_product_file_managerStaff: return the signed-in editor for an existing product to upload or remove product files. Opening the link does not read, upload or remove files.
delete_workspaceOwner only: permanently delete this workspace, its catalogue, customer access and images, and cancel its subscription. Requires signed-in review and typing the workspace name. This cannot be undone in the app.
get_workspaceStaff: current role, catalogue and order totals. Amounts are integer minor currency units; percentages are basis points (100 = 1%).
get_catalogue_optionsStaff: list category and brand IDs for catalogue and discount changes.
get_productStaff: product fields, current list price, visibility, customer restrictions, images and attached files (spec sheets).
save_productCreate or edit a product. Read the current product first and preserve fields the user did not ask to change. listPrice is in minor units; existing-price changes use the app price-change flow. Requires review.
set_product_imageChoose the main photo, or clear it. Clearing removes that photo from the gallery and the next one becomes the main photo. Requires review.
create_categoryCreate a named category, optionally beneath a parent category. Requires review.
update_categoryRename or move a category. Its products remain in it. Requires review.
delete_categoryRemove a category and its category discount rules. Products and child categories move up one level. Requires review.
hide_productsStaff: hide explicit product IDs from buyers without deleting them. Requires review.
show_productsStaff: make explicit product IDs active. Customer catalogue restrictions still apply. Requires review.
move_productsStaff: move explicit product IDs to one category, or pass null to remove their category. Requires review.
delete_productsStaff: permanently delete explicit product IDs, including their prices, images and basket lines. Historical orders retain their copies. Requires review.
clear_catalogueOwner only: permanently remove every product, price and photo. Requires signed-in review and typing the current deletion phrase.
get_customerStaff: customer terms, price list, catalogue scope, approved products, discount rules, agreed prices, buyers and pending invitations. priceLists are the lists you can assign with update_customer. Assigning a different non-Standard price list requires Pro.
create_customerCreate a trade account. Its contact email can sign in as that account, so confirm the address. Requires review.
update_customerChange customer details, account code (accountCode; unique per supplier ignoring capitals, omit to keep), contact login email, extra update emails (notifyEmails), active status, the whole-list percentage (discountBp, 0 to 10,000) and its adjustment (discount or markup; omit to keep), ordering (follow, prices_only or can_order) and priceListId (null is Standard). Basis points: 100 = 1%. Read get_customer first. Requires review. Assigning a different non-Standard price list requires Pro.
save_discount_ruleSet a customer category, brand or product percentage, in basis points (0 to 10,000). adjustment is discount or markup; omit it for a discount. The most specific rule wins and nothing stacks. Changes prices immediately. Requires review. Requires Pro.
remove_discount_ruleRemove the selected customer discount rule. Prices may rise immediately. Requires review.
set_fixed_priceSet a customer-specific product price in integer minor currency units. Optional note is a remark; noteVisible shows it to that customer. internalNote stays staff-only. Requires review. Requires Pro.
end_fixed_priceEnd a fixed customer price now so normal discount rules apply. Requires review.
list_staffStaff: list the workspace team and pending invitations.
invite_staffOwner only: email an invitation granting staff or owner access. Requires review of recipient and role.
invite_buyerStaff: email an invitation to a specific customer account. Requires review of recipient and account.
remove_buyerRemove one membership from the named customer account. Requires review.
preview_product_importPreview parsed rows without importing. Do not silently repair uncertain source prices.
import_productsImport at most 100 parsed rows. listPrice goes to priceList (omit for Standard); listPrices names other lists. Each list’s changes join one draft. Requires review. Image URLs may be fetched.
import_customersImport at most 100 customers. Optional priceList names their list; adjustment is discount or markup. An unknown list name is an error. Requires review.
preview_agreed_pricesPreview up to 2,000 agreed prices (account code, SKU, integer minor-unit price and an optional note) without saving. Pro only. Unknown accounts and SKUs are reported and skipped. When an account and SKU are repeated, the last row is used.
import_agreed_pricesSave up to 2,000 agreed prices for existing accounts and SKUs. Pro only. Each price is versioned from now, in batches of 100. Unknown rows are skipped. Requires review.
list_import_layoutsList this supplier’s saved column mappings.
save_import_layoutSave a reusable column mapping for this supplier. Requires review.
list_price_changesList drafts and scheduled or published price changes.
draft_price_changeCreate a draft percentage price change for one price list (priceListId; omit for Standard). One batch never mixes lists. Signed basis points: 600 = +6%, from −90% to +100%. Does not publish or email customers. Requires Pro.
preview_price_changeRead the impact, warnings, fixed prices and scheduling clashes before publishing.
publish_price_changePublish now or at an ISO timestamp, optionally emailing customers (on publish or at a scheduled notifyAt) and changing agreed prices. Requires review of the current preview; changed previews invalidate approval. Pro is required except for immediate Standard-price imports without emails or agreed-price changes.
cancel_price_changeCancel a scheduled price change. Customers may be emailed a cancellation. Requires review.
discard_price_draftPermanently discard an unpublished price change. Requires review.
get_staff_orderStaff: order lines, customer, notes and status history.
set_order_statusAccept, process, complete or cancel an order using the app’s allowed transitions. May email the buyer. Requires review.
get_settingsRead supplier settings and subscription state; no payment credentials are returned.
save_settingsOwner only: change business details, order recipients, currency, directory listing, search preferences whether customers see the standard price beside their own (showStandardPrice; false shows only their own price), how products are ordered for customers (productOrder: name, sku, category or custom; category follows the Categories page order, A to Z by name within each category, uncategorised last), which catalogue columns they see and in what order (catalogueColumns), the heading for each product’s trade deal note (dealLabel), whether the branded customer sign-in hides the staff sign-in link (hidePortalStaffLink; owner or admin, default false), whether staff page subtitles and how-to links are hidden (hideStaffGuides; owner or admin only, default false), whether the sign-in page opens on username and password (loginUsernameFirst; owner or admin only, default false so email stays first), and which parts of the branded PDF price list to print (pdfShowLogo, pdfShowDate, pdfShowSupplierName, pdfShowCustomerName, pdfShowPageNumbers; each true by default, false hides that part). Read current settings first. Requires review.
list_api_keysOwner only: list key labels and scopes. Never returns secrets.
revoke_api_keyOwner only: disconnect an API integration immediately. Requires review.
list_newsStaff: list announcements, including expired posts.
post_newsPublish an announcement to buyers, now or from startsLocal (supplier time). Optional endsOn hides it at YYYY-MM-DDTHH:mm in the supplier timezone, or at the end of a YYYY-MM-DD. emailCustomers also emails subscribers when it starts. Requires review of the exact message and audience.
remove_newsRemove a published announcement. Sent emails cannot be recalled. Requires review.
list_support_ticketsOwner and Admin only: list this workspace’s support tickets.
get_support_ticketOwner and Admin only: read messages on a ticket belonging to this workspace.
open_support_ticketOwner and Admin only: send a support request to Happy Webs. Requires review of the exact message.
reply_to_supportOwner and Admin only: send a reply to an existing support conversation. Requires review.
get_buyer_productRead a visible product with prices and attached files (spec sheets) for the explicitly selected account.
get_basketRead current quantities and prices for your explicitly selected customer account.
set_basket_quantitySet an absolute quantity (0 removes the line). Only changes your basket; does not send an order.
send_orderSend the selected account’s basket to the supplier, with buyer email copy. Requires signed-in review of exact products, quantities, prices, PO and notes. If the basket changes, request a fresh review. Copy expectedBasket from get_basket.fingerprint.
list_buyer_ordersRead orders for the explicitly selected account.
get_buyer_orderRead lines and status history for an order belonging to the selected account.
reorderAdd available products from a past order to your basket at current prices. Does not send an order. Requires review.
get_buyer_updatesRead current news, your price changes and unread updates for the selected customer account.
mark_updates_readMark the selected account’s currently available updates as read.
get_action_statusRead the result of a review requested by this connection.

Staff order entry uses preview_customer_order then reviewed create_customer_order with exact prices and a retry UUID. Processing uses set_order_status with public note, private internalNote/correctionReason, and expectedRevision. Reviewed set_order_delivery records a customer-visible delivery method and optional courier, reference and HTTPS link. These tools follow the member’s current permissions and customer scope. See Orders for the fields and behaviour.