SylphxAI/citra · 上手攻略

  • 仓库:SylphxAI/citra
  • 链接:https://github.com/SylphxAI/citra
  • 分类:AI工具 / PDF处理 / MCP
  • 作者:Tom
  • 更新:2026-09-22

一、是什么

Citra 是一个面向 AI Agent 的本地优先 PDF 处理 MCP(Model Context Protocol)服务器。它的核心理念是给 AI 的 PDF 阅读能力配上可核验的证据——不是让 agent 自行推断,而是让它能引用「第 X 页、第 Y 段、具体坐标」这样的结构化信息。

底层用 Native Rust 重写(2024 年中从 TypeScript/PDF.js 迁移),通过一个轻薄的 Node.js 启动器加载平台专属原生二进制,提供三种 MCP 工具:read_pdf(结构化阅读)、search_pdf(定位搜索)、pdf_evidence(视觉裁切与取证)。最新版本 5.0.0(2026 年 9 月前后)。

官方 npm 包为 @sylphx/citra,另有旧包 @sylphx/pdf-reader-mcp(已废弃,TS 版)。


二、解决什么问题

普通 PDF 工具让 AI 产生「幻觉式引用」:agent 声称「第 14 页表格第 3 行」,但实际无法校验这个坐标是否真实存在。Citra 通过证据契约(Evidence Contract)彻底解决这个问题:

痛点 Citra 的答案
Agent 捏造页码/行号 返回 Page + geometry + provenance,坐标可逐字核验
表格被展平成乱码 保留 Rows·Columns·Cells·Bounding Boxes 结构
扫描件(图像 PDF)变成噪声 OCR 路径与原文证据链接,不返回无来源文本
无本地 API key 时无法工作 完全本地运行,不需要任何云端视觉 API

典型场景:让 AI 阅读财报/论文/合同时,给它「能拿给人类看的证据」,而不是让它自己拼凑答案。


三、快速安装

MCP 方式(推荐,零配置)

任意 MCP 客户端均可通过 stdio 启动,不需要 Docker,不需要 API key:

# 默认启动(自动选择平台 native 包)
npx -y @sylphx/citra

Claude Desktop / Cursor / VS Code / Codex 配置示例(~/.config/claude/ 或对应配置文件):

{
  "mcpServers": {
    "citra": {
      "command": "npx",
      "args": ["-y", "@sylphx/citra"]
    }
  }
}

Claude Code 专用:

claude mcp add citra -- npx -y @sylphx/citra

全局 CLI

npm i -g @sylphx/citra
citra --help

平台原生包(自动按平台选择)

如果 npx 启动时找不到平台包,会自动提示安装对应 native 包:

平台 包名
macOS arm64 @sylphx/citra-darwin-arm64
macOS x64 @sylphx/citra-darwin-x64
Linux x64 (gnu) @sylphx/citra-linux-x64-gnu
Linux arm64 (gnu) @sylphx/citra-linux-arm64-gnu
Windows x64 (msvc) @sylphx/citra-win32-x64-msvc

⚠️ 若平台 native 包缺失,Citra 会直接报错(fail-closed),不会静默回退到低质量 JS 引擎。这是有意设计,避免 agent 拿到无来源的结果不自知。


四、核心用法

工具一:read_pdf(主力工具)

结构化提取 PDF 全文,包含文字、表格、OCR 路径、页级引用。

{
  "sources": [{ "path": "/absolute/path/to/report.pdf" }]
}

返回内容: - Markdown 格式正文:标题层级、段落顺序忠实于 PDF 阅读顺序 - 表格结构:Rows · Columns · Cells · Bounding Boxes,不是被展平的字符串 - OCR 证据链:扫描件的 OCR 文字与页码/坐标绑定,可引注 - 元数据:页数、标题、作者等文档属性

工具二:search_pdf

在 PDF 中定位包含关键词的段落,返回页码 + 文字片段,用于决定是否需要深度调用 read_pdf

{
  "query": "revenue",
  "path": "/absolute/path/to/report.pdf"
}

工具三:pdf_evidence

裁切、渲染、检查 PDF 的特定区域,输出可视化证据(用于截图/日志/报告)。

{
  "page": 14,
  "coordinates": { "x": 0, "y": 0, "width": 500, "height": 300 },
  "path": "/absolute/path/to/report.pdf"
}

SDK 方式(Node.js / TypeScript)

import { Citra } from '@sylphx/citra/sdk';

const citra = new Citra();
const result = await citra.read('/path/to/document.pdf');

支持的平台包同上;不装 native 包时同样 fail-closed。


五、典型适用场景

  1. 金融/财报分析:提取「第 14 页表 3 第 4 行第 2 列 = $12.4M」这类单元格级证据,AI 给出的数字可以被溯源
  2. 科研论文阅读:保留标题层级、页级引用,AI 引用的结论能对应原文段落
  3. 合同审查:扫描件 PDF 的 OCR 路径清晰,表格结构完整,不会漏读条款
  4. 多文档 RAG:Agent 先 search_pdf 定位,再 read_pdf 精确提取,避免把整本文档 token 化
  5. 证据驱动的工作流:输出报告时附上「Page X, Box Y」式引用,可供人类复核

六、坑与注意

  1. fail-closed 设计:平台 native 包缺失时 MCP 调用会直接报错,不是警告。如果部署环境缺少 glibc(gnu vs musl 问题),需要手动指定对应 native 包。
  2. macOS/Linux 首次下载:native 二进制文件体积较大(多 MB),npx 首次启动会下载约 20 MB,自动化 CI 环境需要考虑网络超时。
  3. 旧包 @sylphx/pdf-reader-mcp:已废弃,功能等同于 Citra 的 TS 实现,不应再安装。如看到旧文档用此包名,指向新包即可。
  4. 进程缓存persistent_warm 模式下相同路径 + 相同选项的请求会命中进程内缓存,首次请求仍需完整解析。不是多主机共享缓存。
  5. 性能声明:官方声称同主机 warm 场景比 PDF.js 快 ≥10×(中位数),冷启动和跨主机场景无此保证。性能数据在 docs/specs/performance/ 目录有详细测量报告,有异议可自行复现。
  6. 二进制依赖:npm 包本身约 77 KB,但需要额外下载平台 native 包才能工作。离线环境需提前打包好对应平台的 native。

七、与同类对比

特性 SylphxAI/citra PDF.js (Mozilla) Other PDF MCP Servers
引擎 Native Rust JS (PDF.js) 多为 JS/Python
表格结构保留 ✅ Rows/Cells/BBox ❌ 展平 部分支持
OCR 证据链 ✅ 页+坐标绑定 ❌ 无 部分支持
MCP stdio ✅ 原生 ❌ 需自行包装
本地优先 ✅ 无云依赖 视实现而定
npm 包体积 ~24 MB 全套(含 native) 较大(PDF.js + tree) 不等
TS 版遗留 ❌ 纯 Rust N/A N/A
版本 5.0.0(2026) N/A 各不同

关键差异:Citra 的核心差异化不是「PDF 解析」,而是证据契约——它的每个返回结果都绑定坐标和来源。普通 PDF 解析返回纯文本;Citra 返回「带地理位置的文本」,这是给 AI 用的设计,不是给人用的。


八、一句话结论

需要让 AI Agent 读 PDF 并能给出可核验引用——而不是幻觉页码——选 Citra;它以 MIT 协议本地运行,零配置,是目前最干净的 PDF MCP 方案。