Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

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

54 Trust /100
Trust breakdown (7 categories)

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
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.

Install

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

# add to Claude Code
claude mcp add williamsmithedward-xlide-excel-office-vba-mcp -- uvx xlide-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "williamsmithedward-xlide-excel-office-vba-mcp": {
      "command": "uvx",
      "args": [
        "xlide-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "williamsmithedward-xlide-excel-office-vba-mcp": {
      "command": "uvx",
      "args": [
        "xlide-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add williamsmithedward-xlide-excel-office-vba-mcp -- uvx xlide-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "williamsmithedward-xlide-excel-office-vba-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "xlide-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add williamsmithedward-xlide-excel-office-vba-mcp --command uvx --arg xlide-mcp
# ~/.hermes/config.yaml
mcp_servers:
  williamsmithedward-xlide-excel-office-vba-mcp:
    command: "uvx"
    args: ["xlide-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "williamsmithedward-xlide-excel-office-vba-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "xlide-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add williamsmithedward-xlide-excel-office-vba-mcp -t stdio -c uvx -a xlide-mcp
// mcp.json
{
  "mcpServers": {
    "williamsmithedward-xlide-excel-office-vba-mcp": {
      "command": "uvx",
      "args": [
        "xlide-mcp"
      ]
    }
  }
}
Changelog

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.

Diagnostics

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 →

MCP tools · 49 exposed · ~8,788 tokens

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 →

Tool Tokens
xlide_access_catalog ~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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Access database.
includestring'tables', 'queries', 'relationships' or 'all'.
include_systembooleanInclude 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 ~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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Office file.
min_severitystringLowest severity to report: 'error', 'warning' or 'information'.
module_namestringReport 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 ~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.

NameTypeReqDescription
file_pathstringAn existing Office file this module belongs to. Its other modules are analyzed alongside, so calls into them resolve. Overrides host.
hoststring'excel', 'word', 'powerpoint' or 'access'. Empty checks the language alone, with no host object model.
kindstring'standard', 'class', 'document' or 'userform'.
module_namestringName to report problems against.
sourcestringyesThe VBA source to check.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Office file.
timeoutnumberSeconds to wait for the verdict.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_create_project ~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.

NameTypeReqDescription
file_pathstringyesAbsolute path to create. The extension picks the format.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_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.

NameTypeReqDescription
allow_invalidate_signaturebooleanAsk the user first.
allow_protectedbooleanAsk the user first.
expected_content_tokenstringThe content_token from your read, so a module that changed since is not deleted on the strength of a stale look at it.
file_pathstringyesAbsolute path to the Office file.
module_namestringyesModule to delete.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_doctor ~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 ~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.

NameTypeReqDescription
actionstringyes'add_control', 'remove_control' or 'set_property'.
allow_invalidate_signaturebooleanAsk the user first.
allow_protectedbooleanAsk the user first.
captionstringFor add_control on an Access design: the control's caption.
containerstringFor add_control: the Frame or page to put it in.
control_namestringyesThe control to add, remove or change.
control_typestringFor add_control: Label, TextBox, CommandButton, CheckBox, OptionButton, ComboBox, ListBox, Frame, MultiPage, Image, SpinButton and the rest.
file_pathstringyesAbsolute path to the Office file.
form_namestringyesForm to change.
heightnumber0 uses the type's default.
leftnumberFor add_control.
property_namestringFor set_property: the property to set.
property_valueFor set_property. null clears it to the default.
sectionstringFor 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…
topnumberFor add_control.
widthnumber0 uses the type's default.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_export_modules ~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.

NameTypeReqDescription
applybooleanWrite the files. False previews the plan.
delete_stalebooleanDelete .bas and .cls files in the folder that match no module. Ask the user first.
export_folderstringFolder to write into. Empty uses a folder named after the file, beside it.
file_pathstringyesAbsolute path to the Office file.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_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.

NameTypeReqDescription
boldBold on or off.
border_colorstringBorder colour as hex. Defaults to automatic.
border_stylestringBorder on all four sides: thin, medium, thick, double, dotted, dashed, hair, or none to remove.
cell_rangestringyesA1-style range, such as A1:D1, or a single cell.
file_pathstringyesAbsolute path to the Excel file.
fill_colorstringSolid background colour as hex. 'none' clears the fill back to no fill.
font_colorstringText colour as hex, such as 'FF0000'.
font_namestringTypeface, such as 'Calibri'.
font_sizenumberPoints. 0 leaves it alone.
horizontalstringleft, center, right, fill, justify or general.
italicItalic on or off.
mergestring'merge' joins the range into one cell, keeping only the top-left value. 'unmerge' splits it back. Empty leaves merging alone.
number_formatstringExcel format code, such as '#,##0.00', '0%' or 'yyyy-mm-dd'.
sheetstringyesWorksheet name, matched without case.
strikeStrikethrough on or off.
underlineSingle underline on or off.
verticalstringtop, center, bottom, justify or distributed.
wrap_textWrap text in the cell.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_git_changes ~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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Office file.
include_diffbooleanInclude the unified diff. Off gives just what changed and by how much.
revisionstringAny revision git understands: HEAD, a branch, a tag, a SHA.
sectionstringOnly 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 ~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.

NameTypeReqDescription
allow_invalidate_signaturebooleanAsk the user first.
allow_protectedbooleanAsk the user first.
applybooleanWrite the modules. False previews the plan.
file_pathstringyesAbsolute path to the Office file.
source_folderstringyesFolder holding the .bas/.cls files.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Office file.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Office file.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Office file.
module_namestringyesModule name, matched without case.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_list_projects ~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.

NameTypeReqDescription
subfolderstringLimit the search to this folder. Empty searches every workspace root.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_list_queries ~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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Excel workbook.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_list_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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Office file.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_list_shapes ~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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Excel file.
sheetstringOne worksheet. Empty lists every sheet's shapes.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_list_sheets ~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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Excel file.
timeoutnumberSeconds allowed if Excel has to answer.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_live_read_module ~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.

NameTypeReqDescription
module_namestringyesModule name as the editor shows it.
pidintegerWhich session, by process id.
projectstringWhich project, when two documents are open and both hold a module of this name.
surface_onlybooleanRead 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 ~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.

NameTypeReqDescription
pidintegerWhich session, by process id.
querystringQuery string for the route, such as 'name=Module1' or 'type=Range'.
routestringyesOne of the read routes listed above.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_live_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 ~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.

NameTypeReqDescription
pidintegerWhich 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 ~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.

NameTypeReqDescription
actionstringlist, add or clear.
boldMake matching cells bold.
cell_rangestringFor add and clear: the range. Empty clears the whole sheet.
file_pathstringyesAbsolute path to the Excel file.
fill_colorstringFill to paint matching cells, as hex.
font_colorstringText colour for matching cells, as hex.
formulastringFor expression: a formula for the range's top-left cell.
operatorstringFor cell_is: greaterThan, between, etc.
other_valuestringFor cell_is with between: the second value.
rulestringcell_is, expression, color_scale or data_bar.
sheetstringyesWorksheet name, matched without case.
valuestringFor cell_is: the value compared against.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_manage_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.

NameTypeReqDescription
actionstringyes'create', 'rename' or 'delete'.
allow_invalidate_signaturebooleanAsk the user first.
allow_protectedbooleanAsk the user first.
captionstringFor create: the caption it opens with.
designstringFor create in Access: 'form' or 'report'. Elsewhere, a form.
file_pathstringyesAbsolute path to the Office file.
form_namestringyesThe form or report to act on.
heightnumberFor create.
new_namestringFor rename: the new name.
widthnumberFor create. Points for a UserForm, twips for Access.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_manage_hyperlink ~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.

NameTypeReqDescription
actionstringlist, add or remove.
cell_rangestringFor add and remove: the cell or range.
displaystringFor add: text to put in the cell.
file_pathstringyesAbsolute path to the Excel file.
locationstringFor add: a place in this workbook, like Summary!A1.
sheetstringyesWorksheet name, matched without case.
targetstringFor add: a URL or file path to open.
tooltipstringFor add: the hover text.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_manage_name ~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.

NameTypeReqDescription
actionstringlist, add or remove.
file_pathstringyesAbsolute path to the Excel file.
namestringFor add and remove: the defined name.
refers_tostringFor add: what it points at, such as Data!$A$1:$A$50.
scopestringA 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 ~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.

NameTypeReqDescription
actionstringyesinsert, delete, resize, hide, show, group or ungroup.
collapsedbooleanFor group: start the new group collapsed.
countintegerHow many, counting from first.
file_pathstringyesAbsolute path to the Excel file.
firstintegeryesFirst row or column, 1-based. Column A is 1.
sheetstringyesWorksheet name, matched without case.
sizenumberFor resize: column width in characters, or row height in points. -1 restores the sheet default.
whichstringyes'rows' or 'columns'.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_manage_sheet ~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.

NameTypeReqDescription
actionstringyesadd, remove, rename, move, hide, show, protect or unprotect.
file_pathstringyesAbsolute path to the Excel file.
indexintegerFor add and move: 0-based position. -1 means the end.
new_namestringFor rename: the new name.
passwordstringFor protect: an optional password. Excel's sheet password is obfuscation, not encryption, so do not use one the user relies on elsewhere.
sheetstringThe sheet to act on. For add, the name to give the new one.
very_hiddenbooleanFor 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 ~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.

NameTypeReqDescription
actionstringlist, add or remove.
cell_rangestringFor add: the range including its header row, such as A1:D20.
file_pathstringyesAbsolute path to the Excel file.
sheetstringWorksheet. Empty lists every sheet's tables.
table_namestringFor add and remove: the table's name.
totals_rowbooleanFor add: give the table a totals row.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_manage_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.

NameTypeReqDescription
actionstringlist, add or clear.
allow_blankbooleanLet the cell be left empty.
cell_rangestringFor add and clear: the range. Empty clears the whole sheet.
error_messagestringWhat Excel says when the entry is refused.
file_pathstringyesAbsolute path to the Excel file.
formula1stringThe 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.
formula2stringThe second bound, for between and notBetween.
kindstringwhole, decimal, list, date, time, textLength or custom.
operatorstringbetween, greaterThan, lessThan and so on.
sheetstringyesWorksheet name, matched without case.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_page_setup ~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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Excel file.
sheetstringyesWorksheet name, matched without case.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_project_info ~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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Office file.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_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.

NameTypeReqDescription
cell_rangestringyesA1-style range, such as A1:D50, or a single cell.
file_pathstringyesAbsolute path to the Excel file.
includestring'values', 'formulas' or 'both'.
sheetstringyesWorksheet name, matched without case.
timeoutnumberSeconds allowed if Excel has to answer.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_read_form ~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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Office file.
form_namestringyesForm name, matched without case.
include_propertiesbooleanInclude each control's set properties. Off gives just the tree.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_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.

NameTypeReqDescription
end_lineintegerLast line to return. 0 means the end.
file_pathstringyesAbsolute path to the Office file.
include_headerbooleanInclude 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_namestringyesModule name, matched without case.
start_lineintegerFirst line to return. 0 means the start.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_read_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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Excel workbook.
query_namestringyesQuery name, matched without case.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_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.

NameTypeReqDescription
allow_invalidate_signaturebooleanAsk the user first.
allow_protectedbooleanAsk the user first.
file_pathstringyesAbsolute path to the Office file.
module_namestringyesModule to rename.
new_namestringyesNew name. A valid VBA identifier.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_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.

NameTypeReqDescription
codestringOne rule code. Empty lists them all.
searchstringOnly rules whose code or title contains this.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_run_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.

NameTypeReqDescription
argsArguments, in order. Scalars only.
file_pathstringyesAbsolute path to the Office file.
procedurestringyesProcedure to call, as 'Proc' or 'Module.Proc'.
read_onlybooleanOpen the document read-only. False lets the macro change it.
savebooleanSave the document after the run. Needs read_only=false.
timeoutnumberSeconds before the run is terminated.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_run_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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Office file.
module_namestringRun only this module's tests. Empty runs every module's.
timeoutnumberSeconds allowed for each test.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_run_vba ~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.

NameTypeReqDescription
argsArguments, in order. Scalars only.
file_pathstringRun against this document instead of a new empty one.
hoststring'excel', 'word', 'powerpoint' or 'access'. Ignored with file_path.
procedurestringProcedure to call. Empty calls the first one in the source.
read_onlybooleanOpen the document read-only.
sourcestringyesVBA source to inject.
timeoutnumberSeconds before the run is terminated.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_search_modules ~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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Office file.
is_regexbooleanTreat query as a regular expression.
match_casebooleanMatch case. Off by default, because VBA itself ignores case.
max_resultsintegerStop after this many matches.
querystringyesText or pattern to find.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_set_shape_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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Excel file.
macrostringyesThe procedure to run, as Proc or Module.Proc. Empty clears the link.
shape_namestringyesShape name, as xlide_list_shapes reports it.
sheetstringyesWorksheet the shape is on.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_validate_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.

NameTypeReqDescription
file_pathstringyesAbsolute path to the Office file.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_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.

NameTypeReqDescription
dataarrayyesRows of cell values. Numbers, strings, booleans, null for empty, and strings starting with '=' for formulas.
file_pathstringyesAbsolute path to the Excel file.
sheetstringyesWorksheet name, matched without case.
start_cellstringyesTop-left cell of the block, such as B2.
timeoutnumberSeconds allowed if Excel has to do the write.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_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.

NameTypeReqDescription
allow_invalidate_signaturebooleanWrite to a digitally signed project, dropping the signature. Ask the user first.
allow_protectedbooleanWrite to a password-protected project. Ask the user first.
expected_content_tokenstringThe content_token from your read. Leave empty only when creating a module.
file_pathstringyesAbsolute path to the Office file.
include_diffbooleanInclude a unified diff of what changed. Off in a loop that writes many modules and reads none of them back.
kindstringKind for a module being created: 'standard' or 'class'.
module_namestringyesModule to write, or to create.
sourcestringyesThe module's complete VBA source.

Structured output declared, but exposes no named fields.

No examples provided.

xlide_write_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.

NameTypeReqDescription
actionstringyes'set', 'rename', 'remove', 'load' or 'unload'.
cellstringFor load: the table's top-left cell.
columnsFor 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.
descriptionstringFor set: the query's description.
file_pathstringyesAbsolute path to the Excel workbook.
formulastringFor set: the whole M expression, such as 'let Source = 1 in Source'.
groupstringFor set on a new query: the folder in the Queries pane.
include_diffbooleanFor set: include a unified diff of the M that changed. Nothing to diff for the other actions.
new_namestringFor rename: the new name.
query_namestringyesThe query to change.
sheetstringFor load: the worksheet. Empty uses the first.

Structured output declared, but exposes no named fields.

No examples provided.

Common questions

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.