mcpField
A
ASTra

ASTra

本地服务
attentionform.com生产力01 天前更新

关于 ASTra

ASTra 是面向编码助手和自定义 LLM Agent 的 Word 文档 MCP 服务,可检查、搜索、修改和导出 .docx 文件。它以事务式编辑、保存时的 XML 架构校验和目录沙箱为特点。

主要功能

  1. 01检查和搜索文档内容
  2. 02批量执行文档编辑操作
  3. 03创建并导出 .docx 文件
  4. 04保存时校验 XML 架构
  5. 05限制文件访问目录

适用场景

  1. 01搜索文档中的特定文本
  2. 02批量修改 Word 文档结构与内容
  3. 03创建报告、备忘录或空白文档
  4. 04在保存前验证文档修改

MCP 相关

ASTra 通过 stdio 暴露 19 个工具,供 MCP 客户端检查、查询、修改和导出 Word 文档。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"com-attentionform-astra": {
"command": "npx",
"args": [
"-y",
"@attentionform/astra-mcp-server"
]
}
}
}
启动命令npx -y @attentionform/astra-mcp-server

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

安装包
npm@attentionform/astra-mcp-server0.4.1

工具

19

收录的工具列表 · 更新于 1 天前

参数类型必填说明
pathstring是
authorstring否
sessionIdany否已弃用:会话 ID 由服务器生成(sess_<uuid>);请省略 sessionId 并使用返回的 ID。客户端提供的值会被 E_VALIDATION 拒绝(确定性 ID 仅供测试使用,需通过 --allow-client-session-ids 启用)。
allowMacrosboolean否
stripMacrosboolean否
summaryOnlyboolean否
validationTimeoutMsinteger否

详细介绍

@attentionform/astra-mcp-server

面向 ASTra 文档引擎的官方 Model Context Protocol(MCP)服务。

@attentionform/astra-mcp-server 通过标准输入/输出(stdio)提供全面的 19 种 Agent 工具接口。它让 AI 编码助手(包括 Claude Desktop、Cursor、Windsurf、Cline 和自定义大模型 Agent)能够检查、查询、修改和导出 Microsoft Word(.docx)文档,同时保证事务完整性且不会破坏架构。


快速开始

使用 npx 运行(推荐)

无需安装。通过 --allowed-dir 传入文档目录:

npx -y @attentionform/astra-mcp-server --allowed-dir /path/to/your/documents

安全提示: ASTra 会严格实施目录沙箱限制。服务只会在通过 --allowed-dir(或 ASTRA_EXTRA_DOC_ROOTS 环境变量)明确指定的目录中读取和写入文件。路径必须是绝对路径,且在磁盘上确实存在。指定的文件夹就是完整的边界:系统临时文件夹不会自动添加。指定文件夹本身或其上层目录中的符号链接会被跟随;其下方指向文件夹外部的链接则会被拒绝。

验证。 open_document 会检查文件并报告 valid、invalid、timed-out 或 skipped;它不会拒绝打开文件。若保存操作没有新增验证错误(相较于文件原有错误),则允许保存。服务标志:--strict-validation(也可设为 ASTRA_STRICT_VALIDATION=1)会拒绝所有错误;--open-validation-timeout <ms>(也可设为 ASTRA_OPEN_VALIDATION_TIMEOUT_MS)用于设置打开时的等待时间,默认值为 5000。

宏和大小限制。 open_document 接受 allowMacros(保留宏部件)或 stripMacros(移除宏部件及其所有引用)。防 ZIP 炸弹的上限由环境变量 ASTRA_MAX_RATIO(默认值为 100)和 ASTRA_MAX_UNCOMPRESSED_BYTES 设置。

全局安装
npm install -g @attentionform/astra-mcp-server
astra-mcp-server --allowed-dir /path/to/your/documents

客户端集成

添加一段简单的 JSON 配置,即可将 ASTra 接入 AI Agent:

1. Claude Desktop

将 ASTra 添加到 Claude Desktop 配置文件中:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "astra": {
      "command": "npx",
      "args": [
        "-y",
        "@attentionform/astra-mcp-server",
        "--allowed-dir",
        "/absolute/path/to/your/documents"
      ],
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}
2. Cursor IDE

在项目根目录下创建或编辑 .cursor/mcp.json:

{
  "mcpServers": {
    "astra": {
      "command": "npx",
      "args": [
        "-y",
        "@attentionform/astra-mcp-server",
        "--allowed-dir",
        "${workspaceFolder}"
      ]
    }
  }
}
3. Windsurf

添加到 Windsurf MCP 配置文件(~/.codeium/windsurf/mcp_config.json):

{
  "mcpServers": {
    "astra": {
      "command": "npx",
      "args": [
        "-y",
        "@attentionform/astra-mcp-server",
        "--allowed-dir",
        "/absolute/path/to/your/documents"
      ]
    }
  }
}
4. Cline(VS Code 扩展)

在 Cline 的 MCP 设置选项卡中配置:

  • 服务名称: astra
  • 命令: npx
  • 参数: ["-y", "@attentionform/astra-mcp-server", "--allowed-dir", "${workspaceFolder}"]
架构新鲜度(工具变更时)

每个提供的工具都会在 schemas/mcp/ 下附带一份带版本戳的 JSON 副本(x-generated-from 标明服务构建版本)。客户端会缓存这些架构:

  • 内存缓存(Claude Desktop 在应用生命周期内缓存,Cursor 和 Zed 按会话缓存):重启宿主应用以获取新工具。
  • 磁盘缓存(以文件形式引入 JSON 副本的配置):重新运行导出,然后让客户端指向新目录:
npx -y @attentionform/astra-mcp-server --dump-schemas ./fresh-schemas
npx -y @attentionform/astra-mcp-server --check-schemas ./fresh-schemas

当所有版本戳都与已安装的服务匹配时,--check-schemas 会以 0 退出;否则会打印过期文件警告并以 1 退出。CI 会在每次推送时重新生成并对比 schemas/mcp/,因此未更新副本的架构变更会导致构建失败。


19 种 MCP 工具

ASTra 提供一套完整的 19 种工具,并按功能组织。服务会通过 tools/list 返回全部 19 种工具:

open_document

将 .docx 文件打开到隔离的内存编辑会话中。

参数:

参数类型必填描述
pathstring是允许目录内 .docx 文件的绝对路径。
sessionIdstring否服务器生成的会话 ID(不建议提供;仅用于测试)。
summaryOnlyboolean否省略或设为 true 时返回精简摘要;设为 false 时包含完整的结构摘要和样式 XML。
allowMacrosboolean否按字节原样保留宏部分。
stripMacrosboolean否加载时移除宏部分。
authorstring否本会话中未指定作者的修订和批注所用的默认作者(回退为服务器的 ASTRA_AUTHOR,然后是 ASTra)。操作自身的 author 优先。
validationTimeoutMsinteger否打开文件时等待验证器的时长,以毫秒为单位。0 表示跳过检查。默认值为 5000,或使用服务器标志 --open-validation-timeout / ASTRA_OPEN_VALIDATION_TIMEOUT_MS。

返回: { ok: true, sessionId, revision, summary, evicted, validation }。当文件已有验证器错误时,validation 为 { status: "valid" }、{ status: "invalid", preExistingErrors, messages, baselineComparable, note }、{ status: "timed-out" } 或 { status: "skipped" }。


inspect_document

使用 Token-Optimized Outline Notation(TOON)检查文档结构。

参数:

参数类型必填描述
sessionIdstring是活动会话标识符。
fidelitystring否"compact"(默认)、"standard" 或 "full"。
sectionIdstring否将大纲限制在指定章节。
maxTextLengthnumber否将运行文本截断至指定字符数。
offsetnumber否文档节点的分页起始行(默认值:0)。超出最后一个节点的偏移量将被拒绝。
limitnumber否返回的最大节点行数(默认值:50,最大值:200)。
aroundNodestring否检查窗口中心位置的节点 ID。
windownumber否aroundNode 周围行数的一半(默认值:5)。
maxTokensnumber否在完整行边界处截断的 Token 预算(200–8000)。
includearray否可选的要包含的审阅记录:["comments"]、["revisions"] 或两者。
reviewOffsetnumber否include 列表的起始记录(默认值:0)。对批注和修订分页,但不移动节点窗口。
reviewLimitnumber否每个 include 列表的记录数(默认值:50;超过 50 的值会限制为 50)。
commentIdnumber否要检查的特定批注 ID。需要 include:["comments"]。
revisionIdnumber否要检查的特定跟踪修订 ID。需要 include:["revisions"]。

返回: { ok: true, sessionId, revision, fidelity, palette, toonText, rowCount }


search_content

快速搜索文本,返回匹配的稳定节点 ID 和文本片段。

参数:

参数类型必填描述
sessionIdstring是活动会话标识符。
querystring是搜索查询字符串(1–500 个字符)。
regexboolean否将查询视为正则表达式(默认值:false)。
scopestring否搜索范围:"body"(默认)、"comments" 或 "all"。

返回: { ok: true, sessionId, matches: [{ id, preview, cells? }], truncated? }。最多返回 50 个匹配项;truncated: true 表示还有更多结果。表格匹配项会列出 cells,最多包含五个单元格地址,例如 t_001:r3c1,可将其作为 replace、style、namedStyle、clearFormat、hyperlink、bookmark 或 comment 的 target。单元格地址格式为 <tableId>:r<row>c<col>,行和列从 1 开始,与 inspect_document 打印网格时一致(包含多个段落的单元格需追加 :p<n>)。

execute_batch

执行包含类型化操作的原子数组,并提供架构验证和回滚保证。

参数:

参数类型必需描述
sessionIdstring是活动会话标识符。
operationsarray是包含 1 到 500 个类型化操作对象的数组。
sequentialboolean否按顺序依次应用操作(默认值:true)。
rollbackOnErrorboolean否如果任何操作失败,则回滚整个批次(默认值:true)。
maxStepsnumber否中止前的最大执行步数。
allowedDirstring否读取图像 filePath 的受限目录。
styleGuidestring否此批次的样式指南覆盖项(名称或 .md 路径)。

返回: { ok: true, sessionId, appliedCount, revision, createdNodeIds, revisionsPending, revisionsUnresolved?, revisionsRemedy?, revisionResolution? }。revisionsPending 统计所有剩余修订元素的数量(一次移动操作按其中每个修订标记分别计数)。如果某个 trackedChange 操作留下了无法解决的修订,revisionsUnresolved 会统计这些修订的数量,而 revisionsRemedy 会列出类型、节点和原因,而不是重复列出 acceptAll。如果被移除的段落带有书签、批注或失效链接,revisionResolution 还会列出 removedBookmarks、removedComments 和 staleLinks。


save_document

根据 ECMA-376 架构验证所有已修改的 XML 部件,并将更改提交到磁盘。

参数:

参数类型必需描述
sessionIdstring是活动会话标识符。
outPathstring否目标路径(默认为原始会话路径)。
messagestring否文档历史记录的提交日志消息。
authorstring否文档历史记录中的作者姓名。
allowMacrosboolean否明确指定宏策略,以便保存时保留宏。
stripMacrosboolean否明确指定宏策略,以便保存时移除宏。
strictboolean否拒绝所有验证器错误,包括文件打开时已存在的错误。也会拒绝共享同一 w14:paraId 的段落,而保存操作通常会对其重新编号。默认关闭;也可通过服务器标志 --strict-validation / ASTRA_STRICT_VALIDATION=1 启用。

返回: { ok: true, sessionId, path, revision, commitOid, validation }。如果文件原本已有验证器错误,而编辑没有新增错误,则 validation 为 { ok: false, tolerated: true, preExistingErrors, introducedErrors: 0, messages };否则为 { ok: true }。


close_document

关闭活动会话并释放所有内存中的资源。

参数:

参数类型必需描述
sessionIdstring是活动会话标识符。

返回: { ok: true, sessionId }


new_document

使用执行模板创建新的 .docx 文件,并将其打开到一个会话中。

参数:

参数类型必需描述
outPathstring是允许目录内的目标文件路径。
templatestring否模板类型:"report"、"memo" 或 "blank"(默认值:"blank")。
forceboolean否如果文件已存在,则覆盖它(默认值:false)。
styleGuidestring否要附加的内置指南名称或指南 .md 路径。
authorstring否此会话中未指定作者的修订和批注的默认作者(若未设置,则使用服务器的 ASTRA_AUTHOR,再回退到 ASTra)。操作自身的 author 优先。
sessionIdstring否由服务器生成的会话 ID(不建议提供;仅供测试使用)。

返回: { ok: true, path, sessionId, revision, template, bytes }


compose_document

将 Markdown 字符串编译为 OOXML 结构,并将其整洁地应用到文档中。

参数:

参数类型必填描述
sessionIdstring是活动会话标识符。
markdownstring是要编译并应用的 Markdown 源文本。
allowedDirstring否用于解析相对图片和图表路径的沙盒目录。
templatestring否替换 "report"、"memo" 或 "blank" 的种子内容。仅适用于会话中的首次 compose。
styleGuidestring否用于设置排版样式的内置指南名称或指南 .md 路径。
dollarMathboolean否将 $...$ 语法视为行内数学表达式(默认值:false)。
anchorstring否块的插入位置:节点 ID、"start" 或 "end"(默认值:最后一个节点之后)。
positionstring否相对于 anchor 的位置:"before" 或 "after"(默认值)。

返回值: { ok: true, sessionId, appliedCount, revision, createdNodeIds, persistentIds? }。createdNodeIds(会话中首次 compose 时为 md_0001…,下一次为 md2_0001…,后续依此类推)在整个会话中均有效;persistentIds 将每个新建段落映射到保存文件中对应的 ID,以便重新打开文件后定位(表格会按位置重新编号,因此不会列出)。


在当前会话中创建且未更改的内置模板,其示例内容会在 compose 时被替换。如果模板经过编辑、从外部模板加载,或在后续会话中重新打开,compose 会保留其现有内容,并附加新内容。

import_document

在目录沙盒限制下,将磁盘上的 Markdown 文件导入已打开的会话。

参数:

参数类型必填描述
sessionIdstring是活动会话标识符。
pathstring是允许目录中的磁盘 Markdown 文件路径。
allowedDirstring否用于解析相对图片和图表路径的沙盒目录。
templatestring否验证模板种子内容的处理方式("report"、"memo"、"blank")。
styleGuidestring否附加样式指南(内置名称或指南 .md 路径)。
dollarMathboolean否将 $...$ 语法视为行内数学表达式(默认值:false)。

返回值: { ok: true, sessionId, appliedCount, revision }


export_document

将当前内存状态渲染为 PDF、HTML 或 Markdown。

参数:

参数类型必填描述
sessionIdstring是活动会话标识符。
formatstring是导出格式:"pdf"、"html" 或 "markdown"。
outPathstring否允许目录中的目标文件路径。
tagged_pdfboolean否仅适用于 PDF:生成带标签(无障碍)的渲染结果(默认值:true)。
taggedboolean否tagged_pdf 的别名。
strictboolean否仅适用于 PDF:遇到预检阻止项时失败关闭(默认值:false)。
imageModestring否仅适用于 Markdown:"file"(需要 outPath;将图片提取到资源目录下唯一的代次目录中;提供 outPath 时为默认值)或 "embed"(base64 数据 URI)。
assetPrefixstring否仅适用于 Markdown:当 imageMode 为 "file" 时,自定义资源目录名称/前缀。

返回值: { ok: true, format, path, bytes, content }


visual_inspect

生成 2D 空间布局遥测数据,并可选择生成无头页面渲染图。

参数:

参数类型必填描述
sessionIdstring是活动会话标识符。
pagesarray否要检查/渲染的页码(从 1 开始,最多 4 页)。
withVisualboolean否生成无头渲染图像(默认:false)。
formatstring否图像格式:"png"(默认)或 "jpeg"。
jpegQualitynumber否JPEG 质量系数(1–100)。
dpinumber否渲染分辨率(72–300,默认:150)。
outputDirstring否启用 withVisual 时,将图像写入此文件夹(如果不存在则创建),文件名为 <document>-page-<n>.png,供无法读取服务端临时文件夹的客户端使用。必须位于允许的文件夹内,例如文档路径。默认值:服务端临时文件所在文件夹。

返回: { ok: true, sessionId, telemetry, images: [{ page, path }], outDir }

telemetry 中的线框图会显示带有表头和首行的 [TABLE: n cols]、- 和 1. 列表标记,以及用于着色单单元格表格的 [CALLOUT]。


get_document_history

获取文档先前提交的版本。

参数:

参数类型必填描述
sessionIdstring是活动会话标识符。
limitnumber否要获取的最大提交条目数(默认:20,最多:100)。
offsetnumber否提交日志的分页偏移量。

返回: { ok: true, history: [{ oid, message, author, timestamp }] }


preview_revert

模拟回滚,但不应用更改。

参数:

参数类型必填描述
sessionIdstring是活动会话标识符。
stepsnumber否要回滚的提交数。
commitOidstring否要预览还原的特定提交哈希目标。

返回: { ok: true, targetOid, affectedFiles, dirty }


revert_document

将文档状态回滚到之前的某个提交,并创建一个仅追加的还原提交。

参数:

参数类型必填描述
sessionIdstring是活动会话标识符。
stepsnumber否要回滚的提交数。
commitOidstring否要还原到的特定提交哈希目标。
discardUnsavedboolean否丢弃未提交的更改(默认:false)。
messagestring否还原提交消息(≤ 500 个字符)。
authorstring否还原提交的作者标识符(≤ 100 个字符)。
reasonstring否还原日志的审计原因字符串(≤ 500 个字符)。

返回: { ok: true, sessionId, path, revertedToCommit, revision }


redo_document

重新应用上次还原操作撤销的版本。

参数:

参数类型必填描述
sessionIdstring是活动会话标识符。
messagestring否重做提交消息(≤ 500 个字符)。
authorstring否重做提交的作者标识符(≤ 100 个字符)。
reasonstring否重做日志的审计原因字符串(≤ 500 个字符)。

返回: { ok: true, sessionId, revision, commitOid }


validate_document

在提交更改前,对会话执行只读 OOXML 架构预检。

参数:

参数类型必填说明
sessionIdstring是当前活动会话标识符。

返回: { ok: true, sessionId, revision, dirty, validation: { valid, errorCount, errors } }

验证建议:当 validate_document 报告文档无效时,其 normalizeHint 会建议尝试运行 normalize_document,然后重新验证。这只是建议,不代表能够预测修复结果,也不保证文档有效;验证不会运行修复规则来生成此提示。规范化会更改打开的会话;使用 save_document 持久化结果,也可以选择保存到新的输出路径。


get_stats

以较低的 Token 开销统计文档中的字数、段落数、表格数、图片数和页数。

参数:

参数类型必填说明
sessionIdstring是当前活动会话标识符。

返回: { ok: true, sessionId, revision, dirty, words, paragraphs, tables, images, pages }


sanitize_document

清除文档会话中的元数据、修订 ID、作者信息和个人身份信息(PII)。除非传入 acceptAllRevisions 或 stripComments,否则会保留修订痕迹和评论,包括每条修订删除内容的文本。CLI 预设(单独使用 sanitize、--client-safe、--metadata-only、--redact-pii)会同时启用这两个选项;此工具不会。CLI 标志 --keep-revisions 和 --keep-comments 可让 CLI 运行时采用与此工具默认行为相同的保留方式。

参数:

参数类型必填说明
sessionIdstring是当前活动会话标识符。
zeroRetentionboolean否清除所有跟踪元数据、修订 ID、作者信息和 EXIF。
purgeRSIDsboolean否清除修订保存 ID(w:rsidR、w:rsidRPr 等)。
purgeAuthorsboolean否清除作者身份元数据。
purgeExifboolean否清除嵌入图片的元数据和 EXIF 配置文件。
purgePIIboolean否从文本和评论中隐去可能包含个人身份信息的模式。
acceptAllRevisionsboolean否清除前接受所有修订痕迹。如果仍存在无法解决的修订标记,或已删除段落的评论线程同时锚定在该段落之外,则拒绝执行并返回 E_VALIDATION(不生成文件);请添加 stripComments。已接受删除段落的评论会被移除。
stripCommentsboolean否移除所有评论、评论引用以及每个评论部件(包括评论 ID 和时间戳)。
replacementAuthorstring否替换后的作者字符串(≤ 256 个字符)。
allowMacrosboolean否清除过程中逐字节保留宏部件。
stripMacrosboolean否清除过程中移除宏部件。

返回: { ok: true, sessionId, revision, dirty, removedRSIDs, purgedAuthors, strippedExifBytes, purgedPII, bodyPII, acceptedRevisions, strippedComments, strippedMacros, macroParts, filesTouched, droppedRogue }


normalize_document

针对打开会话的规范修复。运行允许列表规范化器(对架构序列排序并规范化标签),然后逐条修复已知的验证器错误类型:元素顺序、小数尺寸、开/关值、智能标签、重复的形状类型以及其他少数错误。若某项修复会更改可见文本或增加验证器错误,则会撤销该修复并列入 rolledBack。此工具不会声称文件有效:remaining 统计剩余的验证器错误数。

如果文档有历史记录仓库,且修复前的状态与最新提交不同,则会先提交该状态(preStateCommit)。下一次 save_document 会记录修复结果,因此执行一次 revert_document 并设置 steps: 1,即可返回修复前的状态。

参数:

参数类型必填描述
sessionIdstring是活动会话标识符。

返回值: { ok: true, sessionId, revision, dirty, normalized, remaining, rolledBack, preStateCommit?, validation }。normalized 列出所有重写操作。remaining 是剩余的验证器错误数;若验证器未运行,则为 -1。rolledBack 的格式为 [{ rule, reason }]。


推荐的 Agent 生命周期流程

AI Agent 应遵循以下标准执行顺序:

open_document (or new_document)
      ↓
inspect_document (get TOON outline & node IDs)
      ↓
search_content (optional: pinpoint exact target text)
      ↓
execute_batch (apply atomic mutations with rollback protection)
      ↓
visual_inspect / export_document (verify visual presentation)
      ↓
save_document (validate ECMA-376 schema & commit to disk)
      ↓
close_document (release session memory)

错误处理与补救

当工具操作无法完成时,ASTra 会返回结构化错误详情:

{
  "ok": false,
  "code": "E_VALIDATION",
  "message": "Invalid child element sequence in w:pPr",
  "remedy": "Ensure paragraph property tags follow ISO/IEC 29500 ordering rules.",
  "isError": true
}
常见错误代码
  • E_SANDBOX:请求的文件路径位于声明的 --allowed-dir 目录之外。
  • E_VALIDATION:操作参数未通过 Zod 架构检查或 OOXML 验证。
  • E_SESSION:会话 ID 不存在或已超时。
  • E_CONFLICT:操作会覆盖现有文件,但未设置 force: true。
  • E_DEPENDENCY:在 PATH 中找不到外部依赖(例如用于导出 PDF 的 LibreOffice)。

本地开发

要在此代码仓库中本地运行或调试 @attentionform/astra-mcp-server:

# Build package bundles
npm run build:packages

# Run local MCP server directly with node
node packages/mcp-server/dist/index.js --allowed-dir /path/to/docs

许可证

Business Source License 1.1(BUSL-1.1):源代码可用;个人、教育机构、非营利组织、公共机构、小型组织和小型产品可免费使用(参见 LICENSING.md);其他生产用途需要商业许可证。计划与价格:https://attentionform.com/pricing。每个版本在发布四年后转为 Apache-2.0。参见 LICENSE,如需商业许可证,请发送邮件至 [email protected]。

评论

支持 Markdown

第一次接触 MCP?

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

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