Atlas / MCP servers / jolly-j / CharFloat

CharFloatBLOCK

mcp/jolly-j/charfloat

字浮 CharFloat · 给你的 AI 开个 Office 外挂。你说,它当场改。Universal Bridge between AI Agents and Microsoft Office & WPS Office

Verdict
BLOCK
Grade
F
Trust score
44 /100
Exposed tools
82 57r · 20w · 5d
Transport
sse · stdio · streamable-http
License
MIT
Stars
2
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

字浮 CharFloat 给你的 AI 开个 Office 外挂:你说,它当场在你眼前改。

不用反复上传下载 · 不另存一堆副本 · 原文档增量修改 · 改到哪儿看到哪儿

不管是 Claude、Cursor、WorkBuddy、豆包还是千问,装上字浮,让它们直接伸手进你当前开着的 WPS 与 Excel 里干活。

🎬 交互演示:直接让 AI 读当前工作表、补齐数据、条件标色并绘制原生图表

🌐 个人官网 / 在线主页:https://charfloat.online/

为什么写这个小工具?

平时用 AI 处理表格,最让人抓狂的往往不是 AI 理解不了需求,而是交互路径太痛苦了:

  1. 反复倒腾文件:把 .xlsx 传到网页端,AI 重新生成一份丢给你下载,本地很快堆满了 数据分析_v1.xlsx 到 数据分析_最终不改版_真的最终.xlsx;
  2. 格式公式全丢:很多工具是用脚本把文件重写了一遍,原表格辛辛苦苦调好的字体、行高、公式联动、条件格式,常常在重新生成后被破坏得一塌糊涂;
  3. 黑盒盲猜:AI 改了哪、算得对不对,你只能等它整个跑完重新打开核对。

我就在想:为什么不能像人给同事指屏幕一样? “就改当前屏幕上开着的这一份,第 8 行缺的数据

Read from source at commit 68f8faa714baOBSERVED · 2026-10-13
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add charfloat -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "charfloat": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ]
    }
  }
}
03

Exposed tools (82)

57 read · 20 write · 5 destructive. Blast radius: 5 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
bridge_diagnoseread检查 Bridge、WPS 连接和能力边界,不修改配置或文档。附加返回:疑似宿主崩溃信号与恢复指引、部署副本与当前构建是否一致、MCP 会话回收状态。Office 状态可另用 office_get_status 探测。
bridge_get_capabilitiesread接入后首先调用:获取平台、真实连接状态、支持工具、验证程度、回滚限制、构建指纹(磁盘/部署副本,用于判断
excel_aesthetic_systemread表格排版建议,按用户需求和现有样式选择使用
office_capture_slide_previewread从 Microsoft PowerPoint 导出指定幻灯片的渲染快照,返回 imageBase64 与 imagePath,用于视觉自检比对。该通道在 macOS 与 Windows 均尚未实机验收。
office_execute_scriptwrite直接向 Microsoft Word、Excel、PowerPoint 运行实例执行原生自动化代码:macOS 下为 JXA/AppleScript,Windows 下为 PowerShell COM。结构化工具未覆盖的 Microsoft 侧操作走本工具(Office.js 通道未连接时的 Excel、以及 Word/PPT 的全部操作)。脚本自行定位目标文档;执行后先读回验证再继续,本工具不判断结果是否符合预期。该通道在 macOS 与 Windows 均尚未实机验收。
office_get_statusread探测本机(macOS / Windows)Microsoft Word、Excel、PowerPoint 的运行进程与已打开文档列表,不需要安装加载项。返回进程与文档清单,用于在调用前确认目标确实打开。
office_lock_targetread锁定 Microsoft Office 目标文档:锁定后不带目标名称的调用都指向该文件,避免用户切换窗口造成漂移。一次只锁一个组件(word/excel/ppt)。
office_unlock_targetread解除 Microsoft Office 文档锁定状态。
wps_auto_fit_columnsread自动调整列宽,避免中文被右边框遮挡或显示为
wps_clear_audit_historydestructive清空本地存储的全部审计留痕。**不可恢复**:清空后历史写入将无法再回滚(wps_rollback 依赖这些记录)。
wps_clear_rangedestructive清空指定区域的**内容**(值、公式、批注一并清除,保留格式)。这是唯一可靠的清空方式——用 patch_cells 写 null 矩阵在区域含公式或合并单元格时会残留。破坏性且不可回滚:先用 read_range 确认范围,并留意返回体里的 clearedCells。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_configure_print_layoutread**打印与分页设置**:打印区域、重复打印的标题行列、纸张、横竖向、缩放/适配页数、居中、网格线、页边距、页眉页脚(居中/左/右),以及手动分页符的增删。action=
wps_copy_rangeread把一处区域的**值/公式/格式**复制到另一处(可跨工作表)。支持 all / values / formats / formulas 四种模式,写后读回目标左上角核对。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_create_pivot_tablewrite根据明细数据区域生成数据透视表。要求:sourceRange 必须含表头且与 destCell 一起必传;destSheetName 指定的表必须已存在(不存在时先 wps_create_sheet),否则直接报错;建表后如显示为空,需在宿主中刷新透视表。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_create_sheetwrite在指定工作簿中新建工作表并激活。新建后需 wps_save_workbook 才会落盘。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_create_workbookwrite**新建一个空白工作簿**(可同时保存到指定路径、给首张表命名)。写后读回工作簿名/表数/首表名核对。注意:新建的工作簿会成为活动工作簿,后续操作请显式带 workbookName 以免落到别的文件上。
wps_delete_chartdestructive删除工作表中的原生图表。必传其一用于定位:shapeName(推荐)、chartName/name、chartTitle、chartIndex、leftCell;或用 clearAll: true 显式清空全部图表。leftCell 是像素邻近匹配(±30px):命中多于一张时本工具会拒绝执行并列出候选,一张都没命中也会报错,不会静默返回成功。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_delete_sheetdestructive删除指定工作表:破坏性且不可回滚,删除前先确认表名。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_duplicate_sheetread克隆现有工作表(保留样式、公式、条件格式与图表)生成一张新表;源表名与新表名必传。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_export_chart_imageread把**图表导出为图片文件**(PNG/JPG/GIF/BMP)。⚠️ outputPath 必须落在 **WPS 可写目录**内(容器 tmp、用户文稿目录等);写到 /tmp 之类不可达位置会「调用成功但不落盘」——桥接侧会用文件系统核对,返回值里的 fileWritten / fileSizeBytes 才是真实结果。工作表上有多个图表时须用 chartName 或 chartIndex 指定。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_export_shape_imageread把单个形状**导出为图片**(返回 base64)。做单图交付或把形状当图片复用时使用。实测本机可用。
wps_export_sheet_pdfread**导出为 PDF**:scope=
wps_format_cellsread设置单元格字体、字号、加粗、文字色、底色、对齐、行高、数字格式、边框与合并/取消合并,写入后可用 wps_get_range_styles 读回。注意:borders 传
wps_freeze_panesread冻结工作表窗格,使表头在下滚/右滚时保持可见。freezeRowIndex、freezeColumnIndex、unfreeze 至少传一项,否则本调用不产生任何变化;行列用的是同一套-1 约定(freezeRowIndex=5 冻结前 4 行)。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_get_audit_historyread分页查询本地审计留痕(写操作会留痕)。默认返回最近 5 条摘要。
wps_get_audit_recordread按审计 ID 读取一条完整记录(含修改前后的值/公式快照;只留痕类记录没有快照)。ID 来自写操作返回的 auditId,或 wps_get_audit_history。
wps_get_chartsread读取工作表中的原生图表。默认返回紧凑列表;指定 shapeName/chartIndex/chartTitle 并设置 detail=true 可读取系列与坐标轴详情。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_get_locked_statusread查询当前 Word、Excel、PPT 各组件的目标锁定状态。注意:锁定记录只说明锁指向哪个文件,不代表该文件仍在打开;需要“当前实际打开了哪些文件”时用 wps_get_workspace_summary。
wps_get_range_stylesread读取指定区域的单元格样式。默认 summary 仅返回区域级样式摘要;cells 模式逐格返回并受 maxCells 限制。写入格式后用本工具读回验证。说明:混合格式(区域内或格内格式不一致)时 fontName/bold 等字段返回 null,代表格式不一致而非不支持;本工具默认读取单元格级样式,看不到单元格内 Characters 字符级的局部加粗。排查单元格内部字符级局部格式(rich text)可在 include 中传
wps_get_style_tokenread读取原表的**设计语言**,用于让新写的内容与既有表格风格一致(做看板/报表前先调它,不要自己臆造配色)。返回:1 取样格真实样式
wps_group_shapesread把若干形状**组合**成一个组(按 shapeNames 指定)。**WPS 表格可用且能读回成员数**(走 Shapes.Range([...]).Group(),已实测);⚠️ Microsoft Excel 侧尚未打通:宿主 API 本身可用(任务窗格自检在新建且激活的表上能组合成功),但经本工具对已存在的表调用会报「当前对象不允许此操作」,根因未定位——请把失败当作真实失败,不要重试绕过。
wps_inspect_apiread在运行时反射探测指定 WPS 对象的成员名。**默认只列名字、不对成员求值**——这是刻意的安全设计:逐成员求值会触发宿主原生 getter,实测会让 WPS 进程崩溃(3 份崩溃报告,崩溃点定位在整表
wps_list_shapesread**读回工作表上的全部形状**——绘图能力的验收入口。默认 detail=true 返回每个形状的名字/类型/位置/尺寸/旋转/可见性/填充色/线条色线宽/文字/所在单元格,组合还带成员数。写完形状后用它核对是否真的画上去了。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_lock_target_documentread锁定 WPS 目标文档:锁定后不带目标名称的调用都指向该文件,避免用户切换窗口造成漂移。一次只锁一个组件;要换目标需先解锁或重新锁定。
wps_manage_cell_commentsread单元格批注管理:添加/更新、读取、删除指定批注,或清空全表批注。action 必传;
wps_manage_document_propertiesread读写工作簿**文档属性**:Title/Subject/Author/Keywords/Comments/Category/Company/Manager 八个内置字段 + 任意自定义属性。apply 后自动读回核对。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_manage_hyperlinkread单元格**超链接**增删查:加链接、列出全表链接(地址/显示文字/提示/锚点)、删除。写后从锚点读回核对。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_manage_named_rangeread⚠️ 两条宿主限制(已实测):1 **
wps_manage_picturesread工作表**图片**增删查:从本机路径插入图片(可指定位置尺寸)、列出全部图片(名称/位置/尺寸/所在单元格)、按名称或序号删除。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_manage_rows_and_columnsread批量插入、删除、隐藏、取消隐藏整行或整列,或设置行高/列宽(action=
wps_manage_sheetread工作表管理:重命名、调整标签顺序、设置标签颜色、锁定/解锁工作表保护。sheetName 与 action 均必传。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host);但 move/tab_color/protect/unprotect 四个 action 在 Microsoft 宿主尚未实现。
wps_manage_sheet_changesread**变更感知**:回答「用户刚改了哪个单元格」。action=
wps_manage_tableread**结构化表格**(Excel Table / ListObject)增删查:创建(带表头/汇总行/样式)、列出(名称/范围/行列数/列名)、删除(数据保留)。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_manage_workbook_viewsdestructive工作簿**自定义视图**与切片器清单:list 列出全部自定义视图与切片器缓存、add 新建视图、show 切换、delete 删除。另外 action=
wps_modify_rows_columnswrite对整行或整列执行插入、删除、隐藏、取消隐藏。与 wps_manage_rows_and_columns 的区别:本工具不支持设置行高/列宽(set_size),参数集也不含 size;需要 set_size 请用 wps_manage_rows_and_columns。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_ppt_add_business_cardswrite在指定幻灯片自动排版 2/3/4 栏信息卡片(圆角底卡、强调色顶线、分类 Tag、标题与正文)。卡片坐标按 720×405 设计基准换算到实际页面尺寸并限制在页面内。
wps_ppt_capture_slide_previewread将指定幻灯片导出为 PNG 图片并返回 base64,用于视觉核查排版是否重叠、文字是否溢出。失败时把宿主对每次导出尝试的原始报错放在 hostError / attempts 字段里回传(不再只给一句“PPT 未生成预览”)。已知可用绕行:wps_execute_script 里 call slide.Export(绝对路径,
wps_ppt_configure_layoutread演示文稿的**页面尺寸与母版版式**:改 16:9 / 4:3 / A4、切横纵方向、套用模板文件、列出并套用母版版式(CustomLayouts)。写后逐项读回核对,未生效写 warnings。action=
wps_ppt_generate_deckread按结构化 JSON 大纲在目标文稿中逐页生成幻灯片:title(封面) / cards_2、cards_3、cards_4(卡片页) / chart(原生图表页) / content(要点页) / end(结束页)。坐标为 720×405 设计基准,工具内部会按返回的 pageWidth/pageHeight 换算到实际页面尺寸:传 960×540 页面时实测每个几何量都会乘以 4/3(背景正好满页);其他页面尺寸的缩放系数未实测。
wps_ppt_get_slide_shapesread读取指定幻灯片中所有形状的几何坐标、尺寸、文本内容、表格元数据及图层层级。坐标为磅值(pt)。
wps_ppt_insert_native_chartwrite在 PPT 中插入原生矢量图表并绑定结构化数据。插入后必须用 wps_ppt_get_slide_shapes 或预览核实图表真的生成、数据真的写入(宿主存在插入成功但不建形状的情况)。
wps_ppt_manage_shapes_and_mediaread坐标和字号统一使用 pt。先读页面尺寸和现有形状;新增时显式提供 left/top/width/height,文本还需 fontSize,避免默认位置重叠。支持添加文本框、添加形状、修改已有形状的位置/尺寸/文本/填充、交换两个形状位置(swap_shapes)、设置图层层级、对齐分布(align_shapes)与删除形状(delete_shape)。两个对齐/交换动作的真实语义见对应参数说明,勿按通用 PPT 语义理解。
wps_ppt_manage_slideswritePowerPoint 幻灯片管理:新建演示文稿(new_presentation)、新增、删除、移动顺序、复制克隆、背景颜色设置与保存(save/save_as)。add/duplicate/new_presentation 属追加型操作、不幂等,重复调用会新增更多页;delete 是破坏性操作,先确认 slideIndex;越界页码会返回带有效范围的中文错误,不再回传宿主内部 JS 报错。
wps_ppt_manage_tablereadPowerPoint 表格操作:新建表格(可同时注入二维数据)、读取表格、改写单元格文字、套用表头/斑马纹/边框样式。宿主没有独立的“批量改写已有表格数据”操作:批量改数据请重新 create_table(data),或逐格 set_cell_text。坐标与尺寸单位是 pt,不是像素或百分比。
wps_ppt_read_presentationread读取 PowerPoint 演示文稿的大纲架构、幻灯片列表、各页文本要点及演讲者备注。
wps_read_rangeread切片读取指定区域(如 A1:C10)的单元格值与公式。只读,不修改工作簿。【人机协同防覆盖】准备更新已有数据单元格前,可先用本工具切片核验当前真值,确认未被用户手工微调,防止盲目覆盖导致更新丢失。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_reload_addonread让加载项**重新初始化自身**(宿主执行 window.location.reload,会触发一次断开重连)。实测:**不会重新读取磁盘上的新构建**——WPS 会复用已缓存的 JS,因此部署新版本后调它仍然跑旧代码。要真正加载新构建必须**彻底退出 WPS(Cmd+Q / 任务管理器结束进程)再打开**,只关窗口不够。调用后用 bridge_get_capabilities 或 bridge_diagnose 读回运行中的构建指纹(components.*.buildFingerprint)核对,指纹为 null 即说明仍是旧构建。无参数。
wps_rollbackread按 auditId 回滚一次 patch_cells 写入的值与公式。覆盖边界:只有值与公式;样式、条件格式、图表、行列/工作表结构变更、Word/PPT 操作、脚本执行都不在快照内,无法用本工具撤销。回滚前会比对目标区域当前内容,存在后续修改时拒绝覆盖。参数只接受 auditId(传 host、sheetName 等会报‘未知参数’)。
wps_save_workbookwrite保存当前打开的工作簿。保存是**工作簿级**操作:会把该工作簿当前内存状态整体落盘,包含其他会话尚未完成的中间结果。参数集只有 workbookName(不接受 sheetName,传了会报“未知参数”);不传时按锁定目标/活动工作簿保存。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_search_cellsread按单元格的显示值与**公式文本**搜索包含指定关键字的单元格坐标(命中项用 matchedIn 标明是 value 还是 formula)。可选 address 限定检索范围,不传则搜整表已用区域。【人机协同动态锚点】在人机实时编辑场景下,修改特定业务行(如“合计”、“小计”或关键指标)时,优先用本工具动态检索其最新坐标,避免因用户手动增删行列导致写死绝对行号发生错位。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_set_data_validationwrite为指定区域设置数据有效性(下拉列表或数值区间),可配选中提示与非法输入报错。**先校验参数、后动手**:参数不合法(list 缺 listItems、number_range 缺 minVal/maxVal、operator 或 validationType 非法)会在**任何修改发生前**报错,原有校验保持不变;宿主写入失败时尽力写回原规则并如实报告是否恢复。写入成功后**读回核对**(类型/运算符/上下限/候选项/下拉开关),不一致则 success=false 并在 warnings 给出请求值与宿主读回值。读回规则用 wps_get_range_styles 的 include:[
wps_set_filter_and_sortwrite为表格启用/关闭自动筛选,并按指定列排序。sortRules 的 colIndex 是**区域内相对列号**(1=区域第 1 列)。排序后会读回校验,未真正生效即报错(返回 sortApplied.attempts)。筛选范围不受 range 严格约束:宿主会扩展到相邻数据块,返回体 appliedFilterRange 是实际范围,与传入不一致时给出 warnings,需要严格范围请用空行隔离数据块。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host)。
wps_set_shape_zorderwrite调整形状的**层级**(bringToFront 置顶 / sendToBack 置底)。返回调整后所有形状的 zOrder 序列,可核对是否真的换了层。实测本机可用。
wps_set_sheet_viewwrite设置工作表**视图**:是否显示网格线、行列标题、缩放比例。⚠️ **用矢量形状搭画布页(看板/信息图/封面页)前必须先隐藏网格线**,否则所有形状都浮在格线上,观感很乱。写后读回核对并返回 before/after,能确认是否真的生效。
wps_ungroup_shapesread**解散分组**:把组内成员释放回工作表,返回释放后的形状名单与实际仍在表上的形状。仅对组合(Type=6)有效,传非组合会明确报错。WPS 表格可用;Microsoft Excel 侧依赖组合先成功(见 wps_group_shapes)。
wps_unlock_target_documentread解除 WPS 文档锁定状态。解除后无目标名称的调用不再有确定目标,后续操作需显式传工作簿/文档名称。
wps_update_chartwrite更新已有图表的位置、标题或图例。宿主限制:WPS 未实现该操作,调用会在执行前被拒绝且不改动文档;WPS 上请用 wps_execute_script 改 chart 对象,或改用 host=microsoft。定位必传其一:chartName、name、shapeName;只传 title/legendPosition 不会命中任何图表。选型:同名 wps_* 与 excel_* 二选一——wps_* 只走 WPS 表格(不传 host),excel_* 跨宿主(必传 host);WPS 宿主上该操作会被告知未实现。
wps_update_shapewrite**修改已有形状**:位置/尺寸/旋转/填充色/线条色线宽/文字/可见性,改名,或 action=
wps_word_capture_previewread把当前 Word 文档导出为 PDF 并返回**文件路径**,用于视觉验收——Word 没有截图通路,这是唯一能看见真实版式的手段。注意返回的是路径不是图片,需自行用 PDF 查看器检查;导出成功不代表版面符合预期。
wps_word_close_documentread关闭指定的 Word 文档。saveChanges 默认 false:未保存的修改会直接丢失;不传 documentName 时关闭当前活动文档,多文档场景请显式指定目标。
wps_word_create_documentwrite新建空白 Word 文档或基于指定模板创建文档。不传 templatePath 即新建空白文档;新建后需显式调用 wps_word_save_document 才会落盘。
wps_word_find_and_replacereadWord 全局查找与精准替换。支持通配符、全字匹配、区分大小写以及指定替换文本的格式(防止加粗污染)。
wps_word_format_documentreadWord 文档排版:按预设或自定义参数设置指定范围的字体、字号、加粗、缩进与行间距。target 默认
wps_word_insert_table_of_contentswrite在 Word 文档中生成目录:扫描全文 Heading 1-3 级标题,在指定位置插入带前导符与页码的目录域。标题必须已使用 Heading 样式才会被收录。
wps_word_manage_contentread物理删除 Word 中的段落、表格或一键清空重写整个文档。
wps_word_manage_content_controlsreadWord 内容控件(可填模板/合同填空位/表单)的创建、读回、改值与删除。contentControls 读回每个控件的类型、标题、标签、当前值、下拉选项列表与范围。
wps_word_manage_tablereadWord 专业表格管理。支持结构透视(inspect)、三线表插入、安全动态扩容二维写入(write_matrix)、单元格独立排版与行列增删。
wps_word_read_documentread读取 Word 文档连续段落内容 [P1, P2...]、标题大纲骨架、排版元数据(字体、字号、加粗、对齐等)、表格结构,以及只读读回:节与页面版式/页眉页脚/页码域/水印形状(scope=
wps_word_review_and_commentsreadWord 审阅与修订控制。支持开启/关闭修订记录模式(Track Changes)、一键接受/拒绝全部修订、插入与读取批注。
wps_word_save_documentwrite保存当前 Word 文档、另存为指定路径或导出为 PDF 格式。传 filePath 时会校验文件是否真的落盘,未写出即报错(宿主返回成功不代表已写出)。
wps_word_update_fieldswrite更新 Word 的域(目录页码/REF/PAGEREF/页码域等),以及插入交叉引用。**这是修「目录页码不随内容更新」的唯一手段**:
wps_word_write_contentwrite向 Word 文档结构化写入内容(标题、正文、列表、引用或代码块)。支持指定排版样式,并可在开头、结尾、指定段落后、光标处或书签所在段落之后插入。location=
04

Trust audit

BLOCKgrade F · trust 44/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (6 observation(s))
Shell
declared (8 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

CRITICALObfuscation / stealth · obf.decode_then_exec · CWE-506, CWE-94
office-addon/public/taskpane.js:2
atob( ... new Function(
Why it matters. decodes a payload and executes it
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
office-addon/src/excel/script.js:7
const fn = new Function("context", "Excel", script);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
wps-addon/addon-core.js:80
`)}`)}const w=6,N=[],C=k(g);o={success:!0,executionTimeMs:Date.now()-l,returnValue:C,truncated:N.length>0,truncatedPaths:N.length?N.slice(0,10):void 0,logs:d,message:`WPS \u539F\u751F\u56FE\u7075\u811
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
wps-addon/src/dispatch.js:473
const resolver = new Function(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/build_beautified_sheet.ts:43
console.log(`[完成] 成功提取原表主字体: [${token.fontName}], 主题底色: [${token.headerBackgroundColor}]`);
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
src/renderer/components/LiveWorkspaceCard.tsx:63
<div className="pulse-beacon">
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
src/renderer/components/LiveWorkspaceCard.tsx:64
<span className={`beacon-dot ${hasActiveDoc ? 'live' : ''}`} />
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
src/renderer/components/LiveWorkspaceCard.tsx:65
<span className={`beacon-ring ${hasActiveDoc ? 'live' : ''}`} />
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
resources/office/common.ps1:1
function Get-OfficeApp($component) {
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
resources/office/excel.ps1:1
# Structured Excel COM adapter. All entry data arrives as JSON over stdin.
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
resources/office/runner.ps1:1
$ErrorActionPreference = 'Stop'
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
wps_clear_audit_history, wps_clear_range, wps_delete_chart, wps_delete_sheet, wps_manage_workbook_views
Why it matters. 5 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.binary · CWE-1104
docs/acceptance/2.2.0-excel-modularization/host/CharFloat_M1H_20261012.xlsx
CharFloat_M1H_20261012.xlsx
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
docs/acceptance/2.2.0-excel-modularization/host/CharFloat_M1H_ViewControl_20261012.xlsx
CharFloat_M1H_ViewControl_20261012.xlsx
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/acceptance/2.2.0-excel-modularization/host/cli-session.mjs:4
const root=fileURLToPath(new URL('../../../../',import.meta.url)),dir=path.dirname(fileURLToPath(import.meta.url));
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/acceptance/2.2.0-excel-modularization/host/finish-acceptance.mjs:4
const root=fileURLToPath(new URL('../../../../',import.meta.url)),dir=path.dirname(fileURLToPath(import.meta.url));
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/acceptance/2.2.0-excel-modularization/host/refine-freeze-layout.mjs:4
const root=fileURLToPath(new URL('../../../../',import.meta.url)),dir=path.dirname(fileURLToPath(import.meta.url)),book='CharFloat_M1H_20261012.xlsx';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/acceptance/2.2.0-excel-modularization/host/run-excel-acceptance.mjs:4
const root=fileURLToPath(new URL('../../../../',import.meta.url)),dir=path.dirname(fileURLToPath(import.meta.url));
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
docs/acceptance/2.2.0-excel-modularization/host/run-probe.mjs:4
const root=fileURLToPath(new URL('../../../../',import.meta.url)),dir=path.dirname(fileURLToPath(import.meta.url));
LOWNetwork egress · net.env_exfil · CWE-200, CWE-319
tests/service.test.ts:83
{...process.env} ... fetch(
Why it matters. reads secrets in the same file that sends data out
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/acceptance/2.1.0-p0p1/agent-tests/excel.md:5
- 桥接服务:`http://127.0.0.1:19890/api/v1/tool/call`,WPS 加载项 2.1.0(macOS / WPS 12.1.28496)
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/acceptance/2.1.0-p0p1/agent-tests/excel.md:565
- 本报告所有调用都可通过 `POST http://127.0.0.1:19890/api/v1/tool/call`(`Authorization: Bearer $(cat ~/.wps-bridge/token)`,body `{"name":...,"arguments":{...}}`)原样重放。
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/acceptance/2.1.0-p0p1/agent-tests/ms-excel.md:6
- 通道:桥接 `http://127.0.0.1:19890/api/v1/tool/call`,Office.js 任务窗格走 `host: "microsoft"`
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/acceptance/2.1.0-p0p1/agent-tests/ms-excel.md:67
| 2 | **服务端字节一致性** | `sha256(https://127.0.0.1:19891/office-addon/taskpane.js?_=...) = a73ad3a94e25b80d7fa96119e22b97a3e639a4e18ba3fb3d466f36d6206f518f`,与磁盘 [office-addon/public/taskpane.js](../../../
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/acceptance/2.1.0-p0p1/agent-tests/ms-excel.md:393
call() { curl -s -X POST http://127.0.0.1:19890/api/v1/tool/call \

Gates applied: critical_finding, no_behavioural_pass.

Audited 2026-10-13 · audit v0.4.1 · source sha 68f8faa714bafull audit observations/trust-audit/mcp-server/jolly-j__charfloat.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1368f8faa714baBLOCKF44first audit
06

Questions

What is the CharFloat MCP server?

字浮 CharFloat · 给你的 AI 开个 Office 外挂。你说,它当场改。Universal Bridge between AI Agents and Microsoft Office & WPS Office

What tools does CharFloat expose?

82 in total: 57 read-only, 20 that write, and 5 that can delete or overwrite (wps_clear_audit_history, wps_clear_range, wps_delete_chart, wps_delete_sheet, wps_manage_workbook_views). Every one is listed on this page with its risk.

Is CharFloat safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (44/100) and found 4 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 5 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does CharFloat need?

No credential environment variables were found in its source, so it appears to need none.

How does CharFloat run?

It speaks sse, stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as charfloat at 2.2.1.

How current is this page?

The grade is for one exact copy of the source (68f8faa714ba), read on 2026-10-13. The repository is watched and re-audited when it changes.

Advertisement