# three.ws Audio

Gives a 3D agent a voice and a moving face: speech synthesis, transcription, per-frame lipsync and a motion-capture clip library from any MCP client.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 249
- Author: nirholas
- License: Apache-2.0 · policy=link-only · description only; the file stays with the author
- Source: https://github.com/nirholas/three.ws/tree/HEAD/packages/audio-mcp
- Updated: 2026-10-24
- HTML: https://affpapa.org/en/nevibecode/mcp/threews-audio

## What it does

The server speaks stdio and exposes five tools. `text_to_speech` turns text into spoken audio and hands back a base64 data URL along with the voice and format actually used. `speech_to_text` transcribes a recording and returns the text, a confidence value and the duration. `audio_to_face` builds a per-frame ARKit blendshape track for lipsync. Two more tools page through the motion-capture library and pull a single clip by id with its full animation track.

Speech, recognition and lipsync run on free NVIDIA NIM models (Magpie TTS, Riva ASR, Audio2Face-3D); OpenAI serves as the paid fallback for synthesis. No key is needed to begin — point `THREE_WS_BASE` at a deployment and start. You need Node.js 20 or newer and network access to `https://three.ws` or your own deployment.

Every tool is read-only: it transforms input or reads library data and never changes platform state. Calls are not idempotent, since the audio bytes, transcript and catalog shift between requests. Browser-recorded WebM/Opus has to be decoded to WAV or PCM first, because neither Riva nor Audio2Face takes the WebM container. Recognition input is capped around 8 MB, so keep it to a spoken utterance rather than a long recording.

## Requirements
- Needs: Node.js (commands run via npx)
- Environment variables: `THREE_WS_BASE`, `THREE_WS_API_KEY`, `THREE_WS_TIMEOUT_MS` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env THREE_WS_BASE=<THREE_WS_BASE> --env THREE_WS_API_KEY=<THREE_WS_API_KEY> --env THREE_WS_TIMEOUT_MS=<THREE_WS_TIMEOUT_MS> --transport stdio audio-mcp -- npx -y @three-ws/audio-mcp
```
Replace <…> with your own values

### Codex

**Platform CLI**
```bash
codex mcp add audio-mcp --env THREE_WS_BASE=<THREE_WS_BASE> --env THREE_WS_API_KEY=<THREE_WS_API_KEY> --env THREE_WS_TIMEOUT_MS=<THREE_WS_TIMEOUT_MS> -- npx -y @three-ws/audio-mcp
```
Replace <…> with your own values

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "audio-mcp": {
            "command": "npx",
            "args": [
                "-y",
                "@three-ws/audio-mcp"
            ],
            "env": {
                "THREE_WS_BASE": "<THREE_WS_BASE>",
                "THREE_WS_API_KEY": "<THREE_WS_API_KEY>",
                "THREE_WS_TIMEOUT_MS": "<THREE_WS_TIMEOUT_MS>"
            }
        }
    }
}
```
Replace <…> with your own values

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "audio-mcp": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "@three-ws/audio-mcp"
            ],
            "env": {
                "THREE_WS_BASE": "<THREE_WS_BASE>",
                "THREE_WS_API_KEY": "<THREE_WS_API_KEY>",
                "THREE_WS_TIMEOUT_MS": "<THREE_WS_TIMEOUT_MS>"
            }
        }
    }
}
```
Replace <…> with your own values

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e THREE_WS_BASE=<THREE_WS_BASE> -e THREE_WS_API_KEY=<THREE_WS_API_KEY> -e THREE_WS_TIMEOUT_MS=<THREE_WS_TIMEOUT_MS> audio-mcp npx -y @three-ws/audio-mcp
```
Replace <…> with your own values

## When to use it
- voice a line for a 3D character and get a ready audio file
- turn a user's recorded speech into text
- build a per-frame lipsync track for existing audio
- find motion-capture clips of a given kind in the library
- pull one clip's animation track to play back on an avatar

## Example prompts
- Speak the line "Hello, I'm your three.ws agent" with the nova voice and return the audio URL
- Transcribe this wav file and show the text with its confidence
- Build lipsync for the text "Watch my lips move" and return the track with the audio

## Similar
- [MCP Toolbox for Databases](https://affpapa.org/en/nevibecode/mcp/googleapis-mcp-toolbox-for-databases.md) — MCP server · ★ 16717
- [labelhead-artist-momentum](https://affpapa.org/en/nevibecode/mcp/labelhead-artist-momentum.md) — MCP server · ★ 107423
- [Agent Skills Search Server](https://affpapa.org/en/nevibecode/mcp/agent-skills-search-server.md) — MCP server · ★ 26559
- [Skyvern](https://affpapa.org/en/nevibecode/mcp/skyvern.md) — MCP server · ★ 23263
- [Nhost](https://affpapa.org/en/nevibecode/mcp/nhost.md) — MCP server · ★ 9366
- [PraisonAI](https://affpapa.org/en/nevibecode/mcp/praisonai.md) — MCP server · ★ 9289

From the same set: [nirholas/three.ws](https://affpapa.org/en/nevibecode/by/nirholas/three.ws.md) — 29 cards

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
