Skip to main content
Glama

Manim MCP Server

A Model Context Protocol (MCP) server for compiling and serving Manim animations.

🎯 Two Server Modes

  1. HTTP API Server (app/server.py) - For REST API calls, testing, and web integration

  2. Standard MCP Server (mcp_server.py) - For Claude Desktop, Dify, and other MCP clients

See MCP_SETUP.md for detailed MCP configuration instructions.

A FastAPI-based MCP (Model Control Protocol) server that provides two main tools:

  1. Manim Compile: Compile Manim code and return a video ID

  2. Video Download: Download a compiled Manim video by ID

Features

  • Secure authentication using JWT tokens

  • LangGraph integration for workflow management

  • Support for different video qualities and resolutions

  • Simple API endpoints for integration

Prerequisites

  • Python 3.8+

  • Manim Community Edition (v0.19.0 or later)

  • FFmpeg

  • Required Python packages (see requirements.txt)

Installation

  1. Clone the repository:

    git clone <repository-url>
    cd manim-mcp-server
  2. Create a virtual environment and activate it:

    python -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
  3. Install the required packages:

    pip install -r requirements.txt
  4. Install Manim and its dependencies:

    pip install manim

Configuration

  1. Set up environment variables (create a .env file):

    SECRET_KEY=your-secret-key-here
    ACCESS_TOKEN_EXPIRE_MINUTES=30

Running the Server

Option 1: Using the startup script (recommended)

./start_server.sh

Option 2: Using uvicorn directly

uvicorn app.server:app --reload

The server will be available at http://localhost:8000

API Documentation

Once the server is running, you can access the interactive API documentation at:

  • Swagger UI: http://localhost:8000/docs

  • ReDoc: http://localhost:8000/redoc

API Endpoints

Root

  • GET / - Get server information and available tools

Manim Compilation

  • POST /tools/manim_compile - Compile Manim code

    {
      "parameters": {
        "code": "from manim import *\nclass Example(Scene):\n    def construct(self):\n        circle = Circle()\n        self.play(Create(circle))",
        "scene_name": "Example"
      }
    }

    Parameters:

    • code (required): The Manim Python code to compile

    • scene_name (required): Name of the specific scene class to compile

Video Download

  • GET /videos/{file_id} - Download a compiled video by ID

LangGraph Compatible Endpoints

  • GET /v1/tools - List all available tools

  • POST /v1/tools/call - Call a tool (LangGraph compatible)

    {
      "tool": "manim_compile",
      "parameters": {
        "code": "from manim import *\nclass Example(Scene):\n    def construct(self):\n        circle = Circle()\n        self.play(Create(circle))"
      }
    }

Example Usage

1. Check server status

curl http://localhost:8000/

2. Compile Manim code

curl -X 'POST' \
  'http://localhost:8000/tools/manim_compile' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "parameters": {
      "code": "from manim import *\nclass Example(Scene):\n    def construct(self):\n        circle = Circle()\n        self.play(Create(circle))"
    }
  }'

3. Download the compiled video

# Replace VIDEO_ID with the file_id from the compile response
curl -X 'GET' \
  'http://localhost:8000/videos/VIDEO_ID' \
  --output output.mp4

4. Compile a specific scene by name

curl -X 'POST' \
  'http://localhost:8000/tools/manim_compile' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "parameters": {
      "code": "from manim import *\nclass Scene1(Scene):\n    def construct(self):\n        circle = Circle()\n        self.play(Create(circle))\n\nclass Scene2(Scene):\n    def construct(self):\n        square = Square()\n        self.play(Create(square))",
      "scene_name": "Scene1"
    }
  }'

5. List available tools

curl http://localhost:8000/v1/tools

6. Run the example script

python example_usage.py

Testing

See TESTING.md for detailed testing instructions.

Quick test:

# Run tool tests (no server needed)
python test_tools.py

# Run API tests (server must be running)
python test_api.py

Security

  • Always use HTTPS in production

  • Consider adding authentication for production deployments

  • Validate and sanitize all user inputs

  • Set appropriate CORS policies for your use case

License

This project is licensed under the MIT License - see the LICENSE file for details.

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/qingpengchen2011/manim-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server