An MCP server for controlling Apple Keynote presentations via AppleScript
28 tools with consistent naming (verb_noun pattern) and basic schemas. Descriptions present but generic (avg ~40 chars, well below 194-char baseline). Parameter descriptions exist but lack constraints, ranges, and format guidance. No output schemas documented. Error handling absent. Missing tool annotations (readOnlyHint, destructiveHint). Composition is sound (single responsibility per tool), but descriptions do not guide LLM selection or explain when to use each tool vs. similar ones.
Add a bullet list to a slide
Add a code block to a slide
Add a numbered list to a slide
Add a quote to a slide
Add a new slide
Add a subtitle to a slide
Add a text box to a slide
Add a title to a slide
Descriptions are generic and too short (avg ~30 chars vs. 194-char baseline). Most lack context for LLM selection. E.g., 'Get presentation info' does not explain what fields are returned or when to call it instead of get_presentation_resolution.
No output schemas documented. LLMs cannot plan downstream calls or extract required fields. E.g., list_presentations returns unknown structure; agents cannot know if it includes presentation IDs needed for open_presentation.
Parameter descriptions lack constraints, ranges, and format guidance. E.g., 'position' in add_slide has no bounds; 'color' in add_text_box specifies format ('r,g,b' with 0-65535) but only in description, not as a regex pattern or enum. LLMs cannot validate inputs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
Close presentation
Create a new presentation
Delete a slide
Duplicate a slide
Export presentation as PDF
Get available layouts
Get available themes
Get presentation info
Get presentation resolution
Get slide count
Get slide info
Get slide size
List all open presentations
Move slide position
Open an existing presentation
Save presentation
Take a screenshot of a single slide
Select a specific slide
Set presentation theme
Set slide layout
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe reads from destructive writes. delete_slide and close_presentation (with should_save=true) are destructive but unmarked.
No error handling guidance. Tools lack recovery hints. E.g., if open_presentation fails with 'file not found', agents have no suggestion to call list_presentations first or check the file path.