Summary
In minimax_mcp/server.py, the input validation for text_to_audio is performed outside the try/except MinimaxAPIError block, while every other tool function performs its validation inside the block. This means invalid input to text_to_audio propagates as an unhandled MinimaxRequestError exception, while invalid input to peer tools is caught and returned as a TextContent error message.
Code shape
text_to_audio (around line 90-91):
def text_to_audio(
text: str, ...
) -> TextContent:
if not text:
raise MinimaxRequestError("Text is required.") # <-- OUTSIDE try/except
try:
# ... main work ...
except MinimaxAPIError as e:
return TextContent(type="text", text=f"Failed to convert text to audio: {str(e)}")
text_to_image, music_generation, voice_clone, etc. all do the equivalent check inside the try block, so their MinimaxRequestError is caught and returned as a TextContent.
Impact
- Inconsistent client experience: a missing
text to text_to_audio crashes the tool call; the same kind of missing input to text_to_image returns a friendly error.
- An MCP client that doesn't catch
MinimaxRequestError (and most don't, since it's an implementation detail) sees a tool crash instead of a structured error.
Suggested fix
Move the if not text: raise MinimaxRequestError(...) check from outside the try to inside it, matching the pattern in the other tools. This is a one-line move.
Discovered via
Issue filed as a follow-up to PR #87 (test coverage). The test added in #87 (test_text_to_audio_with_empty_text_raises) currently expects MinimaxRequestError to propagate, but to make the behavior consistent with the rest of the file, that expectation should probably flip to a TextContent return value.
🤖 Generated with Claude Code
Summary
In
minimax_mcp/server.py, the input validation fortext_to_audiois performed outside thetry/except MinimaxAPIErrorblock, while every other tool function performs its validation inside the block. This means invalid input totext_to_audiopropagates as an unhandledMinimaxRequestErrorexception, while invalid input to peer tools is caught and returned as aTextContenterror message.Code shape
text_to_audio(around line 90-91):text_to_image,music_generation,voice_clone, etc. all do the equivalent check inside thetryblock, so theirMinimaxRequestErroris caught and returned as aTextContent.Impact
texttotext_to_audiocrashes the tool call; the same kind of missing input totext_to_imagereturns a friendly error.MinimaxRequestError(and most don't, since it's an implementation detail) sees a tool crash instead of a structured error.Suggested fix
Move the
if not text: raise MinimaxRequestError(...)check from outside thetryto inside it, matching the pattern in the other tools. This is a one-line move.Discovered via
Issue filed as a follow-up to PR #87 (test coverage). The test added in #87 (
test_text_to_audio_with_empty_text_raises) currently expectsMinimaxRequestErrorto propagate, but to make the behavior consistent with the rest of the file, that expectation should probably flip to aTextContentreturn value.🤖 Generated with Claude Code