MCP server exposing Google Gemini media generation APIs as tools for AI agents
Three tools with complete input schemas and descriptions, but descriptions are verbose (200+ chars) and lack LLM-optimized structure. All tools have proper enum constraints and parameter types. However, output schemas are not documented, LLMs cannot predict response structure for downstream chaining. Error handling is absent from tool definitions. Tool names follow verb_noun pattern correctly. No tool annotations (readOnlyHint, destructiveHint) despite all being read-only operations.
Generate or edit images using Google's Gemini image generation models. Supports conversational image creation/editing, multi-turn workflows, images with embedded text, infographics, and interleaved text+image output.
Generate instrumental music from weighted text prompts using Google's Lyria model. Each prompt has a 'text' describing genre/instrument/mood and a 'weight' for emphasis. The server manages the streaming session internally.
Generate speech audio from text using Gemini TTS models. Supports single-speaker and multi-speaker modes with voice selection and natural language style control.
Output schemas not documented. LLMs cannot predict response structure (e.g., image URL format, audio file encoding, music duration). Breaks tool chaining and forces agents to guess field names.
Descriptions are verbose (200+ chars) and lack LLM-optimized structure. Should follow: WHAT (one sentence), WHEN (use case), RETURN (key fields). Current descriptions bury key details in prose.
No tool annotations despite all tools being read-only. Missing readOnlyHint in tool definitions prevents agents from understanding safety profile and retry semantics.
Error handling not documented in tool definitions. No guidance on retryability, user-fixable errors, or recovery steps. handle_gemini_error() exists in server.py but is not exposed to LLM context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Parameter descriptions lack format/constraint details. E.g., 'aspect_ratio' enum is clear, but 'reference_images' accepts 'File paths, data-URIs, or base64' without specifying max file size, supported formats, or encoding rules.