Multi-mode presentation generation system supporting both fixed workflow pipeline (researcher → writer → validator → publisher) and autonomous ReAct agent modes. Integrates with Tavily web search, OpenAI LLM, and Gamma MCP for presentation publishing.
Server defines 6 tools with descriptions and basic schemas. Naming follows verb_noun convention (search_web, classify_topic, generate_variants, evaluate_and_select, request_human_approval, publish_to_gamma). Descriptions are present and moderately detailed (100-250 chars typical), explaining WHAT and WHEN. However, parameter descriptions are minimal or absent for several tools (e.g., generate_variants lacks description for 'classification_json' parameter). Output schemas are not documented, callers cannot predict response structure. Error handling is minimal; tools return generic error strings without recovery guidance. No input validation constraints (enums, ranges) visible. Tool composition is reasonable (each does one thing), but chaining relies on implicit JSON field naming conventions rather than explicit schema contracts.
Classify the presentation topic and recommend writing strategies. This is the ROUTING step. Based on the topic and research data, determines the topic category and returns 3 different writing styles/angles for parallel generation.
Compare multiple presentation variants and select the best one. Scores each variant against quality criteria and returns the winning variant with reasoning.
Generate 2-3 presentation variants IN PARALLEL with different styles. Uses the styles from classify_topic to create multiple complete slide decks from different angles, returning all variants for evaluate_and_select to choose from.
Publish the final presentation to Gamma via MCP. Sends slide content with theme, formatting, and language options to the Gamma presentation API.
Request human review and approval before publishing. Pauses execution via interrupt() and waits for human feedback (approve/reject/revision). Implements Human-in-the-Loop pattern.
Output schemas not documented. Tools return JSON strings (classify_topic, generate_variants, evaluate_and_select) but callers cannot predict field structure without parsing examples. LLMs must infer response format from tool descriptions alone.
Parameter descriptions incomplete or missing. 'classification_json' in generate_variants lacks description. 'research' param in generate_variants has minimal context. LLMs cannot infer parameter semantics from names alone.
No input validation constraints visible. Parameters like 'num_slides' (integer) lack min/max bounds. 'theme' in publish_to_gamma has no enum of valid Gamma theme IDs. LLMs can pass invalid values without guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Search the web for information on a topic using Tavily. Use this to find facts, statistics, examples, and recent data for the presentation. Each call runs ONE query and returns up to 3 results. You can call this tool multiple times with different queries, but the total is limited to 8 searches per run.
Error handling lacks recovery guidance. search_web returns 'Search failed: {e}' without suggesting next steps. classify_topic silently falls back to defaults on JSON parse error. Agents cannot self-correct.
Implicit state coupling via global variables (_last_variants, _last_winning_content). Tools depend on execution order and shared mutable state. Non-idempotent and fragile across retries or concurrent calls.