MCP server for generating presentations, documents, webpages, and social posts using the Gamma API
The Gamma MCP server demonstrates solid foundation with well-structured tools, clear naming conventions, and comprehensive parameter schemas. All 5 tools follow verb_noun naming (generate-gamma, list-themes, check-generation-status). Descriptions are present and reasonably detailed (avg ~100 chars). However, output schemas are entirely absent from the source code, critical for LLM composition. Parameter descriptions are present but some lack actionable constraints (e.g., no format guidance for generationId). Error handling is basic: the client throws generic Error objects without recovery guidance or error classification. Tool annotations (readOnlyHint/destructiveHint) are missing despite clear risk stratification (WRITE vs READ_ONLY). The implementation is competent but lacks the polish required for A-grade (80+).
Check the status of a Gamma generation (useful if polling timed out or to check progress)
Generate content based on an existing Gamma template
Generate a new Gamma presentation, document, webpage, or social post from text content
List workspace folders in Gamma for organizing generated content
List available Gamma themes for styling presentations and documents
Output schemas completely undocumented. No return type specifications visible for any tool. The LLM cannot infer what fields to extract from responses or plan downstream tool calls. Breaks tool composition.
Missing tool annotations despite clear destructive/read-only distinction. generate-gamma and generate-from-template are WRITE operations that modify state; list-themes and list-folders are READ_ONLY. Tool annotations (destructiveHint, readOnlyHint) enable agents to understand safety profiles and make better planning decisions.
Error handling does not guide recovery. GammaClient.request() throws generic Error messages like 'Gamma API error (400): ...' without classification. Errors do not distinguish between retryable (429), user-fixable (401, 402), and fatal conditions. LLM cannot determine next action.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | <=2025-11-25 | v2 |
| 2026-03-09 | C | 63 | - | v1 |
generationId parameter lacks format guidance. No description specifies the expected format (g_xxxxxxxxxxxx documented in generate-from-template description but not in check-generation-status parameter docs). LLM may hallucinate invalid IDs.
generate-gamma and generate-from-template have complex nested object parameters (textOptions, imageOptions, cardOptions, sharingOptions) with limited descriptions on nested fields. 'tone' is 'e.g. professional, inspiring', examples in descriptions are anti-pattern and LLMs may treat them as only valid values.
No idempotency guarantees documented. generate-gamma and generate-from-template modify state but do not indicate whether they are idempotent. If an agent retries due to timeout, will duplicate generations be created?
pollGeneration timeout returns raw error without recovery hint. After 5 minutes, the tool throws 'Generation timed out after 5 minutes. Check manually with generation ID: ...' but LLM is not directed to use check-generation-status tool.