MCP server that gives AI assistants deterministic Mandelbrot image-generation tools
openmandel demonstrates solid tool design with clear naming, comprehensive parameter schemas, and detailed descriptions. All 7 tools follow verb_noun conventions (list_, render_, create_, generate_, get_, inspect_). Descriptions are well-crafted (194 - 392 chars, within baseline), with explicit guidance on when to call each tool and coordinate recommendations. Parameter schemas are complete with types, defaults, and constraints. However, output schemas are not formally documented in the code, return types are inferred from model_dump() calls. Error handling is minimal; no recovery guidance or validation error messages visible. Security is adequate (no secrets in params, read-only tools clearly marked), but no explicit permission gates or audit logging. Composition is strong: tools chain logically (list presets → render → gallery), and responses include necessary IDs for downstream calls.
Generate multiple deterministic Mandelbrot variations from a base plan. Use this when you want several related images exploring a neighborhood. The server applies small deterministic perturbations to center, zoom, contrast, and gamma. Args: count: Number of variations to generate (1-8). basename: Base filename for output images (without extension). Auto-derived if omitted. Returns paths to all generated images, metadata files, and optional contact sheet.
Generate a local static HTML gallery from generated PNG/JSON files. Use this to create a browsable gallery of previously rendered images. Scans input_dir for PNG files with matching JSON metadata.
Return current server configuration, limits, and output directory settings. Use this to understand what the server allows before rendering.
Inspect a Mandelbrot camera view without rendering an image. Use this before render_mandelbrot_plan when you want to understand what area of the complex plane a center/zoom/size covers, get an iteration recommendation, and estimate render cost. Returns viewport bounds, pixel count, iteration guidance, and cost hints. If you already have a max_iter in mind, pass it in to get an assessment. This tool does not write any files and does not render.
Output schemas not formally documented. Return types inferred from model_dump() calls; LLMs cannot see field names, types, or structure before execution.
No error handling or recovery guidance. Tools lack validation error messages, retryability classification, or actionable error responses.
No confirmation or dry-run for destructive operations. render_mandelbrot_plan and create_mandelbrot_variations write files with overwrite flag but no confirmation step.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Return all valid palette names with descriptions and style guidance. Call this first if you need to choose a color palette. Returns a list of palettes with name, description, and vibes (no raw color arrays).
Return all known Mandelbrot region presets with coordinates and guidance. Call this first if you need good known coordinates for a render. Returns a list of presets with name, description, coordinates, vibes, and suggested palettes.
Render a deterministic Mandelbrot image from explicit fractal parameters. Use this when you know the region, zoom, palette, and style you want. Call list_mandelbrot_presets first if you need good known coordinates. Call list_mandelbrot_palettes first if you need valid palette names. Coordinate guidance: - Use seahorse_valley-like coordinates for spirals/cathedrals/deep intricate prompts. - Use elephant_valley-like coordinates for organic/coral/alien reef prompts. - Use mini_mandelbrot-like coordinates for nested/recursive/symbolic prompts. - Use antenna_tip-like coordinates for minimal/stark/needle-like prompts. Custom palette: pass a list of color strings (hex like "#ff6432", named like "coral", or rgb like "rgb(255,100,50)") with 2 to 32 stops. Overrides the named palette. Returns paths to the PNG image and JSON metadata. Does not return embedded image bytes.
Missing tool annotations. No readOnlyHint, destructiveHint, or idempotentHint metadata to guide agent planning.
No audit logging or permission gates. Tools lack user/agent identification, call tracing, or permission verification for sensitive operations.