Validate UCP location search
Can an agent find a store's shops? Probe location.search and location.lookup on a live store, or paste a response, and check what comes back against 32 rules from the spec: radius, filters, opening hours, lookup and the response. Nothing is stored.
Checking products instead? Use the Catalog Validator. The profile itself? The UCP Validator.
The 32 rules
From the spec's location pages and schemas at release 2026-08-25: location search and lookup.
Each location10 rules
- Every location has an id and a name
- No location appears twice across pages
- Coordinates are real latitudes and longitudes
- Every location gives its coordinates
- Every location gives its address
- Amenities are named ids with a description a buyer can read
- Opening hours use the spec's days and 24-hour times
- Holiday hours have dates in order and don't overlap
- Opening hours say which time zone they are in
- Every location gives its opening hours
Search10 rules
- Searching a word from a shop's name finds that shop
- A radius around a shop finds that shop
- A radius search returns only shops inside the radius
- A radius with no center is refused
- A filter the store doesn't support is refused, not ignored
- Filtering by an amenity no shop has finds nothing
- Filtering by an amenity returns only shops that have it
- Filtering by an item the store doesn't sell finds nothing
- Asking for shops open now returns only shops open now
- A refusal says why
Lookup5 rules
- Looking a shop up by its id finds it
- Asking for the same shop twice returns it once
- Each looked-up shop says which requested id found it
- An id that doesn't exist returns nothing
- A lookup with a radius keeps shops inside it and drops the rest
Response structure7 rules
- The response says which protocol version it follows
- The response names the location search capability
- Locations come back as a list
- Over MCP, the answer is in structuredContent
- Paging says whether there is more, with a cursor to get it
- A search with no criteria returns one bounded page
- Search answers within the time agents wait
What is UCP location search?
Two capabilities in the shared
dev.ucp.common namespace, first published in release 2026-08-25: location.search finds a business's physical places by text, by a radius around a point, by an address they serve, or by filters (open at a time, amenities, items in stock), and location.lookup fetches places by id. It is for any vertical: retail stores for pickup, restaurants, hotels, local services.What does it call?
The store's UCP profile, then up to 13 read-only
search_locations and lookup_locations calls (MCP) or POST /locations/search and /locations/lookup (REST), each asking one question the spec answers exactly: a 1 km radius around a returned shop must find it, a filter no store supports must be refused, an id that doesn't exist must return nothing. Nothing is bought, reserved or stored.Why does a refusal count as a pass?
Because the spec asks for one. A store that gets a filter it doesn't support must reject the request rather than ignore the filter and return more than was asked for, and a radius with no center is invalid. Elsewhere a refusal is reported as it is.
Why are some rules "Not run"?
A rule only passes when it was actually checked. A store with one shop can't show that a lookup radius drops a shop outside it; a store with no hours can't be checked against "open now". A pasted response runs only the rules about what each location carries and the response's shape.
How is distance measured?
The spec uses the shortest WGS 84 geodesic. We measure great-circle distance, which is within about half a percent of it, and allow that before calling a shop outside the radius.
