MCP server for PowerPoint presentation manipulation via OOXML, providing tools for slide creation, shape management, code syntax highlighting, diagram generation, and LLM-driven presentation choreography
Mixed quality across 26 tools. Strong points: most tools have descriptions (avg ~150 chars, within baseline 194), clear verb-noun naming (get_*, create_*, list_*), and structured schemas. Critical gaps: 6 tools (inject_icon, render_slide, render_slides, list_animation_types, list_trigger_types, list_shape_types, get_shape_style, get_transition, get_layout_baseline, get_group_bounds) lack visible input schemas in source, capped at 0 for schema. Parameter descriptions are sparse or missing for many tools (e.g., inject_icon has no visible schema at all). Output schemas are not documented. Error handling guidance is absent. Composition is strong (tools chain well via SPID/slideNumber), but parameter validation rules and recovery guidance are missing.
Syntax-highlighted code box with line numbers and dark background. Width and height auto-size from content (longest line + line count) by default; pass explicit width/height EMU to fill a layout column or reserve space for future content. Pass lineNumberColor to recolor the gutter to match a theme accent.
Native OOXML diagram from mermaid syntax. Flowcharts (graph TD) and sequence diagrams.
Create a new slide from a layout template.
Execute a JSON command array.
Retrieve full schemas for additional tools listed in DEFERRED TOOLS. Pass tool names to activate them.
Available slide layouts with IDs and names.
10 tools lack visible input schemas in source code (inject_icon, render_slide, render_slides, list_animation_types, list_trigger_types, list_shape_types, get_shape_style, get_transition, get_layout_baseline, get_group_bounds).
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract fields without knowing response structure. Baseline: 100% of A+ tools document return types.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | <=2025-11-25 | v2 |
Full parameter reference for one or more execute_commands command types. When a name doesn't exist the response includes fuzzy suggestions. Call list_commands first for discovery; use this for drill-down.
Get the bounding box of a grouped shape.
Get the baseline layout configuration for a slide.
Slide count, titles, layouts, theme. Call first.
Full detail for one shape: text, font, style, animations.
Get the style properties of a shape.
Animation bindings on one or more slides. Each row: target SPID, animation type, trigger (on-click/with-previous/after-previous), duration in ms. Same slideNumber/slideNumbers shape as get_slide_shapes.
All shapes on one or more slides: SPID, type, name, position, text. Pass slideNumber for a single slide, or slideNumbers for a batch -- either as an array ([1,3,7]), a range string ("1-10"), a comma-separated mix ("1,3,5-9,12"), or "all" for the whole deck. When a slide contains image content the response appends a NOTE so the agent knows to call render_slide for visual context.
Get slide transition properties.
Inject an icon into a slide.
List all available animation types.
One-line summary of every command usable via execute_commands. Cheap discovery -- pair with get_command_schemas for full parameter drill-down on the 2-3 commands you actually need.
List all available shape types.
List all available animation trigger types.
Render a slide to PNG for visual inspection.
Render multiple slides to PNG for visual inspection.
Apply a JSON array of CommandSpecs (from synthesize_slide_script, optionally edited) to a target slide. SPID remapping is automatic: AddShapeSpec allocates fresh SPIDs on the target slide, and downstream specs (animation targets, group children, reorder targets) are rewritten to match. Full rollback on any failing spec.
Suggest best existing layout match for your needs. Use execute_commands with duplicate-layout/add-placeholder to create custom layouts.
Reverse-engineer the minimum DAG of canonical commands that, applied to a slide's layout baseline, produces the slide's current state. Returns both a numbered human-readable summary and a JSON array of CommandSpecs. PAIR WITH run_slide_script for clone-with-overrides: synthesize slide S, edit specs by index (e.g., swap text/geometry/color on specs 3, 7, 11), send the modified JSON array to run_slide_script targeting a fresh slide. The invariants reproduce exactly -- only the overridden specs differ. This is the fastest way to compose a series of structurally-similar slides.
Check slide for text overflow, shape overlap, off-slide, text too small.
Error handling guidance absent. No recovery hints (e.g., 'If command fails, check list_commands first'). No error categorization (retryable vs user-fixable vs fatal). Baseline: A+ tools include actionable error messages.
Parameter descriptions missing or minimal for many tools. E.g., render_slide, render_slides, inject_icon have no visible parameter docs. Baseline: 100% of A+ tool params have descriptions.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in schemas. Current MCP spec (2026-07-28) rewards tool annotations for agent safety and planning.