Manim Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Manim Mcp (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A bulleted imperative like {match} tells the agent to never reveal, disclose, or mention something to the user. Used adversarially it can instruct the agent to hide its tool calls or lie about what it did — stripping the transparency a user relies on to trust the agent.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Text-to-video animation powered by manimgl (3Blue1Brown's library) and a multi-agent LLM pipeline. Describe what you want to see, and get a rendered animation back.
Works as a CLI tool, an LLM-powered agent, or an MCP server for integration with AI assistants like Claude.
| Circle to Square Transform | 3D Rotating Cube |
|---|---|
manim-mcp gen "Transform a blue circle into a red square" | manim-mcp gen "A 3D cube rotating. Use ThreeDScene." |
| Circle to Square | Rotating Cube |
[Watch 20+ example animations on YouTube](https://www.youtube.com/playlist?list=PLYfSs9pitF8Or8_cjhUaXh_sTSuJqskGD)
pip install -e ".[rag]"pip install manimglMANIM_MCP_GEMINI_API_KEYcargo install probe-search)Copy .env.example to .env and fill in your values:
# LLM Provider
MANIM_MCP_GEMINI_API_KEY=your-gemini-api-key
MANIM_MCP_GEMINI_MODEL=gemini-3-flash-preview # default
# Alternative: Claude
# MANIM_MCP_LLM_PROVIDER=claude
# MANIM_MCP_CLAUDE_API_KEY=your-claude-api-key
# MANIM_MCP_CLAUDE_MODEL=claude-sonnet-4-20250514
# Alternative: DeepSeek
# MANIM_MCP_LLM_PROVIDER=deepseek
# MANIM_MCP_DEEPSEEK_API_KEY=your-deepseek-api-key
# RAG (ChromaDB)
MANIM_MCP_RAG_ENABLED=true
MANIM_MCP_CHROMADB_HOST=localhost
MANIM_MCP_CHROMADB_PORT=8000
# S3 Storage (optional)
MANIM_MCP_S3_ENDPOINT=localhost:9000
MANIM_MCP_S3_ACCESS_KEY=minioadmin
MANIM_MCP_S3_SECRET_KEY=minioadmin
MANIM_MCP_S3_BUCKET=manim-renders
# Probe Search (optional - for AST-aware code search)
# Colon-separated paths to search for scene examples
MANIM_MCP_PROBE_PATHS=/path/to/3b1b-videos:/path/to/manim-examples# Simple mode (default) - direct LLM generation
manim-mcp gen "Transform a blue circle into a red square"
# Advanced mode - multi-agent pipeline with RAG
manim-mcp gen "Visualize the central limit theorem" --mode advanced
# With quality and format options
manim-mcp gen "Animate eigenvectors" --quality high --format mp4Generation modes:
--mode simple (default): Direct LLM code generation, faster--mode advanced: Multi-agent pipeline (ConceptAnalyzer → ScenePlanner → CodeGenerator → CodeReviewer) with RAG retrievalmanim-mcp gen "Introduction to linear algebra" --audio
manim-mcp gen "Pythagorean theorem proof" --audio --voice KoreAudio uses a parallel pipeline with automatic sync:
manim-mcp edit <render_id> "Make the vectors red and add axis labels"manim-mcp list --status completed --limit 10
manim-mcp get <render_id>
manim-mcp delete <render_id> --yesLet the LLM interpret multi-step requests:
manim-mcp prompt "Create a video on eigenvectors, then edit it with better colors"Start the Model Context Protocol server for integration with Claude, Cursor, or other MCP clients:
manim-mcp serve
manim-mcp serve --transport stdio
manim-mcp serve --transport streamable-httpIndex all knowledge sources for best code generation quality:
# Check current index status
manim-mcp index status
# Index 3b1b video scenes (3,140 scenes)
manim-mcp index 3b1b-videos --path /path/to/3b1b/videos
# Index manimgl API signatures (1,652 signatures)
manim-mcp index api
# Index animation patterns (101 patterns)
manim-mcp index patterns
# Index error patterns (16+ patterns)
manim-mcp index errors
# Index library documentation (470 docs)
manim-mcp index manim-docs
# Clear a collection
manim-mcp index clear patterns --yesRun with all dependencies (ChromaDB, MinIO):
export MANIM_MCP_GEMINI_API_KEY=your-api-key
docker compose upThis starts:
┌─────────────────────────────────────────────────────────────────────────────┐
│ AUDIO PIPELINE (parallel with video) │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ prompt ──► Code Generation (video-driven) │
│ │ │
│ ┌────────────┴────────────┐ │
│ │ │ PARALLEL │
│ ▼ ▼ │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Render Video │ │ Generate Script │ │
│ │ │ │ + TTS Audio │ │
│ └────────┬─────────┘ └────────┬─────────┘ │
│ │ │ │
│ ▼ ▼ │
│ video.mp4 audio segments │
│ │ │ │
│ └────────────┬────────────┘ │
│ ▼ │
│ Pace audio to video duration │
│ │ │
│ ▼ │
│ Mix Audio + Video ──► S3 upload ──► URL │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ MULTI-AGENT PIPELINE │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ prompt ──► ConceptAnalyzer ──► ScenePlanner ──► CodeGenerator ──► CodeReviewer
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ChromaDB RAG (5,300+ docs) │ │
│ │ ┌──────────┬──────────┬──────────┬────────┬────────┐ │ │
│ │ │ scenes │ api │ patterns │ docs │ errors │ │ │
│ │ │ (3,140) │ (1,652) │ (101) │ (470) │ (16) │ │ │
│ │ └──────────┴──────────┴──────────┴────────┴────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────┬──────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ RENDER PIPELINE │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ validated code ──► CodeSandbox ──► manimgl (xvfb) ──► S3 upload ──► URL │
│ │ │ │
│ ▼ ▼ │
│ ┌───────────┐ ┌───────────────┐ │
│ │ SQLite │ │ MinIO/S3 │ │
│ │ (tracker) │ │ (storage) │ │
│ └───────────┘ └───────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘| Component | Description |
|---|---|
| ConceptAnalyzer | Extracts domain, complexity, and key concepts from prompts |
| ScenePlanner | Designs animation structure, timing, and transitions |
| CodeGenerator | Generates manimgl code using scenes, API signatures, and animation patterns |
| CodeReviewer | Validates code quality and applies fixes |
| ParameterValidator | Validates method parameters against API signatures |
| GeminiTTSService | Parallel TTS with Gemini voices, generates narration script |
| ChromaDBService | Vector similarity search across 5,300+ indexed documents |
| ProbeSearcher | AST-aware semantic code search using Probe (tree-sitter + BM25) |
| Linter | Pre-generation code validation using ruff |
| SelfCritique | Multi-pass code generation with self-review |
| SchemaGenerator | JSON schema-based structured scene generation |
| TemplateGenerator | Template-first generation (fill-in-the-middle style) |
| CodeSandbox | AST-based security validation (blocks dangerous code) |
| ManimRenderer | Executes manimgl with xvfb for headless rendering |
| S3Storage | Uploads to MinIO/S3 with presigned URLs |
| RenderTracker | Persists job metadata in SQLite |
| Collection | Documents | Description |
|---|---|---|
manim_scenes | 3,140 | Production 3Blue1Brown scene code |
manim_api | 1,652 | API signatures with exact parameters |
animation_patterns | 101 | Reusable animation templates |
manim_docs | 470 | manimgl library documentation |
error_patterns | 16+ | Self-learning error/fix patterns |
The system learns from every error:
This creates a feedback loop where the system improves over time.
When running as an MCP server, these tools are available:
| Tool | Description |
|---|---|
generate_animation | Create an animation from a text prompt |
edit_animation | Edit an existing animation with instructions |
list_renders | List past renders with pagination and filtering |
get_render | Get full details and a fresh download URL |
delete_render | Permanently delete a render and its files |
rag_search | Search the RAG database for similar scenes |
rag_stats | Get collection statistics |
The system performs best with mathematical and educational topics that have high RAG coverage:
| Topic | Indexed Scenes | Example Prompts |
|---|---|---|
| Linear Algebra | 810+ | "Animate a matrix transformation", "Show eigenvectors during transformation" |
| Geometry | 568+ | "Visual proof of Pythagorean theorem", "Inscribed angle theorem" |
| Probability | 290+ | "Central limit theorem", "Bayes theorem with updating priors" |
| Calculus | 178+ | "Derivative as tangent slope", "Riemann sums converging to integral" |
pip install -e ".[dev,rag]"
pytest# Test all LLM provider combinations (Gemini/Claude × Simple/Advanced × RAG On/Off)
python scripts/test_providers.py
python scripts/test_providers.py --no-audio # Skip audio generation
python scripts/test_providers.py --quick # Only simple mode tests
# Benchmark LLM providers (DeepSeek vs Gemini)
python scripts/benchmark_providers.py
python scripts/benchmark_providers.py --providers gemini,deepseek --categories simple,mediumMIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.