Static source inference · medium confidence · detected: Logging
Deprecated protocol patterns detected
Summary
This MCP server has critical deficiencies across naming, descriptions, schema quality, and error handling. While 25 tools are defined with input schemas, the quality is poor. All tool descriptions are in Chinese and extremely brief (10-20 chars), providing minimal context for LLM selection. Parameter descriptions exist but are generic (e.g., '演示文稿文件名' = 'presentation filename'). Most critically, there are no output schemas documented, no error handling guidance, no pagination support for list operations, no idempotency patterns, and no security considerations visible in the codebase. The server appears to be a thin wrapper around python-pptx with minimal MCP best-practice integration.
All tool descriptions are in Chinese and critically brief (10-20 characters). Descriptions must be 50-200 characters in English and explain WHAT the tool does, WHEN to use it, and what it returns. Examples: 'Create a presentation file with optional template. Returns filename and slide count.' vs '创建演示文稿'.
Translate all tool descriptions to English and expand to 50-200 characters. Each must explain: (1) what the tool does, (2) when to use it, (3) what it returns. Example: 'Add a slide to presentation. Returns slide_index (int) for reference in subsequent shape/content operations.' vs '添加幻灯片'.
Document output schemas for every tool. Use JSON Schema or structured text. Example: '{filename: string, slide_index: integer, layout: string, num_shapes: integer}' so LLMs know what fields are available for chaining.
For destructive tools (delete_slide, move_slide), add dry_run: boolean parameter. Return what would change without committing. For irreversible ops, log and provide undo_token so agents can revert.
Document error cases and recovery: 'File not found. Check template_path is absolute or relative to working directory.' 'Slide index out of range. Use get_presentation_info first to see available slides.' 'Image load failed. Verify image_path exists and is PNG/JPG.'
Add file path validation: reject paths with '..', require absolute paths or whitelist relative prefixes. Prevent path traversal attacks.
No output schemas documented for any tool. LLMs cannot plan downstream tool calls or extract required data without knowing return structure. Every tool must document what it returns: field names, types, and semantics. Example: 'Returns {filename: string, slide_count: integer, template_used: string|null}'.
No error handling or recovery guidance. Tools like delete_slide and move_slide perform irreversible or state-changing operations with no documented error cases, retryability, or guidance on what to do if they fail. Users get raw exceptions with no actionable next step.
No parameter constraints or enums for string inputs (e.g., transition_type, animation_type, background_type, shape_type, chart_type, bullet_type, alignment). These should be enums to prevent LLM hallucination and guide valid option selection. Instead, LLMs must guess valid values.
No support for composition patterns. Tools are not designed to work in chains, e.g., after add_slide returns, LLM has no reference ID to pass to subsequent shape/text/image additions. create_presentation likely returns a filename, but add_slide also requires filename. No tool returns IDs suitable for subsequent calls.
No pagination support. If get_presentation_info returns slides or shapes, there's no limit, offset, or page_size parameter. A presentation with 1000 slides would dump entire dataset into context, exhausting token budget.
Numeric parameters lack ranges. Position params (left_inches, top_inches, width_inches, height_inches) have no min/max. Font sizes, row/column counts, animation delays/durations unbounded. LLMs can pass absurd values (negative dimensions, font size 10000) causing silent failures or crashes.
No idempotency patterns. Destructive tools like delete_slide offer no dry-run, confirmation, or undo mechanism. Agents making mistakes have no recovery path. delete_slide should support dry_run=true or require explicit confirmation.
File path parameters (template_path, image_path, background_image_path) are bare strings with no validation. No guidance on absolute vs relative paths, security restrictions, or file existence checks. Agents could pass arbitrary paths including ../../../ traversals.
Return references from creation tools: add_slide should return slide_index (int) so subsequent add_text/add_image calls can reference it without filename+index guessing.
Add batch variants: add_texts (array of text objects) instead of repeated add_text calls. Reduce token waste and latency.
Document which tools are idempotent: get_presentation_info and all add_* operations should be retryable. Clarify that duplicate calls to add_text may create duplicate shapes.
Add optional confirmation pattern for risky operations: delete_slide(filename, slide_index, confirm=false) → {would_delete: {title, num_shapes}, confirm_token: string}. Then require confirm_delete(filename, slide_index, confirm_token) to actually delete.
Specify format constraints in descriptions: color params must be hex ('#FF0000') or named ('red'); alignment must be 'left'|'center'|'right'|'justify'; date_string must be ISO 8601.