mcpbeat Sign in

Voice Agent Skill

>- Narration and text-to-speech on the user's machine through Guaardvark's Audio Foundry (Chatterbox, Kokoro, Piper) and consent-gated voice cloning from a reference clip. Use when the user wants a voiceover, narration of a script, a spoken line, or "make it sound like this voice".

727 tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
211
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/guaardvark/guaardvark --skill voice

The instruction itself

5 sections, as written by the author

Voice with Guaardvark

Read setup first. Expressive voices need the audio_foundry plugin running;

Piper works without it. B=${GUAARDVARK_URL:-http://localhost:5000}.

Which engine

| engine | route | when |

|---|---|---|

| Chatterbox | Audio Foundry backend: "chatterbox" | expressive, emotion presets, cloning |

| Kokoro | Audio Foundry backend: "kokoro" | fast, clean, 10+ built-in voices (af_heart default) |

| Piper | /api/voice/text-to-speech | offline fallback, no GPU |

GET $B/api/audio-foundry/voices lists what is installed. GET $B/api/voice/voices lists Piper voices.

Speak a line or a script

curl -s -X POST $B/api/audio-foundry/generate/voice -H 'Content-Type: application/json' -d '{
  "text": "The line to speak.",
  "backend": "auto",            # auto | chatterbox | kokoro
  "voice_id": "af_heart",       # Kokoro voice, or omit
  "emotion": "calm",            # Chatterbox preset, or omit
  "exaggeration": 0.5, "cfg_weight": 0.5, "temperature": 0.8,   # Chatterbox knobs, optional
  "seed": 7, "output_format": "wav", "async": true
}'
  • Short text returns the file directly (path, document_id). With "async": true or long

text you get 202 {"job_id"}: poll GET $B/api/audio-foundry/jobs/<job_id> until status

is done; the result has path and document_id. Cancel: POST .../jobs/<job_id>/cancel.

  • Multi-section narration with pauses: POST $B/api/voice/narrate

{"script": "...", "engine": "kokoro", "voice": "...", "pause_between_sections": 0.6, "output_format": "wav"}.

  • Piper only: POST $B/api/voice/text-to-speech {"text", "voice": "libritts"} returns audio_url.
  • The reference must go through the upload route; that is what records consent. Arbitrary

file paths are refused with 403.

   curl -s -X POST $B/api/audio-foundry/voice-clips/upload -F file=@/abs/path/ref.wav -F name="Dean sample"

The response gives the stored path. GET $B/api/audio-foundry/voice-clips lists clips.

  • Generate with "backend": "chatterbox", "reference_clip_path": "<that path>".
  • Before uploading, ask whether the voice belongs to the user or someone who consented. Do not

clone a public figure or anyone who has not agreed. Refuse politely if unclear.

Rules

  • 10 to 20 seconds of clean speech is enough for a clone; more is not better.
  • Say which engine ran (the response reports it); auto falls back to Kokoro on a Chatterbox error.
  • Audio files are local under data/outputs/; they also appear in the Audio library page.

How to use it

Copy the folder

Take guaardvark/voice from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.