All Documentation

MCP Server

Give AI agents scoped access to ToneBoard — voices, characters, content, and audio generation as MCP tools

Overview

ToneBoard hosts a Model Context Protocol (MCP) server, so AI agents like Claude Code, Claude Desktop, and claude.ai projects can work with your organization directly: browse voices, create characters, search saved content, and generate speech or sound effects.

The server authenticates with the same scoped API keys as the REST API — and the tool list itself is filtered by the key's scopes. An agent connected with a read-only key never even sees the write tools.

PropertyValue
Endpointhttps://<host>/api/v1/mcp
TransportStreamable HTTP (stateless, JSON responses)
AuthenticationAuthorization: Bearer <api key> or X-API-Key header
CapabilitiesTools only

Connecting

Claude Code (CLI)

claude mcp add --transport http toneboard https://<host>/api/v1/mcp \
  --header "Authorization: Bearer <your-api-key>"

Project config (.mcp.json)

{
  "mcpServers": {
    "toneboard": {
      "type": "http",
      "url": "https://<host>/api/v1/mcp",
      "headers": { "Authorization": "Bearer <your-api-key>" }
    }
  }
}

Try it

After connecting, ask the agent to run verify_access — it reports the organization and scopes the connection has, which explains exactly which tools are available.

Tools

ToolRequired scopeWhat it does
verify_accessShow the connection's organization and scopes
list_projectsprojects:readList projects
list_characterscharacters:readList characters (optional project filter)
get_charactercharacters:readGet one character
create_charactercharacters:writeCreate a character (internal or external voice)
delete_charactercharacters:writeDelete a character (guarded against live-endpoint use)
list_voicesvoices:readList project voices
create_voicevoices:writeAdopt an external provider voice into a project
delete_voicevoices:writeDelete a project voice (guarded against character use)
list_internal_voicesinternal_voices:readList Voice Studio custom voices
design_internal_voiceinternal_voices:writeDesign voice previews from a prompt (spends tokens)
save_internal_voiceinternal_voices:writePersist a designed preview (spends tokens)
delete_internal_voiceinternal_voices:writeDelete an internal voice (guarded)
list_voice_providersexternal_voices:readList provider connections
list_external_voicesexternal_voices:readBrowse a provider's available voices
list_contentlines:read | sfx:readSearch saved lines and sound effects
get_contentlines:read | sfx:readGet one item with full version history
set_active_content_versionlines:write | sfx:writePin which version of an item is active
delete_contentlines:write | sfx:writeDelete an item and all version audio
generate_sfxsfx:writeGenerate a sound effect; optional save to the library
generate_speechtts:generateGenerate speech for a character; optional save as a line (needs lines:write)

Per-item scoping

Content tools check the item's type at call time: a key with only sfx:write can manage sound effects but gets a scope error on lines, even through the same tool.

Example Session

A typical agent workflow with a key scoped to characters:read, tts:generate, and lines:write:

You: "Generate a greeting line for the Narrator character and save it as 'Greeting v3'."

Agent:
1. verify_access            -> sees tts:generate, lines:write, characters:read
2. list_characters          -> finds "Narrator" (id: chr_...)
3. generate_speech          -> { characterId: "chr_...", text: "Welcome...",
                                 saveName: "Greeting v3" }
4. Replies with the audio URL; the line is in Saved Content as the active version.

Notes

TopicBehavior
Rate limit60 requests/minute per key, shared with the REST API
TokensGeneration tools spend organization tokens; failures refund automatically
SessionsThe server is stateless — no session ids, safe behind serverless scaling
ErrorsTool failures return readable messages (scope, validation, balance) the agent can act on