Multi-service MCP server suite for PowerPoint presentation generation and image processing. Includes PPTX MCP Server (7 tools for creating/modifying presentations), Image MCP Server (3 tools for AI image generation and optimization), Orchestrator (FastAPI coordination service), Bot (Teams/Web Chat integration), and Frontend (web UI).
Mixed quality across 10 tools. Strengths: all tools have descriptions (50 - 200 chars); parameters are typed with JSON Schema; output structures implied through usage. Weaknesses: output schemas NOT documented in source code; error handling absent or minimal; some parameter descriptions lack constraints or format guidance; no security/permission declarations; tool annotations (destructiveHint, idempotentHint) missing entirely. Average tool score 62 reflects solid naming and descriptions, but incomplete schemas and no error recovery guidance.
Add a slide to an existing presentation.
Analyze an uploaded presentation and extract metadata (slide count, titles, content summary).
Apply a design template or color/font overrides to an existing presentation.
Initialize a new PowerPoint presentation in Azure Blob Storage.
Export the presentation as a downloadable PPTX file with a SAS URL.
Generate an AI image using DALL-E 3 (Azure OpenAI).
Retrieve a specific slide's content and metadata from a presentation.
Output schemas NOT documented. Tools return responses (e.g., create_presentation returns presentation_id, optimize_image returns image URL) but return types are not declared in visible code. LLM cannot predict what fields to expect or plan chained calls.
No error handling guidance. Code does not show exception handling, recovery hints, or error classification (retryable vs fatal). If generate_image hits DALL-E rate limits or optimize_image fails on invalid URL, the LLM gets no actionable error message.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 71 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 49 | - | v1 |
List available design templates in the templates blob container.
Download, resize, and compress an image for optimal PowerPoint embedding.
Search for stock photos using Bing Image Search API.
Parameter format constraints missing. E.g., generate_image accepts 'size' as string but description says '1024x1024', '1792x1024', '1024x1792', should be an enum constraint to prevent hallucinated sizes like '800x600'. Similarly, optimize_image 'format' should be constrained enum (JPEG|PNG|WEBP) not free string.
Tool annotations absent. No destructiveHint, idempotentHint, or readOnlyHint declared in @mcp.tool() decorators. LLM cannot tell which tools modify state (create_presentation, add_slide, apply_template) vs read-only (list_templates, get_slide). Per spec, write tools must declare destructiveHint; read tools should declare readOnlyHint.
No permission/security scope declarations. Tools integrate with Azure Blob Storage, Azure OpenAI (DALL-E), Bing Image Search, but the code does not declare required permissions (read:blob, write:blob, read:openai, read:bing). No audit trail or permission gates visible. Per pattern:scope-declaration, tools should declare minimum required permissions.
Pagination not implemented. list_templates and analyze_presentation (extract_images=true) could return large result sets, but no limit, offset, or next_cursor parameters visible. Large unbounded results risk context window overflow.
Parameter descriptions lack format/constraint details. E.g., add_slide 'content' is array of strings but no max length, encoding, or character restrictions stated. optimize_image 'quality' is 1 - 95 but description doesn't specify this range clearly enough for LLM to validate before calling.
No idempotency guarantees. create_presentation, add_slide, apply_template are state-changing but no idempotency key or duplicate-detection visible. If an LLM retries after an ambiguous network error, duplicate slides or presentations may be created.
Tool descriptions lack dependency hints. E.g., add_slide requires presentation_id from create_presentation, but description doesn't say 'Call create_presentation first to obtain presentation_id.' No guidance on tool ordering.
Missing batch operations. Adding multiple slides requires N separate add_slide calls. No batch_add_slides tool to reduce token waste and latency. Similarly, no batch template application.