Skip to main content

Global Catalog MCP

The Global Catalog MCP server enables AI agents to search and discover products across the entire Shopify ecosystem, helping buyers find products from multiple merchants.

Global Catalog MCP implements the UCP Catalog capability and its MCP binding. The names, request and response shapes of tools conform to the UCP specification.

Anchor to When to use Global Catalog MCPWhen to use Global Catalog MCP

Use Global Catalog MCP when your agent needs to discover products across multiple Shopify merchants — for example, comparison shopping, cross-merchant discovery, or recommendations not tied to a specific store. For single-store agents, use Storefront Catalog MCP.

Product discovery follows a two-step flow:

  1. Discover: Your agent finds matching products using search_catalog or lookup_catalog. search_catalog supports a text query, an image, or a set of product IDs to find similar items. lookup_catalog resolves known identifiers to their current catalog data. Results are clustered by Universal Product ID (UPID) and include offers from multiple merchants.
  2. Evaluate: Your agent calls get_product with a product or variant ID to explore available options and refine selection — for example, which colors are available in size medium — then retrieve pricing and seller checkout links for the buyer's chosen variant.

Anchor to Use with the AI ToolkitUse with the AI Toolkit

The Shopify AI Toolkit installs the ucp skill, which lets agents in Cursor, Claude Code, and other compatible IDEs reach the Global Catalog by name. Ask your assistant in natural language ("find me crewneck sweaters under $50") and the skill picks the right UCP CLI command, or run ucp catalog directly in a terminal. The skill also knows when to search the global catalog and when to scope to a single merchant.

Omit --business to query the global catalog; pass --business <url> to scope a search to a single merchant's storefront.

ucp catalog search \
--set /query='wireless headphones under $100' \
--set /context/address_country=US \
--view :compact \
--format md
ucp catalog lookup \
--set '/ids/0=gid://shopify/ProductVariant/12345'
ucp catalog get_product gid://shopify/Product/67890 \
--set '/selected/0={"name":"Color","label":"Black"}'

Personalized search is coming soon. When it's available, pass a buyer-linked token to return personalized search_catalog results for a signed-in Shop customer. Request the dev.ucp.shopping.catalog.search:read scope when you create the buyer-linked token.

The /api/ucp/mcp endpoint requires an agent profile. Every request must include a meta.ucp-agent.profile URL pointing to your agent's UCP profile. The returned tools depend on the capabilities your agent advertises.

UCP catalog specification

These tools conform to the Universal Commerce Protocol catalog specification. Refer to the UCP spec for the complete request/response schema.

For Shopify-specific extension fields (additional filters, variant fields, and ML-inferred metadata), see Global Catalog extension.

POST

https://catalog.shopify.com/api/ucp/mcp

{
"jsonrpc": "2.0",
"method": "tools/list",
"id": 1
}

Searches for products across all Shopify merchants.

The response conforms to the UCP catalog search response, including a UCP metadata envelope; products with title, description, price range (minor units), media, and variants.

When to use:

  • A customer asks "I'm looking for trail running shoes under $150."
  • You need to find products matching criteria from any merchant.
  • A customer wants to compare products across multiple stores.

All parameters are wrapped in a catalog object. Refer to the UCP catalog search spec for the complete schema.

catalog.query•string

Free-text search query. For example, "trail running shoes", "organic coffee beans".

catalog.saved_catalog_slug•string

Slug for a saved catalog configuration created in the Dev Dashboard. Saved filters act as a boundary for the request: a request value within the boundary is narrowed, and a value outside the boundary falls back to the saved value. A saved query prefix is prepended to catalog.query at request time, so the prefix and the request query are combined rather than one replacing the other.

catalog.like•array

Similar item to search by. Use either an item reference or image content.

Pass both catalog.query and an image in catalog.like for multimodal search. Multimodal search uses the text query to describe what the agent is looking for and the image to provide visual context, such as style, shape, or pattern. Pass only an image for visual similarity search, which returns items that visually resemble the image without additional text intent.

catalog.context•object

Buyer signals for relevance and localization (address_country, address_region, postal_code, language, currency, and intent).

catalog.filters.available•boolean

Filter by availability. Defaults to true (only sale-ready items). Set to false to include unavailable items.

catalog.filters.ships_to•object

Filter to products that ship to a given location. Accepts country (ISO 3166-1 alpha-2), region, and postal_code.

catalog.filters.ships_from•array

Filter by merchant origin country. Each entry accepts country (ISO 3166-1 alpha-2). Multiple entries use OR logic. Digital products that don't require shipping can still match this filter.

catalog.filters.price•object

Price range in minor currency units. Accepts min and max integers. For example, {"min": 5000, "max": 20000} = $50.00–$200.00 USD.

catalog.filters.condition•array

Product condition filter. Known values: "new", "secondhand". Multiple values use OR logic.

catalog.filters.shop_ids•array

Filter to specific shops. Accepts an array of shop GIDs, for example gid://shopify/Shop/987654321. You can pass up to 1000 shop IDs per request.

catalog.filters.attributes•array

Filter by Shopify taxonomy attributes. Supported names are Color, Size, and Target gender. Entries combine with AND logic. Values within one entry combine with OR logic. Unsupported attribute names are ignored and returned in messages.

catalog.filters.rating•object

Filter by variant rating. variant matches products with at least one variant whose rating meets the given thresholds. Set variant.min for the minimum rating value (0–5 scale) and variant.min_count for the minimum number of reviews.

catalog.filters.price_tier•array

Filter by relative price tier within each product's category. Supported values are low, medium, and high. Multiple values use OR logic. Unsupported values are ignored and returned in messages.

catalog.filters.categories•array

Filter by product category using taxonomy IDs. Each item accepts id (required) and taxonomy (optional, defaults to Shopify's standard taxonomy). Multiple values use OR logic.

catalog.view•string

Predefined output shape for the response. Use "offer" for comparison shopping. When absent, the server returns its default shape.

catalog.placements•array

Optional promoted placement types to blend into the response.

Each value is an open string that matches a placement.type. When you set this to ["affiliate"], Shopify re-ranks results using both promoted placement eligibility and relevance, then returns promoted placements inline with organic results. When you omit this field or pass an empty array, Shopify returns only organic results ranked by relevance.

The only well-known value is "affiliate", which represents affiliate promoted placements where you earn a commission when a click converts to a purchase.

catalog.pagination•object

Cursor-based pagination controls. Accepts cursor (string, opaque cursor from a previous response) and limit (integer, min 1, default 10, max 50). Pass the returned pagination.cursor as catalog.pagination.cursor to request the next page. The cursor carries only the next result offset, so the request's limit controls page size. You can paginate up to 1,000 results. Beyond that depth, has_next_page is false regardless of how many results match.

The total_count field in the response is an estimate of how many results match the query, not an exact count. Don't rely on it for precise totals or to calculate an exact number of pages.

Anchor to Call from the Shopify AI Toolkit and UCP CLICall from the Shopify AI Toolkit and UCP CLI

With the Shopify AI Toolkit installed, ask your assistant in natural language ("find wireless headphones under $100") and the ucp skill picks the right UCP CLI command. You can also run the command directly in a terminal:

Search

ucp catalog search \
--set /query='wireless headphones under $100' \
--set /context/address_country=US \
--set /pagination/limit=10 \
--view :compact \
--format md

Anchor to Call the tool directlyCall the tool directly

POST

https://catalog.shopify.com/api/ucp/mcp

{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "search_catalog",
"arguments": {
"meta": {
"ucp-agent": {
"profile": "https://shopify.dev/ucp/agent-profiles/2026-04-08/valid-with-capabilities.json"
}
},
"catalog": {
"query": "trail running shoes",
"filters": {
"ships_to": {"country": "US"},
"ships_from": [{"country": "US"}, {"country": "CA"}],
"price": {"max": 15000},
"available": true,
"attributes": [
{"name": "Color", "values": ["Black"]},
{"name": "Size", "values": ["10", "10.5"]}
],
"rating": {"variant": {"min": 4.5, "min_count": 10}},
"price_tier": ["low", "medium"]
},
"context": {
"address_country": "US",
"intent": "Customer runs marathons and needs road shoes"
},
"pagination": {
"limit": 10
}
}
}
}
}
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": {
"ucp": {
"version": "2026-04-08",
"capabilities": {
"dev.ucp.shopping.catalog.search": [{"version": "2026-04-08"}],
"dev.shopify.catalog.global": [{"version": "2026-04-08"}]
}
},
"products": [
{
"id": "gid://shopify/p/7f3a2b8c1d9e",
"title": "Trail Runner Pro",
"description": {
"html": "Lightweight trail running shoe designed for road and light trail."
},
"url": "https://example-running.myshopify.com/products/trail-runner-pro",
"categories": [
{"value": "5133", "taxonomy": "google_product_category"},
{"value": "Sporting Goods > Athletics > Running > Shoes", "taxonomy": "merchant"}
],
"price_range": {
"min": {"amount": 8999, "currency": "USD"},
"max": {"amount": 12999, "currency": "USD"}
},
"media": [
{
"type": "image",
"url": "https://cdn.shopify.com/products/trail-runner-pro.jpg",
"alt_text": "Trail Runner Pro running shoes"
}
],
"options": [
{
"name": "Size",
"values": [
{"label": "8"},
{"label": "9"},
{"label": "10"},
{"label": "11"}
]
},
{
"name": "Color",
"values": [
{"label": "Black"},
{"label": "Blue"}
]
}
],
"variants": [
{
"id": "gid://shopify/ProductVariant/12345678",
"sku": "TRP-BLK-10",
"title": "Black / Size 10",
"description": {"plain": "Trail Runner Pro, Black, Size 10"},
"price": {"amount": 8999, "currency": "USD"},
"checkout_url": "https://example-running.myshopify.com/cart/12345678:1",
"condition": ["new"],
"eligible": {"native_checkout": true},
"availability": {"available": true, "status": "in_stock", "running_low": false},
"requires": {"shipping": true, "selling_plan": false, "components": false},
"options": [
{"name": "Size", "label": "10"},
{"name": "Color", "label": "Black"}
],
"tags": ["road", "neutral", "lightweight"],
"seller": {
"name": "Example Running",
"id": "gid://shopify/Shop/987654321",
"domain": "example-running.myshopify.com",
"url": "https://example-running.myshopify.com",
"links": [
{
"type": "refund_policy",
"url": "https://example-running.myshopify.com/policies/refunds"
}
]
}
}
],
"rating": {"value": 4.5, "scale_max": 5, "count": 120}
}
],
"pagination": {
"cursor": "eyJvZmZzZXQiOjEwfQ",
"has_next_page": true,
"total_count": 142
}
}
}
}

Retrieves products or variants by identifier from across all Shopify merchants.

The response conforms to the UCP catalog lookup response, including products with inputs correlation on each variant and not_found messages for unresolved identifiers.

When to use:

  • You have product or variant IDs from search results or deep links.
  • You need to resolve multiple identifiers in a single request.
  • You're validating cart items against current catalog data.

All parameters are wrapped in a catalog object. Refer to the UCP catalog lookup spec for the complete schema.

catalog.ids•arrayRequired

Array of product or variant identifiers (1 to 50). Accepts gid://shopify/p/{upid}, gid://shopify/ProductVariant/{id}, and http or https Shopify product URLs. Multiple IDs that resolve to the same product are grouped into a single product in the response.

catalog.filters.ships_to•object

Filter to products that ship to a given location. Accepts country, region, and postal_code.

catalog.filters.ships_from•array

Filter by merchant origin country. Each entry accepts country (ISO 3166-1 alpha-2). Multiple entries use OR logic. Digital products that don't require shipping can still match this filter.

catalog.filters.available•boolean

Filter by availability. Defaults to true (only sale-ready items). Set to false to include unavailable items.

catalog.filters.condition•array

Product condition filter. Known values: "new", "secondhand". Multiple values use OR logic.

catalog.context•object

Buyer context for localization (address_country, address_region, postal_code, language, currency, and intent).

catalog.view•string

Predefined output shape for the response. Use "offer" for comparison shopping. When absent, the server returns its default shape.

Anchor to Call from the Shopify AI Toolkit and UCP CLICall from the Shopify AI Toolkit and UCP CLI

With the Shopify AI Toolkit installed, ask your assistant in natural language ("look up this variant") and the ucp skill picks the right UCP CLI command. You can also run the command directly in a terminal:

Lookup

ucp catalog lookup \
--set '/ids/0=gid://shopify/ProductVariant/12345'

Anchor to Call the tool directlyCall the tool directly

POST

https://catalog.shopify.com/api/ucp/mcp

{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "lookup_catalog",
"arguments": {
"meta": {
"ucp-agent": {
"profile": "https://shopify.dev/ucp/agent-profiles/2026-04-08/valid-with-capabilities.json"
}
},
"catalog": {
"ids": [
"gid://shopify/p/7f3a2b8c1d9e",
"gid://shopify/ProductVariant/87654321",
"https://example-running.myshopify.com/products/trail-runner-pro"
],
"context": {
"address_country": "US"
}
}
}
}
}
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": {
"ucp": {
"version": "2026-04-08",
"capabilities": {
"dev.ucp.shopping.catalog.lookup": [{"version": "2026-04-08"}],
"dev.shopify.catalog.global": [{"version": "2026-04-08"}]
}
},
"products": [
{
"id": "gid://shopify/p/7f3a2b8c1d9e",
"title": "Trail Runner Pro",
"description": {
"html": "Lightweight trail running shoe designed for road and light trail."
},
"price_range": {
"min": {"amount": 8999, "currency": "USD"},
"max": {"amount": 12999, "currency": "USD"}
},
"variants": [
{
"id": "gid://shopify/ProductVariant/12345678",
"sku": "TRP-BLK-10",
"title": "Black / Size 10",
"price": {"amount": 8999, "currency": "USD"},
"checkout_url": "https://example-running.myshopify.com/cart/12345678:1",
"condition": ["new"],
"eligible": {"native_checkout": true},
"availability": {"available": true, "status": "in_stock", "running_low": false},
"requires": {"shipping": true, "selling_plan": false, "components": false},
"inputs": [
{"id": "gid://shopify/p/7f3a2b8c1d9e", "match": "featured"}
],
"seller": {
"name": "Example Running",
"id": "gid://shopify/Shop/987654321",
"domain": "example-running.myshopify.com",
"url": "https://example-running.myshopify.com",
"links": [
{
"type": "refund_policy",
"url": "https://example-running.myshopify.com/policies/refunds"
}
]
}
}
]
}
],
"messages": [
{
"type": "info",
"code": "not_found",
"content": "gid://shopify/ProductVariant/87654321"
}
]
}
}
}

Retrieves full details for a single product with optional variant selection.

The response conforms to the UCP catalog get_product response, including product.selected reflecting effective option selections, option values with available and exists signals, and variants matching the selection.

When to use:

  • A customer has selected a product and needs full details.
  • You need to show variant options with availability signals.
  • A customer is making option selections (Color, Size, and so on).

All parameters are wrapped in a catalog object. Refer to the UCP catalog lookup spec for the complete schema.

catalog.id•stringRequired

Product or variant identifier. Accepts gid://shopify/p/{upid} or gid://shopify/ProductVariant/{id}.

catalog.selected•array

Option selections for variant narrowing. For example, [{"name": "Color", "label": "Blue"}, {"name": "Size", "label": "10"}]. The response reflects these selections in product.selected and filters the returned variants accordingly.

catalog.preferences•array

Option names in relaxation priority order. When an exact match isn't available, options are dropped from the end of this list first. For example, ["Color", "Size"] drops Size before Color.

catalog.filters.ships_to•object

Filter to products that ship to a given location. Accepts country, region, and postal_code.

catalog.filters.ships_from•array

Filter by merchant origin country. Each entry accepts country (ISO 3166-1 alpha-2). Multiple entries use OR logic. Digital products that don't require shipping can still match this filter.

catalog.filters.available•boolean

Filter by availability. Defaults to true (only sale-ready items). Set to false to include unavailable items.

catalog.filters.condition•array

Product condition filter. Known values: "new", "secondhand". Multiple values use OR logic.

catalog.context•object

Buyer context for localization (address_country, address_region, postal_code, language, currency, and intent).

catalog.view•string

Predefined output shape for the response. Use "summary" for a condensed product detail view. When absent, the server returns its default shape.

Anchor to Call from the Shopify AI Toolkit and UCP CLICall from the Shopify AI Toolkit and UCP CLI

With the Shopify AI Toolkit installed, ask your assistant in natural language ("show me this product in black") and the ucp skill picks the right UCP CLI command. You can also run the command directly in a terminal:

Get product

ucp catalog get_product gid://shopify/p/7f3a2b8c1d9e \
--set '/selected/0={"name":"Color","label":"Black"}'

Anchor to Call the tool directlyCall the tool directly

POST

https://catalog.shopify.com/api/ucp/mcp

{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "get_product",
"arguments": {
"meta": {
"ucp-agent": {
"profile": "https://shopify.dev/ucp/agent-profiles/2026-04-08/valid-with-capabilities.json"
}
},
"catalog": {
"id": "gid://shopify/p/7f3a2b8c1d9e",
"selected": [
{"name": "Color", "label": "Black"}
],
"context": {
"address_country": "US"
}
}
}
}
}
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": {
"ucp": {
"version": "2026-04-08",
"capabilities": {
"dev.ucp.shopping.catalog.lookup": [{"version": "2026-04-08"}],
"dev.shopify.catalog.global": [{"version": "2026-04-08"}]
}
},
"product": {
"id": "gid://shopify/p/7f3a2b8c1d9e",
"title": "Trail Runner Pro",
"description": {
"html": "Lightweight trail running shoe designed for road and light trail."
},
"url": "https://example-running.myshopify.com/products/trail-runner-pro",
"price_range": {
"min": {"amount": 8999, "currency": "USD"},
"max": {"amount": 12999, "currency": "USD"}
},
"media": [
{
"type": "image",
"url": "https://cdn.shopify.com/products/trail-runner-pro-black.jpg",
"alt_text": "Trail Runner Pro in Black"
}
],
"options": [
{
"name": "Color",
"values": [
{"label": "Black", "available": true, "exists": true},
{"label": "Blue", "available": true, "exists": true}
]
},
{
"name": "Size",
"values": [
{"label": "8", "available": true, "exists": true},
{"label": "9", "available": true, "exists": true},
{"label": "10", "available": true, "exists": true},
{"label": "11", "available": false, "exists": true},
{"label": "12", "available": true, "exists": true}
]
}
],
"selected": [
{"name": "Color", "label": "Black"}
],
"variants": [
{
"id": "gid://shopify/ProductVariant/12345678",
"sku": "TRP-BLK-10",
"title": "Black / Size 10",
"description": {"plain": "Black, Size 10"},
"price": {"amount": 8999, "currency": "USD"},
"checkout_url": "https://example-running.myshopify.com/cart/12345678:1",
"condition": ["new"],
"eligible": {"native_checkout": true},
"availability": {"available": true, "status": "in_stock", "running_low": false},
"requires": {"shipping": true, "selling_plan": false, "components": false},
"options": [
{"name": "Color", "label": "Black"},
{"name": "Size", "label": "10"}
],
"seller": {
"name": "Example Running",
"id": "gid://shopify/Shop/987654321",
"domain": "example-running.myshopify.com",
"url": "https://example-running.myshopify.com",
"links": [
{
"type": "refund_policy",
"url": "https://example-running.myshopify.com/policies/refunds"
}
]
}
}
],
"rating": {
"value": 4.5,
"scale_max": 5,
"count": 120
}
}
}
}
}