Skip to main content
Glama

Echo Realtime Gateway

一个 Python asyncio 服务,可将已 root 的 Amazon Echo Dot 变成完整的语音到语音助手。它将设备桥接到 Google Gemini Live,实现原生音频输入与输出,并将 Echo 硬件(LED 灯环、音量、麦克风、扬声器、音乐)作为 MCP 接口暴露出来,任何本地 agent 都可以驱动它。

Echo 以开源 EchoMuse 固件作为其硬件运行时。本仓库是设备拨入的网关。模型 API 密钥保存在运行网关的主机上,绝不会复制到设备。

数据路径

EchoMuse mic (16 kHz PCM)  ->  gateway  ->  Gemini Live
Gemini Live audio (24 kHz) ->  gateway  ->  EchoMuse speaker (48 kHz PCM)

设备空闲时云连接处于休眠状态。设备端唤醒词启动对话,模型侧的原生语音活动检测则负责话轮切换和打断。

Related MCP server: alexa-mcp

功能特性

  • 与 Gemini Live 的原生音频到音频桥接,支持全双工打断。

  • 唤醒词启动,空闲自动关闭并回到低功耗唤醒聆听状态。

  • 面向 Echo 本体的 MCP 控制接口:LED 灯环动画、音量、音乐、麦克风和扬声器。本地 agent 通过流式 HTTP 使用它。

  • 基于文本的工具(echo_speak、echo_listen、echo_capture)拥有可替换的语音引擎,默认使用本地引擎。

  • 在设备扬声器上播放音乐,并在助手语音响起时自动压低音量。

  • (可选)实时控制面板,用于查看设备遥测数据并在运行时编辑系统提示词。

  • 运行时角色切换:将实时通话转交给不同的助手角色(拥有自己的系统提示词和语音),且不会中断通话。

  • 可选的 worker 集成:只读工具和操作工具让语音助手能够查看并驱动后台 agent worker,按 worker 进行门控。

  • 可选的对话记忆:每段已结束的对话都会被录制、混音成一条对齐音轨,并交给一个维护共享记忆文件的后台 worker。每个新会话都会以该文件作为种子内容,从而在重启后保留上下文。

目录结构

echo_gateway/
  main.py            process entry point and server wiring
  gateway.py         device link, Gemini bridge lifecycle, personas, recording
  gemini_bridge.py   Gemini Live client (audio, tools, text injection)
  echo_mcp.py        MCP server exposing the Echo body as tools
  orch_tools.py      optional worker control tools (gated)
  protocol.py        EchoMuse wire frames (mic, speaker, control)
  audio.py           resampling and speaker packetizing
  stt.py / tts.py    pluggable speech engines for the text tools
  telemetry.py       event hub for the control panel
  webui.py           optional live control panel
  assets/            earcon sounds (connect and disconnect)
tests/               unit tests for audio, protocol, MCP, and tools

要求

  • Python 3.12 或更高版本。

  • 位于 PATH 中的 ffmpeg(用于音乐解码和录音混音)。

  • 一台已取得 root 权限的、运行 EchoMuse 固件的 Echo Dot,并且可从网关主机访问。

  • 一个有权访问 Gemini Live 模型的 Google API 密钥,用于 gemini 模式。

设置

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

cp .env.example .env
# edit .env: set GOOGLE_API_KEY and ECHO_MODE=gemini, adjust ports as needed

运行

python -m echo_gateway.main

网关会启动三样东西:Echo 拨入的面向设备的服务器、MCP HTTP 端点(默认 127.0.0.1:8778),以及(启用时)控制面板。将 Echo 指向面向设备的服务器,说出唤醒词,然后开始对话。

配置

所有配置都基于环境变量。完整列表见 .env.example。重要的配置项如下:

  • ECHO_MODE 选择桥接模式。使用 gemini 运行语音到语音助手。diagnostic 是一个不需要密钥的录音与回放测试。

  • GOOGLE_API_KEYGEMINI_LIVE_MODELGEMINI_LIVE_VOICE 配置模型。

  • ECHO_MCP_HTTP_HOSTECHO_MCP_HTTP_PORTECHO_MCP_TOKEN 配置 MCP 端点。除非设置了令牌,否则请保持绑定到 localhost。

  • ECHO_WAKE_ENABLEDECHO_WAKE_PHRASEECHO_CONVERSATION_IDLE_SECONDS 控制唤醒和空闲行为。

密钥从环境变量中读取,绝不会写入本仓库中的任何文件。.env.example 文件特意保留了空白的密钥字段。

MCP 接口

网关提供一个 MCP 端点,它会路由到当前持有该连接的那个 Echo。本地 agent 作为普通 MCP 客户端连接到它,并获得面向设备本体的工具,例如 echo_set_led_solidecho_animate_ledecho_set_volumeecho_music_playecho_music_stopecho_get_state,以及基于文本的 echo_speakecho_listenecho_capture。原生音频模型不使用这些音频工具,因为它直接听和说。

测试

python -m pytest tests -q

备注

  • worker 集成工具和对话记忆功能需要一个位于同一主机上的配套后台 agent 运行时。它们都是可选的,没有它们网关也能正常运行。

  • 面板中的 sample 音乐按钮需要本地 assets/sample.mp3。该文件未随本仓库提供;把任意 mp3 放到该路径即可启用按钮,或者忽略它。

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

0Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Give your AI agent a memory and body on your iPhone: set alarms, ring your phone, over MCP.

  • MCP server exposing the AceDataCloud Fish Audio API (text-to-speech with voice conditioning)

  • Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.

  • Hosted MCP server for live public-data APIs and Skills for AI agents.

View all MCP Connectors

Related MCP Servers

View all related MCP servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ankushsrivastava0626/echo-realtime-gateway'

If you have feedback or need assistance with the MCP directory API, please join our Discord server