UCP catalog metadata field never populated by product metafields — expected behavior or missing feature?

Hi! I’m building a shopping assistant on top of UCP (/api/ucp/mcp, version 2026-08-25) and I’m trying to expose product metafields (e.g. custom.shipping_time) to the agent via get_product / search_catalog.

The base UCP product/variant schema defines a metadata field “Business-defined custom data extending the standard product model”, which looks like exactly the right place for this. But I can’t get it to populate.

  • Across every product in my dev store’s catalog (16/16), metadata, tags, and rating are always null in get_product / search_catalog responses — even for products that have metafield values set in admin.

  • Storefront API access is explicitly enabled on the metafield definition I’m testing with, so visibility isn’t the cause.

  • The dev.shopify.catalog Storefront Catalog extension docs list a closed, explicit set of added fields (gift_card, collections, requires.shipping, requires.selling_plan, checkout_url, selling_plans). No mention of metafields or a metadata passthrough.

  • The UCP spec itself only gives metadata a one-line description, no examples, no guidance on how it’s populated.

Is metadata simply not wired up yet in Shopify’s UCP implementation, or is there a capability / extension / opt-in I’m missing that populates it from metafields? If it’s not implemented yet, is exposing metafields through UCP catalog on the roadmap?

EDIT: I know I can create different tool for this (Admin API), but I’m curious what the metadata is.

Hi @lynthius,

You aren’t missing a capability or configuration. Shopify doesn’t populate the product metadata field in Storefront Catalog MCP responses. Product metafields aren’t mapped into it, regardless of whether Storefront API access is enabled on the metafield definition. The metadata.* fields documented for the Global Catalog extension are Shopify-inferred enrichment, not merchant-authored metafields. I don’t have any roadmap information to share at this time, but I’ll submit this as a feature request on your behalf.

If custom.shipping_time represents different delivery times for different products, Shopify delivery profiles can model those differences. At the cart or checkout stage, UCP fulfillment returns a separate fulfillment group per delivery group once a destination is provided, each with its own options. If the merchant has delivery dates configured, those options include a date range, for example, “Arrives Dec 12-15 via FedEx.” Otherwise, the option is described by the shipping rate name alone. If you need the shipping time during catalog browsing, that functionality isn’t currently available. Is browse-time availability the requirement for your use case?

Hi Paige, thanks a lot for the clear explanation, that clears it up completely.

Yes, I did need the shipping data at catalog browse time, but I can work around it and have actually already solved it on my end. My question was really just whether it would make sense to also expose metafields here, but perhaps it genuinely doesn’t.

And understood, so metadata is outside my control, not something I can modify, and serves purely as data enrichment.

Glad that cleared things up, and it’s great to hear you’ve found a workaround. Your question about product metafields in Storefront Catalog was reasonable, even though they aren’t exposed today. If you’re open to sharing what you implemented, I can include those details in the feature request for merchant-defined metafield support in Storefront Catalog.

Sure. I kept UCP for what it does well (catalog/cart/checkout) and read the metafields I need, e.g. delivery time through a separate channel. I used the Admin GraphQL API client, called on demand. On the agent side I added a get_product_metafields tool, with a hard system rule that any question about delivery/shipping time must call it before the model says “I don’t know” It’s verified end-to-end.