Real-time PowerPoint control on Windows and macOS — an MCP server with 156 tools for AI agents
The server declares 6 tools explicitly with names, descriptions, and input schemas. (2) Input schemas lack full type safety, ppt_set_window_state accepts 'window_state' as a string with only enum-like guidance in description ('normal', 'minimized', 'maximized') but the schema shows type string with no enum constraint in JSON Schema. (3) ppt_batch_apply_formatting has complex nested input (operations array, each with variable sub-params) but the schema visible does not show the structure of individual operation objects, this is inferred from description text, not declared in schema. (4) No output schemas are documented anywhere in the visible code. The rubric baseline states 100% of A+ tools have documented return types; these tools return results but LLMs cannot see the response shape. (5) No error handling patterns visible, tools do not indicate which errors are retryable, what to do on failure, or permission requirements. (6) Tool composition is acceptable (6 distinct verbs: connect, get, list, set, apply) but no evidence of batch alternatives or pagination despite some tools (list_presentations) that might benefit.
Apply formatting operations to multiple shapes at once. Applies one or more formatting operations (set_fill, set_line, set_shadow, set_glow, set_reflection, set_soft_edge, format_text) to multiple shapes in a single call. Each operation's params should NOT include slide_index or shape_name_or_index.
Connect to a running PowerPoint instance or launch a new one. Attempts to connect to an already-running PowerPoint via GetActiveObject. If no instance is found, launches a new one via Dispatch. Set visible=false for headless mode where PowerPoint runs in the background without showing a window (useful for automated slide generation).
Get detailed info about the active PowerPoint window and current selection. Returns the window caption, view type, current slide index, and details about what is currently selected (nothing, slides, shapes, or text).
Get information about the connected PowerPoint application. Returns the PowerPoint version, visibility, window state, number of open presentations, and the name of the active presentation.
List all currently open presentations in PowerPoint. Returns name, path, slide count, read-only status, and save status for each open presentation.
Descriptions too short to meet agent selection criteria. ppt_get_app_info (36 chars), ppt_set_window_state (37 chars), ppt_list_presentations (32 chars) are all far below the 194-char baseline and 10-char minimum. Descriptions under 50 chars cannot adequately explain when/why an agent should select the tool.
Output schemas not documented anywhere in visible code. The rubric requires 100% of A+ tools to have documented return types. LLMs cannot infer what fields each tool returns, forcing them to guess and breaking downstream tool chaining (e.g., after ppt_list_presentations, agent cannot know which fields are returned for chaining into other tools).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 39 | - | v1 |
Set the PowerPoint application window state. Controls whether the PowerPoint window is maximized, minimized, or restored to normal size. This affects the main PowerPoint application window, not individual presentation windows.
Input schema for ppt_set_window_state uses free-form string type without JSON Schema enum constraint. Description lists valid values ('normal', 'minimized', 'maximized') as text, not as a formal enum.
ppt_batch_apply_formatting input schema for 'operations' array lacks visibility into the structure of individual operation objects. Schema shows operations: array but does not declare the shape of each operation (what fields, types, constraints). This forces LLMs to infer from description text alone, increasing errors.
No error handling or recovery guidance visible in tool definitions. The rubric pattern 'recovery-guide' requires: 'Error responses must tell the LLM what to do next.' No tool includes example error responses or guidance for retryable vs permanent failures, permission requirements, or what to do when a resource is not found.
No permission declarations or scope information visible. Tools marked with WRITE risk (ppt_connect, ppt_set_window_state, ppt_batch_apply_formatting) do not declare what permissions are required. 'read:email', 'write:calendar').' No scope gates visible.
ppt_connect input parameter 'visible' uses nullable boolean with vague semantics ('If null, keep current state'). Clearer to split into separate tools (connect, set_visibility) or use required boolean with explicit behavior.