Inspiration

Every Alexa+ integration is a platform with an API: restaurant booking, food delivery, home services. The groomer, the taqueria and the hardware store down the street don't have one. They have a phone. And the answers people actually need from them ("how much?", "can you do Saturday?", "do you have it today?") aren't on any website.

So people still do what we've always done: call five places, sit through hold music and phone menus, leave voicemails, and compare answers on the back of an envelope.

Alexa can connect your call. It can't make the call for you. Google already does this on Search: its AI calls local businesses for prices and availability. The assistant that lives in your kitchen can't. Longtail is that add-on for Alexa+.

What it does

You ask once:

"Alexa, how much do dog groomers around here charge for a golden retriever, and who can take him Saturday?"

  1. Asks before it dials. If the businesses will need something (an address, a make and model), Longtail asks you first. A call that can't answer "what's the address?" wastes everyone's time.
  2. Finds five places near you (Amazon Location) and phones all five at once over Amazon Connect.
  3. An AI caller on Amazon Nova 2 Sonic talks to each business. Its first sentence says it's an AI calling for you, by your first name (from your Alexa profile), on a recorded line. It handles real phone life:
    • on hold: it waits (up to about two minutes);
    • a phone menu: it presses 1 (DTMF tones played into the call);
    • "call back in a few minutes": it schedules a call-back and calls again;
    • voicemail: it hangs up without leaving a message;
    • Spanish: it speaks the business's language.
  4. The Echo Show board fills in live (an MCP App): who's ringing, who's on the line, what each one said.
  5. One recommendation: a "yes" on the day you asked for that fits your deadline and budget, fastest first, then cheapest. If a shop offers another day, the caller doesn't accept it for you; it passes it on, and Alexa tells you nobody could do Saturday before offering the closest. "What did they say?" plays the business's own words, the call recording, so you never have to trust a summary.
  6. "Put me through" rings your phone and transfers you to the business. Longtail never books, orders or pays for you: you book it yourself, in one call.
  7. A summary by email when the round is done, because an add-on can't speak first.

The business doesn't install, register or integrate anything. It just answers its phone, the way it already does. That's the long tail of local businesses that no API will ever reach.

How we built it

  • MCP server: spec 2025-11-25, Streamable HTTP, stateless, OAuth 2.1 with PKCE, on AWS Lambda. Seven tools: start_ring_round, get_status, get_results, play_call_audio, connect_me, update_brief, cancel. Every tool answers from DynamoDB in milliseconds (start_ring_round ~10 ms in-region); the calls run in the background.
  • Board: an MCP App (ui://longtail/board-<hash>.html) that reads host context, works inline and fullscreen, and calls tools itself (Hear it, Put me through).
  • Phone calls: Amazon Connect places the calls (two per second, caller ID alternating between two numbers). A contact flow runs a Lex V2 bot with Nova 2 Sonic speech-to-speech, orchestrated by an Amazon Q in Connect AI agent on Nova Pro with our own outbound prompt. The agent reports through Return-to-Control tools (ReportFinding, PressKeys, OptOut), and a Lambda hook turns those into results on the board.
  • Phone menus: Connect has no "press a key" for an AI agent, so our Lambda renders the digits as G.711 μ-law DTMF tones, stores them in S3, and the flow plays them into the call.
  • Recordings: Connect writes WAV; an S3-triggered Lambda converts them to MP3 in pure JavaScript, because Alexa's audio tag needs MP3.
  • Call-backs: one-time EventBridge Scheduler schedules. Live transcripts: Q in Connect messages. Summary: Amazon SES.
  • The Alexa+ side: the add-on toolkit isn't open to hackathon participants, so we built the rules' "simulated Alexa+ experience": a web console shaped like an Echo Show. It's a real MCP client and a real MCP Apps host (the official AppBridge). Nova 2 Lite picks one MCP tool per turn; Amazon Transcribe and Polly do the voice. A classic Alexa skill calls the same MCP server from real Alexa, and an Agent Skill describes the server to any agent.
  • The other end of the line: in this deployment a real business is never dialled. A dial allowlist sends every call to our own demo numbers, where Nova 2 Sonic "shop owners" answer: one puts you on hold, one has a phone menu, one is busy and asks for a call-back, one is an answering machine.

Safety and the law

  • The first sentence names Longtail, says it's an AI and that the line is recorded. After every call the contact flow itself (not the model) gives Longtail's own number; pressing 1 there blocks that business for good. "Don't call again" on any call does the same.
  • At most five places per round, business hours only, emergency numbers never, and no ordering, paying or promising anything.
  • We checked the law against official sources (FCC, U.S. Code, eCFR, state statutes): AI voices count as "artificial voice" under the TCPA, so calls to mobile numbers need prior consent, and every such call must identify the caller and give a number. A real launch needs a business opt-in for mobile numbers. Our design already does the identification and opt-out on every call.

Challenges we ran into

  • No Alexa+ access. The CLI, Local Inspector and Web Simulator were closed to us, so we built a faithful host ourselves: real MCP, real MCP Apps, real tools.
  • Phone life is messy. The first version said "Sorry, wrong number" when it heard "please hold", talked to recorded hold messages as if they were people, and couldn't get past "press 1". Each one took a live test, a prompt rule or a new tool.
  • No "press a key" for an AI agent in Connect. We generate DTMF audio ourselves, and real phone menus accept it.
  • Carriers. Some test calls were flagged as potential spam (TELECOM_POTENTIAL_BLOCKING); we alternate caller IDs.
  • Quotas. Calling our own AI-answered numbers counts every call twice, so one five-line round fills the 10-call concurrency limit. Judges get one live round at a time; if the lines are busy, the round is simulated and Alexa says so.

All of these are written up, with steps and suggestions, in our friction log.

Accomplishments that we're proud of

  • Measured on 66 real calls (15–21 Oct, 79 dials over Amazon Connect): 59 ended the way they should (89%). On hold: 13 of 13 waited and got the answer. Phone menus: 12 of 13 pressed through to a person. "Call back in a bit": 11 of 13 called back and got a yes. Every call a person answered disclosed it was an AI on a recorded line (51 of 51), and no call ever booked anything for the user. The script is in the repo (scripts/eval-calls.py).
  • Real phone calls, five in parallel, end to end: the voice request, the calls, live transcripts, recordings, a recommendation and a real transfer to the business.
  • Judges place real calls themselves from the console, to our demo shops, with limits and a simulated fallback.
  • Under 500 ms for every MCP tool, with the calls running in the background.
  • Safety built into the call flow, not left to the model.

What we learned

  • The hardest part of an AI phone call isn't the conversation; it's everything before the person picks up: hold, menus, greetings, voicemail.
  • A recording beats a summary. Hearing the business say "Saturday at ten" is what makes people trust the answer.
  • An add-on that does real work needs a way to come back to the user; email and a polling board are the workaround today.

What's next

  • A business-side opt-in page and per-number consent, so Longtail can call real businesses, including mobile numbers.
  • More of the jobs that only a phone call can do: "can a plumber come today?", "is this tire size in stock?", "does the pharmacy have it?"
  • Real Alexa+ the day the add-on toolkit opens: the MCP server is ready.

Built With

Share this project:

Updates

Submission history