This MCP server defines 31 tools across 7 modules with clear intent (presentation generation pipeline). Naming is consistent and verb-based (prepare_*, ingest_*, export_*, etc.). However, quality varies significantly: prepare/ingest pairs have good descriptions (~120-180 chars), but parameter descriptions are sparse or missing entirely. Input schemas are visible and properly typed for most tools, but output schemas are NOT documented, a critical gap for composability. The prepare_* tools return 'response_schema' which the LLM must follow, but this schema is not visible in the tool definition itself. Risk annotations (READ_ONLY, WRITE, DESTRUCTIVE) are clear, but descriptions lack actionable recovery guidance and don't explain dependencies between prepare/ingest steps. No tools show enum constraints, despite many parameters that should be constrained (e.g., action in prepare_slide_edit should be enum ['add', 'update']). The server_instructions in create_server() contain extensive workflows, but this context is buried in prose rather than encoded in parameter constraints and descriptions, LLMs will miss or misapply these rules.
Capture slides as PNG screenshots (Playwright-based)
Delete a project permanently
Delete slide (pure file operation, no generation)
Export presentation as HTML
Export presentation as PPTX
Finalize design specification after all slides
Finalize visual QA after all fixes applied
Get current project status and metadata
Import existing PPTX file and create project
Output schemas not documented in tool definitions. prepare_* tools claim to return 'response_schema' but this schema is not visible in the MCP tool definition, it's only described in prose instructions. LLMs cannot know what fields to expect in the returned schema object, breaking composability and forcing them to reason about unpredictable JSON structures.
Parameter descriptions missing or incomplete. Many parameters lack descriptions explaining valid values, ranges, or constraints. Example: prepare_slide_edit has parameters 'action', 'slide_index', 'title', 'content_summary' but descriptions do not state that action must be 'add' or 'update', or that slide_index is 1-based. This forces LLMs to infer constraints from prose instructions.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 45 | - | v1 |
Ingest backfill data for imported slides
Ingest deck review feedback and notes
Ingest DESIGN.md draft JSON, validate and save
Ingest and validate design specification for a single slide
Ingest narrow single-element edit specification
Ingest and validate outline JSON, save to project
Ingest slide review feedback (report-only)
Ingest slide edit (add/update) specification
Ingest visual QA analysis results
Ingest visual QA fix specifications
List all projects
Move slide to new position (pure file operation, no generation)
Prepare backfill for imported slides - returns prompt and response_schema
Prepare deck review generation - returns prompt and response_schema
Prepare DESIGN.md draft generation - returns prompt and response_schema
Prepare design specification for a single slide - returns prompt and response_schema
Prepare narrow single-element edit - returns prompt and response_schema
Prepare outline generation step - returns system/user prompt and response_schema
Prepare slide review (report-only) - returns prompt and response_schema
Prepare slide edit (add/update) - returns prompt and response_schema
Prepare visual QA analysis - returns prompt and response_schema
Prepare visual QA fix generation - returns prompt and response_schema
No enum constraints for parameters with known-finite value sets. 'action' parameter in prepare_slide_edit and ingest_slide_edit should be constrained to enum ['add', 'update'] but is typed as unconstrained string. This invites hallucinated values and requires the LLM to remember string literals from prose.
Workflow dependencies encoded in prose instructions, not tool parameters. The server_instructions spell out the prepare/ingest handshake (prepare_outline → ingest_outline → prepare_design_doc_draft → ...) but tool schemas do not enforce or guide this sequence. An LLM could call ingest_outline before prepare_outline, or skip prepare_design_doc_draft entirely, violating the documented workflow.
No error handling guidance in tool descriptions. Tools like delete_slide and delete_project are destructive but descriptions do not say 'This permanently deletes. Consider a dry-run or confirmation first.' Error responses are not shown, so LLMs cannot anticipate recovery steps (e.g., 'If slide_index > total_slides, try get_project_status to see available indices').
Missing output field documentation. Tools like list_projects and get_project_status return structured data but field names and types are not documented. An LLM does not know if list_projects returns {projects: []} or {items: []} or how to extract a project_id for downstream calls.
Unclear parameter relationships. prepare_slide_edit has optional parameters (slide_index for 'update' action, title/content_summary for 'imported projects') but descriptions do not state which params are required for which action value. This forces the LLM to guess or re-read prose instructions.