Replies: 3 comments
-
BodyFollowing up on the thread started in #163 about services/reservations — I've been building in this space and wanted to share a more detailed analysis of what this would look like architecturally. The GapUCP handles product commerce cleanly because inventory is stateless at discovery time — you can query ten merchants for the same SKU, compare, and only then start a checkout session. The inventory counter moves at order completion, not at discovery. Temporal resources don't work this way. A hotel room on a specific date has one unit of capacity per time window. The moment two agents query the same slot simultaneously, one must lose — and must know immediately, not at checkout completion. This requires a hold on the slot itself before negotiation begins. That hold is not a checkout session. It's a distributed lease with a TTL. Why Not a Checkout ExtensionUCP extensions compose via The What This Looks Like as
|
| Primitive | Status |
|---|---|
Discovery manifest (/.well-known/ucp) |
Reused unchanged |
| Capability / extension model | Reused unchanged |
| Service / transport bindings (REST, MCP, A2A) | Reused unchanged |
| Payment handler registry | Reused unchanged |
total.json, message.json, postal_address.json |
Reused unchanged |
HTTP signing, UCP-Agent header, idempotency |
Reused unchanged |
ucp_request lifecycle annotations pattern |
Reused, new operation names (hold / negotiate / confirm) |
| Hold lease with TTL | New — no shopping analog |
| Fencing token (linearizable writes on slot state) | New — no shopping analog |
Zero changes to existing shopping schemas.
Verticals This Enables
Hotels, vacation rentals, restaurant reservations, medical appointments, fitness classes, salon slots, tours and activities — any service where an AI agent needs to reserve a perishable, time-bound resource on behalf of a user. The same platforms, AI agents, and payment handlers that work with dev.ucp.shopping today work with dev.ucp.bookings without any new discovery or integration overhead.
Curious whether the TC sees this as something worth exploring as UCP matures beyond the shopping foundation. Happy to put together a formal Enhancement Proposal using the issue template if the direction makes sense.
Beta Was this translation helpful? Give feedback.
-
|
Great analysis from @hari-lgtm on the hold/lease problem — the distributed TTL issue is real for high-contention slots like hotel rooms or concert tickets where two agents querying simultaneously creates a genuine race condition. I want to offer a complementary perspective from the other end of the complexity spectrum, based on building UCPReady — a WooCommerce UCP implementation live on a production store. For the majority of service commerce, a new peer domain may be more than necessary. The contention problem hari-lgtm describes is real for hospitality and ticketing. But for the far larger category of service commerce — appointments, home services, professional services, fitness classes, repair slots — contention is rare or manageable with optimistic locking at This is the same model UCP already uses for inventory: A minimal additive proposal: For the non-contention case, an optional "groups": [
{
"id": "group_1",
"line_item_ids": ["li_1"],
"options": [
{ "id": "standard-service", "title": "Standard Appointment", "totals": [{ "type": "total", "amount": 8900 }] }
],
"schedule": {
"timezone": "Europe/Amsterdam",
"slot_duration_minutes": 60,
"available_slots": [
{
"id": "slot_thu_0900",
"starts_at": "2026-03-26T09:00:00+01:00",
"ends_at": "2026-03-26T10:00:00+01:00",
"capacity_remaining": 2
},
{
"id": "slot_thu_1400",
"starts_at": "2026-03-26T14:00:00+01:00",
"ends_at": "2026-03-26T15:00:00+01:00",
"capacity_remaining": 1
}
],
"selected_slot_id": null
}
}
]The agent sets Where hari-lgtm's For high-contention resources — hotel rooms, event tickets, rental cars — the hold/lease model is correct. So the practical question for the TC is whether to solve both cases at once with a new peer domain, or solve the simpler case first with a fulfillment extension and leave We encountered this gap building our procurement extension ( Happy to contribute a schema draft for either approach if the TC finds this direction worth pursuing. |
Beta Was this translation helpful? Give feedback.
-
|
@yarimal @hari-lgtm @zologic — This is a fantastic thread, and I’ve been wrestling with this exact architectural gap for the "Services" vertical. I completely agree with @hari-lgtm that temporal inventory requires a distributed lease (Hold with a TTL) before negotiation to prevent race conditions. However, I also respect @zologic's point that we must keep the barrier to entry low for standard, low-contention service commerce (like a local hairdresser). To see if the "Hold" model was actually too heavy for simple use cases, I went ahead and built a working MCP server prototype to test it against live agentic workflows. It turns out, standardizing the Hold primitive is incredibly clean and handles both low and high-contention scenarios perfectly without touching the existing dev.ucp.shopping state machine. I have just formally submitted this as an Enhancement Proposal: #317. How the prototype addresses this debate: The Race Condition: The HoldSlot schema explicitly implements the TTL lease @hari-lgtm mentioned, generating a temporary hold_id before the agent talks to the user. The Checkout Overlap: It doesn't reinvent payments. If a deposit is required, the AI uses standard UCP checkout primitives, and passes the resulting token into the final BookAppointment request via an optional payment_reference. The Simple Case: For @zologic's low-contention scenarios (like our mock Restaurant booking in the repo), the SearchAvailability response simply omits the deposit requirement. The AI agent zips through the Hold -> Book flow in milliseconds without friction. The Code: I would love for the TC and those in this thread to pull down the MCP server, test it against a local agent (Claude Desktop works great), and jump over to #317 to review the formal architecture. If this aligns with where we want to take the "Services" vertical, I'm ready to shepherd this through the Working Draft process. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
I saw on the roadmap talking about service.
I was thinking also about maybe reservations or appointments that can be also added to this protocol.
Same flow, just needs time/date info from the business.
Can be used to book a reservation to a restaurant or event tickets.
Is this something you're planning? I can help implement it
Beta Was this translation helpful? Give feedback.
All reactions