three.ws Audio
io.github.nirholasPublished by GitHub account nirholasv0.1.3Updated Oct 24, 2026
Text-to-speech, speech-to-text, audio-to-face lipsync, and motion-capture clips for 3D agents.
Overview
A local stdio MCP server that gives an assistant text-to-speech, speech-to-text, audio-to-face lipsync and motion-capture clip browsing for 3D agents.
- What you can do
- Synthesize spoken audio from text, returning a base64 audio data URL with voice and format details, using free NVIDIA models with an OpenAI backstop option. Transcribe base64 audio into text with confidence and duration. Turn text or audio into a per-frame ARKit blendshape lipsync track, optionally together with generated audio. Browse the motion-capture clip library by kind with cursor pagination, and fetch a single clip's full per-frame animation track by id.
- When to use it
- Useful when building or driving a 3D avatar or agent that needs a voice, speech input, mouth animation, or recorded face, pose, hand and VMC motion data, from any MCP client such as Claude Code, Claude Desktop or Cursor.
- Requirements
- Runs locally over stdio via npx, requiring Node.js 20 or newer and network access to the three.ws API. Optional environment variables: THREE_WS_BASE to point at another deployment, THREE_WS_API_KEY for higher rate limits and private clips, and THREE_WS_TIMEOUT_MS for per-request timeouts. No key is needed to start.
Installation
In SourceWeft
- Open three.ws Audio in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
@three-ws/audio-mcp
Give a 3D AI agent a voice and a face — text-to-speech, speech-to-text, audio-to-face lipsync, and the motion-capture clip library, from any MCP client.
[npm] [license] [node] [MCP Registry] [three.ws]
A Model Context Protocol server that exposes the three.ws voice and animation pipeline over stdio. Make an avatar speak, let users talk back, turn that speech into a per-frame lipsync track, and browse the recorded motion-capture library — everything you need to drive a 3D agent's mouth and movement.
The speech, recognition, and lipsync lanes run on free NVIDIA NIM models (Magpie TTS, Riva ASR, Audio2Face-3D), with OpenAI as the paid TTS backstop — the same provider policy as the three.ws platform. No key required to start; point THREE_WS_BASE at a deployment and go.
Install
Or run with npx (no install):
Quick start
Claude Code, one line:
Claude Desktop / Cursor (claude_desktop_config.json or mcp.json):
Inspect the surface with the MCP Inspector:
Tools
All five tools are read-only: they transform input (synthesize/recognize/animate) or read live library data, never mutating platform state. None are idempotent — the audio bytes, transcript, and catalog move between calls.
Input parameters
text_to_speech — text (required, 1–4096 chars), voice (default nova), format (mp3|opus|aac|flac|wav|pcm, default mp3), model (OpenAI backstop only), language (BCP-47, default en-US), speed (0.5–2.0, OpenAI lane only).
speech_to_text — audio (required, base64 or data: URL), format (wav|pcm|flac|ogg, default wav), language (BCP-47, default en-US), sampleRate (Hz, PCM only), words (bool), model (advanced).
audio_to_face — text or audio (one required), format (wav|pcm, audio path), sampleRate (PCM only), voice / language (text path).
motion_capture_clips — kind (face|pose|hand|vmc), include_public (bool, authenticated only), limit (1–100, default 50), cursor.
motion_capture_clip — id (required, clip UUID).
Examples
A face frame is { t, w }: t = seconds from clip start, w = weights in the order of blendShapeNames (ARKit-52 naming). Play the audio and sample the track by the audio element's currentTime.
Notes on payloads
Audio crosses the wire as base64 (TTS returns it, ASR/A2F accept it). Both the synthesis input (text) and the recognition input (audio, ~8 MB cap) are bounded by the platform — keep clips to a spoken utterance rather than long recordings. For lipsync on audio you already have, pass wav/pcm directly; browser-recorded WebM/Opus must be decoded to WAV or PCM first (Riva and Audio2Face do not accept the WebM container).
Requirements
- Node.js >= 20.
- Network access to
https://three.ws(or your ownTHREE_WS_BASE).
Environment variables
Links
- Homepage: https://three.ws
- Changelog: https://three.ws/changelog
- Issues: https://github.com/nirholas/three.ws/issues
- License: Apache-2.0, see LICENSE
Part of the three.ws SDK suite — 3D AI agents, on-chain identity, and agent payments.
Website · Changelog · GitHub
Source: packages/audio-mcp/README.md at commit c8f2cde
Tools
0Version history
2- v0.1.3LatestOct 10, 2026
- v0.1.2Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts