Skip to content

Product (commerce) MCP ​

Expose your product catalog's search to an outside AI tool β€” Claude Code, Cursor, or any MCP-capable host β€” as a set of read-only product-search tools scoped to one account and one product catalog. Use this when you're building an AI sales agent outside MyChatBot and want it to run the same catalog search, category browsing, and attribute filtering that the in-app agent uses.

Cheat sheet ​

ItemValue
Server addresshttps://product.mychatbot.app/mcp/{account_id}/{integration_id}/stream
TransportStreamable HTTP MCP
AccessScoped by the account + catalog IDs already baked into the URL β€” the URL itself is the key
What's exposed10 read-only product-search tools (see below)
Where to get itIn the app: Knowledge Base or Agents β†’ Connectors β†’ Connect AI tools

Add to Claude Code:

bash
claude mcp add --transport http product-search "https://product.mychatbot.app/mcp/{account_id}/{integration_id}/stream"

Add to Cursor (~/.cursor/mcp.json):

json
{
  "mcpServers": {
    "product-search": {
      "url": "https://product.mychatbot.app/mcp/{account_id}/{integration_id}/stream"
    }
  }
}

Get the ready-made command from the app β€” don't build the URL by hand

Both {account_id} and {integration_id} are filled in for you. Open the Connect AI tools dialog and copy the setup for your tool:

The dialog shows the Server address, a ready-to-run Claude Code command, and a Cursor config block, each with its own copy button. {integration_id} is the specific product catalog (product-feed integration) you connected.

Scoping & access ​

Every connection targets exactly one catalog:

https://product.mychatbot.app/mcp/{account_id}/{integration_id}/stream
  • {account_id} β€” the MyChatBot account that owns the catalog.
  • {integration_id} β€” one specific product catalog on that account. Search results, categories, and attributes are read only from this catalog.

There is no header, token, or password β€” the account and catalog IDs in the URL are the access control. Anyone holding the full URL can query that catalog.

Treat the server address as a secret

Because the IDs in the URL are the only access control, anyone who obtains the address can read that catalog's products, categories, and attribute values. Share it only with trusted integrators, keep it out of public repos and client-side bundles, and re-create the catalog integration if an address leaks.

Tools exposed ​

The server offers 10 read-only tools. Your MCP client discovers them automatically once connected β€” you never call them by hand; the agent picks the right one. All of them read from the account + catalog in the URL.

Tool (MCP)What it doesWhen the agent uses it
semantic_product_searchFree-text (or image) search across the catalog; returns matching products plus the categories they fall under. Can be narrowed by attribute values.The main entry point β€” "find me X".
filter_category_productsLists products inside one category, with attribute filtering (price, size, and other attributes).After a category is known and you want a deterministic category listing rather than ranked search.
get_all_categoriesReturns the catalog's category list.To learn what categories exist before filtering.
get_product_detailsFull record for one product, including the long description that search results leave out.When the agent needs everything about a specific item.
get_product_variantsLists the variants (size, color, etc.) of one product.To present the options for a chosen product.
find_similar_productsReturns products similar to a given one."Show me something like this."
get_category_attributesLists the attribute names that exist in a category.To learn the real, catalog-specific filter keys before building a filter.
get_category_attribute_valuesLists the common values for one attribute in a category.To learn which values are valid (e.g. which colors exist).
get_available_filtersReturns faceted filters for a category β€” each attribute with its values and how many products match each.To drive guided, faceted narrowing instead of guessing.
get_products_by_idsFetches several products at once by their IDs.To batch-load a known set of items efficiently.

Every tool is read-only. Adding or updating products happens through the product feed, not over MCP β€” see Getting inventory in.

How filtering works ​

The agent can narrow results by product attributes β€” price, color, brand, tags, and so on. Three things are worth knowing:

  • Every operator is enforced everywhere. Equality/membership (eq/in), exclusion (ne), substring (contains), prefixes/suffixes (startswith/endswith), and numeric ranges (gt/gte/lt/lte) all apply as hard constraints on free-text semantic search and on the category tools alike β€” a filter is never silently ignored.
  • String-substring narrowing is the forgiving option. contains performs a case-insensitive literal substring match on a string field. Use the reserved name attribute for a partial product name, such as name contains ASHEN. startswith/endswith are case-sensitive and test the whole stored string.
  • Number ranges need numeric values, not necessarily numeric columns. For "under 500" or "between 40 and 44", the comparison is numeric whenever the stored values read as numbers β€” even when the attribute is stored as text ("50"), and the bound may be a number or a numeric string. A range means the attribute exists and compares β€” products lacking the attribute are excluded, and a decorated string price like "1 200 Π³Ρ€Π½" doesn't match either (get_category_attribute_values shows what the values look like).

contains requires a nonblank string value and is intended for string fields. Numeric and boolean fields are unsupported and may return an empty result or a type error. Characters such as * and ? are matched literally. For a list attribute such as stickers, eq means the list has one exact element and in means it has any of the supplied exact elements; neither is substring matching.

Discover attributes before filtering

Attribute names and values are specific to each catalog. A good agent calls get_all_categories, then get_category_attributes / get_category_attribute_values (or get_available_filters), to learn the real keys and values before it builds a filter β€” rather than guessing field names.

Search results are trimmed to stay fast

To keep responses small, search results omit the heavy long-form description and detail fields, and semantic_product_search returns the top-level description as "[truncated]" by default. When the agent needs the full record, it should call get_product_details.

Best practices ​

Do

  • Let the agent learn the catalog first β€” categories, then attribute names and values β€” before it builds filters.
  • Use contains when a shopper knows only part of a product name or another string value; don't add wildcard characters.
  • Use get_available_filters to power faceted narrowing (values + counts per attribute) instead of guessing.
  • Batch known IDs through get_products_by_ids rather than looping single lookups.
  • Ask for full descriptions only when the model actually needs them; otherwise keep responses lean.

Don't

  • Don't lean on number-range narrowing in free-text search; resolve a category first, then filter within it.
  • Don't expect writes β€” every tool is read-only. Catalog updates come through the product feed.

Test it ​

  1. Connect it. Paste the copied command into your terminal (Claude Code) or drop the config into ~/.cursor/mcp.json (Cursor).
  2. Confirm the client sees it. In Claude Code, run claude mcp list (or /mcp inside a session) and check that product-search is connected.
  3. Ask a catalog question. Try something like "search the catalog for a gift for dry skin under 500" and confirm the agent runs a product search and returns real items.
  4. Try a partial name. Ask for a known fragment such as "find the product with ASHEN in its name" and confirm the agent sends {"attribute":"name","operator":"contains","value":"ASHEN"} and returns the expected product regardless of case.

Empty results on older catalogs

If attribute filters silently return nothing, the catalog was probably indexed before searchable attributes existed. Fixing it needs a full reindex, which isn't a self-serve toggle: delete and re-add the catalog integration, or contact MyChatBot support with the catalog details and we'll run the reindex for you. See Troubleshooting.

See also ​