A Model Context Protocol server for comprehensive Excel file manipulation using openpyxl
The server provides 17 well-structured Excel manipulation tools with consistent naming patterns (verb_noun structure) and adequate parameter documentation. However, output schemas are not explicitly documented in the visible code, and error handling lacks actionable recovery guidance. Parameter descriptions are present but often lack format constraints, ranges, and examples of expected values. The server covers the core Excel operations domain comprehensively (workbook, sheet, cell, and formatting operations), but the implementation shows gaps in production-grade error handling and output documentation that prevent a higher score.
Copy a worksheet within the workbook.
Create a new worksheet in the workbook.
Create a new Excel workbook.
Delete a worksheet from the workbook.
Apply alignment formatting to a range of cells.
Apply border formatting to a range of cells.
Apply background color to a range of cells.
Apply font formatting to a range of cells.
Output schemas not explicitly documented in tool docstrings or MCP registration. Return types are inferred from operation module but not declared to clients. LLMs cannot plan downstream calls or extract required fields without documented return structure.
Formatting tools (format_font, format_fill, format_border, format_alignment) lack detailed parameter constraints. 'color' parameter accepts hex codes but has no validation hints (e.g., '6-digit hex, no # prefix'). 'font_size' range '8-72' is mentioned in description but not as JSON Schema min/max constraints. Format strings for format_number are documented informally.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 12 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 56 | - | v1 |
Apply number formatting to a range of cells.
Get information about an Excel workbook (sheets, size, etc.).
List all worksheet names in a workbook.
Read a value from a specific cell.
Read data from a range of cells.
Rename a worksheet.
Write a value to a specific cell.
Write a formula to a cell.
Write data to a range of cells.
Error handling in visible code (e.g., 'try/except' in list_sheets returning {'success': False, 'error': str(e)}) does not provide actionable recovery guidance. Errors like 'File not found' or 'Invalid sheet name' are not categorized as retryable vs. user-fixable. LLMs receive no guidance on next steps.
Destructive operations (delete_sheet) lack confirmation or dry-run support. No pattern for pre-flight validation or undo capability. Agents can permanently delete sheets without safeguards.
Cell reference parameters ('cell', 'range_ref') lack format documentation. Acceptable formats (e.g., 'A1', '$A$1', 'Sheet1!A1:B2') are not specified. LLMs may pass invalid references.
Parameter 'value' in write_cell is typed as 'any' with minimal documentation. LLMs cannot determine valid input types (string, number, boolean, date, formula). Type constraints should be explicit.
Tools returning lists (list_sheets, read_range) do not document pagination or result limits. No next_cursor, limit, or offset parameters visible. Large sheets could produce unbounded responses that exhaust context windows.