Local-first MCP server that renders (and optionally generates) Manim CE animations
MANIMA defines 5 tools with basic schemas and descriptions, but falls short of production quality. Tool names follow verb_noun convention (render_animation, generate_animation, job_status, job_result, cancel_job), which is good. However, descriptions are terse (10-60 chars), parameter descriptions are minimal or absent, and output schemas are not documented. The render_animation and generate_animation tools accept free-form 'quality' strings without enum constraints, inviting hallucinated values. job_status and job_result descriptions lack detail on what fields are returned. Error handling and recovery guidance are absent. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present. The server is functional but lacks the rigor expected of production-grade agent tools.
Kill a running job; no-op on an already-terminal one.
Generate + verify a Manim CE scene locally. Returns a job_id immediately.
Valid only in terminal states: artifact_uri, source, trace.
Cheap, non-blocking: state, attempt, phase.
Render caller-supplied Manim CE source. Returns a job_id immediately.
Output schemas not documented. job_status and job_result descriptions mention 'state, attempt, phase' and 'artifact_uri, source, trace' but do not formally specify return types, field types, or structure. LLMs cannot plan downstream calls without knowing what fields to expect.
Parameter 'quality' in render_animation and generate_animation accepts free-form strings with no enum constraint or format specification. Description says '(optional)' but does not list valid values. LLMs will hallucinate invalid quality settings.
Descriptions are terse (10-60 chars) and lack context. 'Cheap, non-blocking: state, attempt, phase' for job_status does not explain WHEN to call it, what the fields mean, or how they relate to the job lifecycle. Descriptions should be 50-200 chars with actionable guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
No error handling or recovery guidance. If a job fails or is not found, the tool response does not tell the LLM what to do next. No categorization of errors as retryable, user-fixable, or fatal.
No tool annotations. render_animation and generate_animation are destructive (WRITE risk), cancel_job is reversible, and job_status/job_result are read-only, but no destructiveHint, idempotentHint, or readOnlyHint annotations are present. LLMs cannot infer safety properties.