True MCP autonomous agent that generates themed PowerPoint presentations from web search data. Combines flan-t5 for slide title planning, DuckDuckGo search for factual content, and python-pptx for presentation building with full theme customization support.
Server has 6 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-200 chars, within baseline), and input schemas are present with type definitions. However, descriptions lack LLM-optimized guidance on WHEN to use each tool, dependencies between tools (e.g., set_theme must precede create_presentation) are buried in text rather than enforced, and output schemas are not formally documented. Error handling is minimal, no recovery guidance, no categorization of retryable vs fatal errors. Naming is clear and verb-based (set_, create_, add_, write_, save_, search_), following baseline conventions. Parameter descriptions exist but lack constraints (e.g., theme_name accepts unknown values with silent fallback rather than enum validation). The tool composition is reasonable (single responsibility per tool), but the interface does not match the chat data model, agents must remember state (current presentation, active theme) rather than passing context explicitly.
Adds a new themed content slide to the current presentation. Theme styling is applied automatically — do NOT try to style slides from the agent side; all styling lives here.
Creates a new PowerPoint presentation with a themed title slide. Inherits the theme set by set_theme(); defaults to 'professional' if set_theme() was never called.
Saves the current presentation to disk. Writes the .pptx file to the output directory.
Search the web using DuckDuckGo and return real results as JSON. Parameters: query (Optimised search query built by the agent per slide), max_results (Maximum number of results to return, default 5). Returns: JSON string: list of {"title", "snippet", "url"} objects. An empty list [] is returned (not an error) if search yields nothing.
Set the global presentation theme. Must be called BEFORE create_presentation(). Args: theme_name: One of 'professional', 'dark', 'academic', 'creative', 'minimal'. Unknown values fall back to 'professional'. Returns: ToolResult confirming the active theme.
No enum constraint on theme_name parameter. Description says 'Unknown values fall back to professional', this invites hallucinated theme names. Should declare theme_name as enum: ['professional', 'dark', 'academic', 'creative', 'minimal'].
Tool dependencies not enforced or documented in schema. set_theme must be called before create_presentation, but this is only mentioned in prose descriptions. No way for LLM to discover this requirement programmatically. Should add a 'prerequisites' field or return an error if create_presentation is called without set_theme.
Output schemas not documented. Tools return ToolResult or SlideToolResult (Pydantic models visible in code), but LLM has no formal schema for what fields to expect. Descriptions say 'Returns: ToolResult confirming...' but do not specify the structure. LLM cannot plan downstream calls without knowing output shape.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | <=2025-11-25 | v2 |
Writes bullet points to a slide. Applies theme font/colour to bullet text. Strips any [Tag] or (Tag) prefix from bullets for professional appearance.
No error handling guidance. If save_presentation fails (disk full, permission denied), the tool returns a generic error. No recovery hints, no categorization of retryable vs fatal errors. LLM cannot decide whether to retry or ask the user.
Stateful server design (module-level _current_presentation, _active_theme). MCP protocol is stateless per 2026-07-28 spec. Each request should be self-contained. Current design risks state corruption if multiple agents call the server concurrently or if a request fails mid-operation.