A comprehensive MCP server for Microsoft PowerPoint, Word, and Excel automation on macOS
This server has 18 tools covering Office 365 automation (PowerPoint, Word, Excel). All tools have names starting with action verbs (create_, add_, save_, write_) and include basic descriptions. However, there are significant quality gaps: (1) Parameter descriptions are present but often lack detail about constraints, formats, and ranges. For example, 'theme' in create_presentation just says 'Theme name (default, modern, classic, etc.)' without explaining what themes are valid or how they're resolved. (2) Output schemas are not documented in the source, we can infer basic returns (Dict[str, Any]) but specific response field names, types, and structures are not declared. (3) Error handling is minimal, tools catch exceptions and log them, but do not provide recovery guidance to the LLM (e.g., 'If image_source is invalid, try providing a local file path'). (4) All 18 tools are write operations with high risk; there are no read/query tools to retrieve existing documents, nor tools to verify state before mutations. (5) Formatting parameters use generic {'type': 'object'} without schema constraints, leaving the LLM to guess valid keys. (6) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are visible. Average tool quality is fair but below production baseline.
Add a formula to a cell.
Add a heading to a document.
Add an image to a slide.
Add a list to a document.
Add a paragraph to a document.
Add a new slide to a presentation.
Add speaker notes to a slide.
Add a table to a document.
Output schemas not documented. Tools return Dict[str, Any] with no documented field structure. LLMs cannot reliably extract response fields for downstream tool chaining.
Parameter constraints not specified. 'theme' accepts strings with examples but no enum or validation. 'formatting' is a generic object with no documented keys. 'position' and 'size' are dicts without documented required/optional keys.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 49 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 25 | - | v1 |
Add text content to a slide.
Add a new worksheet to a workbook.
Create a new Word document.
Create a new PowerPoint presentation.
Create a new Excel workbook.
Save a document to file.
Save a presentation to file.
Save a workbook to file.
Write data to a specific cell.
Write data to a range of cells.
No error recovery guidance. Catch-all exception handlers log errors but provide no actionable guidance to the LLM (e.g., 'file not found, check image_source path', 'invalid cell reference, use A1:C10 format').
No read/query tools. Server provides only creation and mutation tools (18 write operations, 0 read operations). LLMs cannot verify state, list existing documents, or retrieve IDs for mutations. This breaks tool composition and forces agents to rely on external state.
No tool annotations. No tools declare readOnlyHint, destructiveHint, or idempotentHint. LLMs cannot determine which operations are safe to retry or require confirmation.
Incomplete parameter descriptions. Many params lack format/constraint details. E.g., 'cell' parameter in write_cell just says 'Cell reference (e.g., A1)', no statement that it must match Excel cell format [A-Z]+[0-9]+.
Formatting parameters are unstructured dicts. 'formatting' in add_text_to_slide accepts Optional[Dict[str, Any]] with no schema. LLMs guess at keys like 'bold', 'italic', 'color', 'font_size' with no guidance on valid values.
ID management opaque. Tools return presentation_id, document_id, workbook_id but no documentation on ID format, lifetime, or how IDs map to file system paths. If an agent needs to reference a saved file, it's unclear whether to use the ID or the file_path.