尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Every local business on A³, live on Alexa+, through one MCP server.
Big brands build their own MCP servers for Alexa+. Millions of local businesses (clinics, salons, studios) never will, so for them Alexa can only read out a list. A³ (Triple A) already lets a business set up its own live video representative: a real-time talking avatar with the business's face and voice, prices, answers, rules and calendar.查看完整 README ↗Every local business on A³, live on Alexa+, through one MCP server.
Big brands build their own MCP servers for Alexa+. Millions of local businesses (clinics, salons, studios) never will, so for them Alexa can only read out a list. A³ (Triple A) already lets a business set up its own live video representative: a real-time talking avatar with the business's face and voice, prices, answers, rules and calendar. This project connects A³ to Alexa+ with one MCP server, built so that every business on A³ can go live on Alexa without its own integration: a real face on the Echo Show screen, and questions that turn into bookings without leaving Alexa.
Demo scope: the catalog behind
find_providersis three fictional Austin clinics (data/providers.json), each mapped to a representative set up on the A³ platform. Reading the A³ business directory instead of a file is the next step; the tools and views do not change.
https://alexa.triplea.studio/mcpAlexa+ add-ons are partner-only today, so this repository ships a web simulator of an Echo Show with Alexa+. Every business action in the simulator (search, opening the representative, passing the user's words, reading the booking) is a real MCP tool call to this server, the way an Alexa+ add-on is called; the representative's video and voice then stream over WebRTC. The live conversation window was also tested as an MCP App in Claude and ChatGPT (October 1).
Alexa, find a place nearby for laser hair removal.Yes, please. Hannah, the live representative of a (fictional) Austin clinic, appears on screen and greets you in voice.How much is a full leg session? And does it hurt?, then Can you book me for Saturday at ten?. She books you herself; the simulated Alexa passes the name and phone of its signed-in (demo) user, so you are not asked.Thanks, goodbye, then Alexa, add it to my calendar. Alexa fetches the booking over MCP and shows it in the simulator's stand-in for Alexa's calendar.The green lines in the corner show each MCP tool call and its latency (Alexa's built-in calendar is marked as such; it is not an MCP call).
Demo limits: one live conversation at a time (each one uses a real GPU avatar slot), up to 5 minutes. If you see "All representatives are busy", try again in a minute. The three clinics are fictional; no real appointment is created.
flowchart LR
U((User)) -- voice --> AX["Alexa+ (simulated):<br/>speech to text, LLM, Alexa voice"]
AX -- "MCP tools/call<br/>(Streamable HTTP)" --> S["A³ MCP server<br/>(this repo)"]
S -- "find_providers<br/>catalog" --> AX
AX -- "MCP Apps view<br/>ui://a3/talk.html" --> W["Representative window<br/>(sandboxed iframe on the Echo Show screen)"]
W -- "WebSocket /avatar" --> S
S -- "relay, server-side session params" --> A3["A³ platform:<br/>business's representative<br/>(knowledge, rules, calendar)"]
A3 -- "WebRTC video + voice" --> W
AX -- "ask_representative<br/>(user's words, + profile once)" --> S
S -- "chat message into the live session" --> A3
A3 -- "booking_confirmation" --> S
AX -- "get_representative_booking" --> S
AX -- "add_to_calendar (Alexa built-in)" --> CAL[(Alexa calendar)]
Who listens. On a real Echo Show, third-party web pages in the built-in browser get NotAllowedError for the microphone instantly, with no prompt (see the friction log). We could not test an Alexa+ add-on view itself, but we expect the same, and Alexa already listens. So Alexa stays the ears: it recognizes speech and passes the user's words to the representative with ask_representative; the representative answers on screen in video and voice. In hosts that grant the microphone (we tested Claude and ChatGPT), the same window talks to the user directly.
Who books. The business's representative books, not Alexa: it knows the business's rules, services and calendar. Alexa already knows the signed-in user, so ask_representative can carry the user's name and phone once, and the representative never asks for them. In a real deployment this needs the user's consent; the simulator passes a fixed demo profile. Afterwards Alexa reads the confirmed booking with get_representative_booking and adds it to its calendar (in the simulator, a stand-in card).
| Tool | What it does | UI (MCP Apps) |
|---|---|---|
find_providers(service, location?) | Nearby businesses for a service, with prices and whether a live representative is available | ui://a3/providers.html |
talk_to_representative(provider_id, language?) | Opens a live video conversation with the business's A³ representative | ui://a3/talk.html |
ask_representative(provider_id, question, customer?) | For voice hosts that listen themselves: passes the user's words into the open conversation | — |
get_representative_booking(provider_id) | The appointment the representative confirmed in the last conversation | — |
book_appointment(provider_id, service_id, when, customer_name) | Fallback booking for businesses without a representative (demo, no real appointment) | ui://a3/booking.html |
All five tools declare outputSchema and return structuredContent. Views follow the Alexa+ MCP Apps rules: each is one self-contained HTML document (libraries inlined, no external fonts), rendered in a sandboxed iframe, with its network declared in _meta.ui.csp (connectDomains, resourceDomains) and host communication only through the MCP Apps postMessage bridge.
| Path | |
|---|---|
src/server.ts | MCP server (tools, MCP Apps resources), WebSocket relay to the A³ platform, demo limits |
src/sim.ts | Alexa+ simulator, server side: LLM turn loop that calls the MCP server over a real MCP client; Alexa voice; Alexa's built-in add_to_calendar |
sim/client.ts | Simulator page logic: speech recognition, follow-up mode, MCP Apps host bridge (AppBridge) |
ui/talk.html | Representative window: LiveKit WebRTC video and voice, subtitles, microphone where the host allows it |
ui/providers.html, ui/booking.html | Result and confirmation views |
ui/probe.html | Diagnostic window: what a host allows inside an MCP Apps view (video, sound, WebSocket, mic, WebRTC, nested frames) |
data/providers.json | Three fictional Austin clinics used in the demo |
Requires Node 22+.
npm ci
cp .env.example .env # fill in GEMINI_API_KEY; ELEVENLABS_API_KEY is optional
set -a; . ./.env; set +a
npm start # http://localhost:3401/sim, MCP at http://localhost:3401/mcp
The simulator's "Alexa" is played by Gemini Flash with function calling; Alexa's voice is ElevenLabs (falls back to the browser's voice). The live representatives run on the A³ platform, a hosted service: the relay connects to the demo businesses set up there, so no GPU is needed locally.
Add https://alexa.triplea.studio/mcp as a custom connector (Claude: Settings → Connectors; ChatGPT: Developer mode → Create app, no auth). Ask: "Find a laser hair removal clinic in Austin and let me talk to their representative."
alexa.triplea.studio): Amazon EC2 Graviton (t4g) with an Elastic IP, Caddy for TLS in front of the Node server (systemd service), keys in an environment file outside the repository; the security group opens only HTTP/HTTPS publicly (HTTP redirects to HTTPS). Demo limits are set by environment (PUBLIC_MODE, MAX_LIVE_SESSIONS, MAX_LIVE_SECONDS, SIM_*, see .env.example).talk_to_representative opens one such session.A³ (the avatar platform: real-time talking avatars, per-business setup, knowledge and booking) existed before the hackathon and is used here as a hosted service. Everything in this repository was built from October 1, 2026 for the Alexa+ track:
ask_representative, because Echo Show web pages get no microphone;MIT, see LICENSE. The A³ platform the relay connects to is a separate hosted service and is not covered by this license.