VoiceGateway

Self-hosting

Run the dashboard locally, point many agents at one shared collector, and manage the gateway from a coding agent over MCP.

VoiceGateway has no hosted service. It runs where your agents run.

One machine

voicegw serve is the whole server: the dashboard, the read API and the ingest endpoint, on one port.

pip install "voicegateway[livekit,dashboard]"
voicegw init
voicegw serve --port 8080

Agents on the same machine need no configuration. attach() writes to the same SQLite file the server reads.

One collector for every agent

When agents run on several machines, run one collector and have every agent push to it. On a Linux server:

curl -fsSL https://voicegateway.dev/collector.sh | bash

The script installs Docker if it is missing, generates and keeps the secrets, pins the image version, and waits for a healthy container before it returns. It asks for SQLite (one collector) or Postgres (a fleet). For HTTPS through Caddy at collector.example.com, pass the domain: curl -fsSL https://voicegateway.dev/collector.sh | bash -s -- --domain example.com.

Then set three variables on each agent:

export VOICEGW_COLLECTOR_URL="https://collector.example.com"
export VOICEGW_API_KEY="<the ingest key the script printed>"
export VOICEGW_PROJECT="my-agent"

attach() reads them and batches rows to the collector instead of local SQLite. Your agent code does not change.

Check it before you trust it:

curl -fsS https://collector.example.com/health   # ok
curl -s -o /dev/null -w "%{http_code}\n" -X POST https://collector.example.com/v1/ingest \
  -H 'content-type: application/json' -d '[]'     # 401 or 403 without the key

Only /health and /v1/ingest need to be public. Keep the dashboard behind your network or a login. An ingest key you choose yourself must not start with vk_; that prefix is reserved for keys VoiceGateway issues.

Pin the collector image to a release. Tracking :latest in production means an upgrade you did not choose.

Coding agents (MCP)

voicegw mcp is a Model Context Protocol server. Connect Claude Code, Cursor or Codex and ask about health, costs, latency and logs, or create projects, in plain language.

voicegw mcp --transport stdio

For a shared setup over HTTP, set a token and bind a port:

export VOICEGW_MCP_TOKEN=$(python -c "import secrets; print(secrets.token_urlsafe(32))")
voicegw mcp --transport http --host 0.0.0.0 --port 8090

Ten read and project tools are on by default. Provider configuration and every delete need VOICEGW_MCP_ADMIN=1, and each delete asks for confirm=true after showing what it would remove.

On this page