feat(catalog): proposal for list_catalog operation #613
Open
saraths-stripe wants to merge 2 commits into
Open
Conversation
…ration Adds a new list operation to the catalog capability that enables platforms to paginate through a business's full product catalog with optional modified_since filtering for incremental sync. ## Changes ### Schema - source/schemas/shopping/catalog_list.json — list request/response - source/schemas/shopping/types/list_filters.json — modified_since filter ### Documentation - docs/specification/catalog/list.md — list operation spec - docs/specification/catalog/index.md — add list to capabilities table ## Design - New operation within existing dev.ucp.shopping.catalog capability - Reuses Product/Variant schema, cursor pagination, context/signals - modified_since enables incremental sync without full re-enumeration - Page size recommendation of 100 (vs search's 10) for bulk ingestion - Stable deterministic ordering across pages - Complementary to RFC Universal-Commerce-Protocol#550 (bulk feeds) — list for delta sync, feeds for initial bulk load Committed-By-Agent: claude
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Catalog List Operation -- Paginated Catalog Enumeration for UCP
Capability:
dev.ucp.shopping.catalog.listMotivation
Platforms building agentic shopping experiences need to index a business's entire catalog for offline ranking, embedding, and recommendation. Today the only catalog operation in UCP is search, which requires a query or filter,
returns relevance-ranked results, and is designed for buyer-initiated discovery rather than platform-initiated indexing. There is no way to deterministically enumerate all products in a business's catalog.
A live list API fills this gap:
modified_sincefilter fetches only changes since last syncNote: RFC #550 proposes a complementary static-feed approach for bulk discovery.This proposal addresses the live API use case independently.
How it fits
Design
A new operation within the existing
dev.ucp.shopping.catalogcapability.No new capability namespace -- businesses that support catalog already have
the infrastructure.
Request
{ "filters": { "modified_since": "2026-07-01T00:00:00Z" }, "pagination": { "cursor": "eyJsYXN0X2lkIjoicHJvZF8xMjM0In0=", "limit": 100 } }When no filters are provided, the operation returns all products in the catalog.
Response
Same shape as
catalog.search-- reuses existing pagination and product schemas:{ "ucp": {}, "products": [ { "id": "prod_abc123", "title": "Classic Running Shoe", "description": { "plain": "Lightweight running shoe." }, "price_range": { "min": { "amount": 8900, "currency": "USD" }, "max": { "amount": 12900, "currency": "USD" } }, "variants": [ { "id": "var_001", "title": "Black / Size 10", "description": { "plain": "Black colorway, men's size 10." }, "price": { "amount": 8900, "currency": "USD" }, "availability": { "available": true, "status": "in_stock" } } ] } ], "pagination": { "cursor": "eyJsYXN0X2lkIjoicHJvZF9hYmMxMjMifQ==", "has_next_page": true, "total_count": 5420 } }Key semantics
search's 10, since list targets bulk ingestion)
(implementation-defined, typically by internal ID)
modified_since-- inclusive; covers any change to product or itsvariants. Businesses that do not track modification timestamps MAY ignore
and return the full catalog, notifying via a message
messageswithcode: "deleted", or omitted entirelyDesign principles
breaking changes.
lookup. Platforms reuse existing parsers.
common/types/pagination.jsonalready defined for search.
list_filters.jsonusesadditionalProperties: truefor extensibility, matchingsearch_filters.json.Files in this PR
source/schemas/shopping/catalog_list.jsonsource/schemas/shopping/types/list_filters.jsonmodified_since)source/services/shopping/rest.openapi.json/catalog/listendpointsource/services/shopping/mcp.openrpc.jsonlist_catalogtooldocs/specification/catalog/list.mddocs/specification/catalog/index.mddocs/specification/catalog/rest.mddocs/specification/catalog/mcp.mdmkdocs.ymlOpen questions for TC
catalog, or should it live under aseparate capability namespace?
modified_sincesupport -- MUST vs MAY for businesses?messages-based sufficient, or shoulddeleted products appear with a
statusfield?rate-limiting list differently from search?