MCP server for rendering HTML slides to PNG, WebP, PDF, and PPTX — use with Claude Desktop or Cursor
Slideshot has 6 tools with explicit registrations, schemas, and descriptions. Naming is clear (discover_themes, create_slides, render_slides, list_themes, edit_slides, health_check). Descriptions are detailed and workflow-aware, ranging 150 - 400 chars. However, input schemas are largely empty objects (discover_themes, list_themes, health_check have {} inputs), and parameter descriptions are missing for tools with actual parameters (create_slides, render_slides, edit_slides). Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present and correct. Error handling is implicit in descriptions but not formalized. Output schemas are not documented in the visible code.
Create slides. IMPORTANT: Use mode=default unless the user explicitly chose token_saver. mode=default = AI writes full HTML (best quality). mode=token_saver = AI sends JSON, server uses basic templates. REQUIRES discover_themes first AND user must have confirmed the data outline. After this tool saves the HTML, you MUST show the htmlPath as a code preview artifact. Then STOP and ask the user to confirm. DO NOT call render_slides until the user explicitly confirms.
MANDATORY first step — all other tools REJECT until this is called. Returns themes, orientation presets, token-usage modes, and output formats. Use ONLY the native selector prompts from the "ask" array — DO NOT render themes as a separate markdown list. DO NOT ask how many slides (you decide based on topic). After user picks options, show a data outline of proposed slides and WAIT for confirmation before calling create_slides.
Token-efficient partial edits on a previously-generated HTML deck. Use this INSTEAD of regenerating the whole deck for small changes — it saves 60-90% tokens vs a full rewrite. Operations: replace_slide (swap one slide block by 1-indexed slideIndex), patch_css (append CSS rules to <style>), swap_token (replace a CSS variable's value, e.g. {"--coral": "#FF0000"}), patch_class (add/remove a class on a specific slide, e.g. {"add": "dark"}). Reads from cache or htmlPath; saves the updated HTML and returns the new htmlPath. After editing, show the htmlPath as a preview artifact and STOP — do NOT call render_slides until the user confirms.
Verify Puppeteer/Chromium can launch. Use when render fails.
Three tools (discover_themes, list_themes, health_check) have empty input schemas ({}). This prevents LLMs from understanding what parameters are accepted.
create_slides, render_slides, and edit_slides accept parameters (mode, html, htmlPath, width, height, etc.) but parameter descriptions are not visible in the source code. LLMs cannot infer parameter meaning from names alone (e.g., does 'mode' mean rendering mode, token mode, or output mode?).
Output schemas are not documented in the visible code. Tool descriptions mention return values (e.g., 'Returns themes, orientation presets, token-usage modes, and output formats' for discover_themes; 'Returns file paths on disk' for render_slides), but structured output schemas are not declared. LLMs cannot plan downstream tool calls without knowing response field names and types.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Idempotent read-only listing of all available themes (8+). Unlike discover_themes, this does NOT start a slide-creation workflow — call it any time the user asks "what themes are there?" mid-conversation. Returns the same tiered theme catalog (primary/secondary). Models MUST present every theme returned, never truncate.
Final render to PDF/WebP/PNG/PPTX. Accepts html string OR htmlPath. Supports width, height, selector, scale, webpQuality, orientation, pptxMode, pptxFilename, slideRange. NEVER call render_slides in the same turn as create_slides. When the user provides an existing HTML file path, pass it as htmlPath and call this tool directly — no discover_themes or create_slides needed. For the full slide-creation workflow, REQUIRES both discover_themes AND create_slides first, and ONLY call AFTER user confirms the preview. Returns file paths on disk.
Tool descriptions embed workflow instructions ('MANDATORY first step', 'REQUIRES discover_themes first', 'DO NOT call render_slides in the same turn') that should be enforced by the server or documented as tool dependencies, not embedded in descriptions. This makes the descriptions longer and harder for LLMs to parse.
Error handling is not formalized. Descriptions mention failure modes (e.g., 'When render fails' for health_check) but do not provide actionable recovery guidance. No error classification (retryable vs. user-fixable vs. fatal) is visible.