Skip to content

bug(server): text_to_audio validates text outside try/except, inconsistent with other tools #88

Description

@TumCucTom

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions