Inspiration

The company owes you something: a claim payout, a refund, a repair. Chasing it is hours of hold music and "five business days" said three times, and the promise made on the call is never written down. We wanted the household assistant to own that chore: ask Alexa what they promised, and tell Alexa to chase it.

What it does

CaseChaser for Alexa+ is a self-hosted MCP server (Streamable HTTP, MCP specification 2025-11-25 and later; the bundled SDK negotiates 2026-07-28) that gives Alexa+ six voice-shaped tools over a household's open cases:

  • list_cases: one spoken sentence per case.
  • case_status: what the company last said, what they committed to and by when, broken commitments, escalation level, what is waiting on you.
  • chase_case: places one disclosed AI phone call to the company's hotline through CALL-E, then reads back the new commitment, or the offer, verbatim and asks you to decide.
  • record_decision: your answer (accept, decline, "I sent the form") is carried into the next call.
  • evidence_pack: a dated, quoted, masked record for a written complaint.
  • add_case: start chasing a new case by voice.

Every tool returns a say field written for speech plus structured fields for the screen.

How we built it

Python 3.13 with the MCP Python SDK 2.x (MCPServer, Streamable HTTP transport) via uv. The case engine (ledger, ten named call-suppression reasons, closed result schema, escalation ladder, idempotency keys, masked evidence pack) is the casechaser package included in the repository. Calls go through the CALL-E Developer API; a local fake of that API with seven terminal-call fixtures means every voice path runs offline in fixture mode, which is the default. Four end-to-end tests drive the server through the SDK's own MCP client over HTTP. Dockerfile included.

Challenges we ran into

The Alexa+ track names the MCP transport and spec version but not where a self-hosted server is registered, whether OAuth is required, or whether a device or US account is needed to test; we built against the specification and tested with a real MCP client. The SDK masks tool exceptions as "Error executing tool", so the server returns errors as ordinary results with a spoken sentence. Safety mattered more than features: the assistant must never accept a settlement, so offers come back as questions and money decisions are recorded, not made.

Accomplishments that we're proud of

A voice flow that gets more specific every call, an escalation that never skips a level, policy holds that explain themselves in speech ("No call was placed: too soon"), and a complete offline demo path.

What we learned

Writing tool results for the ear (short say strings, exact quotes, one question at a time) changes the API design more than the transport does.

What's next for CaseChaser for Alexa+

Per-person case scoping once Alexa+ passes speaker identity, a daily spoken digest, and OAuth on the MCP endpoint for hosted deployment.

Built With

Share this project:

Updates

Submission history