Manim-Slides MCP Server
This server enables AI agents to generate, render, orchestrate, compile, preview, and serve interactive Manim-slides presentations.
Execute Manim code:
execute_manim_coderuns Slide/Scene Python code headlessly, with scene selection, quality levels, timeouts, render caching, and progress notifications.Compile presentations:
compile_presentationconverts rendered assets into HTML/Reveal.js, PDF, PPTX, or ZIP formats.Export Reveal.js HTML:
export_revealjs_htmlprovides typed options for themes, transitions, controls, slide numbers, deep linking, looping, and offline/one-file embedding.Preview slides:
preview_slideextracts a single slide as PNG/JPG/WebP image, MP4 video snippet, or animated GIF without compiling the full deck.List scenes:
list_scenesdiscovers rendered scenes, slide counts, and metadata in the workspace.Serve previews:
serve_revealjs_htmlstarts a local HTTP server and can open the deck in a browser;stop_preview_serverstops running preview servers.Verify connectivity:
hello_worldchecks client-server MCP communication.Access built-in resources:
status://server,revealjs://config, andslides://listexpose server telemetry, configuration options, and slide inventory.
Enables compilation of Manim slide animations into interactive HTML presentations using Reveal.js.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Manim-Slides MCP ServerCreate a presentation about the water cycle and compile it to HTML"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Manim-Slides MCP Server
Overview
While traditional AI coding assistants can write Manim code, executing that code and structuring it into a readable presentation format has remained a manual process. This MCP server bridges the gap by providing AI clients (like Claude Desktop, Cursor, or Antigravity) with direct tools to:
Execute Manim Scripts: Dynamically run generated Manim code safely.
Handle Slides Orchestration: Natively support the
Slideclass for presentation logic.Compile Presentations: Convert rendered animations into interactive HTML presentations (Reveal.js) directly from the AI prompt.
Related MCP server: mcp-manimgl
Demo

Features
Direct Code Execution: Send Python code containing Manim
Slideclasses; the server handles temporary file creation, execution, and cleanup.Error Feedback Loop: Captures standard output and runtime exceptions, feeding them back to the AI for autonomous debugging.
Live Render Progress: Streams rendered-frame percentage updates to the client via
notifications/progress.Render Caching: Content-hashes each render request (code + scenes + quality) to skip re-rendering unchanged slides, reusing previously rendered media from
.render_cache.HTML/Reveal.js Export: Seamlessly compiles the generated video assets into a fully functional interactive web presentation.
One-Click Browser Preview: Serves the exported Reveal.js HTML on an ephemeral local HTTP server so it can be opened in a browser with a single call.
State Management: Persists generated media in structured workspace directories for easy access.
Prerequisites
Ensure your system has the following installed:
Python 3.10+
uv (dependency and environment management)
Manim Community Edition (Requires FFmpeg and LaTeX)
Installation
git clone https://github.com/antoniomachuca/MCP-Manim-Slides.git
cd MCP-Manim-Slides
# Install uv if needed: https://docs.astral.sh/uv/getting-started/installation/
# Create the environment and install the project plus dev dependencies
uv sync --extra devConfiguration
To integrate this server with an MCP-compatible client (e.g., Claude Desktop, Cursor, Antigravity), add the following to your client configuration JSON:
{
"mcpServers": {
"manim-slides": {
"command": "/absolute/path/to/MCP-Manim-Slides/.venv/bin/python",
"args": [
"/absolute/path/to/MCP-Manim-Slides/mcp_manim_slides/server.py"
],
"env": {
"WORKSPACE_DIR": "/path/to/your/output/directory"
}
}
}
}Available MCP Tools & Resources
Tools (@mcp.tool)
hello_world(name: str = "World"): Connectivity check tool to verify client-server MCP communication.execute_manim_code(code: str, scenes: list[str] | None = None, quality: str = "l", media_dir: str | None = None, timeout: int = 600, use_cache: bool = True): Writes the provided Manim code to a secure temporary script, renders the scenes headlessly viamanim-slides render, and returns paths to produced media files. Caches rendered output by a content hash ofcode/scenes/qualityand skips re-rendering unchanged requests unlessuse_cache=False.compile_presentation(scenes: list[str], dest: str, folder: str = "slides", output_format: str = "auto", config: dict[str, str] | None = None, one_file: bool = False, workspace_dir: str | None = None, timeout: int = 300): Compiles rendered slide assets into an interactive presentation viamanim-slides convert(supportshtml/Reveal.js,pdf,pptx,zip, custom Reveal.js themes and transition configs).export_revealjs_html(scenes: list[str], dest: str, folder: str = "slides", theme: str = "black", transition: str = "none", transition_speed: str = "default", controls: bool = False, progress: bool = False, slide_number: bool = False, hash: bool = False, loop: bool = False, title: str | None = None, config: dict[str, str] | None = None, one_file: bool = False, offline: bool = False, workspace_dir: str | None = None, timeout: int = 300): First-class Reveal.js HTML export viamanim-slides convert --to html, with typed configuration for themes, transitions, navigation controls, slide numbers, deep linking, looping, and offline/one-file embedding.preview_slide(scene: str, slide_index: int = 0, output_format: str = "png", folder: str = "slides", workspace_dir: str | None = None, timeout: int = 120): Extracts a single slide preview (image framepng/jpg/webp, video snippetmp4, or animatedgif) via FFmpeg for rapid visual validation without compiling the full presentation.list_scenes(folder: str = "slides", workspace_dir: str | None = None): Discovers and lists all rendered scenes, slide counts, and metadata available in the workspace.serve_revealjs_html(dest: str, workspace_dir: str | None = None, host: str = "127.0.0.1", port: int | None = None, open_browser: bool = True): Serves an exported Reveal.js HTML deck on an ephemeral local HTTP server for one-click browser preview. Returns the preview URL and optionally opens it in the default browser.stop_preview_server(port: int | None = None): Stops a running ephemeral preview server by port, or all preview servers when no port is given.
Resources (@mcp.resource)
status://server: Telemetry resource returning current server status, Python version, and environment details.revealjs://config: Lists supported Reveal.js HTML export options (themes, transitions, transition speeds, boolean toggles, and defaults).slides://list: Resource listing all rendered slide configurations and metadata in the active workspace.
License
This project is licensed under the MIT License.
Available Tools
8 toolscompile_presentationA
Compile rendered Manim-Slides scenes using manim-slides convert.
Wraps ``manim-slides convert`` to turn rendered slide assets into an
interactive presentation (e.g., Reveal.js HTML, PDF, or PPTX).
Args:
scenes: Names of the rendered Scene/Slide classes to include, in order.
dest: Destination path for the compiled presentation
(e.g., "presentation.html"). The format is inferred from the
extension when ``output_format`` is "auto".
folder: Directory containing the rendered slide assets (default "slides").
output_format: Conversion format: "auto", "html", "pdf", "pptx", or "zip".
config: Extra converter options as key/value pairs
(e.g., {"slide_number": "true"}).
one_file: Embed all local assets (e.g., videos) into a single output file.
workspace_dir: Working directory for the conversion. Defaults to the
``WORKSPACE_DIR`` environment variable or the current directory.
timeout: Maximum time in seconds to wait for the conversion.
Returns:
A JSON string with the conversion status, output destination,
executed command, and captured stdout/stderr.
| Name | Required | Description | Default |
|---|---|---|---|
| dest | Yes | ||
| config | No | ||
| folder | No | slides | |
| scenes | Yes | ||
| timeout | No | ||
| one_file | No | ||
| output_format | No | auto | |
| workspace_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers substantial behavioral detail: it wraps an external command, returns a JSON status string with the executed command and stdout/stderr, infers output format from extension, embeds assets with one_file, and respects workspace_dir and timeout defaults. This goes well beyond a terse 'Compiles a presentation' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-sentence summary, followed by a compact 'Wraps ...' clarification and a structured Args block. For an 8-parameter tool this is appropriately sized, and every section adds value without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, no annotations, and no schema descriptions, this description is complete: it explains input prerequisites, output format behavior, file location, environment default, timeout, and return value. It provides enough information for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the Args section documents all 8 parameters with semantic meaning: scenes, dest, folder, output_format, config, one_file, workspace_dir, and timeout. It adds examples and default behavior, fully compensating for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Compile rendered Manim-Slides scenes using manim-slides convert.' It further clarifies that it produces interactive presentation assets such as Reveal.js HTML, PDF, or PPTX, which clearly distinguishes this compilation tool from sibling rendering, preview, and serving tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context by explaining that this tool consumes rendered slide assets and turns them into an interactive presentation, implying it should be used after rendering and before serving. However, it does not explicitly name alternatives or state when-not-to-use conditions relative to sibling tools like export_revealjs_html or serve_revealjs_html.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_manim_codeA
Execute Manim-Slides Python code and render the resulting scenes.
Writes the provided code to a secure temporary script, renders it with
``manim-slides render`` (headless, no preview popup), and returns the
produced media files. Rendered-frame percentages are streamed to the client
as ``notifications/progress`` updates while rendering is in progress.
Renders are cached by a content hash of ``code``, ``scenes``, and
``quality``: an unchanged request reuses the previously rendered media
instead of re-rendering.
Args:
code: Python source code defining one or more Manim Scene/Slide classes.
scenes: Names of the Scene/Slide classes to render. If omitted or empty,
all scenes in the file are rendered.
quality: Render quality: "l" (low), "m" (medium), "h" (high),
"p" (2K), or "k" (4K). Defaults to "l".
media_dir: Directory where rendered media is stored. Defaults to the
``WORKSPACE_DIR`` environment variable or a temporary directory.
timeout: Maximum time in seconds to wait for rendering.
use_cache: When True, reuse previously rendered media for unchanged
requests instead of re-rendering. Defaults to True.
Returns:
A JSON string with the render status, produced media file paths,
executed command, and captured stdout/stderr. A cache hit sets
``cached`` to True and omits the command.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| scenes | No | ||
| quality | No | l | |
| timeout | No | ||
| media_dir | No | ||
| use_cache | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers behavioral traits: writes to a secure temporary script, renders headless, streams progress notifications, caches by content hash, and returns a JSON with status, files, command, and stdout/stderr. It also explains cache hit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the purpose, followed by behavior notes, caching details, and a clear Args list. It is detailed but not redundant, with each sentence adding necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters and no annotations, the description is comprehensive: it explains security, rendering mode, progress streaming, caching, timeout handling, parameter options, and the exact return format. It leaves no critical gaps, especially since an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All six parameters are described in depth in the Args section, including defaults, allowed quality values, media_dir fallback to environment variable, timeout meaning, and use_cache semantics. This significantly exceeds the schema's basic type/default info, compensating for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Executes Manim-Slides Python code and renders the resulting scenes,' which is a specific verb+resource pair. It distinguishes from siblings like compile_presentation or preview_slide by focusing on execution and rendering of code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context about headless rendering, caching, and progress updates but does not explicitly mention when to use this tool versus alternatives like preview_slide or compile_presentation. Usage is implied but not clearly contrasted with other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_revealjs_htmlA
Export rendered Manim-Slides scenes to an interactive Reveal.js HTML deck.
Wraps ``manim-slides convert --to html`` with first-class Reveal.js
configuration for themes, transitions, and navigation controls.
Args:
scenes: Names of the rendered Scene/Slide classes to include, in order.
dest: Destination path for the exported HTML deck
(e.g., "presentation.html").
folder: Directory containing the rendered slide assets (default "slides").
theme: Reveal.js theme: "black", "white", "league", "beige", "sky",
"night", "serif", "simple", "solarized", "blood", "moon", or
"dracula". Defaults to "black".
transition: Slide transition: "none", "fade", "slide", "convex",
"concave", or "zoom". Defaults to "none".
transition_speed: Transition speed: "default", "fast", or "slow".
controls: Show navigation control arrows in the corner.
progress: Show a presentation progress bar.
slide_number: Display the current slide number.
hash: Add the current slide to the URL hash for deep linking.
loop: Loop the presentation.
title: Presentation title used in the browser tab.
config: Extra Reveal.js converter options as key/value pairs
(e.g., {"background_color": "white"}).
one_file: Embed all local assets (e.g., videos) into a single HTML file.
offline: Download remote Reveal.js assets for offline viewing.
workspace_dir: Working directory for the conversion. Defaults to the
``WORKSPACE_DIR`` environment variable or the current directory.
timeout: Maximum time in seconds to wait for the conversion.
Returns:
A JSON string with the export status, output destination,
executed command, and captured stdout/stderr.
| Name | Required | Description | Default |
|---|---|---|---|
| dest | Yes | ||
| hash | No | ||
| loop | No | ||
| theme | No | black | |
| title | No | ||
| config | No | ||
| folder | No | slides | |
| scenes | Yes | ||
| offline | No | ||
| timeout | No | ||
| controls | No | ||
| one_file | No | ||
| progress | No | ||
| transition | No | none | |
| slide_number | No | ||
| workspace_dir | No | ||
| transition_speed | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden and does a solid job: it discloses that it wraps 'manim-slides convert --to html', describes asset embedding with one_file and offline downloading, and returns captured stdout/stderr plus the executed command. It does not explicitly mention overwrite behavior or failure modes, so it is not a perfect 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with an intro, an Args section, and a Returns section. Despite its length, every line adds useful semantic information required for a 17-parameter tool, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (17 parameters, no annotations, no inline schema descriptions), the description is fully sufficient: it covers all parameters, provides defaults and allowed values, and describes the JSON return value. This is enough for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description explains every parameter in plain language and even enumerates valid values for theme, transition, and transition_speed. This goes far beyond the bare types and defaults in the input schema, giving the agent actionable semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Export rendered Manim-Slides scenes to an interactive Reveal.js HTML deck.' It clearly distinguishes itself from siblings like serve_revealjs_html and compile_presentation by stating the export-oriented goal and the underlying conversion command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it clear this is for exporting already-rendered scenes to HTML, implying it should be used after rendering and when a static Reveal.js deck is needed. It does not explicitly name alternatives or state when not to use it, but the context is strong enough for an agent to infer appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hello_worldA
A basic Hello World tool to verify client-server communication.
Args:
name: The name of the person or entity to greet. Defaults to 'World'.
Returns:
A greeting message confirming successful MCP communication.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | World |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explicitly states the return value (a greeting message confirming communication) and implies a non-destructive, read-only operation. It could note it has no side effects, but for a simple hello world tool, it is sufficiently transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with clear 'Args' and 'Returns' sections, no fluff, and front-loaded purpose. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is very simple, has an output schema, and the description fully explains what it does and what it returns. For its purpose and complexity, the description is complete and adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no description for the 'name' parameter (only title and default), and schema description coverage is 0%. The description compensates fully by explaining the parameter's meaning and default, adding semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'verifies client-server communication' through a basic greeting, using a specific verb and resource. It is easily distinguishable from sibling tools that handle presentations, compilation, and previews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that the tool is for verifying communication between client and server. It does not explicitly mention exclusions or alternatives, but given its simple nature and distinct purpose among siblings, this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scenesA
Discover rendered scenes and their slide metadata in the workspace.
Reads the slide configuration files (``<scene>.json``) produced by
``manim-slides render`` and returns structured metadata for each scene,
including slide counts, resolution, and per-slide media files.
Args:
folder: Directory containing the rendered slide assets (default "slides").
workspace_dir: Working directory. Defaults to the ``WORKSPACE_DIR``
environment variable or the current directory.
Returns:
A JSON string listing the discovered scenes and their slide metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | slides | |
| workspace_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It transparently states that the tool reads configuration files, returns a JSON string, and describes the metadata content (slide counts, resolution, media files). It also explains the default directory resolution for 'workspace_dir'. This is adequate for a read-only discovery tool, though it does not cover edge cases like missing folders or empty scenes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (intro, file source, args, returns). Every sentence adds value: it names the exact file format, the producing command, default behavior, and return type. No filler or redundancy exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two optional parameters and a clear return type, the description is complete enough. It explains the input files, the arguments, and the output. It could mention error behavior (e.g., missing folder) but that is a minor gap given the tool's simplicity and the presence of a return schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. The 'Args' section provides natural language semantics for both parameters: 'folder' specifies the directory with rendered assets, and 'workspace_dir' explains the environment variable fallback. This adds meaningful meaning beyond the schema's type/default information, though it could still elaborate on path normalization or validation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Discovers rendered scenes and their slide metadata' with a specific verb and resource. It further distinguishes itself from siblings by explaining it reads '<scene>.json' files produced by 'manim-slides render', making its role as an inspection/discovery tool unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says the tool reads files produced by 'manim-slides render', providing clear context for when it should be used (after rendering). It does not explicitly name alternatives or exclusions, but the context is strong enough that an agent can infer it complements preview/export/compile tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_slideA
Extract a single-slide preview (image or video) without compiling the deck.
Reads the rendered slide configuration for ``scene`` and produces a preview
of the slide at ``slide_index``: an image frame (png/jpg/webp), a video
snippet (mp4), or an animated GIF.
Args:
scene: Name of the rendered Scene/Slide class to preview.
slide_index: Zero-based index of the slide within the scene.
output_format: Preview format: "png", "jpg", "jpeg", "webp", "mp4",
or "gif". Defaults to "png".
folder: Directory containing the rendered slide assets (default "slides").
workspace_dir: Working directory. Defaults to the ``WORKSPACE_DIR``
environment variable or the current directory.
timeout: Maximum time in seconds to wait for ffmpeg preview generation.
Returns:
A JSON string with the preview status, output path, and format.
| Name | Required | Description | Default |
|---|---|---|---|
| scene | Yes | ||
| folder | No | slides | |
| timeout | No | ||
| slide_index | No | ||
| output_format | No | png | |
| workspace_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavioral traits. It mentions it 'reads the rendered slide configuration' and 'produces a preview', implying a non-destructive read operation, and explicitly says 'without compiling' which suggests no heavy side effects. However, it doesn't clarify whether it requires prior compilation, network access, or any side effects like caching. It doesn't state if it's read-only or if it writes temporary files. So it's partially transparent but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise, clear, and front-loaded. It conveys key purpose and input semantics in two sentences, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and 0% schema coverage, the description provides essential info but lacks detail on boundary cases, exact parameter formats, and potential side effects. Output schema exists but not detailed here. It's adequate but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has zero description coverage for 6 parameters. The description explains scene, slide_index, and output_format (implies image/video/gif formats), but workspace_dir is not explained. It adds meaning beyond schema by explaining that scene is a rendered scene, and slide_index is the slide to extract. It adds enough to use the tool, but incomplete for all params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Extract a single-slide preview' from a slide deck without compiling. This specific verb+resource phrasing distinguishes it from siblings like compile_presentation and serve_revealjs_html, which handle the full compilation/serving lifecycle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'without compiling the deck' which gives a clear context for when to use this tool (quick preview). However, it doesn't explicitly state when NOT to use it or mention alternatives like list_scenes or compile_presentation. It's adequate but not explicit about exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serve_revealjs_htmlA
Serve an exported Reveal.js HTML deck on a local HTTP server for preview.
Starts an ephemeral background HTTP server that serves the workspace so the
deck's relative slide assets resolve, and returns a URL that can be opened
in a browser (optionally opening it automatically).
Args:
dest: Path to the exported HTML deck (e.g., "presentation.html"). Resolved
relative to ``workspace_dir`` when not absolute.
workspace_dir: Working directory. Defaults to the ``WORKSPACE_DIR``
environment variable or the current directory.
host: Bind address for the server (default "127.0.0.1").
port: Port to bind. When None, an ephemeral OS-assigned port is used.
open_browser: When True, attempt to open the URL in the default browser.
Returns:
A JSON string with the preview URL, bound port, served directory, and
whether an existing server was reused.
| Name | Required | Description | Default |
|---|---|---|---|
| dest | Yes | ||
| host | No | 127.0.0.1 | |
| port | No | ||
| open_browser | No | ||
| workspace_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the transparency burden and does so well: it discloses that it starts an ephemeral background HTTP server, serves the workspace so assets resolve, optionally opens a browser, and may reuse an existing server. It does not explicitly state the full server lifecycle or when to call stop_previews_server, but the behavior is generally clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured into purpose, Args, and Returns sections. Each sentence adds meaningful context about behavior or parameters, and there is very little fluff or tautological language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient despite only one required parameter and an output schema already being present. It covers key context about the preview server, asset resolution, browser opening, reuse behavior, and return content. There are no major gaps for using this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description fully compensates for the 0% schema coverage by explaining every parameter: dest, workspace_dir, host, port, and open_browser, including defaults and behaviors such as ephemeral ports and resolution relative to workspace_dir. This goes well beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it serves an exported Reveal.js HTML deck on a local HTTP server for preview. It uses a specific verb and resource, and it distinguishes itself from sibling tools like export_revealjs_html, stop_preview_server, and preview_slide.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is for previewing an exported Reveal.js deck via a local URL. It implies when to use it (after export, before final review) but does not explicitly mention alternatives or exclusion conditions such as using stop_preview_server for cleanup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_preview_serverA
Stop running ephemeral preview servers started by serve_revealjs_html.
Args:
port: Port of the server to stop. When omitted, all preview servers
started by this MCP process are stopped.
Returns:
A JSON string listing the stopped ports and the number of remaining
active preview servers.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that servers are ephemeral and the action stops them, and it describes the return value (JSON string with stopped ports and remaining count). It does not detail side effects like irreversible termination, but the stopping action is intuitive and clearly implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct and well-structured: purpose statement, args section, and returns section. No redundant or filler text; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter, the description covers purpose, parameter semantics, and return format. It doesn't address edge cases like nonexistent ports or error handling, but these are minor and the output schema exists. Overall, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully explains the parameter: 'Port of the server to stop. When omitted, all preview servers started by this MCP process are stopped.' This adds precise meaning beyond the schema, clarifying default behavior and scope.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool stops ephemeral preview servers started by serve_revealjs_html. It uses a specific verb (stop) and identifies the resource (preview servers), distinguishing it from siblings like serve_revealjs_html and preview_slide. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to stop preview servers) and details the port parameter behavior, including the 'all servers' default when omitted. It does not explicitly contrast with alternatives, but given the complementary nature with serve_revealjs_html and lack of other stop tools, context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have clear, distinct purposes: hello_world verifies connectivity, compile_presentation generates decks, export_revealjs_html handles HTML-specific export, and the remaining tools cover serving, preview, listing, and execution. The only potential confusion is between compile_presentation and export_revealjs_html, since the latter is a specialized subset of the former, but their descriptions make the distinction clear enough.
The tool names follow a consistent pattern of verb_noun or verb_adjective_noun: hello_world, compile_presentation, export_revealjs_html, serve_revealjs_html, stop_preview_server, list_scenes, preview_slide, and execute_manim_code. All use lowercase_with_underscores, and the verbs (compile, export, serve, stop, list, preview, execute) are action-oriented and clear.
With 8 tools, the server covers the core Manim-Slides workflow: render code, list scenes, preview slides, compile presentations, export HTML, serve HTML, and utility. This is a reasonable number and well-scoped for the domain, though hello_world is arguably unnecessary. No excessive bloat or missing critical pieces for the basic presentation creation pipeline.
The toolset covers the main workflow: execute code to render scenes, list scenes, preview individual slides, compile to presentations, and serve/stop the preview server. However, there are gaps: no tool to update or delete existing rendered assets, no way to manage the server lifecycle beyond stopping previews, and no tool for inspecting render configurations or getting help about available scenes in more detail.
Maintenance
Related MCP Connectors
AI presentation and report generation: slides, diagrams, PPTX export, live preview MCP App.
Presentations.AI MCP server — create designed slide decks from a topic, text, or document.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to create professional Slidev presentations and export them to PDF directly through natural language commands. Supports multiple themes, code syntax highlighting, and various slide layouts for business, technical, and educational content.1MIT
- AlicenseCqualityCmaintenanceExposes manimgl mathematical animation functionality as MCP tools, enabling LLMs to create animated scenes with narration and background music, and render to video.58MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI-powered slide deck creation using natural language, allowing users to generate, edit, and manage presentations through MCP clients like Cursor and Claude Code.13MIT
- AlicenseNot gradedqualityAmaintenanceEnables agents to create, read, and edit slide decks as plain markdown files, with support for drawing annotations, and handles deck management through MCP tools.72MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/antoniomachuca/MCP-Manim-Slides'
If you have feedback or need assistance with the MCP directory API, please join our Discord server