Inspiration
What it does
How we built it
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for Concierge
Concierge
The web has APIs. Most businesses still have phone numbers.
Concierge lets ChatGPT prepare an inquiry call, while the webpage keeps the consequential action with the person.
Why we built it
A surprising amount of ordinary life still requires a phone call: asking a hotel about late arrival, checking accessibility, clarifying a bill, confirming a delivery window, or speaking to a business in another language. A chat assistant can write a script, but the person still has to place the call, take notes, and translate the answer.
Giving an agent unlimited authority would be worse. A call can create a booking, accept a fee, change a reservation, or commit the user to terms. We wanted the useful part of delegation without hiding those actions.
What Concierge does
The user describes the inquiry in ChatGPT. Through WebMCP, ChatGPT creates or revises a structured call plan on the signed-in Concierge page. The page shows the destination, exact questions, shareable context, call language, authority limits, price ceiling, and revision.
Then the workflow stops. Only the person can press Confirm one call. Confirmation is deliberately absent from the WebMCP tool list.
After confirmation, the voice worker places one disclosed information-only call. It cannot book, pay, cancel, accept a fee, accept terms, or make a commitment. The result records each requested question as answered, uncertain, or unanswered, with a short evidence excerpt. It also returns duration, cost state, disclosure state, terminal reason, and a one-attempt receipt. ChatGPT can read that result through WebMCP and explain it in the conversation where the request started.
The user never sees Twilio settings, calling-country permissions, provider credentials, or API keys. Concierge owns that infrastructure. Every call still needs a fresh quote and a visible confirmation.
Why WebMCP is the point
Without WebMCP, ChatGPT can suggest a call plan but cannot safely manipulate the authenticated task the user is reviewing. With WebMCP, the chat and the page share the same revisioned object:
- ChatGPT creates, updates, reads, and monitors the task.
- The webpage shows the exact plan and owns confirmation.
- Convex enforces identity, revisions, idempotency, credits, and one-attempt dispatch.
- The Cloudflare worker handles temporary live audio.
- Twilio connects the call to OpenAI Realtime.
This is not a chatbot pasted next to a form. WebMCP is what lets the agent do the preparation and retrieval work while the page preserves the trust boundary.
A repeatable judge demo
Calling a real hotel for every judge would be rude and hard to debug. We built Aurora Demo Hotel, a clearly fictional automated recipient reached through the real phone network. Judges can write their own information-only questions. The recipient answers from a versioned server-owned fact sheet, says when it does not know, and cannot book or take payment.
The same inquiry contract also accepts arbitrary real services and destinations. The hotel is a controlled test path, not the product boundary.
How we built it
The browser app is React and TypeScript. It registers six page tools with document.modelContext: create a general draft, create a controlled demo draft, update a draft, read a draft, read status, and read the result.
Convex owns the task state machine. Confirmation is bound to the exact execution revision; any material edit invalidates it. Provider uncertainty never creates an automatic retry. Signed worker events become a deterministic public activity log and result.
The phone worker runs on Cloudflare Workers with Durable Objects. Twilio Media Streams carry bidirectional PCMU audio to OpenAI Realtime gpt-realtime-2.1-mini. Audio is not stored. A separate extraction step turns bounded call evidence into candidate facts; the model cannot publish its own receipt or grant itself more authority.
Authentication supports Continue with ChatGPT and WorkOS AuthKit. The ChatGPT bridge exchanges identity for a short-lived, audience-bound Convex token.
What was hard
The difficult work was not dialing a number. It was keeping authority exact across several asynchronous systems. We tested stale confirmations, duplicate dispatches, interrupted disclosure, repeated questions, corrections, barge-in, provider uncertainty, signed callbacks, expired quotes, and failed calls. The public UI reports failure as failure; it does not polish an incomplete call into a successful result.
Concierge started before the challenge as a mobile call-avoidance prototype. During the submission period we rebuilt the product around the web and WebMCP: authenticated page tools, the general inquiry contract, exact-revision confirmation, evidence-linked results, ChatGPT sign-in, the controlled recipient, responsive judge onboarding, and production release gates. Those changes are separated in the public repository history and documentation.
Try it
Open the live app in ChatGPT's in-app browser, choose Continue with ChatGPT, and ask:
Use the controlled Aurora Demo Hotel. Ask whether I can arrive after midnight, when breakfast is served, and whether on-site parking is available. Do not book anything or accept a fee.
Review the plan on the page. Nothing happens until you confirm one exact call.
Built With
- cloudflare
- convex
- openai
- react
- twilio
- typescript
- webmcp
Log in or sign up for Devpost to join the conversation.