One objective. Many sites.
Signpost points WebMCP agents to the surfaces that can do what they need. The agent decides what comes next.
It points. It does not drive.
GET /resolve?capability=order-coffee 200 · 9ms
{ "capability": "order-coffee",
"surfaces": [ { "origin": "https://valentincoffee.dev",
"webmcp": "/webmcp",
"tools": ["menu.browse", "order.create"] } ] }
# stateless — no objective, no session, no next step
GET /resolve?capability=book-haircut 200 · 7ms
{ "capability": "book-haircut",
"surfaces": [ { "origin": "https://timothygeorge.studio",
"webmcp": "/webmcp",
"tools": ["availability.list", "appointment.book"] } ] }
GET /resolve?capability=check-hex-code 200 · 8ms
{ "capability": "check-hex-code",
"surfaces": [ { "origin": "https://sirocco.gallery",
"webmcp": "/webmcp",
"tools": ["hex.check", "conformance.report"] } ] }
Providers declare capabilities. Signpost resolves one at a time. The agent does everything else.
Each resolution is independent and stateless. Signpost never receives the objective, never holds a session, and never tells an agent what to do next. Providers keep their own WebMCP tools; the agent calls them directly on their own sites.