@ betteroffice/ 代理服务器
通过 TypeScript SDK 从代理服务器搜索、阅读、编辑和预览 DOCX、 XLSX 和 PPTX 文件
或 betteroffice-mcp 服务器。 代理处理大型文件的方式 :
grep,读取一个小区域,进行精确的编辑,检查结果,导出.
不需要模型提供者,API密钥或代理框架.
安装
bun add @betteroffice/agents
要求节点.js 22或后.
使用量
MCP 服务器
bunx --package @betteroffice/agents betteroffice-mcp --root /absolute/path/to/documents
服务器在stdin/stdout上会说出MCP,所以从一个MCP客户端连接. 例如,使用 Codex :
codex mcp add betteroffice -- /absolute/path/to/node_modules/.bin/betteroffice-mcp --root /absolute/path/to/documents
| 旗帜 | 说明 |
|---|---|
--root <directory> | 要求。 每个文件路径都会针对它解决,包括同义链接. |
--read-only | 仅展示检查工具:不推荐、编辑、接受或导出. |
导出时总是写出一个新的文件, 并且绝不覆盖已有的文件 。 路径检查不是 操作系统沙盒,所以使用您控制的工作空间目录.
SDK 软件
import { readFile, writeFile } from 'node:fs/promises';
import { openDocx } from '@betteroffice/agents';
import { renderDocxPage } from '@betteroffice/agents/render';
const doc = await openDocx(await readFile('report.docx'), {
name: 'report.docx',
renderer: renderDocxPage,
});
try {
const [hit] = doc.grep({ query: '€4.2 million' }).matches;
if (!hit) throw new Error('Revenue text not found');
const proposal = doc.propose({
author: 'report-agent',
note: 'Update the executive summary revenue',
edits: [{ match: hit.match, newText: '€5.1 million' }],
});
const preview = await doc.render(1, proposal.id);
await writeFile('preview.png', preview.png);
console.log(doc.review(proposal.id), await doc.verify(proposal.id));
await writeFile('report-revised.docx', await doc.export(proposal.id), { flag: 'wx' });
} finally {
doc.close();
}
出口待决提案后,该文件保持不变。 要应用它,打电话
await doc.accept(proposal.id) 接下来 doc.export() 没有身份证 对于Word跟踪的变化,
调用 doc.accept(id, { tracked: true, date: '2026-09-27T12:00:00Z' })。 。 。 .
入境点
| 导出 | 说明 |
|---|---|
openDocx(bytes, { name?, renderer? }) | 在自己的会话中打开 DOCX 文件. |
attachDocx(session, options?) | 包装活编辑器 YrsSession。关闭适配器后,会话开始. |
openXlsx(bytes, { name?, wasm? }) | 打开 XLSX 工作手册:单元格读取和单元格提议. |
attachXlsx(handle, options?) | 包成活页 WorkbookHandle。 。 。 . |
openPptx(bytes, { name?, wasm? }) | 打开 PPTX 演示文稿:大纲、幻灯片读取、文本提案、原子 edit 批次和 preview。 。 。 . |
attachPptx(handle, options?) | 包成活页 PresentationHandle。 。 。 . |
renderDocxPage (从) @betteroffice/agents/render(中文(简体) ) | DOCX 页面预览的节点画布渲染器 . |
renderPptxSlide | PPTX 幻灯片预览的节点画布渲染器. |
createOfficeMcpServer({ root, renderer?, readOnly? }) (从) @betteroffice/agents/mcp(中文(简体) ) | MCP服务器,用于连接自身运输的主机. |
DOCX 和 PPTX 文档阶段文本编辑 grep, (中文(简体) ), read 财务报告和审定财务报表 propose; 工作手册的使用
readCells 财务报告和审定财务报表 proposeCells 换句话说 所有适配器共享 review, (中文(简体) ), accept, (中文(简体) ), reject, (中文(简体) ), verify, (中文(简体) ),
export 财务报告和审定财务报表 close。 。 。 . openXlsx 财务报告和审定财务报表 openPptx 在节点装入捆绑的 Web Assembly; 在 a
浏览器,将模块字节传递为 wasm。浏览器中的 DOCX 预览需要自定义
DocumentRenderer 而不是节点帆布渲染器.
MCP工具
| 工具 | 目的 |
|---|---|
office_files | 列出DOCX,XLSX和PPTX文件,子目录和打开文档ID. |
office_open | 打开文件并返回其文档ID,格式和能力. |
office_outline | 通过 DOCX 段落, PPTX 幻灯片段落或 XLSX 工作表的页面. |
office_grep | 带有上下文的字形搜索;返回匹配ID或单元格手柄. |
office_read | 读取段落或单元格字段; DOCX 读取内容包括运行格式. |
office_cells | XLSX:读取一个有值,公式和单元格手柄的A1范围. |
office_propose | DOCX/PPTX: 阶段1-32文本替换为 { match, newText }。 。 。 . |
office_propose_cells | XLSX:阶段1-32全细胞输入或公式. |
office_review | 列出提案或显示一项提案的修改前后. |
office_accept | 将提案应用为倒置步骤; DOCX 可以将其保留为跟踪更改 . |
office_reject | 弃取正议. |
office_render | DOCX:当前或拟议页面的PNG. |
office_verify | 保存并重新打开内存; 检查运行的报告 . |
office_export | 将已接受的编辑或待决建议写入新文件 . |
office_close | 发布一份公开文件及其建议. |
docx_edit | DOCX: 原子直接编辑段落样式、粗体/斜体/下行、段落、表格行、单元格合并、注释(添加、回复、解决或重开)和页面设置 insert_section_break 财务报告和审定财务报表 set_section· ; runFormat: 'anchor' 复制插入时的第一个普通运行. |
xlsx_outline, (中文(简体) ), xlsx_read_range | XLSX:工作表,被使用的范围,表格和被定义的名称;范围读取有版本. |
xlsx_write_range, (中文(简体) ), xlsx_format, (中文(简体) ), xlsx_sort | XLSX:已版本的值和公式写入,格式化和排序. |
xlsx_list_defined_names, (中文(简体) ), xlsx_edit_defined_names | XLSX:用页标列出完整的名称;在原子上设置或删除工作簿和工作表所标注的名称,包括隐藏的旗帜. |
xlsx_edit_grid, (中文(简体) ), xlsx_edit_sheets | XLSX:插入或删除行和列;添加,重命名,删除或移动工作表. |
xlsx_set_auto_filter | XLSX:设置,扩展或去除工作表的过滤按钮;表格过滤器被拒绝. |
xlsx_list_charts, (中文(简体) ), xlsx_read_chart_text, (中文(简体) ), xlsx_edit_charts | XLSX:通过完整的标题,名称和引用来检查工作表和图表表及页面上的图表;替换或去掉标题并编辑序列名称,类别 refs和值 refs 原子. |
xlsx_list_conditional_formats, (中文(简体) ), xlsx_read_conditional_format_formula, (中文(简体) ), xlsx_edit_conditional_formats | XLSX: 通过完整的公式列出绑定规则预览和页面; 添加或删除 cellIs 财务报告和审定财务报表 expression 使用不同格式的规则. |
xlsx_find_replace, (中文(简体) ), xlsx_preview | XLSX: 查找并替换已显示的文本; 范围为 PNG. |
pptx_outline, (中文(简体) ), pptx_read_slide | PPTX:幻灯片,布局和形状;形状树,段落,运行和注释. office_outline 与 story: 'comments' 列出讨论情况; office_read 读取全文. |
pptx_edit, (中文(简体) ), pptx_preview | PPTX:原子文本,幻灯片,布局映射,形状,图像,注释,注释(add_comment, (中文(简体) ), reply_comment, (中文(简体) ), resolve_comment)和表格结构编辑(insert_table_row, (中文(简体) ), delete_table_row, (中文(简体) ), insert_table_column, (中文(简体) ), delete_table_column); 幻灯片的PNG. |
编辑和参考
- 参考资料
ref, (中文(简体) ),match, (中文(简体) ),revision, (中文(简体) ),version)属于公开会议。 重新打开文件 创造出新的。 页面,幻灯片和段落编号为一基;文本抵消为零基. - DOCX和PPTX搜索默认为字面和大小写不敏感. XLSX 密码
office_grep搜索 以区分大小写的方式显示值. - 一项提案有1-32个单独的替换人,在一份临时副本之前经过验证
原子更新. 改变目标使其变得僵化(
STALE_TARGET:再读再求婚. - 新文本采用第一个被替换字符的格式。 保留几种风格 将该段改为整个段.
- 段落间隔、内嵌和现有跟踪改动不受文本提案的影响.
- 承诺的 XLSX 或 PPTX 编辑无效所有未完成的手柄、光标和为此提出的建议 文档.
- 结果被分解(
nextCursor, (中文(简体) ),nextOffset, (中文(简体) ),nextStart) (中文(简体) ). 结果的一页从来不是 彻底搜索.
限制
- 最多16 000个UTF-16单元的读取返回和100个格式化运行;最多100个项目的读取返回.
- MCP服务器最多可打开10个文件,每个文件最多64个米B,每个文件最多可保存64个提案 文档。 所有状态都在内存中:关闭客户端前导出.
- Stdin上面的MCP消息封顶为一米B.
verify证实保存的文件重新打开 。 它不检查视觉的忠诚度或者 编辑完全正确;为此使用读取并预览.- 预览使用 BetterOffice 版式引擎和捆绑的字体,而不是像素等同的字体
办公室 安装
@betteroffice/fonts-cjk为CJK格言.