NEW Browse AI tools across categories — updated daily. See what's new →

Deepclaw Voice

Set up phone calling to OpenClaw using Deepgram Voice Agent API

Authordeepgram
Version1.0.0
LicenseMIT
Token count~2,214
UpdatedJun 5, 2026

Install

Quick install

via npx skills · works with 57+ agents
npx skills add https://github.com/deepgram/deepclaw/tree/HEAD/skills/deepclaw-voice
Or pick agent:
npx skills add deepgram/deepclaw --skill deepclaw-voice --agent claude-code
npx skills add deepgram/deepclaw --skill deepclaw-voice --agent cursor
npx skills add deepgram/deepclaw --skill deepclaw-voice --agent codex
npx skills add deepgram/deepclaw --skill deepclaw-voice --agent opencode
npx skills add deepgram/deepclaw --skill deepclaw-voice --agent github-copilot
npx skills add deepgram/deepclaw --skill deepclaw-voice --agent windsurf
More install options

Shorthand — useful for multi-skill repos:

npx skills add deepgram/deepclaw --skill deepclaw-voice

Manual — clone the repo and drop the folder into your agent's skills directory:

git clone https://github.com/deepgram/deepclaw.git
cp -r deepclaw/skills/deepclaw-voice ~/.claude/skills/
How to use: Once installed, ask your agent to "use the deepclaw-voice skill" or describe what you want (e.g. "Set up phone calling to OpenClaw using Deepgram Voice Agent API"). Requires Node.js 18+.

deepclaw-voice

Set up phone calling to OpenClaw using Deepgram Voice Agent API

deepclaw-voiceby deepgram

Set up phone calling to OpenClaw using Deepgram Voice Agent API

npx skills add https://github.com/deepgram/deepclaw --skill deepclaw-voiceDownload ZIPGitHub

deepclaw Voice Setup

Use this skill when the user wants to call you on the phone, set up voice calling, or talk to OpenClaw via phone.

What This Sets Up

Phone calls to OpenClaw using:

  • Deepgram Voice Agent API - STT, TTS, turn-taking, barge-in
  • Twilio - Phone number routing
  • OpenClaw - Your AI (via chat completions proxy)

Setup Process

Step 1: Clone the repo

`git clone https://github.com/deepgram/deepclaw.git ~/deepclaw
cd ~/deepclaw
pip install -r requirements.txt
`

Step 2: Get Deepgram API Key

  • Go to https://console.deepgram.com/
  • Sign up (free $200 credit)
  • API Keys → Create API Key → Name: "deepclaw", Full Access
  • Copy key immediately

Ask: "What's your Deepgram API key?"

Step 3: Get Twilio Credentials

  • Go to https://www.twilio.com/ and sign up
  • Copy Account SID and Auth Token from dashboard
  • Phone Numbers → Buy a number with Voice (~$1/month)

Ask: "What's your Twilio phone number, Account SID, and Auth Token?"

Step 4: Get OpenClaw Gateway Token

Run this to get the token from their OpenClaw config:

`grep -A2 '"auth"' ~/.openclaw/openclaw.json | grep token
`

Or generate a new one:

`openssl rand -hex 24
`

If generating new, tell them to add it to ~/.openclaw/openclaw.json under gateway.auth.token.

Step 5: Create .env file

Create ~/deepclaw/.env with their values:

`DEEPGRAM_API_KEY=<their_deepgram_key>
TWILIO_ACCOUNT_SID=<their_sid>
TWILIO_AUTH_TOKEN=<their_token>
OPENCLAW_GATEWAY_URL=http://127.0.0.1:18789
OPENCLAW_GATEWAY_TOKEN=<their_gateway_token>
`

Step 6: Ensure OpenClaw Gateway has chat completions enabled

Check their ~/.openclaw/openclaw.json has:

`{
"gateway": {
"http": {
"endpoints": {
"chatCompletions": {
"enabled": true
}
}
}
}
}
`

If not, add it and restart the gateway: openclaw daemon restart

Step 7: Start ngrok

`ngrok http 8000
`

Note the HTTPS URL (e.g., https://abc123.ngrok-free.app).

Step 8: Configure Twilio Webhook

  • https://console.twilio.com/
  • Phone Numbers → Active Numbers → Click their number
  • Voice Configuration:
  • A Call Comes In: Webhook
  • URL: https://<ngrok-url>/twilio/incoming
  • Method: POST
  • Save

Step 9: Start Server

`cd ~/deepclaw
python -m deepclaw.voice_agent_server
`

Step 10: Test

Tell them: "Call your Twilio number now!"

Watch the server logs for:

  • "Connected to Deepgram Voice Agent API"
  • "Agent settings applied"
  • "LLM proxy request received"

Customizing Voice

Edit ~/deepclaw/deepclaw/voice_agent_server.py, find get_agent_config(), change the model in speak:

`"speak": {"provider": {"type": "deepgram", "model": "aura-2-orion-en"}},
`

Voice Options

English: thalia (F, default), orion (M), apollo (M), athena (F), luna (F), zeus (M), draco (M, British), pandora (F, British), hyperion (M, Australian)

Spanish: estrella (F, Mexican), javier (M, Mexican), alvaro (M, Spain), celeste (F, Colombian)

German: fabian (M), aurelia (F), lara (F)

French: hector (M), agathe (F)

Italian: cesare (M), livia (F)

Dutch: lars (M), daphne (F)

Japanese: ebisu (M), izanami (F)

Format: aura-2-<name>-<lang> (e.g., aura-2-estrella-es)

Troubleshooting

When something goes wrong, check the server logs first. Here's how to diagnose common issues:

No server logs when calling

Symptom: You call, phone hangs up, but no logs appear in the server terminal.

Cause: Twilio webhook URL doesn't match your ngrok URL.

Fix:

  • Check your current ngrok URL in the ngrok terminal
  • Go to Twilio Console → Phone Numbers → Your Number → Voice Configuration
  • Make sure the webhook URL matches exactly: https://<your-ngrok-url>/twilio/incoming
  • Save and try again

"Check your think provider settings" error

Symptom: Call connects, you hear the greeting, then Deepgram says "Check your think provider settings" and hangs up.

Cause: Deepgram can't reach the LLM proxy endpoint, or it's returning an error.

Fix:

  • Test the proxy endpoint directly:
`curl -X POST https://<your-ngrok-url>/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4","messages":[{"role":"user","content":"hi"}]}'
`
  • If you get 401 Unauthorized, the auth is blocking requests. This shouldn't happen with the latest code.
  • If you get connection refused, the server isn't running or ngrok isn't forwarding.
  • Check that OpenClaw gateway is running: curl http://127.0.0.1:18789/health

Call works once then hangs up

Symptom: First exchange works (greeting + one response), then call drops with "FAILED_TO_THINK" in logs.

Cause: SSE stream formatting issue—usually fixed in latest code.

Fix:

  • Make sure you have the latest code: cd ~/deepclaw && git pull
  • Restart the server

Words running together in speech

Symptom: TTS says "Whydo you want" instead of "Why do you want"

Cause: Markdown stripping was removing spaces between streaming chunks.

Fix:

  • Update to latest code: cd ~/deepclaw && git pull
  • Restart the server

Inbound calls don't work, but everything else does

Symptom: Server responds to curl, ngrok works, but calling from your phone gets immediate disconnect with no logs.

Cause: Your carrier may be blocking calls to the Twilio number, or you're dialing wrong.

Fix:

  • Verify you're dialing the exact Twilio number (with country code if needed)
  • Try calling from a different phone
  • Test with an outbound call from Twilio to you:
`# Run this in Python with your .env loaded
import requests
requests.post(
f'https://api.twilio.com/2010-04-01/Accounts/{TWILIO_ACCOUNT_SID}/Calls.json',
auth=(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN),
data={
'To': '+1YOURNUMBER',
'From': '+1TWILIONUMBER',
'Url': 'https://<your-ngrok-url>/twilio/incoming'
}
)
`

If this works, the issue is your carrier blocking outbound calls to Twilio.

OpenClaw returns errors

Symptom: Logs show errors from OpenClaw like "No API key found for provider"

Fix:

  • Make sure OpenClaw is configured with your Anthropic API key
  • Run openclaw configure --section model to set it up
  • Restart OpenClaw gateway: openclaw daemon restart

ngrok URL keeps changing

Symptom: Every time you restart ngrok, you get a new URL and have to update Twilio.

Fix: Use a fixed ngrok domain (requires ngrok account):

`ngrok http 8000 --domain=your-chosen-name.ngrok-free.app
`

Still stuck?

  • Check the server logs carefully—they usually tell you what's wrong
  • Test each component individually:
  • Server health: curl http://localhost:8000/health
  • ngrok forwarding: curl https://<ngrok-url>/health
  • OpenClaw gateway: curl http://127.0.0.1:18789/health
  • LLM proxy: curl -X POST https://<ngrok-url>/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"gpt-4","messages":[{"role":"user","content":"test"}]}'
  • Open an issue at https://github.com/deepgram/deepclaw/issues

More skills from deepgram

deepgram-js-audio-intelligenceby deepgramUse when writing or reviewing JavaScript/TypeScript in this repo that calls Deepgram audio analytics overlays on /v1/listen - summarize, topics, intents,…deepgram-js-conversational-sttby deepgramUse when writing or reviewing JavaScript/TypeScript in this repo that calls Deepgram Conversational STT v2 / Flux (/v2/listen) for turn-aware streaming…deepgram-js-maintaining-sdkby deepgramUse when regenerating this JavaScript/TypeScript SDK with Fern, editing .fernignore, preparing the repo for a generator release, reconciling hand-maintained…deepgram-js-management-apiby deepgramUse when writing or reviewing JavaScript/TypeScript in this repo that calls Deepgram Management APIs for projects, API keys, members, invites, requests, usage,…deepgram-js-speech-to-textby deepgramUse when writing or reviewing JavaScript/TypeScript in this repo that calls Deepgram Speech-to-Text v1 (/v1/listen) for prerecorded or live audio…deepgram-js-text-to-speechby deepgramUse when writing or reviewing JavaScript/TypeScript in this repo that calls Deepgram Text-to-Speech v1 (/v1/speak) for audio synthesis. Covers one-shot REST…deepgram-js-voice-agentby deepgramUse when writing or reviewing JavaScript/TypeScript in this repo that builds an interactive voice agent via agent.deepgram.com/v1/agent/converse. Covers…apiby deepgramBuild with Deepgram's speech-to-text, text-to-speech, voice agent, and audio intelligence APIs.

---

Source: https://github.com/deepgram/deepclaw/tree/HEAD/skills/deepclaw-voice
Author: deepgram
Discovered via: mcpservers.org

SKILL.md source

---
name: deepclaw-voice
description: Set up phone calling to OpenClaw using Deepgram Voice Agent API
---

# deepclaw-voice

Set up phone calling to OpenClaw using Deepgram Voice Agent API

# deepclaw-voiceby deepgram
Set up phone calling to OpenClaw using Deepgram Voice Agent API

`npx skills add https://github.com/deepgram/deepclaw --skill deepclaw-voice`Download ZIPGitHub

## deepclaw Voice Setup

Use this skill when the user wants to call you on the phone, set up voice calling, or talk to OpenClaw via phone.

## What This Sets Up

Phone calls to OpenClaw using:

* Deepgram Voice Agent API - STT, TTS, turn-taking, barge-in

* Twilio - Phone number routing

* OpenClaw - Your AI (via chat completions proxy)

## Setup Process

### Step 1: Clone the repo

```
`git clone https://github.com/deepgram/deepclaw.git ~/deepclaw
cd ~/deepclaw
pip install -r requirements.txt
`
```

### Step 2: Get Deepgram API Key

* Go to https://console.deepgram.com/

* Sign up (free $200 credit)

* API Keys → Create API Key → Name: "deepclaw", Full Access

* Copy key immediately

Ask: "What's your Deepgram API key?"

### Step 3: Get Twilio Credentials

* Go to https://www.twilio.com/ and sign up

* Copy Account SID and Auth Token from dashboard

* Phone Numbers → Buy a number with Voice (~$1/month)

Ask: "What's your Twilio phone number, Account SID, and Auth Token?"

### Step 4: Get OpenClaw Gateway Token

Run this to get the token from their OpenClaw config:

```
`grep -A2 '"auth"' ~/.openclaw/openclaw.json | grep token
`
```

Or generate a new one:

```
`openssl rand -hex 24
`
```

If generating new, tell them to add it to `~/.openclaw/openclaw.json` under `gateway.auth.token`.

### Step 5: Create .env file

Create `~/deepclaw/.env` with their values:

```
`DEEPGRAM_API_KEY=<their_deepgram_key>
TWILIO_ACCOUNT_SID=<their_sid>
TWILIO_AUTH_TOKEN=<their_token>
OPENCLAW_GATEWAY_URL=http://127.0.0.1:18789
OPENCLAW_GATEWAY_TOKEN=<their_gateway_token>
`
```

### Step 6: Ensure OpenClaw Gateway has chat completions enabled

Check their `~/.openclaw/openclaw.json` has:

```
`{
"gateway": {
"http": {
"endpoints": {
"chatCompletions": {
"enabled": true
}
}
}
}
}
`
```

If not, add it and restart the gateway: `openclaw daemon restart`

### Step 7: Start ngrok

```
`ngrok http 8000
`
```

Note the HTTPS URL (e.g., `https://abc123.ngrok-free.app`).

### Step 8: Configure Twilio Webhook

* https://console.twilio.com/

* Phone Numbers → Active Numbers → Click their number

* Voice Configuration:

* A Call Comes In: Webhook

* URL: `https://<ngrok-url>/twilio/incoming`

* Method: POST

* Save

### Step 9: Start Server

```
`cd ~/deepclaw
python -m deepclaw.voice_agent_server
`
```

### Step 10: Test

Tell them: "Call your Twilio number now!"

Watch the server logs for:

* "Connected to Deepgram Voice Agent API"

* "Agent settings applied"

* "LLM proxy request received"

## Customizing Voice

Edit `~/deepclaw/deepclaw/voice_agent_server.py`, find `get_agent_config()`, change the `model` in `speak`:

```
`"speak": {"provider": {"type": "deepgram", "model": "aura-2-orion-en"}},
`
```

### Voice Options

English: thalia (F, default), orion (M), apollo (M), athena (F), luna (F), zeus (M), draco (M, British), pandora (F, British), hyperion (M, Australian)

Spanish: estrella (F, Mexican), javier (M, Mexican), alvaro (M, Spain), celeste (F, Colombian)

German: fabian (M), aurelia (F), lara (F)

French: hector (M), agathe (F)

Italian: cesare (M), livia (F)

Dutch: lars (M), daphne (F)

Japanese: ebisu (M), izanami (F)

Format: `aura-2-<name>-<lang>` (e.g., `aura-2-estrella-es`)

## Troubleshooting

When something goes wrong, check the server logs first. Here's how to diagnose common issues:

### No server logs when calling

Symptom: You call, phone hangs up, but no logs appear in the server terminal.

Cause: Twilio webhook URL doesn't match your ngrok URL.

Fix:

* Check your current ngrok URL in the ngrok terminal

* Go to Twilio Console → Phone Numbers → Your Number → Voice Configuration

* Make sure the webhook URL matches exactly: `https://<your-ngrok-url>/twilio/incoming`

* Save and try again

### "Check your think provider settings" error

Symptom: Call connects, you hear the greeting, then Deepgram says "Check your think provider settings" and hangs up.

Cause: Deepgram can't reach the LLM proxy endpoint, or it's returning an error.

Fix:

* Test the proxy endpoint directly:

```
`curl -X POST https://<your-ngrok-url>/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4","messages":[{"role":"user","content":"hi"}]}'
`
```

* If you get `401 Unauthorized`, the auth is blocking requests. This shouldn't happen with the latest code.

* If you get connection refused, the server isn't running or ngrok isn't forwarding.

* Check that OpenClaw gateway is running: `curl http://127.0.0.1:18789/health`

### Call works once then hangs up

Symptom: First exchange works (greeting + one response), then call drops with "FAILED_TO_THINK" in logs.

Cause: SSE stream formatting issue—usually fixed in latest code.

Fix:

* Make sure you have the latest code: `cd ~/deepclaw && git pull`

* Restart the server

### Words running together in speech

Symptom: TTS says "Whydo you want" instead of "Why do you want"

Cause: Markdown stripping was removing spaces between streaming chunks.

Fix:

* Update to latest code: `cd ~/deepclaw && git pull`

* Restart the server

### Inbound calls don't work, but everything else does

Symptom: Server responds to curl, ngrok works, but calling from your phone gets immediate disconnect with no logs.

Cause: Your carrier may be blocking calls to the Twilio number, or you're dialing wrong.

Fix:

* Verify you're dialing the exact Twilio number (with country code if needed)

* Try calling from a different phone

* Test with an outbound call from Twilio to you:

```
`# Run this in Python with your .env loaded
import requests
requests.post(
f'https://api.twilio.com/2010-04-01/Accounts/{TWILIO_ACCOUNT_SID}/Calls.json',
auth=(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN),
data={
'To': '+1YOURNUMBER',
'From': '+1TWILIONUMBER',
'Url': 'https://<your-ngrok-url>/twilio/incoming'
}
)
`
```

If this works, the issue is your carrier blocking outbound calls to Twilio.

### OpenClaw returns errors

Symptom: Logs show errors from OpenClaw like "No API key found for provider"

Fix:

* Make sure OpenClaw is configured with your Anthropic API key

* Run `openclaw configure --section model` to set it up

* Restart OpenClaw gateway: `openclaw daemon restart`

### ngrok URL keeps changing

Symptom: Every time you restart ngrok, you get a new URL and have to update Twilio.

Fix: Use a fixed ngrok domain (requires ngrok account):

```
`ngrok http 8000 --domain=your-chosen-name.ngrok-free.app
`
```

### Still stuck?

* Check the server logs carefully—they usually tell you what's wrong

* Test each component individually:

* Server health: `curl http://localhost:8000/health`

* ngrok forwarding: `curl https://<ngrok-url>/health`

* OpenClaw gateway: `curl http://127.0.0.1:18789/health`

* LLM proxy: `curl -X POST https://<ngrok-url>/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"gpt-4","messages":[{"role":"user","content":"test"}]}'`

* Open an issue at https://github.com/deepgram/deepclaw/issues

## More skills from deepgram
deepgram-js-audio-intelligenceby deepgramUse when writing or reviewing JavaScript/TypeScript in this repo that calls Deepgram audio analytics overlays on `/v1/listen` - summarize, topics, intents,…deepgram-js-conversational-sttby deepgramUse when writing or reviewing JavaScript/TypeScript in this repo that calls Deepgram Conversational STT v2 / Flux (`/v2/listen`) for turn-aware streaming…deepgram-js-maintaining-sdkby deepgramUse when regenerating this JavaScript/TypeScript SDK with Fern, editing `.fernignore`, preparing the repo for a generator release, reconciling hand-maintained…deepgram-js-management-apiby deepgramUse when writing or reviewing JavaScript/TypeScript in this repo that calls Deepgram Management APIs for projects, API keys, members, invites, requests, usage,…deepgram-js-speech-to-textby deepgramUse when writing or reviewing JavaScript/TypeScript in this repo that calls Deepgram Speech-to-Text v1 (`/v1/listen`) for prerecorded or live audio…deepgram-js-text-to-speechby deepgramUse when writing or reviewing JavaScript/TypeScript in this repo that calls Deepgram Text-to-Speech v1 (`/v1/speak`) for audio synthesis. Covers one-shot REST…deepgram-js-voice-agentby deepgramUse when writing or reviewing JavaScript/TypeScript in this repo that builds an interactive voice agent via `agent.deepgram.com/v1/agent/converse`. Covers…apiby deepgramBuild with Deepgram's speech-to-text, text-to-speech, voice agent, and audio intelligence APIs.

---

**Source**: https://github.com/deepgram/deepclaw/tree/HEAD/skills/deepclaw-voice
**Author**: deepgram
**Discovered via**: mcpservers.org

Related skills 6

caveman

★ Featured

Ultra-compressed communication mode. Cuts token usage ~75% by speaking like caveman while keeping full technical accuracy. Supports intensity levels: lite, full (default), ultra, wenyan-lite, wenyan-full, wenyan-ultra. Use when user says "caveman mode", "talk like caveman", "use caveman", "less tokens", "be brief", or invokes /caveman. Also auto-triggers when token efficiency is requested.

juliusbrussee 167k
Development

secure-linux-web-hosting

★ Featured

Use when setting up, hardening, or reviewing a cloud server for self-hosting, including DNS, SSH, firewalls, Nginx, static-site hosting, reverse-proxying an app, HTTPS with Let's Encrypt or ACME clients, safe HTTP-to-HTTPS redirects, or optional post-launch network tuning such as BBR.

xixu-me 155k
Development

readme-i18n

★ Featured

Use when the user wants to translate a repository README, make a repo multilingual, localize docs, add a language switcher, internationalize the README, or update localized README variants in a GitHub-style repository.

xixu-me 155k
Development

lark-shared

★ Featured

Use when first setting up lark-cli, running auth login, switching user/bot identity (--as), handling permission denied or scope errors, needing to update lark-cli, or seeing _notice in JSON output.

larksuite 155k
Development

improve-codebase-architecture

★ Featured

Find deepening opportunities in a codebase, informed by the domain language in CONTEXT.md and the decisions in docs/adr/. Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable.

mattpocock 151k
Development

paper-context-resolver

★ Featured

Optional RigorPilot helper for README-first deep learning repo reproduction. Use only when the README and repository files leave a narrow reproduction-critical gap and the task is to resolve a specific paper detail such as dataset split, preprocessing, evaluation protocol, checkpoint mapping, or runtime assumption from primary paper sources while recording conflicts. Do not use for general paper summary, repo scanning, environment setup, command execution, title-only paper lookup, or replacin...

lllllllama 127k
Development