← Back to search

io.github.daedalus/mcp-manimgl

daedalus Scanned 16d ago

MCP server exposing manimgl mathematical animation functionality as tools for LLMs

C
66.1 / 100

Versions

0.1.1latest
first seen Jun 5, 2026
0.1.2
first seen May 19, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 58

set_opacity
annotations: none low

opacity float mobject_id str
get_render_result
annotations: none low

Poll for the result of an async render started by render_scene(). Returns the render result dict when done, or a "still running" status. Keep polling until status is "completed" or "failed". The caller should use exponential backoff between polls: 1s, 2s, 4s, 8s... (cap at 30s). The count resets when the render completes or fails. IMPORTANT: Always use this MCP tool for scene operations. Do NOT write or execute standalone manim scripts. Args: render_id: The render_id returned by render_scene(). Returns: Dictionary with render status and result. Example: >>> get_render_result("abc123def456")

render_id str
next_to
annotations: none low

buff float direction str mobject_id str reference_id str
save_frame
annotations: none low

Save a single frame (image) of the current scene. IMPORTANT: Always use this MCP tool for scene operations. Do NOT write or execute standalone manim scripts. Args: output_path: Path for the output PNG image. If None, uses a temp file. Returns: Dictionary with frame save result including output_path. Example: >>> save_frame("/tmp/frame.png")

output_path string
get_render_status
annotations: none low

Check if manimgl and OpenGL are available for rendering. IMPORTANT: Always use this MCP tool for scene operations. Do NOT write or execute standalone manim scripts. Returns: Dictionary with availability status of manimgl and OpenGL. Example: >>> get_render_status()

align_to
annotations: none low

direction str mobject_id str reference_id str
render_scene
annotations: none low

Render the current scene to a video file. Renders in the background to avoid MCP timeouts. Returns a render_id immediately. Poll get_render_result() with that render_id to check completion and get the output path. POLLING PROTOCOL: Use exponential backoff when polling: - 1st call: sleep 1s, then call get_render_result() - 2nd call: sleep 2s, then call - 3rd call: sleep 4s - Nth call: sleep min(2^(N-1), 30)s Reset the backoff once the render completes or fails. Use verify_video() on the output to inspect the result. IMPORTANT: Always use this MCP tool for rendering. Do NOT write or execute standalone manim scripts for scene operations. Args: output_path: Path for the output video file. If None, uses a temp file. fmt: Output format ("mp4", "gif", "mov"). Returns: Dictionary with render_id and status. Example: >>> render_scene("/tmp/my_animation.mp4", "mp4")

fmt str output_path string
set_color
annotations: none low

color str mobject_id str
verify_video
annotations: none low

Inspect a rendered video file and return its technical properties. Uses ffprobe to extract codec info, streams, duration, resolution, and bitrate. Verifies the file exists and has both video and audio. IMPORTANT: Always use this MCP tool for scene operations. Do NOT write or execute standalone manim scripts. Args: video_path: Path to the video file to inspect. Returns: Dictionary with stream info, duration, resolution, and codecs. Example: >>> verify_video("/tmp/animation.mp4")

video_path str
add_circle
annotations: none low

color str radius float position string fill_opacity float stroke_width float
add_square
annotations: none low

color str position string side_length float fill_opacity float stroke_width float
add_rectangle
annotations: none low

color str width float height float position string fill_opacity float stroke_width float
add_polygon
annotations: none low

color str vertices string fill_opacity float stroke_width float
add_line
annotations: none low

end string color str start string stroke_width float
add_arrow
annotations: none low

end string color str start string stroke_width float
add_dot
annotations: none low

color str point string radius float
add_text
annotations: none low

font str text str color str font_size float
add_tex
annotations: none low

color str font_size float tex_string str
add_function_graph
annotations: none low

color str x_range string function str
add_parametric_curve
annotations: none low

color str t_range string function str
add_coordinate_system
annotations: none low

x_range string y_range string axis_config string
add_vector
annotations: none low

color str vector string
add_labeled_point
annotations: none low

color str label str point string dot_radius float
add_3d_object
annotations: none low

color str properties dict object_type str fill_opacity float
add_brace
annotations: none low

color str label string direction str mobject_id str
add_number_line
annotations: none low

color str x_range string
add_decimal_number
annotations: none low

color str value float font_size float
add_matrix
annotations: none low

rows string color str
move_to
annotations: none low

position string mobject_id str aligned_edge string
shift
annotations: none low

vector string mobject_id str
scale
annotations: none low

mobject_id str about_point string scale_factor float
rotate
annotations: none low

axis string angle float mobject_id str about_point string
animate_transform
annotations: none low

run_time float rate_func str mobject_id str target_config string target_mobject_type string
animate_fade_in
annotations: none low

run_time float mobject_id str shift_direction string
animate_fade_out
annotations: none low

run_time float mobject_id str
animate_grow
annotations: none low

run_time float grow_type str mobject_id str
animate_rotate
annotations: none low

axis string angle string run_time float mobject_id str
animate_scale
annotations: none low

run_time float mobject_id str scale_factor float
animate_shift
annotations: none low

vector string run_time float mobject_id str
animate_indicate
annotations: none low

run_time float mobject_id str
animate_write
annotations: none low

run_time float mobject_id str
animate_set_color
annotations: none low

color str run_time float mobject_id str
animate_move_along_path
annotations: none low

run_time float path_type str mobject_id str path_config string
animate_group
annotations: none low

run_time float group_type str animation_data string
audio_duration
annotations: none low

Get the duration of any audio file in seconds. Accepts audio files (.mp3, .wav, .ogg, .mid) created by the server. Uses ffprobe internally. Args: file_path: Path to the audio file. Returns: Dictionary with the duration in seconds. Example: >>> audio_duration("/tmp/mcp_manimgl/audio/audio_abc123.mp3")

file_path str
add_narration
annotations: none low

Generate and add a text-to-speech narration audio track to the scene. The audio plays at the point in the timeline where this tool is called. Uses Google TTS (gTTS) for voice synthesis. IMPORTANT: Always use MCP tools for scene operations. Args: text: The text to be spoken in the narration. lang: Language code (default: "en"). See gTTS docs for supported codes. Returns: Dictionary with audio_id, file_path, and status. Example: >>> add_narration("Hello, this is a test narration.") >>> add_narration("Bonjour le monde", "fr")

lang str text str
add_background_music
annotations: none low

Add background music to the scene. The music plays from the beginning of the rendered video. Accepts audio files (.mp3, .wav, .ogg) or MIDI files (.mid, .midi). MIDI files are rendered to audio using FluidSynth and a system SoundFont. When narration tracks are also present, the music volume auto-ducks during narration via sidechain compression in post-processing. IMPORTANT: Always use MCP tools for scene operations. Args: file_path: Path to an audio file or MIDI file. volume: Playback volume 0.0-1.0 (default: 0.3). loop: Loop the music to fill the video duration if shorter (default: False). duck_threshold: Sidechain compression threshold for ducking (default: "-24dB"). duck_ratio: Compression ratio for ducking (default: 4.0). duck_attack: Duck attack time in seconds (default: 0.1). duck_release: Duck release time in seconds (default: 0.5). Returns: Dictionary with audio_id, file_path, and status. Example: >>> add_background_music("/path/to/music.mp3", volume=0.3, loop=True) >>> add_background_music("/path/to/song.mid", volume=0.2)

loop bool volume float file_path str duck_ratio float duck_attack float duck_release float duck_threshold str
create_scene
annotations: none low

Create a new manimgl scene with the given configuration. IMPORTANT: Always use MCP tools for scene operations. Do NOT write or execute standalone manim scripts. Args: background_color: Hex color or named color for the background. resolution: Resolution string like "WxH", e.g. "1920x1080". fps: Frames per second for rendering. frame_height: The height of the coordinate frame in manim units. Returns: Scene configuration dictionary with scene ID. Example: >>> create_scene("#1a1a2e", "1920x1080", 60, 8.0)

fps int resolution str frame_height float background_color str
get_scene_info
annotations: none low

Get the current scene's configuration and element counts. IMPORTANT: Always use MCP tools for scene operations. Returns: Scene information including resolution, mobject/animation counts. Example: >>> get_scene_info()

clear_scene
annotations: none low

Remove all mobjects and animations from the current scene. IMPORTANT: Always use MCP tools for scene operations. Returns: True if successful. Example: >>> clear_scene()

add_wait
annotations: none low

Add a wait/pause to the scene timeline. IMPORTANT: Always use MCP tools for scene operations. Args: duration: Duration in seconds to wait. Returns: True if successful. Example: >>> add_wait(2.0)

duration float
save_state
annotations: none low

Save the current scene state for later restoration. IMPORTANT: Always use MCP tools for scene operations. Returns: True if state was saved. Example: >>> save_state()

restore_state
annotations: none low

Restore the scene to a previously saved state. IMPORTANT: Always use MCP tools for scene operations. Returns: True if state was restored, False if no saved state exists. Example: >>> restore_state()

set_camera
annotations: none low

Configure the camera position and/or orientation. IMPORTANT: Always use MCP tools for scene operations. Args: position: Camera position [x, y, z] in 3D space. orientation: Camera orientation as [theta, phi, gamma] in radians. Returns: True if camera was configured. Example: >>> set_camera([0, 0, -5], [0, 0, 0])

position string orientation string
set_config
annotations: none low

Set global rendering configuration parameters. IMPORTANT: Always use MCP tools for scene operations. Args: config: Dictionary with configuration options. Supported keys: background_color, resolution, fps, frame_height. Returns: True if configuration was applied. Example: >>> set_config({"background_color": "#000000", "fps": 60})

config dict
add_custom_code
annotations: none low

Inject custom Python code into the scene script. The code will be inserted inside the construct() method body. Use this for advanced manim functionality not covered by other tools. IMPORTANT: Always use MCP tools for scene operations. Do NOT write or execute standalone manim scripts. Args: code_snippet: Valid Python code to insert in the scene's construct(). Returns: True if code was added. Example: >>> add_custom_code("self.camera.rotate(2 * PI / 3)")

code_snippet str
verify_scene_overlaps
annotations: none low

Detect overlapping visual elements (mobjects) in the current scene. Computes axis-aligned bounding boxes for each mobject based on its stored position and dimension properties (radius, width, height, side_length, font_size). Reports any pair whose bounding boxes intersect. NOTE: Positions are only reliably updated by move_to(). After shift/scale/rotate/next_to/align_to, the stored position may be stale. Text and TeX dimensions are estimated from font_size and character count — actual rendered glyphs may differ. Returns: List of overlap reports, each with the pair of overlapping mobjects, their positions, types, and overlap magnitudes. Example: >>> verify_scene_overlaps()

generate_scene_script
annotations: none low

Generate the full Python script for the current scene. IMPORTANT: Always use MCP tools for scene operations. Do NOT write or execute standalone manim scripts. Use render_scene() and get_render_result() for rendering instead. Returns: The complete Python script as a string. Example: >>> generate_scene_script()

Permissions 3

filesystem low
Server uses filesystem capabilities via: open(), os, pathlib, shutil, tempfile
shell high
Server uses shell capabilities via: subprocess
env_vars low
Server uses env_vars capabilities via: os.environ

Scan Findings 142

low
Tool 'add_polygon' has no annotations annotation_checker · 100%
low
Tool 'render_scene' has no annotations annotation_checker · 100%
low
Tool 'get_render_result' has no annotations annotation_checker · 100%
low
Tool 'save_frame' has no annotations annotation_checker · 100%
low
Tool 'get_render_status' has no annotations annotation_checker · 100%
low
Tool 'verify_video' has no annotations annotation_checker · 100%
low
Tool 'add_circle' has no annotations annotation_checker · 100%
low
Tool 'add_square' has no annotations annotation_checker · 100%
low
Tool 'add_rectangle' has no annotations annotation_checker · 100%
low
Tool 'add_line' has no annotations annotation_checker · 100%
low
Tool 'add_arrow' has no annotations annotation_checker · 100%
low
Tool 'add_dot' has no annotations annotation_checker · 100%
low
Tool 'add_text' has no annotations annotation_checker · 100%
low
Tool 'add_tex' has no annotations annotation_checker · 100%
low
Tool 'add_function_graph' has no annotations annotation_checker · 100%
low
Tool 'add_parametric_curve' has no annotations annotation_checker · 100%
low
Tool 'add_coordinate_system' has no annotations annotation_checker · 100%
low
Tool 'add_vector' has no annotations annotation_checker · 100%
low
Tool 'add_labeled_point' has no annotations annotation_checker · 100%
low
Tool 'add_3d_object' has no annotations annotation_checker · 100%
low
Tool 'add_brace' has no annotations annotation_checker · 100%
low
Tool 'add_number_line' has no annotations annotation_checker · 100%
low
Tool 'add_decimal_number' has no annotations annotation_checker · 100%
low
Tool 'add_matrix' has no annotations annotation_checker · 100%
low
Tool 'move_to' has no annotations annotation_checker · 100%
low
Tool 'shift' has no annotations annotation_checker · 100%
low
Tool 'scale' has no annotations annotation_checker · 100%
low
Tool 'rotate' has no annotations annotation_checker · 100%
low
Tool 'set_color' has no annotations annotation_checker · 100%
low
Tool 'set_opacity' has no annotations annotation_checker · 100%
low
Tool 'next_to' has no annotations annotation_checker · 100%
low
Tool 'align_to' has no annotations annotation_checker · 100%
low
Tool 'animate_transform' has no annotations annotation_checker · 100%
low
Tool 'animate_fade_in' has no annotations annotation_checker · 100%
low
Tool 'animate_fade_out' has no annotations annotation_checker · 100%
low
Tool 'animate_grow' has no annotations annotation_checker · 100%
low
Tool 'animate_rotate' has no annotations annotation_checker · 100%
low
Tool 'animate_scale' has no annotations annotation_checker · 100%
low
Tool 'animate_shift' has no annotations annotation_checker · 100%
low
Tool 'animate_indicate' has no annotations annotation_checker · 100%
low
Tool 'animate_write' has no annotations annotation_checker · 100%
low
Tool 'animate_set_color' has no annotations annotation_checker · 100%
low
Tool 'animate_move_along_path' has no annotations annotation_checker · 100%
low
Tool 'animate_group' has no annotations annotation_checker · 100%
low
Tool 'audio_duration' has no annotations annotation_checker · 100%
low
Tool 'add_narration' has no annotations annotation_checker · 100%
low
Tool 'add_background_music' has no annotations annotation_checker · 100%
low
Tool 'create_scene' has no annotations annotation_checker · 100%
low
Tool 'get_scene_info' has no annotations annotation_checker · 100%
low
Tool 'clear_scene' has no annotations annotation_checker · 100%
low
Tool 'add_wait' has no annotations annotation_checker · 100%
low
Tool 'save_state' has no annotations annotation_checker · 100%
low
Tool 'restore_state' has no annotations annotation_checker · 100%
low
Tool 'set_camera' has no annotations annotation_checker · 100%
low
Tool 'set_config' has no annotations annotation_checker · 100%
low
Tool 'add_custom_code' has no annotations annotation_checker · 100%
low
Tool 'verify_scene_overlaps' has no annotations annotation_checker · 100%
low
Tool 'generate_scene_script' has no annotations annotation_checker · 100%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
info
pyproject.toml metadata manifest_parser · 100%
info
Tool: render_scene manifest_parser · 90%
info
Tool: get_render_result manifest_parser · 90%
info
Tool: save_frame manifest_parser · 90%
info
Tool: get_render_status manifest_parser · 90%
info
Tool: verify_video manifest_parser · 90%
info
Tool: add_circle manifest_parser · 90%
info
Tool: add_square manifest_parser · 90%
info
Tool: add_rectangle manifest_parser · 90%
info
Tool: add_polygon manifest_parser · 90%
info
Tool: add_line manifest_parser · 90%
info
Tool: add_arrow manifest_parser · 90%
info
Tool: add_dot manifest_parser · 90%
info
Tool: add_text manifest_parser · 90%
info
Tool: add_tex manifest_parser · 90%
info
Tool: add_function_graph manifest_parser · 90%
info
Tool: add_parametric_curve manifest_parser · 90%
info
Tool: add_coordinate_system manifest_parser · 90%
info
Tool: add_vector manifest_parser · 90%
info
Tool: add_labeled_point manifest_parser · 90%
info
Tool: add_3d_object manifest_parser · 90%
info
Tool: add_brace manifest_parser · 90%
info
Tool: add_number_line manifest_parser · 90%
info
Tool: add_decimal_number manifest_parser · 90%
info
Tool: add_matrix manifest_parser · 90%
info
Tool: move_to manifest_parser · 90%
info
Tool: shift manifest_parser · 90%
info
Tool: scale manifest_parser · 90%
info
Tool: rotate manifest_parser · 90%
info
Tool: set_color manifest_parser · 90%
info
Tool: set_opacity manifest_parser · 90%
info
Tool: next_to manifest_parser · 90%
info
Tool: align_to manifest_parser · 90%
info
Tool: animate_transform manifest_parser · 90%
info
Tool: animate_fade_in manifest_parser · 90%
info
Tool: animate_fade_out manifest_parser · 90%
info
Tool: animate_grow manifest_parser · 90%
info
Tool: animate_rotate manifest_parser · 90%
info
Tool: animate_scale manifest_parser · 90%
info
Tool: animate_shift manifest_parser · 90%
info
Tool: animate_indicate manifest_parser · 90%
info
Tool: animate_write manifest_parser · 90%
info
Tool: animate_set_color manifest_parser · 90%
info
Tool: animate_move_along_path manifest_parser · 90%
info
Tool: animate_group manifest_parser · 90%
info
Tool: audio_duration manifest_parser · 90%
info
Tool: add_narration manifest_parser · 90%
info
Tool: add_background_music manifest_parser · 90%
info
Tool: create_scene manifest_parser · 90%
info
Tool: get_scene_info manifest_parser · 90%
info
Tool: clear_scene manifest_parser · 90%
info
Tool: add_wait manifest_parser · 90%
info
Tool: save_state manifest_parser · 90%
info
Tool: restore_state manifest_parser · 90%
info
Tool: set_camera manifest_parser · 90%
info
Tool: set_config manifest_parser · 90%
info
Tool: add_custom_code manifest_parser · 90%
info
Tool: verify_scene_overlaps manifest_parser · 90%
info
Tool: generate_scene_script manifest_parser · 90%
info
Required env vars (1) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
low
Permission: filesystem access detected permission_analyzer · 90%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
critical
Tool poisoning in 'render_scene': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'get_render_result': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'save_frame': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'get_render_status': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'verify_video': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'add_narration': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'add_background_music': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'create_scene': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'get_scene_info': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'clear_scene': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'add_wait': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'save_state': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'restore_state': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'set_camera': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'set_config': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'add_custom_code': Directive language: 'always' poisoning · 85%
critical
Tool poisoning in 'generate_scene_script': Directive language: 'always' poisoning · 85%
info
No dependency files found for SBOM generation sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%