Skip to main content

Merchant MCP

Merchant MCP exposes catalog and procurement tools to MCP clients such as Claude, ChatGPT, Postman, or custom agent clients.

For required and optional arguments for every MCP tool, see 05-request-field-requirements.md.

Production MCP endpoint:

https://merchant.thyris.cloud/mcp

Health check:

https://merchant.thyris.cloud/mcp/health

Authentication​

Every MCP request must include a developer API key.

Recommended header:

Authorization: Bearer tr_live_your_key_here

Alternative header:

X-Catalog-API-Key: tr_live_your_key_here

For procurement-only clients, this explicit header is also accepted:

X-Procurement-API-Key: tr_live_your_key_here

The same store and merchant scopes described in 03-authentication-and-scopes.md apply to MCP tools.

List Tools​

curl -X POST "https://merchant.thyris.cloud/mcp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer tr_live_your_key_here" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Tool Summary​

ToolPurpose
catalog_list_storesList stores visible to the API key.
catalog_search_productsSearch products.
catalog_get_productGet one product by product UUID, SKU, or external ID.
catalog_searchMerchant Commerce search. Every product includes its public merchant profile.
catalog_get_product_detailsGet complete product details by catalog ID or another supported identifier directly from Merchant Catalog, without executing a Flow.
catalog_upsert_productCreate or update a product.
catalog_delete_productDelete a product by product UUID.
catalog_create_cartCreate a checkout-ready cart from 10 digit catalog IDs.
catalog_mutate_cart_itemsAdd, update, or remove one or more cart items. Supports bundle payloads.
catalog_clear_cartClear a cart that does not have a checkout ID.
catalog_archive_cartArchive a cart permanently. Archived carts cannot be reopened.
catalog_complete_orderComplete an order from a checkout ID and deduct inventory.
cart_add_bundle / cart_update_bundle / cart_remove_bundleMerchant Commerce tools for atomic bundle cart mutations.
procurement_list_storesList stores visible to the API key for procurement workflows.
procurement_list_inventoryList or search procurement inventory inputs.
procurement_create_inventory_itemCreate a procurement inventory item. Can include structured auto reorder settings and a free-text customOrderPolicy.
procurement_list_suppliersList procurement suppliers.
procurement_create_supplierCreate a procurement supplier.
procurement_list_ordersList procurement orders.
procurement_create_orderCreate a procurement order/request. status=requested starts the supplier quote request workflow.
procurement_create_quote_orderDeprecated. Quotes are created only from supplier email replies.
procurement_update_order_statusUpdate procurement order status except quote states.

Search Products​

{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "catalog_search_products",
"arguments": {
"query": "hoodie",
"storeId": "STORE_UUID",
"limit": 5,
"includeDraft": false
}
}
}

Get Product​

By product UUID:

{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "catalog_get_product",
"arguments": {
"productId": "PRODUCT_UUID"
}
}
}

By SKU:

{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "catalog_get_product",
"arguments": {
"sku": "HOODIE-BLK",
"storeId": "STORE_UUID"
}
}
}

Get Product Details Without A Flow​

Prefer the ten-digit catalogId returned by catalog_search:

{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "catalog_get_product_details",
"arguments": {
"catalogId": "1234567890"
}
}
}

The tool also accepts productId, sku, or externalId; storeId is recommended for SKU or external-ID lookup. The result is the complete authorized product object with store and public merchant objects. merchant contains id, name, slug, description, logoUrl, websiteUrl, industry, and language; private merchant account and contact fields are not exposed.

For the storefront UI profile, both catalog_search results and catalog_get_product_details results must contain non-empty catalogId, name, price, currency, imageUrl, merchant.name, and merchant.logoUrl. merchant.websiteUrl remains nullable because not every merchant has a public website. Missing UI-required values make the product non-renderable and must be handled during merchant onboarding/catalog synchronization rather than invented by the MCP tool or Flow.

This is a direct read-only MCP tool. The caller does not need to create or execute an ACP Flow.

Upsert Product​

{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "catalog_upsert_product",
"arguments": {
"storeId": "STORE_UUID",
"sku": "MCP-SKU-001",
"externalId": "mcp_product_001",
"name": "MCP Product",
"description": "Created through Merchant MCP",
"price": 49.9,
"currency": "USD",
"status": "active",
"inStock": true,
"inventoryQuantity": 5,
"imageUrl": "https://example.com/product.jpg",
"imageUrls": [
"https://example.com/product.jpg",
"https://example.com/product-back.jpg"
],
"productUrl": "https://store.example.com/products/mcp-product",
"otherDetails": {
"brand": "Acme",
"category": "Apparel",
"tags": ["mcp", "demo"]
}
}
}
}

Create Cart​

Use catalogId, not product UUID.

{
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "catalog_create_cart",
"arguments": {
"storeId": "STORE_UUID",
"items": [
{
"catalogId": "1234567890",
"quantity": 2
}
],
"otherDetails": {
"channel": "claude"
}
}
}
}

Complete Order​

{
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "catalog_complete_order",
"arguments": {
"checkoutId": "chk_1234567890abcdef12345678",
"payment": {
"id": "pay_1234567890abcdef12345678",
"status": "paid",
"provider": "manual"
},
"customer": {
"name": "Ada Lovelace",
"email": "ada@example.com",
"phone": "+15551112233"
},
"shippingAddress": {
"line1": "Example Street 1",
"city": "New York",
"country": "US",
"postalCode": "10001"
}
}
}
}

List Procurement Inventory​

{
"jsonrpc": "2.0",
"id": 8,
"method": "tools/call",
"params": {
"name": "procurement_list_inventory",
"arguments": {
"storeId": "STORE_UUID",
"query": "box",
"limit": 10
}
}
}

Create Procurement Supplier​

{
"jsonrpc": "2.0",
"id": 9,
"method": "tools/call",
"params": {
"name": "procurement_create_supplier",
"arguments": {
"storeId": "STORE_UUID",
"name": "Acme Components",
"domain": "supplier.example.com",
"channel": "api",
"status": "connected",
"capabilities": ["inventory_feed", "email_quotes"],
"contact": {
"email": "ops@supplier.example.com"
}
}
}
}

Create Procurement Inventory With Custom Policy​

{
"jsonrpc": "2.0",
"id": 10,
"method": "tools/call",
"params": {
"name": "procurement_create_inventory_item",
"arguments": {
"storeId": "STORE_UUID",
"preferredSupplierId": "SUPPLIER_UUID",
"name": "Shipping Box 12x10",
"sku": "BOX-12X10",
"imageUrls": [
"https://cdn.example.com/boxes/12x10.png",
"https://cdn.example.com/boxes/12x10-side.png"
],
"quantityOnHand": 180,
"reorderPoint": 250,
"targetStockLevel": 1500,
"reorderThresholdPercent": 25,
"maxOrdersPerWeek": 1,
"autoReorderEnabled": true,
"customOrderPolicy": "Every Monday morning, if stock is under 800, order enough to reach 1500. Never create a second request while one is still open.",
"unitCost": 0.42,
"currency": "USD"
}
}
}

Create Procurement Order​

{
"jsonrpc": "2.0",
"id": 11,
"method": "tools/call",
"params": {
"name": "procurement_create_order",
"arguments": {
"storeId": "STORE_UUID",
"supplierId": "SUPPLIER_UUID",
"status": "requested",
"reason": "Request supplier quote for packaging below safety stock.",
"items": [
{
"inventoryItemId": "INVENTORY_ITEM_UUID",
"name": "Shipping Box 12x10",
"quantity": 1000,
"unitCost": 0.42,
"currency": "USD"
}
]
}
}
}

procurement_create_order with status=requested starts the supplier quote request workflow. The supplier quote appears only after a supplier response is received through the supported intake flow.

Outbound Webhook Side Effects​

MCP write tools can emit outbound webhook events when a matching destination and event subscription are configured.

MCP ToolEventsCurrent source Value
catalog_upsert_productproduct.created or product.updatedmcp
catalog_delete_productproduct.deletedmcp
catalog_create_cart / cart_createcart.created, and checkout creation when the compatibility cart-create flow prepares checkout immediatelymcp
catalog_mutate_cart_items, cart_add_item, cart_update_item, cart_remove_itemcart.item.added, cart.item.updated, cart.item.removed, plus cart.updatedmcp
cart_add_bundle, cart_update_bundle, cart_remove_bundlecart.bundle.added, cart.bundle.updated, cart.bundle.removed, plus cart.updatedmcp
catalog_clear_cart / cart_clearcart.clearedmcp
catalog_archive_cart / cart_archivecart.archivedmcp
cart_closecart.closedmcp
checkout_preparecheckout.createdmcp
checkout_cancelcheckout.cancelledmcp
catalog_complete_orderorder.created, order.completed, product.inventory.updatedmcp
procurement_create_suppliersupplier.outbound.createdapi because the MCP client currently uses the procurement REST create route
procurement_create_inventory_iteminventory.outbound.createdapi because the MCP client currently uses the procurement REST create route
procurement_create_orderprocurement.order.created and workflow events for requested ordersmcp by default
procurement_update_order_statusStatus-specific procurement order eventapi because the MCP client currently uses the procurement REST update route

The source field describes the engine path that produced the delivery; it does not control whether the event is delivered.

Claude Remote MCP Setup​

  1. Open Claude settings.
  2. Go to Connectors.
  3. Add a custom connector.
  4. Name it Thyris Merchant MCP.
  5. Use this server URL:
https://merchant.thyris.cloud/mcp
  1. When prompted for authentication, use the merchant developer API key.
  2. Save and enable the connector in a conversation.

MCP Safety Notes​

  • Use a store-scoped or custom-scoped key when the agent should only operate on specific stores.
  • Test with read-only workflows first: list stores, search products, get product.
  • Enable write tools only after confirming the key scope.
  • Catalog cart/order tools modify business data and inventory.
  • Procurement supplier, inventory, and order tools modify purchasing data and may trigger supplier communication and webhook workflows.
  • Quote tools and quote statuses are read-only from MCP. Quotes come from the supported supplier quote intake flow.