-
-
1. Audit: MetroHealth ER bill drops $3,480 to $2,190 (−$1,290) by flagging illegal CPT 36415 unbundling & a duplicate Rev 0450 facility fee.
-
2. Guardrail: Portal offers a 15% prompt-pay trap ($2,958 vs $2,190). Claimbite pauses mid-stream on MCP 2025-11-25 elicitation/create.
-
3. Filed: User rejects the trap, files clerical dispute DSP-90421, locks $1,290.00 in the SQLite Household Guard ledger, and saves receipt.
-
The $768 slice: 15% off still costs $2,958. Reject files DSP-90421 at $2,190. elicitation/create is the only way the portal can move.
Inspiration
Economists call hospital visits, auto repairs, and home contractor work credence goods (Dulleck & Kerschbamer, 2006; ETH Zurich WP-13-176): the provider supplies both the diagnosis and the itemized invoice, and a household at the kitchen table cannot tell whether two codes or labor lines legally belong on the same bill. That information gap is global and not unique to the United States. Anywhere you get an itemized invoice from someone who also decided what work was needed, you can’t verify it. That’s true in a Nairobi clinic, a German garage and a US hospital.:
- Global & US Healthcare Billing: Across all 38 OECD countries, the OECD (Tackling Wasteful Spending on Health) estimates ~20% of health expenditure goes to duplicate services, administrative waste, and billing errors/fraud. In the US, a peer-reviewed JAMA review (Shrank et al., 2019) puts annual pricing failure and billing fraud/abuse at \$289B–\$324B, while KFF Health News and Medical Billing Advocates of America report discrepancies on 49% to 80% of audited itemized bills—with a median patient overcharge of ~\$1,300 on large hospital bills and \$28.83B in improper Medicare Fee-for-Service payments in FY 2025 alone.
- Auto Repair & Contractor Invoices Worldwide: An AAA study found 73% of drivers experience or fear repair overcharging (and a US DOT undercover audit found 27% of billed repairs unneeded), while Europe's largest motoring association (ADAC in Germany, cited by ETH Zurich) caught repair shops billing for unperformed or overlapping labor in undercover audits.
- Most Families Never Dispute—And "Prompt-Pay Discounts" Lock In the Overcharge: A 2024 American Journal of Managed Care / NBC News study found 61.5% of patients who challenge a bill get it reduced, yet most pay without questioning it because nobody knows what CPT 99284, CPT 36415, Rev 0450, or OEM flat-rate shared-teardown hours mean. Worse, portals routinely offer a 10%–30% "prompt-pay discount" for immediate settlement—tricking families into taking 15% off a padded total instead of removing the invalid lines first.
A voice-only assistant can't read a 12-line invoice aloud. An ungrounded LLM will hallucinate statutory rules and botch the arithmetic. And an autonomous agent that blindly clicks "Accept 15% Prompt-Pay Discount (\$2,958.00)" on a \$3,480.00 ER bill just cost that family \$768.00 compared to their true audited balance of \$2,190.00.
Alexa+ sits right on that kitchen counter. I built Claimbite (USD, EUR, GBP, and KES) so voice stays effortless, the tablet carries the line-by-line legal redline, and the MCP 2025-11-25 elicitation/create primitive acts as a hard financial circuit breaker before a single unit of currency moves.
What it does
Claimbite is an Alexa+ bill-auditing add-on and self-hosted MCP 2025-11-25 Streamable HTTP server that audits itemized medical, auto-repair, and contractor bills in under 100 ms, translates cryptic codes into plain kitchen-table English, and executes clerical disputes against the provider portal. NCCI is the first rule pack, not the product. The engine is integer-cent rules in node:sqlite, so a new country or bill type is a new pack, not a rewrite.
| Household bill | Billed | Flagged overcharges | True payable | Portal trap blocked |
|---|---|---|---|---|
| MetroHealth ER (#8841) | \$3,480.00 | −\$1,290.00 (CPT 36415 bundled blood draw + duplicate Rev 0450 ER fee) | \$2,190.00 | Blocks \$2,958.00 "15% deal" that overpays by \$768.00. Files DSP-90421. |
| Apex Auto (#RO-441) | \$1,840.00 | −\$538.00 (water pump, thermostat, and diagnostic labor overlapped with the timing belt) | \$1,302.00 | Blocks \$1,564.00 prompt-pay waiver. Saves \$262.00. |
| Northline HVAC (#Q-19) | \$2,700.00 | −\$300.00 (duplicate CALL-OUT diagnostic dispatch fee) | \$2,400.00 | Blocks \$2,295.00 waiver. |
- Plain-English Redlines Backed by Statutory Citations: Flagged rows are badged in plain English (ILLEGAL DOUBLE-BILL, CHARGED TWICE, OVERLAPPING LABOR, UPCODED VISIT LEVEL, FEE PADDING) right alongside the exact rule ID (NCCI-PTP-99284-36415, DUP-REV-0450, OEM-TIMING-WATER-PUMP). Tap any row—or ask by voice—to open the statutory CMS Medicare NCCI or OEM flat-rate manual citation.
- Ambient Doctor's Visit-Note Upcode Matcher (ingest_visit_summary): If the hospital billed a Level 4 Emergency Evaluation (CPT 99284 — \$1,400.00) for a 10-minute Level 2 checkup, tapping Check 10-min doctor note compares the discharge summary against the billed CPT level and redlines another −\$700.00 (EM-UPCODE-LEVEL).
- Mid-Stream elicitation/create Financial Guardrail: When Claimbite opens the provider billing portal (execute_portal_dispute) and detects the 15% prompt-pay waiver trap, the server freezes execution mid-stream over SSE and emits a typed elicitation/create request to the tablet showing the 3-column math (They Billed \$3,480 vs. Their "15% Deal" \$2,958 vs. Your Real Bill \$2,190).
- Fail-Closed Safety Gate: If an MCP client connects without advertising capabilities.elicitation, execute_portal_dispute refuses to touch the portal (isError: true)—so an unapproved agent cannot settle a bill on a family's behalf.
- Cross-Session Household Memory (ui://claimbite/household-carousel): Every audited bill and filed dispute (DSP-90421) persists in data/household.sqlite across MCP sessions and renders in the Household Guard carousel showing total family dollars protected.
- Live Receipt Drop, Photo OCR & Statutory Appeal Packet: Paste raw bill text, drop a .pdf / .json / .txt invoice, or upload a receipt photo (read_receipt_image), then generate a printable demand letter (generate_dispute_packet + synthesize_appeal_brief).
How I built it
I architected Claimbite as a zero-hallucination TypeScript monorepo (Node.js >= 22) where AI handles unstructured reading and rewriting, and node:sqlite integer-cent rules own 100% of the arithmetic:
- MCP 2025-11-25 Streamable HTTP Server (apps/mcp): Built on @modelcontextprotocol/sdk (1.32.1) WebStandardStreamableHTTPServerTransport. A single POST /mcp endpoint manages stateful sessions via MCP-Session-Id and MCP-Protocol-Version: 2025-11-25, exposes 12 tools (with readOnlyHint / destructiveHint tool annotations and structuredContent), 2 ui:// MCP App resources (ui://claimbite/audit-card, ui://claimbite/household-carousel), and 1 reusable prompt (audit-household-bill), and streams line-by-line notifications/progress ticks before pausing on elicitation/create.
- Open-Source Host & SSE Harness (@mcp-apps/streamable-ui-kit): Because @alexa-ai/cli is gated to commercial preview partners (FL-2), I built and MIT-open-sourced packages/streamable-ui-kit. It bridges Web Standard Response streams onto Node http.ServerResponse, enforces localhost origin checks against DNS rebinding, serves RFC 9728 GET /.well-known/oauth-protected-resource discovery metadata, and fixes two blocking SDK transport bugs (FL-1 and FL-4).
- Deterministic Rules & Ledger Engine (packages/rules): Uses Node's built-in node:sqlite (DatabaseSync) with integer cents (41 CMS NCCI PTP bundling pairs, 9 OEM shared-teardown labor overlaps, and 7 fee-padding/upcoding policies including a 15% shop-supply cap).
- Two-Stage Amazon Bedrock Pipeline (apps/mcp/src/receipt.ts): Uses @aws-sdk/client-bedrock-runtime ConverseCommand with amazon.nova-lite-v1:0. Stage 1 (readWithNova) extracts line items from uploaded receipt images; Stage 2 (synthesizeAppeal) rewrites the deterministic dispute packet into a concise patient appeal brief while preserving every dollar figure and rule ID verbatim. When AWS_REGION / AWS_ACCESS_KEY_ID are not set, photo reading falls back cleanly to embedded metadata / local tesseract.js and the appeal brief returns the deterministic packet—so judges can run the entire suite offline for \$0.
- Kiro Spec-Driven Workflow (.kiro/): I authored .kiro/skills/alexa-plus-mcp-2025-11-25/SKILL.md, .kiro/specs/household-ledger/ (requirements.md, design.md, tasks.md), .kiro/steering/, and .kiro/settings/mcp.json so Kiro connects directly to http://127.0.0.1:3001/mcp.
Challenges I ran into
I documented four reproducible engineering friction logs in docs/FRICTION_LOG.md:
- Corrupted Chunked SSE Framing in @modelcontextprotocol/sdk (FL-1 — High): Passing a pre-parsed JSON body into Node's StreamableHTTPServerTransport caused the adapter to write raw SSE bytes where a chunk size hex header belonged (Invalid character in chunk size, body starting at "vent: message"). I solved this in @mcp-apps/streamable-ui-kit by routing through WebStandardStreamableHTTPServerTransport, stripping transfer-encoding, and streaming decoded reader chunks onto http.ServerResponse.
- Partner-Gated @alexa-ai/cli & Undocumented ui:// Schemas (FL-2 — High): Public entrants cannot access @alexa-ai/cli or the Alexa+ Web Simulator. I built a 3:2 Alexa+ tablet with a one-click guided demo and a side-by-side Live MCP 2025-11-25 Wire Inspector so judges can watch every JSON-RPC header, SSE progress tick, and elicitation/create pause live on screen.
- Mid-Stream elicitation/create Deadlocks (FL-3 — High): If a Streamable HTTP client awaits the end of the tools/call response stream before replying to a server-initiated elicitation/create request, the connection deadlocks forever. I built ClaimbiteSession (packages/mcp-client) with an incremental ReadableStream.getReader() loop that intercepts elicitation/create mid-stream and POSTs the signed user decision on the same MCP-Session-Id while the tool stream stays open.
- 202 Accepted Proxy Hang on notifications/initialized (FL-4 — Medium): WebStandardStreamableHTTPServerTransport returns a 202 response without Content-Length: 0, causing Node to emit Transfer-Encoding: chunked and hanging Chromium's fetch().text() behind Vite's proxy. Explicitly writing Content-Length: 0 on 202/204 responses eliminated the hang completely.
Accomplishments I'm proud of
- Zero-Hallucination Financial Math: Every cent on every bill is computed deterministically in node:sqlite in under 100 ms, backed by 52 automated unit and end-to-end protocol tests running in GitHub Actions CI.
- Turning elicitation/create into a Consumer Superpower: An MCP server that pauses to ask a person before accepting a \$2,958.00 settlement is the difference between losing \$768.00 and saving \$1,290.00.
- Shipping @mcp-apps/streamable-ui-kit: A drop-in Node 2025-11-25 Streamable HTTP host that fixes FL-1 and FL-4 out of the box.
What I learned
Voice and screen on an ambient home device should never repeat each other. Voice is for intent and final authorization ("Dispute the flagged lines"); the screen is for dense visual proof (struck-through prices, statutory citations, and side-by-side settlement trap math).
What's next for Claimbite
- New Household Billing Domains (node:sqlite Rule Packs): Expanding our deterministic integer-cent rule tables beyond ER, auto, and HVAC into dental (CDT procedure bundling), veterinary clinic invoices, property-management / lease move-out deductions, funeral home itemizations (FTC Funeral Rule unbundling), and closing-cost / title fee sheets.
- Global Coding Standards: Adding country-specific statutory rule packs alongside US CMS NCCI—including ICD-10-AM / MBS (Australia), GOÄ / EBM (Germany), NHS private tariff / CCSD (UK), and SHA / NHIF fee schedules (Kenya)—on top of the existing multi-currency (USD, EUR, GBP, KES) engine.
- Insurance EOB & Policy Cross-Matching: Pairing the provider's itemized bill against the insurer's Explanation of Benefits (EOB) to flag illegal balance billing and No Surprises Act violations before the patient pays.
- Voice Call Co-Pilot for Phone-Only Billing Offices: Generating a live speakerphone script on the Alexa+ screen for providers whose billing departments refuse online disputes and require a phone call.
- Shipping to the Alexa+ Store: Connecting our MCP 2025-11-25 server directly to first-party Echo Show hardware the day @alexa-ai/cli opens to public developers.
This is the allowed simulated Alexa+ submission. Public entrants do not get @alexa-ai/cli or the Alexa+ Web Simulator. The track accepts a self-hosted MCP server on spec 2025-11-25 and a web app that stands in for the device. Claimbite is both: the server in apps/mcp, and the tablet UI in apps/web. It does not run on first-party Echo Show hardware.
Built With
- agents
- alexa+
- amazon
- amazon-web-services
- apps
- bedrock
- crew
- events
- express.js
- http
- json-rpc
- kiro
- mcp
- node.js
- nova
- playwright
- react
- sdk
- server-sent
- services
- sqlite
- strands
- streamable
- typescript
- web
Log in or sign up for Devpost to join the conversation.