manim-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +104 -0
  2. package/dist/demo.mp4 +0 -0
  3. package/dist/index.js +65 -0
  4. package/dist/mcp-app.html +142 -0
  5. package/dist/server.js +1492 -0
  6. package/package.json +67 -0
  7. package/references/composer/SKILL.md +154 -0
  8. package/references/composer/references/3b1b-series-patterns.md +217 -0
  9. package/references/composer/references/domain-planning-guides/calculus-planning.md +188 -0
  10. package/references/composer/references/domain-planning-guides/linear-algebra-planning.md +169 -0
  11. package/references/composer/references/domain-planning-guides/ml-planning.md +286 -0
  12. package/references/composer/references/domain-planning-guides/number-theory-planning.md +187 -0
  13. package/references/composer/references/domain-planning-guides/physics-planning.md +249 -0
  14. package/references/composer/references/domain-planning-guides/probability-planning.md +200 -0
  15. package/references/composer/references/mathematical-storytelling.md +359 -0
  16. package/references/composer/references/narrative-patterns.md +221 -0
  17. package/references/composer/references/opening-patterns.md +284 -0
  18. package/references/composer/references/pacing-guide.md +289 -0
  19. package/references/composer/references/scene-archetypes.md +534 -0
  20. package/references/composer/references/scene-examples.md +379 -0
  21. package/references/composer/references/visual-techniques.md +480 -0
  22. package/references/composer/templates/scenes-template.md +147 -0
  23. package/references/manimce/SKILL.md +166 -0
  24. package/references/manimce/examples/3d_visualization.py +373 -0
  25. package/references/manimce/examples/basic_animations.py +212 -0
  26. package/references/manimce/examples/graph_plotting.py +401 -0
  27. package/references/manimce/examples/lorenz_attractor.py +172 -0
  28. package/references/manimce/examples/math_visualization.py +315 -0
  29. package/references/manimce/examples/updater_patterns.py +369 -0
  30. package/references/manimce/rules/3b1b-translation.md +594 -0
  31. package/references/manimce/rules/3d.md +254 -0
  32. package/references/manimce/rules/advanced-animations.md +594 -0
  33. package/references/manimce/rules/animation-groups.md +212 -0
  34. package/references/manimce/rules/animations.md +128 -0
  35. package/references/manimce/rules/api-pitfalls.md +89 -0
  36. package/references/manimce/rules/axes.md +214 -0
  37. package/references/manimce/rules/camera.md +208 -0
  38. package/references/manimce/rules/cli.md +232 -0
  39. package/references/manimce/rules/color-conventions.md +444 -0
  40. package/references/manimce/rules/colors.md +199 -0
  41. package/references/manimce/rules/config.md +264 -0
  42. package/references/manimce/rules/creation-animations.md +158 -0
  43. package/references/manimce/rules/graphing.md +233 -0
  44. package/references/manimce/rules/grouping.md +220 -0
  45. package/references/manimce/rules/latex.md +202 -0
  46. package/references/manimce/rules/lines.md +241 -0
  47. package/references/manimce/rules/long-form-video.md +552 -0
  48. package/references/manimce/rules/mathematical-domains.md +689 -0
  49. package/references/manimce/rules/mobjects.md +116 -0
  50. package/references/manimce/rules/multi-scene-composition.md +112 -0
  51. package/references/manimce/rules/pedagogy.md +532 -0
  52. package/references/manimce/rules/physics-simulations.md +610 -0
  53. package/references/manimce/rules/positioning.md +211 -0
  54. package/references/manimce/rules/scenes.md +121 -0
  55. package/references/manimce/rules/shapes.md +300 -0
  56. package/references/manimce/rules/styling.md +177 -0
  57. package/references/manimce/rules/text-animations.md +222 -0
  58. package/references/manimce/rules/text.md +189 -0
  59. package/references/manimce/rules/timing.md +227 -0
  60. package/references/manimce/rules/transform-animations.md +157 -0
  61. package/references/manimce/rules/updaters.md +226 -0
  62. package/references/manimce/templates/basic_scene.py +64 -0
  63. package/references/manimce/templates/camera_scene.py +100 -0
  64. package/references/manimce/templates/threed_scene.py +138 -0
package/README.md ADDED
@@ -0,0 +1,104 @@
1
+ # manim-mcp
2
+
3
+ MCP server that generates 3Blue1Brown-style math animation videos with [Manim](https://www.manim.community/) directly inside Claude. Videos render with AI-narrated voiceover and play inline in the chat.
4
+
5
+ ## Quick Start
6
+
7
+ ### 1. Add to Claude Desktop
8
+
9
+ Open **Settings > Developer > Edit Config** and add:
10
+
11
+ ```json
12
+ {
13
+ "mcpServers": {
14
+ "manim": {
15
+ "command": "npx",
16
+ "args": ["-y", "manim-mcp@latest", "--stdio"]
17
+ }
18
+ }
19
+ }
20
+ ```
21
+
22
+ ### 2. Restart Claude Desktop
23
+
24
+ That's it. Ask Claude to "create a video explaining the Pythagorean theorem" and watch it render.
25
+
26
+ **First run** takes ~2 minutes to auto-install Python dependencies, TTS models, and LaTeX. Subsequent runs are fast.
27
+
28
+ ## Features
29
+
30
+ - **Multi-scene video generation** with parallel rendering and scene-level caching
31
+ - **AI voiceover narration** synced to animations (Kokoro TTS, runs 100% locally)
32
+ - **20+ language support** — English, Chinese, Japanese, Spanish, French, Hindi, and more
33
+ - **Built-in video player** renders inline in Claude Desktop
34
+ - **Comprehensive Manim reference library** produces high-quality 3b1b-style animations
35
+ - **Speculative TTS pre-synthesis** — voiceovers are generated while scenes render
36
+ - **Auto-fixes** common Manim code mistakes before rendering
37
+
38
+ ## How it Works
39
+
40
+ ```
41
+ You: "create a video on eigenvalues"
42
+
43
+ Claude:
44
+ 1. Loads Manim reference guidelines (get_manim_reference)
45
+ 2. Plans 2-4 scenes with narration scripts
46
+ 3. Writes Manim Python code for each scene
47
+ 4. Calls render_video with all scenes
48
+ -> TTS pre-synthesizes all voiceovers
49
+ -> scenes render in parallel
50
+ -> concatenated into one video
51
+ 5. Inline video player appears in chat
52
+ ```
53
+
54
+ ## Requirements
55
+
56
+ - **Node.js 18+** — for running the MCP server
57
+ - **Python 3.12+** — for Manim rendering (auto-installed into `~/.manim-mcp/.venv`)
58
+ - **ffmpeg** — for video concatenation (`brew install ffmpeg` on macOS)
59
+
60
+ Everything else (Manim, voiceover, TTS models, LaTeX) is automatically installed on first run.
61
+
62
+ ### Optional: Premium Voice
63
+
64
+ For premium multi-language voiceover via ElevenLabs, add your API key:
65
+
66
+ ```json
67
+ {
68
+ "mcpServers": {
69
+ "manim": {
70
+ "command": "npx",
71
+ "args": ["-y", "manim-mcp@latest", "--stdio"],
72
+ "env": {
73
+ "ELEVEN_API_KEY": "sk_your_key_here",
74
+ "PREFER_ELEVENLABS": "1"
75
+ }
76
+ }
77
+ }
78
+ }
79
+ ```
80
+
81
+ ## Language Support
82
+
83
+ | Engine | Languages | Notes |
84
+ |--------|-----------|-------|
85
+ | Kokoro (default) | English, Chinese, Japanese, Spanish, French, Hindi, Italian, Portuguese | Local, fast, free |
86
+ | Piper | German, Russian, Dutch, Polish, Czech, Turkish, Arabic, Hungarian | Local, free |
87
+ | ElevenLabs | All languages | Requires API key |
88
+
89
+ ## Development
90
+
91
+ ```bash
92
+ git clone https://github.com/zcsabbagh/manim-mcp.git
93
+ cd manim-mcp
94
+ npm install
95
+ npm run build
96
+
97
+ # Point Claude Desktop at local build:
98
+ # "command": "node",
99
+ # "args": ["/path/to/manim-mcp/dist/index.js", "--stdio"]
100
+ ```
101
+
102
+ ## License
103
+
104
+ MIT
package/dist/demo.mp4 ADDED
Binary file
package/dist/index.js ADDED
@@ -0,0 +1,65 @@
1
+ #!/usr/bin/env node
2
+
3
+ // main.ts
4
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
+ import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js";
6
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
7
+ import cors from "cors";
8
+ import { createServer } from "./server.js";
9
+ async function startStreamableHTTPServer(createServerFn) {
10
+ const port = parseInt(process.env.PORT ?? "3001", 10);
11
+ const app = createMcpExpressApp({ host: "0.0.0.0" });
12
+ app.use(cors());
13
+ app.all("/mcp", async (req, res) => {
14
+ const server = createServerFn();
15
+ const transport = new StreamableHTTPServerTransport({
16
+ sessionIdGenerator: void 0
17
+ });
18
+ res.on("close", () => {
19
+ transport.close().catch(() => {
20
+ });
21
+ server.close().catch(() => {
22
+ });
23
+ });
24
+ try {
25
+ await server.connect(transport);
26
+ await transport.handleRequest(req, res, req.body);
27
+ } catch (error) {
28
+ console.error("MCP error:", error);
29
+ if (!res.headersSent) {
30
+ res.status(500).json({
31
+ jsonrpc: "2.0",
32
+ error: { code: -32603, message: "Internal server error" },
33
+ id: null
34
+ });
35
+ }
36
+ }
37
+ });
38
+ const httpServer = app.listen(port, () => {
39
+ console.log(`Manim MCP server listening on http://localhost:${port}/mcp`);
40
+ });
41
+ const shutdown = () => {
42
+ console.log("\nShutting down...");
43
+ httpServer.close(() => process.exit(0));
44
+ };
45
+ process.on("SIGINT", shutdown);
46
+ process.on("SIGTERM", shutdown);
47
+ }
48
+ async function startStdioServer(createServerFn) {
49
+ await createServerFn().connect(new StdioServerTransport());
50
+ }
51
+ async function main() {
52
+ if (process.argv.includes("--stdio")) {
53
+ await startStdioServer(createServer);
54
+ } else {
55
+ await startStreamableHTTPServer(createServer);
56
+ }
57
+ }
58
+ main().catch((e) => {
59
+ console.error(e);
60
+ process.exit(1);
61
+ });
62
+ export {
63
+ startStdioServer,
64
+ startStreamableHTTPServer
65
+ };