XLIDE
PYPI · XLIDE-MCP · SCANNED SEP 20
Read, write, analyze, test and diff the VBA in Office files, and the document around it
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs setuptools.build_meta at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 1 of 33 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency32
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: no license is declared. See how to fix → Fail
- Actively maintained (last published 0 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability82
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 9563 tokens (~187/item across 51 items; 49 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 51 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
How do I install the XLIDE MCP server?
XLIDE runs locally as a PyPI package, launched with uvx xlide-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · xlide-mcp
claude mcp add williamsmithedward-xlide-excel-office-vba-mcp -- uvx xlide-mcp
{
"mcpServers": {
"williamsmithedward-xlide-excel-office-vba-mcp": {
"command": "uvx",
"args": [
"xlide-mcp"
]
}
}
} {
"servers": {
"williamsmithedward-xlide-excel-office-vba-mcp": {
"command": "uvx",
"args": [
"xlide-mcp"
]
}
}
} codex mcp add williamsmithedward-xlide-excel-office-vba-mcp -- uvx xlide-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"williamsmithedward-xlide-excel-office-vba-mcp": {
"type": "local",
"command": [
"uvx",
"xlide-mcp"
],
"enabled": true
}
}
} openclaw mcp add williamsmithedward-xlide-excel-office-vba-mcp --command uvx --arg xlide-mcp
mcp_servers:
williamsmithedward-xlide-excel-office-vba-mcp:
command: "uvx"
args: ["xlide-mcp"] {
"McpServers": {
"williamsmithedward-xlide-excel-office-vba-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"xlide-mcp"
]
}
}
} assistant mcp add williamsmithedward-xlide-excel-office-vba-mcp -t stdio -c uvx -a xlide-mcp
{
"mcpServers": {
"williamsmithedward-xlide-excel-office-vba-mcp": {
"command": "uvx",
"args": [
"xlide-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 54
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed pypi/xlide-mcp@1.0.3
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | setuptools.build_meta |
Background: Why install scripts are a supply-chain risk →
Dependencies 33 packages
| Packages resolved | 33 |
|---|---|
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
xlide_access_catalog Access tables and queries ~150
Lists what an Access database holds besides its code: tables with their columns, saved queries with their SQL, and the relationships between tables. An .accdb is an application rather than a document, and the VBA in it is written against these, so reading the modules alone shows half of it. Access files only.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Access database. |
| include | string | – | 'tables', 'queries', 'relationships' or 'all'. |
| include_system | boolean | – | Include the MSys tables and relationships Access keeps its own objects in. Off by default: every database has them, and listing them buries the few that are about the user's data. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_analyze Analyze VBA ~197
Runs static analysis over every VBA module in an Office file and returns the problems with module, line, column, code and message. Needs no Office installation and runs nothing. Each file is measured against its own host's object model, so Word code is never judged by Excel's surface, and a Visual Basic 6 project against no host at all, because its code does not run in one. Call this after every VBA change and treat any problem at error severity as a build failure: fix it and analyze again until it is clean. Warnings are worth reading; some are style, some are the bug.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Office file. |
| min_severity | string | – | Lowest severity to report: 'error', 'warning' or 'information'. |
| module_name | string | – | Report only this module's problems. The whole project is still analyzed, so cross-module references still resolve. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_analyze_source Analyze VBA source ~210
Runs static analysis over VBA source you are holding, before it is written to a file. Use it to check code you have just generated: it costs nothing, needs no file, and catches the compile errors that would otherwise surface in front of the user. Pass host so the code is measured against the right object model, and file_path instead if the code is destined for a file that already exists, which resolves calls into the rest of that project.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | – | An existing Office file this module belongs to. Its other modules are analyzed alongside, so calls into them resolve. Overrides host. |
| host | string | – | 'excel', 'word', 'powerpoint' or 'access'. Empty checks the language alone, with no host object model. |
| kind | string | – | 'standard', 'class', 'document' or 'userform'. |
| module_name | string | – | Name to report problems against. |
| source | string | yes | The VBA source to check. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_compile_check Compile check ~130
Asks the real VBA editor to compile a file's project, and reports whether it accepted it. Windows only. This is the compiler's own verdict, where xlide_analyze is a static analyzer's; run the analyzer first, because it is free and needs no Office, and use this when the last word matters. Excel is made visible for the check, because a hidden instance does not surface the compile-error dialog and would report a rejection as a pass.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Office file. |
| timeout | number | – | Seconds to wait for the verdict. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_create_project Create Office file ~107
Creates a new Office file with an empty VBA project at the given absolute path, from a template the application itself authored, so it opens with no repair prompt. Extensions: .xlsm, .xlsb, .xlam, .docm, .pptm, .accdb, and .xlsx for a workbook with Power Query and no macros. It never overwrites an existing file.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to create. The extension picks the format. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_delete_module Delete module ~146
Permanently deletes a VBA module from an Office file and saves it. There is no undo: ask the user first, and read the module before deleting it so its code can be put back if they change their mind. Document modules cannot be deleted.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_invalidate_signature | boolean | – | Ask the user first. |
| allow_protected | boolean | – | Ask the user first. |
| expected_content_token | string | – | The content_token from your read, so a module that changed since is not deleted on the strength of a stale look at it. |
| file_path | string | yes | Absolute path to the Office file. |
| module_name | string | yes | Module to delete. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_doctor What this machine can do ~67
Reports what this server can reach: its workspace roots, whether it is read-only, which optional layers are installed, and, on Windows, which Office applications are available to run macros and tests. Call it when a tool reports something missing, or before promising the user a test run.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
xlide_edit_form Edit form design ~410
Changes one form's design and saves the file: add a control, remove one, or set a property on one. Geometry is in points for a UserForm and twips for an Access design. Setting a property to null clears it, putting the control back at its default. Removing a container takes its children with it, so ask the user first. Adding a control does not write its event procedure; do that with xlide_write_module on the form's code module.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | 'add_control', 'remove_control' or 'set_property'. |
| allow_invalidate_signature | boolean | – | Ask the user first. |
| allow_protected | boolean | – | Ask the user first. |
| caption | string | – | For add_control on an Access design: the control's caption. |
| container | string | – | For add_control: the Frame or page to put it in. |
| control_name | string | yes | The control to add, remove or change. |
| control_type | string | – | For add_control: Label, TextBox, CommandButton, CheckBox, OptionButton, ComboBox, ListBox, Frame, MultiPage, Image, SpinButton and the rest. |
| file_path | string | yes | Absolute path to the Office file. |
| form_name | string | yes | Form to change. |
| height | number | – | 0 uses the type's default. |
| left | number | – | For add_control. |
| property_name | string | – | For set_property: the property to set. |
| property_value | – | – | For set_property. null clears it to the default. |
| section | string | – | For add_control on an Access design: the band to put it in, such as Detail, PageHeaderSection or PageFooterSection. xlide_list_forms names the ones a design has. Ignored for a UserForm, which has no… |
| top | number | – | For add_control. |
| width | number | – | 0 uses the type's default. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_export_modules Export modules to files ~169
Writes every VBA module in an Office file to a folder as .bas and .cls files, for source control or review. Previews by default: it reports what it would create, update and leave alone, and writes nothing until apply=true. Only when the user asks for it. The exported files are copies: editing one changes nothing inside the Office file until xlide_import_modules runs.
| Name | Type | Req | Description |
|---|---|---|---|
| apply | boolean | – | Write the files. False previews the plan. |
| delete_stale | boolean | – | Delete .bas and .cls files in the folder that match no module. Ask the user first. |
| export_folder | string | – | Folder to write into. Empty uses a folder named after the file, beside it. |
| file_path | string | yes | Absolute path to the Office file. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_format_cells Format cells ~456
Changes how a range looks: bold and font, fill colour, borders, alignment, number format, and merging. Only what you pass is changed, so each cell keeps the rest of its own format and making a header row bold does not flatten the number formats under it. Colours are RRGGBB or AARRGGBB hex without a leading hash. A number format is an Excel format code such as '#,##0.00' or 'yyyy-mm-dd'; that code is also what decides whether a number is shown as a date. Works on .xlsx, .xlsm and .xlam.
| Name | Type | Req | Description |
|---|---|---|---|
| bold | – | – | Bold on or off. |
| border_color | string | – | Border colour as hex. Defaults to automatic. |
| border_style | string | – | Border on all four sides: thin, medium, thick, double, dotted, dashed, hair, or none to remove. |
| cell_range | string | yes | A1-style range, such as A1:D1, or a single cell. |
| file_path | string | yes | Absolute path to the Excel file. |
| fill_color | string | – | Solid background colour as hex. 'none' clears the fill back to no fill. |
| font_color | string | – | Text colour as hex, such as 'FF0000'. |
| font_name | string | – | Typeface, such as 'Calibri'. |
| font_size | number | – | Points. 0 leaves it alone. |
| horizontal | string | – | left, center, right, fill, justify or general. |
| italic | – | – | Italic on or off. |
| merge | string | – | 'merge' joins the range into one cell, keeping only the top-left value. 'unmerge' splits it back. Empty leaves merging alone. |
| number_format | string | – | Excel format code, such as '#,##0.00', '0%' or 'yyyy-mm-dd'. |
| sheet | string | yes | Worksheet name, matched without case. |
| strike | – | – | Strikethrough on or off. |
| underline | – | – | Single underline on or off. |
| vertical | string | – | top, center, bottom, justify or distributed. |
| wrap_text | – | – | Wrap text in the cell. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_git_changes What changed inside the file ~196
Lists what changed inside an Office file since a git revision, one entry per VBA module and Power Query, with a unified diff. git diff cannot show this: the file is binary, so a commit that changed one line and one that replaced the whole project look the same. Call this before committing, and to review what an agent or a colleague changed. Worksheet cell values are not compared. Defaults to HEAD; pass any revision git understands. Needs the file to be inside a git repository and tracked in that revision.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Office file. |
| include_diff | boolean | – | Include the unified diff. Off gives just what changed and by how much. |
| revision | string | – | Any revision git understands: HEAD, a branch, a tag, a SHA. |
| section | string | – | Only this one, named as a module or a query is named. Empty reports every one. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_import_modules Import modules from files ~158
Reads .bas and .cls files from a folder back into an Office file's VBA project and saves it. Previews by default: it reports which modules would change and by how much, and writes nothing until apply=true. A file whose name matches no module creates one. Document modules such as ThisWorkbook are written but never created. After applying, call xlide_analyze.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_invalidate_signature | boolean | – | Ask the user first. |
| allow_protected | boolean | – | Ask the user first. |
| apply | boolean | – | Write the modules. False previews the plan. |
| file_path | string | yes | Absolute path to the Office file. |
| source_folder | string | yes | Folder holding the .bas/.cls files. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_list_forms List forms ~80
Lists the UserForms in an Office file, or the forms and reports in an Access database, with each one's control count and, for Access, the sections a control can go in. A design's code is a module of the same name, read with xlide_read_module.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Office file. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_list_modules List modules ~89
Lists the VBA modules in an Office file: name, kind (standard, class, document or userform), line count, and a content_token to pass to a guarded write. xlide_project_info returns this and more in one call; use this one when the file is already known and only the module list is wanted.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Office file. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_list_procedures List procedures ~80
Lists the Sub, Function and Property procedures in one module, with each one's kind, scope, line number and signature. Use it to find where to change something without reading a long module in full.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Office file. |
| module_name | string | yes | Module name, matched without case. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_list_projects List Office files ~168
Finds the Office files in this server's workspace and returns their absolute paths, host application and whether their VBA can be opened. Call this first when the user has not named a file. Covers Excel (.xlsm, .xlsb, .xlam, .xls, and .xlsx for Power Query and sheets), Word (.docm, .dotm, .doc), PowerPoint (.pptm, .potm), Access (.accdb, .mdb), and Visual Basic 6 projects (.vbp, whose modules are the files its manifest names). Files whose extension is recognized but not openable are listed with the reason, so a template or add-in is not silently missing.
| Name | Type | Req | Description |
|---|---|---|---|
| subfolder | string | – | Limit the search to this folder. Empty searches every workspace root. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_list_queries List Power Query ~90
Lists the Power Query queries in an Excel workbook: name, group, description, where each loads, and its applied step names. Queries live outside the VBA project, so a plain .xlsx has them too. Call this when asked what a workbook does; a workbook with no macros can still be doing most of its work here.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Excel workbook. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_list_references List project references ~108
Lists the type libraries a VBA project references: the name code uses to qualify them, the kind, and the registry or file path the project recorded. Call it when a name will not resolve, when deciding between early and late binding, or when code works on one machine and not another: a reference names a path and a version, so a project can be broken by the machine rather than by its own code.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Office file. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_list_shapes List shapes and buttons ~138
Lists what sits on a worksheet's drawing layer: buttons, form controls, AutoShapes, text boxes, pictures, charts and groups, each with the cells it covers and, where it has one, the macro a click runs. Call it when asked how a workbook is started, or before renaming a Sub: a button's OnAction names a procedure and nothing rewrites it. ActiveX controls are listed but have no macro; their code is event procedures in the sheet's module.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Excel file. |
| sheet | string | – | One worksheet. Empty lists every sheet's shapes. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_list_sheets List worksheets ~114
Lists the worksheets in an Excel file with their used ranges, whether each is hidden, and the workbook's named ranges. Call this before reading cells, so the range you ask for is one that holds data. Works on .xlsx, .xlsm and .xlam; a .xlsb or .xls keeps its grid in a binary format this server does not read.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Excel file. |
| timeout | number | – | Seconds allowed if Excel has to answer. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_live_read_module Read a module from the editor ~191
Reads a module's text as the running editor holds it, including edits the user has not saved. This is the one read that can differ from xlide_read_module, and the difference is exactly the user's unsaved work. Use it to see what they are actually working on; use xlide_read_module for what is in the file. surface_only=true reads the modern editor's own copy instead, which exists only for a module the user has open in a tab.
| Name | Type | Req | Description |
|---|---|---|---|
| module_name | string | yes | Module name as the editor shows it. |
| pid | integer | – | Which session, by process id. |
| project | string | – | Which project, when two documents are open and both hold a module of this name. |
| surface_only | boolean | – | Read the modern editor's own copy, which only exists for an open tab. Off reads the module through the editor, which always answers. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_live_request Query a live session ~145
Calls one read route on a running xlide_vbide session and returns its JSON. Start with route='agent', which answers with the session's own route table and what each one is for. Allowed routes: agent, agent/examples, agent/routes, analyzer, doctor, engine, model, native, project, projects, state, stats, windows. Routes that drive the editor are deliberately not reachable here.
| Name | Type | Req | Description |
|---|---|---|---|
| pid | integer | – | Which session, by process id. |
| query | string | – | Query string for the route, such as 'name=Module1' or 'type=Range'. |
| route | string | yes | One of the read routes listed above. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_live_sessions Live VBE sessions ~104
Lists the running xlide_vbide sessions this machine can reach: one per Office process that has opened the Visual Basic Editor with the add-in loaded. Use it to find out whether the user has a live editor before asking about what is on their screen. Windows only, and the add-in's local API has to be switched on by the user. Each session is probed before it is listed, because a discovery file outlives the process that wrote it.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
xlide_live_state Live editor state ~110
What the running Visual Basic Editor is doing right now: the module and project on screen, whether the project is in break mode, whether there are unsaved edits, the procedure the caret is in, and whether the analyzer engine is answering. Use it when the user asks about what they are looking at, or before suggesting an edit to a module they may have unsaved changes in.
| Name | Type | Req | Description |
|---|---|---|---|
| pid | integer | – | Which session, by process id. 0 uses the only one, or refuses. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_manage_conditional_format Conditional formatting ~303
Lists, adds or clears conditional formatting: the rules that colour cells by what is in them. rule='cell_is' with an operator and a value paints cells that compare true; rule='expression' takes a formula written for the top-left cell of the range and applied relatively, the way Excel's 'Use a formula' box works; rule='color_scale' and 'data_bar' are the gradient and in-cell bar. The paint itself is the fill and font arguments, which is what Excel calls a differential format.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | list, add or clear. |
| bold | – | – | Make matching cells bold. |
| cell_range | string | – | For add and clear: the range. Empty clears the whole sheet. |
| file_path | string | yes | Absolute path to the Excel file. |
| fill_color | string | – | Fill to paint matching cells, as hex. |
| font_color | string | – | Text colour for matching cells, as hex. |
| formula | string | – | For expression: a formula for the range's top-left cell. |
| operator | string | – | For cell_is: greaterThan, between, etc. |
| other_value | string | – | For cell_is with between: the second value. |
| rule | string | – | cell_is, expression, color_scale or data_bar. |
| sheet | string | yes | Worksheet name, matched without case. |
| value | string | – | For cell_is: the value compared against. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_manage_form Create, rename or delete a form ~273
Creates a UserForm, or an Access form or report, and saves the file. A form is a designer storage and a code module of the same name, and this writes both, which is why it exists rather than xlide_write_module. Renaming and deleting work on Access designs, where both halves move together; for a UserForm they are refused, because nothing here can move the designer storage and doing half of it loses the form. Add controls afterwards with xlide_edit_form, and write its event procedures with xlide_write_module.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | 'create', 'rename' or 'delete'. |
| allow_invalidate_signature | boolean | – | Ask the user first. |
| allow_protected | boolean | – | Ask the user first. |
| caption | string | – | For create: the caption it opens with. |
| design | string | – | For create in Access: 'form' or 'report'. Elsewhere, a form. |
| file_path | string | yes | Absolute path to the Office file. |
| form_name | string | yes | The form or report to act on. |
| height | number | – | For create. |
| new_name | string | – | For rename: the new name. |
| width | number | – | For create. Points for a UserForm, twips for Access. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_manage_hyperlink Hyperlinks ~203
Lists, adds or removes hyperlinks on a worksheet. A link either goes out to a target, which is a URL or a file path, or inside the workbook to a location such as 'Summary!A1'. Pass one or the other. The cell's displayed text is separate from the link and is left alone unless you pass display.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | list, add or remove. |
| cell_range | string | – | For add and remove: the cell or range. |
| display | string | – | For add: text to put in the cell. |
| file_path | string | yes | Absolute path to the Excel file. |
| location | string | – | For add: a place in this workbook, like Summary!A1. |
| sheet | string | yes | Worksheet name, matched without case. |
| target | string | – | For add: a URL or file path to open. |
| tooltip | string | – | For add: the hover text. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_manage_name Defined names ~185
Lists, adds or removes a workbook's defined names. A defined name is what lets a formula say TaxRate rather than Config!$B$7, and VBA reads them too, so renaming or removing one can break code as well as formulas. action='list' changes nothing. refers_to is a formula, so it needs its sheet and its dollar signs: Data!$A$1:$A$50.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | list, add or remove. |
| file_path | string | yes | Absolute path to the Excel file. |
| name | string | – | For add and remove: the defined name. |
| refers_to | string | – | For add: what it points at, such as Data!$A$1:$A$50. |
| scope | string | – | A sheet name to scope it to that sheet. Empty means the workbook. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_manage_rows_columns Insert, delete or size rows and columns ~251
Inserts, deletes, resizes, hides, shows, groups or ungroups whole rows or columns. Inserting and deleting move every reference in the workbook with them: a formula pointing below an inserted row follows it, and one pointing into deleted cells becomes #REF!, exactly as Excel does it. Deleting has no undo, so ask the user first. Widths are in characters and heights in points, which is what Excel's own dialogs use. Works on .xlsx, .xlsm and .xlam.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | insert, delete, resize, hide, show, group or ungroup. |
| collapsed | boolean | – | For group: start the new group collapsed. |
| count | integer | – | How many, counting from first. |
| file_path | string | yes | Absolute path to the Excel file. |
| first | integer | yes | First row or column, 1-based. Column A is 1. |
| sheet | string | yes | Worksheet name, matched without case. |
| size | number | – | For resize: column width in characters, or row height in points. -1 restores the sheet default. |
| which | string | yes | 'rows' or 'columns'. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_manage_sheet Add, remove or change a worksheet ~287
Adds, removes, renames, moves, hides, shows, protects or unprotects a worksheet. Renaming rewrites the formulas and defined names that referred to the old name, so nothing breaks. Removing a sheet takes its cells, tables and everything on it, and formulas elsewhere that pointed at it become #REF!, which has no undo: ask the user first. Protecting a sheet stops editing in Excel; it is not a security boundary and the password is trivially recovered. Works on .xlsx, .xlsm, .xlam.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | add, remove, rename, move, hide, show, protect or unprotect. |
| file_path | string | yes | Absolute path to the Excel file. |
| index | integer | – | For add and move: 0-based position. -1 means the end. |
| new_name | string | – | For rename: the new name. |
| password | string | – | For protect: an optional password. Excel's sheet password is obfuscation, not encryption, so do not use one the user relies on elsewhere. |
| sheet | string | – | The sheet to act on. For add, the name to give the new one. |
| very_hidden | boolean | – | For hide: hide it so that Excel's own Unhide dialog does not list it. Only the VBA editor can bring it back. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_manage_table Excel tables ~203
Lists, adds or removes Excel tables, the ListObjects that Ctrl+T creates. A table names a block so formulas can say Sales[Amount] instead of an address that breaks when rows move, and it is what a Power Query load writes into. action='list' reads them and changes nothing. Adding one takes the column names from the header row of the range you give. Removing one leaves the cells and takes the table, so structured references to it break.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | list, add or remove. |
| cell_range | string | – | For add: the range including its header row, such as A1:D20. |
| file_path | string | yes | Absolute path to the Excel file. |
| sheet | string | – | Worksheet. Empty lists every sheet's tables. |
| table_name | string | – | For add and remove: the table's name. |
| totals_row | boolean | – | For add: give the table a totals row. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_manage_validation Data validation ~300
Lists, adds or clears data validation: what a cell will accept, and the dropdown it shows. kind='list' with formula1 as a comma-separated set of values gives a dropdown; kind='list' with a range reference gives one driven by cells. The other kinds take an operator and one or two formulas, which may be literals or references. Validation stops typing in Excel, not writing through this server, and Excel does not re-check cells that already held a value.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | list, add or clear. |
| allow_blank | boolean | – | Let the cell be left empty. |
| cell_range | string | – | For add and clear: the range. Empty clears the whole sheet. |
| error_message | string | – | What Excel says when the entry is refused. |
| file_path | string | yes | Absolute path to the Excel file. |
| formula1 | string | – | The allowed values. For kind='list', either 'Red,Green,Blue' or a range like $H$1:$H$9. For the others, the bound, such as 0. |
| formula2 | string | – | The second bound, for between and notBetween. |
| kind | string | – | whole, decimal, list, date, time, textLength or custom. |
| operator | string | – | between, greaterThan, lessThan and so on. |
| sheet | string | yes | Worksheet name, matched without case. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_page_setup How a sheet prints ~103
Reads how a worksheet is set up to print: orientation, paper size, margins, the print area, the rows or columns repeated on every page, whether it is scaled to fit, and the header and footer. Call it when asked why a sheet prints the way it does, or before changing a layout somebody set up deliberately.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Excel file. |
| sheet | string | yes | Worksheet name, matched without case. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_project_info Project summary ~95
Everything about one Office file in a single call: its VBA modules with kinds and line counts, its UserForms, its Power Query queries, its worksheets with used ranges and named ranges, and whether the VBA project is password-protected or digitally signed. Call this once per file before working on it. Each module carries a content_token for a guarded write.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Office file. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_read_cells Read cells ~167
Reads a range of cells from a worksheet and returns a grid of values, formulas, or both. Values are what Excel last calculated and stored, so a formula whose inputs changed outside Excel shows its old result. Ask for formulas when you need to understand what a sheet computes, and values when you need what it currently shows. At most 20,000 cells per call.
| Name | Type | Req | Description |
|---|---|---|---|
| cell_range | string | yes | A1-style range, such as A1:D50, or a single cell. |
| file_path | string | yes | Absolute path to the Excel file. |
| include | string | – | 'values', 'formulas' or 'both'. |
| sheet | string | yes | Worksheet name, matched without case. |
| timeout | number | – | Seconds allowed if Excel has to answer. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_read_form Read form design ~119
Reads one form's design: every control with its name, type, the container it sits in, and the properties the developer set. Properties left at their default are not stored and so are not listed. Use it to understand a form's layout, or to see which control an event procedure belongs to.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Office file. |
| form_name | string | yes | Form name, matched without case. |
| include_properties | boolean | – | Include each control's set properties. Off gives just the tree. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_read_module Read module ~196
The canonical way to read VBA. Returns a module's source as the VBA editor shows it, with the attribute header stripped, plus a content_token. Pass that token back as expected_content_token when you write, and the write is refused if anything changed the module in between. start_line and end_line read a slice of a long module; both are 1-based and inclusive.
| Name | Type | Req | Description |
|---|---|---|---|
| end_line | integer | – | Last line to return. 0 means the end. |
| file_path | string | yes | Absolute path to the Office file. |
| include_header | boolean | – | Include the Attribute VB_* header. Off by default: the header is managed for you on write, and editing it by hand is how a module loses its binding to a sheet or a form. |
| module_name | string | yes | Module name, matched without case. |
| start_line | integer | – | First line to return. 0 means the start. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_read_query Read Power Query ~73
Reads one query's M formula, with its description, group, load target and refresh settings. The formula is the whole let ... in expression as the Advanced Editor shows it.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Excel workbook. |
| query_name | string | yes | Query name, matched without case. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_rename_module Rename module ~139
Renames a VBA module everywhere its name is stored, and saves the file. Calls to the module's procedures elsewhere in the project are not rewritten; search for the old name first with xlide_search_modules. Document modules such as ThisWorkbook and Sheet1 cannot be renamed, because the host owns them.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_invalidate_signature | boolean | – | Ask the user first. |
| allow_protected | boolean | – | Ask the user first. |
| file_path | string | yes | Absolute path to the Office file. |
| module_name | string | yes | Module to rename. |
| new_name | string | yes | New name. A valid VBA identifier. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_rules Analyzer rules ~100
The analyzer's rule catalogue: every diagnostic code with its title, default severity, category, whether it mirrors a VBA compile failure, and the MS-VBAL section it enforces. Use it to explain a code to the user, or to decide whether a finding is a compile error or a judgement call.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | – | One rule code. Empty lists them all. |
| search | string | – | Only rules whose code or title contains this. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_run_macro Run a macro ~249
Runs a procedure that already exists in an Office file, in an application this server starts and owns, under a deadline. Windows only, with the application installed. The document opens read-only unless read_only=false, and closes without saving unless save=true. Returns the procedure's return value, anything it logged, and, on a VBA error, the error number and message. The failing line and call stack come from instrumentation applied to injected source, so a procedure already in the document does not carry them; run the same code through xlide_run_vba when you need them. A run that exceeds its timeout reports 'timeout' and the application is terminated. Ask the user before running a macro that changes data.
| Name | Type | Req | Description |
|---|---|---|---|
| args | – | – | Arguments, in order. Scalars only. |
| file_path | string | yes | Absolute path to the Office file. |
| procedure | string | yes | Procedure to call, as 'Proc' or 'Module.Proc'. |
| read_only | boolean | – | Open the document read-only. False lets the macro change it. |
| save | boolean | – | Save the document after the run. Needs read_only=false. |
| timeout | number | – | Seconds before the run is terminated. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_run_tests Run VBA tests ~148
Runs the VBA tests in an Office file: every zero-argument procedure whose name starts with Test. Windows only, with the application installed. Each test is run on its own, so one that hangs is reported as a timeout and the rest still run. Returns pass or fail per test with the assertion message, failing line, call stack and any logged output. Use PyVbaAssert and PyVbaAssertEqual in the tests; the harness supplies them.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Office file. |
| module_name | string | – | Run only this module's tests. Empty runs every module's. |
| timeout | number | – | Seconds allowed for each test. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_run_vba Run VBA source ~232
Injects VBA source into a document and calls one procedure from it, under a deadline. Windows only. Use it to check what a piece of code actually does before writing it into a file, or to read something out of a document that no existing macro exposes. With no file_path it runs in a new empty document. Errors come back as data with the failing line and call stack, never as a dialog. Call PyVbaLog "text" from the code to return output; Debug.Print and MsgBox do not work under automation.
| Name | Type | Req | Description |
|---|---|---|---|
| args | – | – | Arguments, in order. Scalars only. |
| file_path | string | – | Run against this document instead of a new empty one. |
| host | string | – | 'excel', 'word', 'powerpoint' or 'access'. Ignored with file_path. |
| procedure | string | – | Procedure to call. Empty calls the first one in the source. |
| read_only | boolean | – | Open the document read-only. |
| source | string | yes | VBA source to inject. |
| timeout | number | – | Seconds before the run is terminated. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_search_modules Search VBA ~136
Searches every module's source in an Office file and returns each match with its module, line number and the line itself. Use it to find where a name is declared or used before changing it. Plain text by default; set is_regex for a Python regular expression.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Office file. |
| is_regex | boolean | – | Treat query as a regular expression. |
| match_case | boolean | – | Match case. Off by default, because VBA itself ignores case. |
| max_results | integer | – | Stop after this many matches. |
| query | string | yes | Text or pattern to find. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_set_shape_macro Point a shape at a macro ~192
Changes which macro an existing shape or button runs when clicked, and saves the workbook. An empty macro clears the link. Use it after writing a Sub, so a button actually calls it, and after renaming one, because nothing rewrites an OnAction. Give the procedure as Proc or Module.Proc; it must already exist in the project, so write it first. This changes an existing shape only: adding or deleting one is not offered, because a form control lives in four parts that have to agree and a wrong one produces a workbook Excel repairs on open.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Excel file. |
| macro | string | yes | The procedure to run, as Proc or Module.Proc. Empty clears the link. |
| shape_name | string | yes | Shape name, as xlide_list_shapes reports it. |
| sheet | string | yes | Worksheet the shape is on. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_validate_project Validate VBA project ~89
Checks a file's VBA project for structural problems: records that disagree with each other, a module the directory names but the container does not hold, and the like. This is about the container, not about the code; use xlide_analyze for the code. Worth calling before risky work on an old or repaired file.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path to the Office file. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_write_cells Write cells ~233
Writes a rectangular block of values and formulas into a worksheet, starting at one cell, and saves the file. Each row of data is a row of the sheet. A string starting with '=' is written as a formula, as you would type it into Excel 365 with no _xlfn prefixes; anything else is a value. A value written over a formula removes that formula, which is what typing into the cell does. Only the rows you touch are rewritten, so charts, styles, pivot caches and the VBA project are untouched. Ask the user before overwriting cells that hold data. Nothing recalculates until Excel next opens the workbook.
| Name | Type | Req | Description |
|---|---|---|---|
| data | array | yes | Rows of cell values. Numbers, strings, booleans, null for empty, and strings starting with '=' for formulas. |
| file_path | string | yes | Absolute path to the Excel file. |
| sheet | string | yes | Worksheet name, matched without case. |
| start_cell | string | yes | Top-left cell of the block, such as B2. |
| timeout | number | – | Seconds allowed if Excel has to do the write. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_write_module Write module ~317
The canonical way to change VBA. Writes a module's source into the Office file and saves it. It replaces the module's whole source, so send all of it; send the body only, because the attribute header is managed for you. A module that does not exist is created: standard by default, or a class with kind='class'. Pass expected_content_token from your read and the write is refused if the module changed since. The result carries a diff of what the file now holds, read back after saving, which is what to show the user when they ask what changed. After writing, call xlide_analyze and treat any error as a build failure. Ask the user first when the project is protected or signed.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_invalidate_signature | boolean | – | Write to a digitally signed project, dropping the signature. Ask the user first. |
| allow_protected | boolean | – | Write to a password-protected project. Ask the user first. |
| expected_content_token | string | – | The content_token from your read. Leave empty only when creating a module. |
| file_path | string | yes | Absolute path to the Office file. |
| include_diff | boolean | – | Include a unified diff of what changed. Off in a loop that writes many modules and reads none of them back. |
| kind | string | – | Kind for a module being created: 'standard' or 'class'. |
| module_name | string | yes | Module to write, or to create. |
| source | string | yes | The module's complete VBA source. |
Structured output declared, but exposes no named fields.
No examples provided.
xlide_write_query Write Power Query ~382
Changes a workbook's Power Query and saves it. action='set' replaces a query's M formula, creating it if it does not exist; 'rename' renames it and rewrites the queries that reference it by name; 'remove' deletes it and everything that loaded it onto a sheet, which has no undo, so ask the user first. 'load' puts a query's result on a worksheet and 'unload' takes it back off. Loading needs the column names, because writing the connection means naming the columns and knowing them means running the query, which nothing here does; Excel settles them against the real result on the first refresh. A query already loaded keeps its rows until Excel refreshes it.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | 'set', 'rename', 'remove', 'load' or 'unload'. |
| cell | string | – | For load: the table's top-left cell. |
| columns | – | – | For load: the column names the query returns, in order. Required, because the connection has to name them and nothing here runs the query to find out. Excel corrects them on the first refresh. |
| description | string | – | For set: the query's description. |
| file_path | string | yes | Absolute path to the Excel workbook. |
| formula | string | – | For set: the whole M expression, such as 'let Source = 1 in Source'. |
| group | string | – | For set on a new query: the folder in the Queries pane. |
| include_diff | boolean | – | For set: include a unified diff of the M that changed. Nothing to diff for the other actions. |
| new_name | string | – | For rename: the new name. |
| query_name | string | yes | The query to change. |
| sheet | string | – | For load: the worksheet. Empty uses the first. |
Structured output declared, but exposes no named fields.
No examples provided.
What is the XLIDE MCP server?
XLIDE is an MCP server listed in the public MCP registry as io.github.WilliamSmithEdward/xlide-excel-office-vba-mcp. Read, write, analyze, test and diff the VBA in Office files, and the document around it. This page covers its PyPI package (xlide-mcp).
Is the XLIDE MCP server safe to use?
XLIDE scores 54 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the XLIDE MCP server expose?
XLIDE exposes 49 tools: xlide_list_projects, xlide_project_info, xlide_validate_project, xlide_create_project, xlide_doctor, and 44 more. Their descriptions and schemas cost roughly 8,788 tokens of context every time the server is loaded.
Is the XLIDE MCP server still maintained?
XLIDE is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.