PR #55 adds Catalog Search and Catalog Lookup operations — agents can now discover products directly through the protocol, completing the end-to-end commerce loop.
Until now, UCP has focused on the transaction side of commerce: carts, checkout, payments, and order management. But there was a gap — how does an agent find products in the first place? The answer was typically "use a search API separately" or "scrape the website," neither of which integrates cleanly with the structured UCP flow.
PR #55 closes this gap by adding two new capabilities to the protocol:
This is significant because it means an AI agent can now handle the complete purchase journey — from "I need running shoes under $150" through to order confirmation — entirely within UCP.
The PR introduces a new catalog capability with two operations:
{
"operation": "catalog/search",
"query": {
"text": "wireless noise-canceling headphones",
"filters": {
"price_max": 300,
"in_stock": true,
"category": "electronics/audio"
},
"sort": "relevance",
"limit": 20
}
}
The search operation supports both free-text queries and structured filters. Businesses can advertise which filter fields they support in their capability declaration, allowing agents to adapt their queries accordingly.
{
"operation": "catalog/lookup",
"identifiers": [
{ "type": "sku", "value": "HDPH-NC-500" },
{ "type": "gtin", "value": "0123456789012" }
],
"include": ["pricing", "availability", "variants", "media"]
}
Lookup retrieves detailed product information, with optional include fields to control response size. This is useful when an agent needs to refresh pricing before checkout or present detailed options to a user.
Key Design Decision: Both operations return product references that can be directly used with the cart capability. The product_id returned from catalog operations is guaranteed to be valid for cart operations within the same session.
For large result sets, the search operation supports cursor-based pagination:
{
"results": [...],
"cursor": "eyJvZmZzZXQiOjIwfQ==",
"has_more": true,
"total_estimate": 150
}
Agents can pass the cursor in subsequent requests to retrieve additional pages. The total_estimate field is intentionally approximate — businesses aren't required to provide exact counts, which allows for more efficient implementation.
This capability builds on the version negotiation overhaul from PR #200 (merged yesterday). Businesses can declare catalog support in their service definition:
{
"capabilities": {
"catalog": {
"version": "1.0",
"operations": ["search", "lookup"],
"search_filters": ["category", "price_min", "price_max", "in_stock", "brand"]
}
}
}
The combination of declarative capabilities and the requires constraint system means agents can discover what a business supports before making requests, reducing error handling complexity.
Fair question. Many businesses already have search APIs, and there are aggregators like Google Shopping that provide product discovery. Three reasons why native UCP catalog capabilities matter:
For businesses implementing catalog capabilities:
With catalog capabilities in place, several follow-on features become possible:
The full PR is available at Universal-Commerce-Protocol/ucp#55.