PaperPilot:一个支持 MCP 和 WASM 的本地优先、纯 Rust PDF 引擎

概述

PaperPilot 是一个用纯 Rust 编写的本地优先 PDF 和文档处理引擎。它旨在消除与在线 PDF 工具相关的隐私风险,确保所有操作(如合并、拆分、压缩和脱敏)完全在用户的机器上或通过 WebAssembly (WASM) 在浏览器中完成。该项目旨在提供统一的“五重接口”架构,使同一个核心引擎能够驱动多种界面,包括 CLI、基于 Tauri 的桌面应用程序、本地 REST API 以及用于 AI 代理的 Model Context Protocol (MCP) 服务器。

核心架构与界面

PaperPilot 将文档逻辑集中在 Rust 核心中,并通过五个不同的接口对外提供服务:

  • 终端 CLI: 专为高吞吐量批处理和脚本编写而设计。
  • 本地桌面应用: 使用 Tauri 2 和 Svelte 5 构建的跨平台 GUI。
  • 客户端 Web: 一个无需安装的浏览器版本,使用 WASM 在内存中处理文件。
  • 本地 REST API: 一个用于集成到本地微服务中的独立守护进程(运行在 localhost:7823)。
  • MCP 服务器: 使 Claude Desktop 或 Cursor 等 AI 代理能够与本地文件交互,允许 LLM 执行脱敏或分析等任务,而无需将敏感数据传输到云端。

功能与性能

截至 0.6 版本,该工具包支持超过 75 种操作,包括标准文档管理(合并、拆分、旋转、重排、小册子拼版)以及以隐私为重点的任务(如 PII 脱敏和元数据剥离)。该引擎基于成熟的 Rust crate 构建,包括 lopdf、pdf-writer 和 rten。性能基准测试显示,操作延迟通常在 20ms 到 130ms 之间。该项目采用 Apache 2.0 许可证。

社区反馈与讨论

Hacker News 上的讨论既强调了本地优先方法的实用性,也指出了构建稳健 PDF 引擎所面临的挑战。一些社区成员对新 PDF 项目的激增表示担忧,建议开发者优先为 printpdf 等现有成熟库做出贡献,以避免重复解决复杂的排版边缘情况。

其他人则指出了构建综合 PDF 套件的难度,提到了字体处理、布局和 RTL 文本支持中存在的大量边缘情况。反馈中的一个共同主题是代码来源透明度的重要性,一些用户质疑该引擎是否衍生自 MuPDF 等现有的基于 C 的库。

尽管存在这些批评,该项目因其对隐私的关注以及与现代开发者工作流的集成(特别是使用 MCP 将本地文档处理与 AI 代理连接起来)而受到好评。用户已请求增加更多功能,例如改进对从已知受保护文档中移除密码的支持,以及高级数字签名功能。

Sources