Getting started
Three commands to a working voice agent.
Clone, add API keys, docker compose up. Then shape behavior with skills and extend capabilities with plugins.
Prerequisites
- Docker & Docker Compose — for the fastest setup
- Go 1.22+ — only if running the server locally without Docker
- API keys — you’ll need keys for at least one STT, LLM, and TTS provider
Option 1: Docker (recommended)
The fastest way to get the server running.
1. Clone and configure
git clone https://github.com/streamcoreai/streamcore-server.git
cd streamcore-server
cp config.toml.example config.tomlEdit config.toml with your API keys:
config.toml
[server]
port = "8080"
[plugins]
directory = "./plugins"
[pipeline]
barge_in = true
[stt]
provider = "deepgram"
[llm]
provider = "openai"
[tts]
provider = "cartesia"
[deepgram]
api_key = "your-deepgram-api-key"
[openai]
api_key = "your-openai-api-key"
model = "gpt-4o-mini"
[cartesia]
api_key = "your-cartesia-api-key"2. Build and run
docker build -t streamcoreai-server .
docker run --rm -p 8080:8080 -v "$(pwd)/config.toml:/config.toml:ro" streamcoreai-server3. Connect a client
Clone the examples repo and start the browser client:
git clone https://github.com/streamcoreai/examples.git
cd examples/typescript
npm install
npm run devOpen http://localhost:3000 in your browser and click Connect. Allow microphone access when prompted.
Option 2: Local Development
Run the server directly with Go.
1. Clone and configure
git clone https://github.com/streamcoreai/streamcore-server.git
cd streamcore-server
cp config.toml.example config.toml
# Edit config.toml with your API keys2. Run the server
go run .3. Connect a client
git clone https://github.com/streamcoreai/examples.git
cd examples/typescript
npm install
npm run devOpen http://localhost:3000 and click Connect.
Environment Variables
Instead of config.toml, you can set provider keys via environment variables:
export DEEPGRAM_API_KEY="your-deepgram-api-key"
export OPENAI_API_KEY="your-openai-api-key"
export CARTESIA_API_KEY="your-cartesia-api-key"
export ELEVENLABS_API_KEY="your-elevenlabs-api-key" # if using ElevenLabsProduction Deployment
When deploying to the cloud (EC2, GCP, Azure), set your public IP and a TURN secret so browsers can connect through NAT:
config.toml for cloud
[server]
port = "8080"
public_ip = "1.2.3.4" # Your server's public IP
turn_secret = "your-secret" # Any random stringThe built-in STUN/TURN server starts automatically on UDP port 3478. Make sure your security group/firewall allows this port along with UDP ports 50001-60000 for relay traffic.
Verify It Works
After starting the server, check the health endpoint:
curl http://localhost:8080/healthYou should see a 200 response. The server logs will show loaded plugins and skills:
StreamCore AI server starting on :8080
loaded plugin: math.calculate (typescript)
loaded plugin: time.get (python)
loaded 2 plugins, 3 skillsServer Endpoints
| Method | Path | Description |
|---|---|---|
POST | /whip | WHIP signaling — SDP exchange, creates session |
DELETE | /whip/{id} | Teardown a session |
OPTIONS | /whip | CORS preflight |
GET | /health | Health check |
POST | /token | JWT token generation (optional) |