manim-mcp
MCP server that generates 3Blue1Brown-style math videos with Manim directly inside Claude Desktop. Videos render with AI-narrated voiceover via ElevenLabs and play inline in the chat.
https://github.com/user-attachments/assets/placeholder
Quick Start
1. Get an ElevenLabs API key
Sign up at elevenlabs.io and copy your API key from the API Keys page.
2. Add to Claude Desktop
Open Settings > Developer > Edit Config and add:
{
"mcpServers": {
"manim": {
"command": "npx",
"args": ["-y", "manim-mcp", "--stdio"],
"env": {
"ELEVEN_API_KEY": "sk_your_key_here"
}
}
}
}
3. Restart Claude Desktop
That's it. Ask Claude to "create a video on the Pythagorean theorem" and watch it render.
Requirements
- Node.js 18+ — for running the MCP server
- Python 3.9+ — for Manim rendering (auto-installed into
~/.manim-mcp/.venvon first run) - ffmpeg — for video concatenation (
brew install ffmpegon macOS) - ElevenLabs API key — for AI voiceover
Python dependencies (manim, manim-voiceover, elevenlabs) are automatically installed on first run. This takes ~20 seconds and only happens once.
How it Works
You: "create a video on eigenvalues"
Claude plans 2-4 scenes with narration scripts
-> writes Manim Python code for each scene
-> calls render_video with all scenes
-> server auto-fixes common issues (wrong TTS service, LaTeX, colors)
-> scenes render in parallel with ElevenLabs voiceover
-> concatenated into one video
-> inline video player appears in chat
The server provides comprehensive Manim reference and 3Blue1Brown style guidelines in its instructions, so Claude generates good animation code. A fixGeneratedCode step silently corrects common mistakes before rendering:
- Wrong TTS service (GTTSService, etc.) -> ElevenLabsService with correct config
- LaTeX classes (MathTex, Tex) -> Text() with Unicode
- Invalid colors (CYAN) -> TEAL
- Invented APIs (set_speech_synthesizer) -> correct set_speech_service
Development
git clone https://github.com/zcsabbagh/manim-mcp.git
cd manim-mcp
npm install
npm run build
# Point Claude Desktop at local build:
# "command": "node",
# "args": ["/path/to/manim-mcp/dist/index.js", "--stdio"]
License
MIT






