MCP server for reading, writing, and executing VBA macros in Microsoft Office macro-enabled files (.xlsm, .xlam, .docm, .dotm, .pptm, .ppam, .potm)
Four tools with complete JSON schemas and descriptions, but significant gaps in parameter documentation and error guidance. Tool names follow verb_noun pattern (vba_list, vba_read, vba_write, vba_run) which is good. Descriptions are present (avg ~150 chars) but lack actionable context for LLM selection. Parameters have types but most lack descriptions (e.g., 'file_path' has description, but 'output_dir' and 'module_name' in vba_read lack clarity on defaults and constraints). No output schemas documented. Error handling returns text but provides no recovery guidance or categorization. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, IRREVERSIBLE).
List VBA modules and their procedures in a Microsoft Office macro-enabled file (.xlsm, .xlam, .docm, .dotm, .pptm, .ppam, .potm).
Extract VBA source code from a Microsoft Office macro-enabled file (.xlsm, .xlam, .docm, .dotm, .pptm, .ppam, .potm) to .bas/.cls text files on disk.
Execute a named VBA macro in an open Microsoft Office document. Requires the host application (Excel, Word, or PowerPoint) to be running with the file open. Dispatches via AppleScript on macOS.
Write .bas/.cls VBA source files into a Microsoft Office macro-enabled file (.xlsm, .xlam, .docm, .dotm, .pptm, .ppam, .potm). Works offline without the host application. Creates a backup (.bak) before modifying.
Missing parameter descriptions for optional/default parameters. vba_read's 'output_dir' and 'module_name', vba_write's 'input_dir' lack descriptions explaining defaults, constraints, and when to use them.
No tool annotations despite explicit risk levels. vba_list and vba_read are READ_ONLY but lack readOnlyHint. vba_write is WRITE but lacks destructiveHint. vba_run is IRREVERSIBLE but lacks both destructiveHint and confirmation pattern.
No output schemas documented. Callers cannot predict response structure (e.g., vba_list returns text summary, vba_read returns list of filenames). LLMs cannot plan downstream operations without knowing what fields are returned.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Error responses provide no recovery guidance. errorResult() returns plain text with no categorization (retryable vs user-fixable vs fatal). E.g., 'Error reading VBA project: %v' gives LLM no actionable next step.
vba_run lacks confirmation/dry-run pattern for irreversible macro execution. Agents can trigger arbitrary VBA code without safeguards. No pre-execution validation or user confirmation step.