Read, write, analyze, test and diff the VBA, forms, Power Query and cells in Office files
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
An MCP server for the inside of an Office file. Read, write, analyze and test the VBA in Excel, Word, PowerPoint and Access, and edit the document around it. Visual Basic 6 projects open the same way.
VBA, Power Query and OOXML worksheet edits need no Office installation and run on
Windows, macOS and Linux. Reading .xlsb and .xls cells, writing .xlsb cells,
and running macros or tests need Windows with the desktop application.
An agent asked to fix a macro works from a copied snippet with no idea what else is in the project, or asks the user to export the modules and paste them back afterwards. Both treat the Office file as opaque. The VBA project, the form designs and the M code are all readable and writable without opening the application at all.
This server makes that reachable, and bounds it. A write is refused if the module changed since it was read. An analysis error fails the change. A run happens in an application the server created and holds a deadline over. Anything that cannot be undone is the user's decision.
| Directory | Language | Status |
|---|---|---|
python/ | Python 3.10+ | Reference implementation |
Other languages go in sibling directories. Python is normative: it tracks the upstream libraries, and ports track it. See docs/porting.md.
Point a client at it. For Claude Desktop, Claude Code or any client that launches a server over stdio:
For VS Code, put this in .vscode/mcp.json at the workspace root. VS Code uses
servers here; the portable .mcp.json format above uses mcpServers.
Run MCP: List Servers in VS Code to start xlide and inspect its output if it
does not register. The server prints its version and allowed roots to stderr on
startup. The VS Code configuration format and commands are described in
VS Code's MCP guide.
Or install nothing and let uv fetch it on first run. uv is one binary and installs its own Python, so a machine with neither can still run this:
The live extra is safe to ask for on every platform: what it pulls in is marked
sys_platform == 'win32', so off Windows it resolves to nothing and the same
configuration works everywhere. Drop the --from pair for the file layer alone.
uvx takes the newest published version unless you pin it, as xlide-mcp@1.2.0.
There is a Dockerfile for the file layer, which is the part that needs no
Office installation. Mount the folder holding the files at /workspace, because
that is the root the container is bounded to:
--root is the security boundary. Every path a tool accepts is resolved,
symlinks included, and refused unless it lands inside a root. Add --read-only
to allow reads and analysis and refuse every write.
Call xlide_doctor first from a new client: it reports the workspace roots, which
layers are installed, which Office applications this machine has, and whether
each one has the Trust Center setting that module injection needs.
Files - the VBA project and the document it lives in. Most file tools need no Office installation; binary Excel grids use Excel on Windows.
The code project
| Discover | xlide_list_projects, xlide_project_info, xlide_validate_project, xlide_create_project, xlide_doctor |
| Modules | xlide_list_modules, xlide_read_module, xlide_write_module, xlide_edit_module, xlide_rename_module, xlide_delete_module, xlide_list_procedures, xlide_search_modules |
| Analysis | xlide_analyze, xlide_analyze_source, xlide_rules |
| Forms | xlide_list_forms, xlide_read_form, xlide_manage_form, xlide_edit_form |
| References and catalog | xlide_list_references, xlide_manage_reference, xlide_access_catalog, xlide_read_access_query |
| Source control | xlide_export_modules, xlide_import_modules, xlide_git_changes |
xlide_edit_module accepts preview_only=true to check a batch of line edits and
return its proposed diff without saving. The preview's content token can be used
to apply the same edits if the module has not changed.
xlide_search_modules returns tokens for matched modules, so its line numbers
can also be passed directly to a guarded edit.
Broad searches can be paged with offset and next_offset; total_match_count
reports how many matching lines exist across all pages.
xlide_list_procedures returns a content token for guarded edits at the listed
lines. Reading an empty module returns its empty body and token.
Writing an identical module or applying an unchanged module import skips the save;
the response reports saved=false.
Applying an unchanged export leaves the existing .bas and .cls files untouched.
Long Power Query formulas can be read by line; the read returns a token that
xlide_write_query can use to refuse a stale change.
Large form designs can be read in pages with offset and next_offset.
Office file, VBA module and Power Query lists also return next_offset when a
later page is available.
For crowded drawing layers, pass sheet to xlide_list_shapes and follow its
next_offset to read later shapes.
Worksheet lists mark unreadable visibility or pivot metadata as unknown, and formatted or rich
text cell reads name the cell when decoding fails instead of returning a blank.
An Excel-backed worksheet survey refuses malformed output instead of dropping sheets.
An Excel-backed cell read refuses a partial grid instead of labeling it as the full range.
Form summary lists use the same offset and next_offset paging.
Form reads distinguish missing properties or sections from a read failure, and
an unreadable Access report collection fails instead of appearing empty.
Procedure lists also return next_offset for long modules.
Structural validation problems can be read with offset and next_offset.
Access catalog lists return a next_offsets entry for each included collection.
Long saved query SQL is previewed in the catalog; xlide_read_access_query
returns the full text in character pages with a content token.
The list actions for tables, names, validation, conditional formats, hyperlinks
and comments also accept offset and max_results and return next_offset.
Merging cells keeps only the top-left value. xlide_format_cells refuses to clear
other values or formulas unless allow_overwrite=true is passed.
xlide_sort_rows sorts a range, table or filter with ordered keys;
xlide_remove_duplicates keeps the first matching row. xlide_copy_cells copies
between sheets with Paste Special options and requires allow_overwrite=true.
xlide_update_shape changes a shape's position, name, text, alt text or visibility
without removing it; it also changes a Forms control's linked cell or list range.
xlide_check_cells lists Excel's green-triangle error checks, including numbers
stored as text and inconsistent formulas, with paging for long lists.
The document around it
| Power Query | xlide_list_queries, xlide_read_query, xlide_write_query (set, rename, remove, load, unload) |
| Sheets and cells | xlide_list_sheets, xlide_read_cells, xlide_write_cells, xlide_evaluate_formula, xlide_check_cells, xlide_format_cells, xlide_sort_rows, xlide_remove_duplicates, xlide_copy_cells |
| Structure | xlide_manage_sheet, xlide_manage_rows_columns |
| Tables and names | xlide_manage_table, xlide_manage_name, xlide_manage_filter |
| Rules, links and notes | xlide_manage_validation, xlide_manage_conditional_format, xlide_manage_hyperlink, xlide_manage_comment, xlide_page_setup |
| Shapes and charts | xlide_list_shapes, xlide_manage_shape, xlide_update_shape, xlide_set_shape_macro, xlide_add_chart |
Execution - Windows with the desktop application.
xlide_run_macro, xlide_run_vba, xlide_run_tests, xlide_compile_check
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/xlide)<a href="https://allmcps.com/mcp/xlide"><img src="https://allmcps.com/api/badge/xlide?style=directory" alt="XLIDE on AllMCPs" /></a>