fix: use underscore-separated MCP tool names so Claude Desktop accepts them

Claude Desktop validates tool names against ^[a-zA-Z0-9_-]{1,64}$ and
rejects the whole tool list when any name contains a dot, so the Voicebox
MCP server was unusable there. Rename voicebox.speak, voicebox.transcribe,
voicebox.list_captures and voicebox.list_profiles to voicebox_speak,
voicebox_transcribe, voicebox_list_captures and voicebox_list_profiles.

Fixes #790
This commit is contained in:
Jashwanth
2026-10-04 00:00:54 +00:00
committed by capy-ai-staging[bot]
parent fc0bec8faf
commit 8990104081
+4 -4
View File
@@ -36,7 +36,7 @@ def register_tools(mcp: FastMCP) -> None:
"""Attach all Voicebox tools to the given FastMCP instance.""" """Attach all Voicebox tools to the given FastMCP instance."""
@mcp.tool( @mcp.tool(
name="voicebox.speak", name="voicebox_speak",
description=( description=(
"Speak text in a Voicebox voice profile. Returns a generation id " "Speak text in a Voicebox voice profile. Returns a generation id "
"the caller can poll at /generate/{id}/status. Audio plays on the " "the caller can poll at /generate/{id}/status. Audio plays on the "
@@ -113,7 +113,7 @@ def register_tools(mcp: FastMCP) -> None:
db.close() db.close()
@mcp.tool( @mcp.tool(
name="voicebox.transcribe", name="voicebox_transcribe",
description=( description=(
"Transcribe an audio clip to text using Voicebox's local Whisper. " "Transcribe an audio clip to text using Voicebox's local Whisper. "
"Pass exactly one of `audio_base64` (bytes as base64) or " "Pass exactly one of `audio_base64` (bytes as base64) or "
@@ -171,7 +171,7 @@ def register_tools(mcp: FastMCP) -> None:
tmp_path.unlink(missing_ok=True) tmp_path.unlink(missing_ok=True)
@mcp.tool( @mcp.tool(
name="voicebox.list_captures", name="voicebox_list_captures",
description=( description=(
"List recent voice captures (dictations, recordings, uploads) " "List recent voice captures (dictations, recordings, uploads) "
"with their transcripts. Most-recent first." "with their transcripts. Most-recent first."
@@ -199,7 +199,7 @@ def register_tools(mcp: FastMCP) -> None:
db.close() db.close()
@mcp.tool( @mcp.tool(
name="voicebox.list_profiles", name="voicebox_list_profiles",
description=( description=(
"List available voice profiles (both cloned voices and presets). " "List available voice profiles (both cloned voices and presets). "
"Use the returned `name` with voicebox.speak(profile=...)." "Use the returned `name` with voicebox.speak(profile=...)."