Inspiration## Inspiration

Booking a clinic appointment often means sitting on hold, calling back multiple times, or being unable to call during office hours at all. This is especially frustrating for patients managing multiple ongoing treatments, caregivers booking on behalf of a family member, or anyone whose schedule doesn't line up with a clinic's phone hours. We wanted to see if a CALL-E-powered agent could handle that phone call end-to-end — including the awkward part where the first available slot doesn't work and the call needs to negotiate a new time.

What it does

Clinic Appointment Concierge is a workflow plugin that places a phone call to a clinic on behalf of a patient, requests a preferred appointment time, and — if that time isn't available — either negotiates a different one or returns a structured suggestion asking the user how to proceed (retry immediately, retry later, or provide a new time). Every result comes back as clean, structured JSON, so it can be chained into other tools or workflows rather than requiring a human to parse a transcript.

How we built it

The plugin runs three CALL-E MCP tools in sequence:

  1. plan_call — builds a call plan from the clinic's phone number, the patient's name, the reason for the visit, and the preferred time.
  2. run_call — executes the planned call.
  3. get_call_run — polls for the call's status and result, including any next-step instructions CALL-E returns (like asking the user to confirm a retry).

The whole flow is wrapped in a small Node.js script (appointment-concierge.js) that takes the call details as command-line arguments and prints the structured result. It was developed and tested end-to-end in Google Cloud Shell.

Challenges we ran into

CALL-E currently supports calling recipients only in a defined set of regions, and our real phone number wasn't in a supported region — so we couldn't just call ourselves to test. We solved this by using official North American reserved test numbers (the +15550100–5550199 range), which are guaranteed not to reach a real person. This let us validate the entire technical flow — planning, placing, and polling a call — safely and repeatably, even though the calls themselves don't connect. We also had to dig into the CLI's JSON output structure, since the useful fields are nested one level deeper than expected (under result.structuredContent).

Accomplishments that we're proud of

We're proud that the plugin handles the failure case gracefully, not just the happy path — when a call doesn't connect, the response includes a clear, structured next_step with a retry suggestion instead of just an error. That makes the plugin genuinely useful as a building block for a real scheduling workflow, not just a demo of a single successful call.

What we learned

We learned a lot about how CALL-E structures its call-planning and polling responses, and how to design around real-world constraints like regional call support — building a plugin that's honest about what it can and can't do yet, while still being useful within those limits.

What's next for Clinic Appointment Concierge

Next steps include supporting multi-turn negotiation (letting the agent try 2–3 fallback times automatically before asking the user), adding calendar integration so a confirmed appointment is added directly to the patient's calendar, and expanding testing to CALL-E's full list of supported regions as availability grows.

Built With

Share this project:

Updates