SecretVoice

Model Context Protocol

Give your agent a voice that whispers.

SecretVoice is a remote MCP server, so Claude, Cursor, VS Code and any other MCP client can speak in 29 voices and 22 languages โ€” and perform. Drop an emoji into the script and the engine whispers, sighs, or goes breathless. One call renders a scene with a different voice per line. No API key pasting: OAuth handles it.

POST /mcp
Host: api.secretvoice.dev authorization: Bearer <oauth token> { "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "text_to_speech", "arguments": { "text": "๐Ÿ‘‚ Come closer. ๐Ÿ˜ฎโ€๐Ÿ’จ I have been waiting.", "voice_id": "velvet" } } }

Why this server exists

Direction lives in the script, not in a settings object.

Every other voice MCP tool takes text and returns audio. That is a utility. This one lets the agent act: it can whisper on one line, sigh on the next, switch to a different character, and answer in another language โ€” without a second tool call.

EmojiDirectionEmojiDirection
๐Ÿ‘‚whisper๐Ÿ’‹kiss
๐Ÿ˜ฎโ€๐Ÿ’จsigh๐Ÿคญchuckle
๐ŸŒฌ๏ธbreathless๐Ÿฅบtrembling
๐Ÿฅตpanting๐Ÿ˜ญsobbing
โธ๏ธpause๐Ÿขslowly

The agent writes the performance. A prompt like โ€œread this line like you are telling a secret at 2amโ€ becomes ๐Ÿ‘‚ read this lineโ€ฆ โ€” and the voice actually does it. Any emoji that is not a cue is stripped, so scripts stay readable.

Tools

Six tools, three resources.

Everything an agent needs to pick a voice, perform, and stay inside its credit budget.

ToolWhat it doesScope
list_voicesEvery voice with id and gendervoices:read
list_languagesThe 22 supported language codesvoices:read
text_to_speechText in, audio out โ€” emoji cues allowedtts:generate
generate_sceneMulti-voice scene: one clip per segment, own voice and languagetts:generate
get_balancePlan and remaining creditsaccount:read
list_historyRecent generationshistory:read

Resources for clients that read context: secretvoice://voices, secretvoice://languages, secretvoice://vocal-cues.

Connect

Two lines in a config file.

The client registers itself, you approve the scopes once, and it receives a token bound to this server. Nothing to paste, nothing to rotate.

Claude Desktop / Claude Code

claude_desktop_config.json
{
  "mcpServers": {
    "secretvoice": {
      "type": "http",
      "url": "https://api.secretvoice.dev/mcp"
    }
  }
}

Cursor

~/.cursor/mcp.json
{
  "mcpServers": {
    "secretvoice": { "url": "https://api.secretvoice.dev/mcp" }
  }
}

VS Code / Copilot

.vscode/mcp.json
{
  "servers": {
    "secretvoice": { "type": "http", "url": "https://api.secretvoice.dev/mcp" }
  }
}

Agent instructions that actually work. Tell the model what it may do with the voice, not just that a tool exists. This is the block we use:

You have SecretVoice over MCP. When the user wants audio, narration or a scene:
1. Call list_voices and pick by gender and style โ€” never guess a voice id.
2. Write the script with emoji vocal cues where the delivery should change
   (๐Ÿ‘‚ whisper, ๐Ÿ˜ฎโ€๐Ÿ’จ sigh, ๐ŸŒฌ๏ธ breathless, ๐Ÿ’‹ kiss, โธ๏ธ pause).
3. Use text_to_speech for one speaker, generate_scene for dialogue.
4. State the character count before generating: 1 credit = 1 character.

Client without dynamic registration? Mint a key in the dashboard and send it as Authorization: Bearer <key> โ€” the endpoint accepts both.

Pricing

Same credits as the API. Nothing hidden.

One credit is one character. A 500-character paragraph is 500 credits, whether it comes from a script, the Studio, or an agent. A free 3-day trial covers the first 10,000 characters.

Questions

Before you connect.