A MCP server project that creates powerpoint presentations
The PowerPoint MCP server registers 7 tools with complete input schemas and descriptions for each. However, critical issues limit overall quality: (1) Tool names use hyphens (kebab-case) rather than verb_noun patterns, making intent parsing suboptimal for LLMs; (2) Descriptions are adequate (90-160 chars) but lack actionable WHEN-to-use guidance and error recovery hints; (3) Schemas are present and properly typed but lack enums for constrained inputs (e.g., add-slide-* tools); (4) No documented output schemas, LLMs cannot know what to expect in responses; (5) No error handling or recovery guidance, tools fail silently with no guidance for agents; (6) Parameter descriptions lack format constraints (e.g., 'Name of the presentation' should specify max length, allowed characters); (7) add-slide-title-with-table schema is incomplete, 'data' property lacks 'rows' definition. The server follows basic MCP patterns but falls short of production-grade quality in error handling, constraint specification, and output documentation.
Add a new a comparison slide with title and comparison content. Use when you wish to compare two concepts
This tool adds a section header (a.k.a segue) slide to the presentation you are working on. The tool doesn't return anything. It requires the presentation_name to work on.
Add a new slide with a title and content to an existing presentation
This tool adds a new title slide to the presentation you are working on. The tool doesn't return anything. It requires the presentation_name to work on.
Add a new slide with a title and table containing the provided data
This tool starts the process of generating a new powerpoint presentation with the name given by the user. Use this tool when the user requests to create or generate a new presentation.
Tool naming uses kebab-case (e.g., 'create-presentation', 'add-slide-title-only') instead of verb_noun patterns. LLMs parse tool intent from names before reading descriptions, hyphens fragment the action verb from the noun, reducing name clarity and intent inference.
No documented output schemas. Tools return nothing or unspecified structured data. LLMs cannot infer what fields to extract or chain downstream tool calls. E.g., does 'create-presentation' return a presentation_id? Does 'generate-and-save-image' return the file_path? This forces trial-and-error or wasteful introspection calls.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 53 | - | v1 |
Generates an image using a FLUX model and save the image to the specified path. The tool will return a PNG file path. It should be used when the user asks to generate or create an image or a picture.
No error handling or recovery guidance. Tool descriptions do not indicate what errors may occur or what the LLM should do if a call fails. E.g., 'create-presentation' does not state: 'Fails if presentation already exists, try a different name' or guide on retry behavior. Agents have no fallback path.
Parameter descriptions lack actionable format constraints. E.g., 'Name of the presentation (without .pptx extension)' does not specify: max length, allowed characters, case sensitivity, or what happens if the name contains special chars like '/' or '\\'. Parameters named 'presentation_name' across multiple tools create tight coupling, if a name fails validation in one tool, the agent may retry with a different name and need to track state across calls.
add-slide-title-with-table has an incomplete schema. The 'data' property is described as 'Table data object with headers and rows' but the schema only defines 'headers' array under properties, 'rows' is missing entirely. This violates the JSON Schema structure and makes it unclear how rows should be formatted (array of objects? array of arrays?).
Descriptions lack WHEN-to-use guidance. E.g., 'add-slide-title-content', 'add-slide-comparison', and 'add-slide-title-with-table' all exist but descriptions do not help LLMs choose between them. Pattern-based guidance ('Use this when you have a list of points vs. when comparing two concepts vs. when you have structured tabular data') would prevent wrong tool selection.
No input validation messaging. The 'content' parameter in 'add-slide-title-content' specifies 'Max main points is 4' but provides no guidance on what happens if the LLM violates this constraint. Does the tool silently truncate? Raise an error? Return a partial slide? Agents need explicit error messages to self-correct.
Tool descriptions do not indicate state-side effects or idempotence. E.g., does calling 'create-presentation' twice with the same name overwrite the first? Does 'add-slide-*' idempotently update or create duplicates? Agents need to know which calls are safe to retry and which risk duplication.