Python MCP Server for Google AI Studio Image Generation. Generates images using Imagen or Gemini models, and analyzes/edits images using Gemini vision capabilities.
Picasso MCP has well-structured tool definitions with clear descriptions and proper input schemas. All 4 tools are explicitly registered with @mcpServer.tool() decorators and include docstrings. However, several patterns are missing: no tool annotations (readOnlyHint/destructiveHint), no output schemas documented in descriptions, limited error recovery guidance, and no parameter enums for constrained inputs like aspectRatio. The generateImage and analyzeImage tools handle sensitive operations (WRITE risk) but lack confirmation/dry-run patterns. Parameter descriptions are generally good (50-150 chars) but could be more prescriptive about constraints and error cases.
Analyze, describe, or edit an image using Gemini. Provide an input image together with a text prompt. Gemini will return a text response, an edited/generated image, or both — depending on the prompt. The image parameter accepts any of these formats: - Base64 string with data URI prefix: "data:image/png;base64,<data>" - Raw base64 string (PNG, JPEG, WebP, GIF, BMP, TIFF) - HTTPS URL: "https://example.com/photo.jpg" - Local server file path: "/images/my_image.png"
Generate one or more images from a text prompt using Google AI Studio. Works with Imagen (imagen-3.0-*) and Gemini (gemini-2.0-flash-exp, etc.) models. The generation backend is chosen automatically based on the GOOGLE_MODEL env variable.
Returns the current server configuration including model, output directory, supported aspect ratios, and whether authentication is enabled.
Lists recently generated images stored on the server, newest first.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) declared. generateImage and analyzeImage are WRITE operations but lack destructiveHint=true, preventing agents from understanding side effects.
aspectRatio parameter accepts free-form string instead of enum. Valid values are hardcoded in VALID_ASPECT_RATIOS but not exposed as JSON Schema enum, forcing LLMs to guess or hallucinate invalid values.
Output schemas not documented in tool descriptions. Return types are complex dicts (e.g., generateImage returns {model, prompt, aspectRatio, images:[{path, url}]}) but LLMs cannot infer structure without explicit schema documentation.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | <=2025-11-25 | v2 |
No confirmation/dry-run pattern for destructive operations. generateImage and analyzeImage write files to disk but offer no preview, confirmation, or rollback mechanism. Agents cannot safely test before committing.
Error messages in code use safeError() wrapper but descriptions lack recovery guidance. E.g., 'Image generation failed: {safeMsg}' tells LLM nothing about retry eligibility, required parameters, or next steps.