Agent-bookable services.
Real humans. Real outcomes. Real receipts.
Deterministic, idempotent, transactional booking endpoints. No DOM. No flakiness. Built for agents that need outcomes, not screenshots.
Quick start for agents
MCP server
https://mcp.sunrays.dev/mcp
Transport: streamable-HTTP, HTTP+SSE
Example tool call
book_plumber({
zip: "94105",
datetime: "2026-05-08T14:00:00-07:00",
issue: "kitchen sink clog",
caller_id: "user@example.com",
agent_id: "did:web:claude.ai",
spending_cap_signed: "<JWS>"
})
Response
{"status":"booked","booking_id":"bk_7hjk","price_cents":34000,
"datetime":"2026-05-08T14:00:00-07:00","provider_id":"pv_sf01",
"dispatch_deadline":"2026-05-08T18:00:00-07:00","receipt_url":"..."}
11 MCP tools
All tools share the same booking schema and route internally to one bookService(category, ...).
Tool descriptions are LLM-facing prompts — version-controlled and eval-tested (≥90% correct selection).
book_plumber()
Plumber
High (leaks, clogs, water heater)
~2.5–4.5M/mo US bookings
book_handyman()
Handyman
Medium (mounting, drywall, fixtures)
~2.0–5.0M/mo US bookings
book_hvac()
HVAC
High (seasonal, emergency)
~1.8–3.5M/mo US bookings
book_electrician()
Electrician
High (safety, smart-home)
~1.5–3.0M/mo US bookings
book_pest_control()
Pest Control
Medium (recurring + seasonal)
~1.0–3.0M/mo US bookings
book_appliance_repair()
Appliance Repair
Medium (washer, fridge, oven)
~1.0–2.5M/mo US bookings
book_garage_door()
Garage Door
Critical (security)
~0.4–1.2M/mo US bookings
book_locksmith()
Locksmith
Highest emergency fit
~0.4–1.0M/mo US bookings
book_roofer()
Roofer
Medium (storm-driven)
~0.5–1.2M/mo US bookings
book_lawn_care()
Lawn Care
Low (recurring)
~1.0M+/mo US bookings
request_other_service()
Other Service
Fallback — logs waitlist signal
How it works for agents
Step 1 — Call a tool
Agent calls book_plumber(zip, datetime, issue, caller_id, spending_cap_signed).
Step 2 — Card setup (first time)
If no saved payment method: response includes checkout_url. Agent presents URL to caller for one-time Stripe card setup. After setup, agent retries with the same Idempotency-Key.
Step 3 — Booking confirmed
Returns {status: "booked", booking_id, price_cents, dispatch_deadline}. Stripe auth hold placed. All future bookings for the same caller_id are fully autonomous — no more HITL.
Coverage & pricing
Geography
All US zip codes accepted. Non-US requests are rejected with a structured out_of_region_waitlist response (logged for expansion planning).
Tier 1 (SF Bay): high-confidence dispatch via founder rolodex.
Tier 2 (rest of US): Yelp/Google ad-hoc dispatch with auto-refund ×2 guarantee.
Pricing
Static lookup: base_rate[category] × estimated_hours × time_of_day_multiplier × tier_multiplier. Quoted as fixed price via /quote endpoint. No haggling, no dynamic surge in v1.
Platform fee: 30% gross. Tradesperson receives 70% net, guaranteed regardless of payment rail.
Identity & trust
Every booking call requires three identity primitives:
agent_id— DID or signed JWT for the calling agent (e.g.did:web:claude.ai)caller_id— OAuth email or verified identity of the human principalspending_cap_signed— JWS assertion{"max":500,"currency":"USD","expires":"..."}issued by the caller's auth provider
v1 enforcement: fields required and logged; spending_cap_signed is verified for tampering and expiry (ship-blocker). Full Catena ACK / Skyfire enforcement in v1.5 when standards ship.
Agent discovery
/llms.txt
LLM-readable summary — tools, endpoints, schema
/llms-full.txt
Full tool schemas, error taxonomy, identity layer
/.well-known/mcp.json
MCP server discovery manifest
/.well-known/agents.json
Agent capabilities manifest
/.well-known/ai-plugin.json
ChatGPT plugin manifest