mcpField
X
XLIDE

XLIDE

本地服务
github.com/WilliamSmithEdward开发工具11今天更新

关于 XLIDE

XLIDE 是面向处理 Office 文件的 Agent 的 MCP 服务,可检查和编辑 VBA 项目及文档,并提供受保护的修改、分析、测试和可读的 Git 差异。

主要功能

  1. 01读取和编辑 VBA 模块与窗体
  2. 02检查并编辑工作表、单元格和查询
  3. 03分析项目并运行测试
  4. 04根据内容令牌保护修改
  5. 05以文本差异查看 Office 文件变更

适用场景

  1. 01修复 Office 文件中的宏
  2. 02提交前审查 VBA 变更
  3. 03编辑工作表数据和 Power Query 内容

MCP 相关

XLIDE 通过 MCP 工具提供 Office 项目和文档操作,包括受保护的读取与写入、分析和执行。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"williamsmithedward-xlide": {
"command": "uvx",
"args": [
"xlide-mcp"
]
}
}
}
启动命令uvx xlide-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypixlide-mcp1.0.1

工具

65

收录的工具列表 · 更新于 2 周前

参数类型必填说明
offsetinteger否在此页之前跳过的文件数。
subfolderstring否将搜索范围限制为此文件夹。留空则搜索每个工作区根目录。
max_resultsinteger否最多返回此数量的文件。

详细介绍

xlide-mcp

PyPI version Python versions Downloads CI Security Malware scan OpenSSF Scorecard License: MIT

xlide-excel-word-powerpoint-access-office-vba-mcp MCP server – quality and maintenance score on Glama

用于深入操作 Office 文件的 MCP 服务。 读取、写入、分析和测试 Excel、Word、PowerPoint 和 Access 中的 VBA,并编辑周边文档。Visual Basic 6 项目也能以相同方式打开。

编辑 VBA、Power Query 和 OOXML 工作表无需安装 Office,可在 Windows、macOS 和 Linux 上运行。读取 .xlsb 和 .xls 单元格、写入 .xlsb 单元格以及运行宏或测试,则需要在 Windows 上使用桌面应用。

xlide_list_projects                -> Budget.xlsm
xlide_project_info   Budget.xlsm   -> 4 modules, 2 sheets, 1 query, not signed
xlide_read_module    Helpers       -> the source, and a content token
xlide_write_module   Helpers       -> guarded by that token
xlide_analyze        Budget.xlsm   -> 0 errors, 2 warnings
xlide_run_tests      Budget.xlsm   -> 12 passed

原因

当 Agent 被要求修复宏时,它只能依据复制出来的代码片段工作,不了解项目中的其他内容;或者会要求用户导出模块并在之后粘贴回去。这两种做法都把 Office 文件当成了不透明的整体。VBA 项目、表单设计和 M 代码都可以在完全不打开应用程序的情况下读取和写入。

本服务让这些操作触手可及,同时也设定了边界。如果模块自读取后发生了变化,写入就会被拒绝。分析出错会导致更改失败。运行操作会在服务创建并受截止时间限制的应用程序中进行。任何无法撤销的操作都由用户决定。

实现

目录语言状态
python/Python 3.10+参考实现

其他语言的实现放在同级目录中。Python 实现具有规范性:它跟踪上游库,其他语言的移植版本则跟踪它。请参阅 docs/porting.md。

安装并运行

pip install xlide-mcp              # reads and writes files, any platform
pip install "xlide-mcp[live]"      # adds running macros and tests, Windows
xlide-mcp --root /path/to/your/files

将客户端指向它。对于 Claude Desktop、Claude Code 或任何通过 stdio 启动服务的客户端:

{
  "mcpServers": {
    "xlide": {
      "command": "xlide-mcp",
      "args": ["--root", "/path/to/your/files"]
    }
  }
}

对于 VS Code,将以下内容放入工作区根目录下的 .vscode/mcp.json。VS Code 在这里使用 servers;上面的通用 .mcp.json 格式使用 mcpServers。

{
  "servers": {
    "xlide": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "xlide-mcp[live]", "xlide-mcp", "--root", "${workspaceFolder}"]
    }
  }
}

在 VS Code 中运行 MCP: List Servers 以启动 xlide;如果未注册,请检查其输出。服务启动时会将版本和允许的根目录打印到 stderr。VS Code 配置格式和命令详见 VS Code 的 MCP 指南。

也可以不安装任何内容,让 uv 在首次运行时获取它。uv 是一个二进制文件,并会安装自己的 Python,因此即使机器上两者都没有,也仍可运行:

{
  "mcpServers": {
    "xlide": {
      "command": "uvx",
      "args": [
        "--from", "xlide-mcp[live]",
        "xlide-mcp", "--root", "/path/to/your/files"
      ]
    }
  }
}

live extra 在所有平台上都可以安全启用:它引入的依赖标记为 sys_platform == 'win32',因此在 Windows 之外不会解析出任何内容,同一配置可在任何地方使用。若只需要文件层,请删去 --from 参数对。uvx 默认使用最新发布版本,除非指定版本,例如 [email protected]。

文件层提供了一个 Dockerfile,它无需安装 Office。将存放文件的文件夹挂载到 /workspace,因为这是容器的边界根目录:

docker build -t xlide-mcp .
docker run --rm -i -v "$PWD:/workspace" xlide-mcp

--root 是安全边界。工具接受的每个路径都会经过解析(包括符号链接),只有位于某个根目录内时才会被允许。

添加 --read-only 可允许读取和分析,并拒绝所有写入操作。

在新客户端中,先调用 xlide_doctor:它会报告工作区根目录、已安装的层、这台机器上的 Office 应用,以及每个应用是否具有模块注入所需的信任中心设置。

功能

文件——VBA 项目及其所在的文档。大多数文件工具无需安装 Office;二进制 Excel 网格需要在 Windows 上使用 Excel。

代码项目

发现xlide_list_projects、xlide_project_info、xlide_validate_project、xlide_create_project、xlide_doctor
模块xlide_list_modules、xlide_read_module、xlide_write_module、xlide_edit_module、xlide_rename_module、xlide_delete_module、xlide_list_procedures、xlide_search_modules
分析xlide_analyze、xlide_analyze_source、xlide_rules
窗体xlide_list_forms、xlide_read_form、xlide_manage_form、xlide_edit_form
引用和目录xlide_list_references、xlide_manage_reference、xlide_access_catalog、xlide_read_access_query
源代码管理xlide_export_modules、xlide_import_modules、xlide_git_changes
xlide_edit_module 接受 preview_only=true,用于检查一批行编辑并返回拟议的差异,而不保存。只要模块没有更改,预览的内容令牌就可用于应用相同的编辑。
xlide_search_modules 会为匹配的模块返回令牌,因此其行号也可以直接传递给受保护的编辑。
可使用 offset 和 next_offset 对宽泛的搜索结果分页;total_match_count 会报告所有页面中匹配行的数量。
xlide_list_procedures 会为所列行的受保护编辑返回内容令牌。读取空模块时,会返回空正文和令牌。
写入内容相同的模块或应用未更改的模块导入时会跳过保存;响应会报告 saved=false。
应用未更改的导出时,现有 .bas 和 .cls 文件会保持不变。
可按行读取较长的 Power Query 公式;读取结果会返回令牌,xlide_write_query 可用它拒绝过时的更改。
大型窗体设计可以使用 offset 和 next_offset 分页读取。
Office 文件、VBA 模块和 Power Query 列表也会在有后续页面时返回 next_offset。
对于元素密集的绘图层,可将 sheet 传递给 xlide_list_shapes,并根据其 next_offset 读取后续形状。
工作表列表会将无法读取的可见性或数据透视表元数据标记为未知;读取格式化或富文本单元格时,如果解码失败,会指出单元格,而不是返回空白。
基于 Excel 的工作表调查在输出格式错误时会拒绝返回结果,而不是丢弃工作表。
基于 Excel 的单元格读取在网格不完整时会拒绝返回结果,而不是将其标记为完整范围。
窗体摘要列表使用相同的 offset 和 next_offset 分页方式。
读取窗体时会区分缺少属性或区域与读取失败;无法读取 Access 报表集合时会报错,而不会将其显示为空。
较长模块的过程列表也会返回 next_offset。
可使用 offset 和 next_offset 分页读取结构验证问题。
Access 目录列表会为每个包含的集合返回一个 next_offsets 条目。
目录中会预览较长的已保存查询 SQL;xlide_read_access_query 会通过内容令牌按字符分页返回完整文本。
表格、名称、验证、条件格式、超链接和批注的 list 操作也接受 offset 和 max_results,并返回 next_offset。
合并单元格时只保留左上角的值。除非传入 allow_overwrite=true,否则 xlide_format_cells 不会清除其他值或公式。
xlide_sort_rows 使用有序键对范围、表格或筛选结果排序;xlide_remove_duplicates 会保留第一个匹配行。xlide_copy_cells 使用“选择性粘贴”选项在工作表之间复制,并要求传入 allow_overwrite=true。
xlide_update_shape 可更改形状的位置、名称、文本、替代文本或可见性,而不会将其删除;它还可更改窗体控件的关联单元格或列表范围。

xlide_check_cells 会列出 Excel 的绿色三角形错误检查结果,包括以文本形式存储的数字和不一致的公式;长列表支持分页。

周边文档

Power Queryxlide_list_queries、xlide_read_query、xlide_write_query(设置、重命名、移除、加载、卸载)
工作表和单元格xlide_list_sheets、xlide_read_cells、xlide_write_cells、xlide_evaluate_formula、xlide_check_cells、xlide_format_cells、xlide_sort_rows、xlide_remove_duplicates、xlide_copy_cells
结构xlide_manage_sheet、xlide_manage_rows_columns
表格和名称xlide_manage_table、xlide_manage_name、xlide_manage_filter
规则、链接和批注xlide_manage_validation、xlide_manage_conditional_format、xlide_manage_hyperlink、xlide_manage_comment、xlide_page_setup
形状和图表xlide_list_shapes、xlide_manage_shape、xlide_update_shape、xlide_set_shape_macro、xlide_add_chart

执行 - 在 Windows 上使用桌面应用程序。

xlide_run_macro、xlide_run_vba、xlide_run_tests、xlide_compile_check 你的 Office 应用程序——带桌面应用程序的 Windows。这是此服务在用户正在运行的应用程序内执行操作的唯一场景,而且只针对指定的文件。

xlide_is_open、xlide_open_in_app、xlide_close_in_app

实时编辑器——Visual Basic Editor 中正在运行的 xlide_vbide 会话。

xlide_live_sessions、xlide_live_state、xlide_live_request、xlide_live_read_module

xlide_live_read_module 支持读取未保存的长源代码的指定行范围,并返回内容令牌,以便将该源代码与已保存的模块进行比较。 如果分析工具返回的发现结果超出一页,会返回 next_offset,同时保留完整的严重性计数。

格式
主机扩展名
Excel.xlsm .xlsb .xlam .xls,以及仅限非 VBA 内容的 .xlsx
Word.docm .dotm .doc
PowerPoint.pptm .potm
Access.accdb .mdb
Visual Basic 6.vbp

这些格式均支持 VBA 读取和写入。.xlsx、.xlsm、.xlsb 和 .xlam 支持 Power Query;.xlsx、.xlsm 和 .xlam 支持基于包的工作表编辑。.xlsx 按设计不包含 VBA 项目,但仍列在其中,因为它的查询和工作表都可以完整访问。

对于这些集合之外的已识别扩展名,列表会说明无法打开的原因。列表中的每个文件都会说明情况,不会无故消失。

Excel、Word 和 PowerPoint 不会在启用宏的文件中写入 VBA 项目,直到其中首次创建宏。因此,一个尚未写入代码的 .xlsm 不会包含项目。这是正常文件:列表会返回空结果,而写入第一个模块后,就会为它创建应用程序本应创建的项目。 从未包含过代码的 Access 数据库同样可能没有项目;xlide_write_module 会在写入第一个模块时创建项目,或者 xlide_create_project 会在现有 .accdb 中添加一个空项目。

.xlsb 将网格保存在二进制记录中,.xls 则位于复合文件内;两者都不是 OOXML。在安装 Excel 的 Windows 上,这两种格式都会通过 Excel 处理,结果会显示 source: excel 和 recalculated: true,因为这些值是在打开工作簿时生成的。 此路径仅返回值;无法通过此服务写入 .xls 单元格。

查看变更

对于 git 来说,Office 文件就是一个二进制块,因此,修改了一行 VBA 的提交和替换了整个项目的提交,都会显示为同样的三个词:Binary files differ。有两种解决办法,两者都通过同一个渲染器读取文件。

xlide_git_changes 会报告自任意版本以来的变更,每个模块和查询各列一项,并附带统一差异。可在提交前调用,也可用来审查 Agent 刚完成的操作。

xlide-mcp --textconv 是一个 git textconv 驱动程序。配置一次后,git 查看文件差异时就会将其显示为文本:

echo '*.xlsm binary diff=vba' >> .gitattributes
git config diff.vba.textconv "xlide-mcp --textconv"
git config diff.vba.cachetextconv true
 Public Sub Greet()
-    MsgBox "hello"
+    MsgBox "hello, world"
+    Debug.Print Now
 End Sub

这就是对 .xlsm 执行 git diff。git show 和 git log -p 也会进行转换。

在 VS Code 中与 XLIDE 配合使用时,还有第三种方式。每次写入都会告知正在运行的 XLIDE 发生了什么变化,而模块写入会同时携带修改前和修改后的内容,因此 XLIDE 会在项目树中将该模块标记为 Agent 编辑,打开差异,并提供保留和还原选项,就像处理自己的 Agent 工具所做的修改一样。这需要 XLIDE 监听此类通知;docs/xlide-vscode-bridge.md 介绍了相关协议。如果没有运行 XLIDE,则不会有任何变化。

使用 binary diff=vba,而不是单独使用 diff=vba。binary 宏表示 -diff -merge -text,后面的 diff=vba 只会覆盖其中的 -diff,因此文件仍保留 -text,git 也不会对容器应用行尾转换,以免损坏容器。

在 VS Code 中,差异的任一侧如果来自 git 历史记录,都会通过驱动程序渲染,因为 git 扩展会使用 git show --textconv 读取对象。因此,比较工作簿的两个版本时会显示 VBA。源代码管理面板中的工作树差异则不会:那里的右侧是磁盘上的文件,仍是二进制文件。

这两种方式都会渲染 VBA、Power Query 和工作表清单。不包含单元格值,并且每个渲染文件的第一行都会说明这一点,因为不了解范围的读者可能会把空差异误认为工作簿没有变化。无论采用哪种方式,git 仍会存储二进制块,因此合并仍以二进制方式进行。

运作规则

这些规则写在服务自身的说明中,因此每个连接的 Agent 都会读取,无论用户是否进行过配置。

  • 文件中的 VBA 是唯一可信来源。导出的 .bas 和 .cls 文件只是副本,可能会过时。
  • 读取操作会返回内容令牌。写入时传回该令牌;如果期间模块发生了变化,写入就会被拒绝。
  • 每次变更后都会进行分析,出现错误即视为构建失败。
  • 运行操作发生在服务创建的 Office 实例中,因此可以终止该实例。只有通过上述三个工具,才会操作用户自己的应用程序,并且仅针对指定文件:只有当调用要求保存或放弃时,才会关闭未保存的工作;只有在收到结束进程的请求时才会结束进程,且只结束 Windows 标识为持有该文件的进程。
  • 难以撤销的操作由用户决定:删除模块、覆盖包含数据的单元格、写入已签名或受密码保护的项目。在调用中携带允许这些操作的标记之前,覆盖单元格以及写入已签名或受保护的项目都会被拒绝。
  • 单元格值是 Excel 上次计算出的结果。在此处写入的公式,在 Excel 下次打开文件之前不会在文件中产生结果。calculate=true 会通过 pyOfficeEditor's 公式引擎计算结果,并指出无法计算的单元格。

安全

请通过私密漏洞报告报告漏洞,而不要提交公开议题。SECURITY.md 说明了需要提供哪些信息,以及哪些版本会获得修复。

CodeQL 和 Semgrep 会扫描服务和发布工作流,pip-audit 会检查运行时依赖项,而 ClamAV 和 YARA-X(使用 YARA Forge 规则)会扫描每个受版本控制的文件,以及构建的 wheel 和 sdist;这些扫描会在每次推送、拉取请求、每日运行和发布时执行。发现意外问题、扫描警告或缺少扫描都会阻止发布。每次成功发布都会附带安全报告和 SARIF 结果,供下载。Dependabot 会提出依赖项和工作流更新,供审核。

基于

pyOpenVBA以纯 Python 读写 Office 文件中的 VBA、UserForms 和 Power Query。
pyOfficeEditor文档操作层:单元格、公式、格式、表格、验证、行和列。
pyVBAanalysis静态分析器:165 项诊断,针对每种宿主的对象模型进行评估。
pyVBAharness在桌面版 Office 中运行 VBA,并由强制执行时限的监督器进行监控。
XLIDE for VS Code工具层、内容令牌保护机制和 Agent 指令的来源。
xlide for the VBExlide_live_* 工具所连接的实时编辑器会话。

贡献

cd python
pip install -e ".[dev,live]"
python -m pytest              # the file layer, no Office needed
python -m pytest -m live      # the rest, real Office, Windows only
python -m ruff check src tests tools

contract/ 下生成的契约必须保持最新;否则测试套件会失败。修改工具后:

python tools/export_contract.py
python tools/export_conformance.py

许可证

MIT。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。