PDF导航工具

一个基于PyMuPDF的PDF阅读、导航和文本搜索服务,支持跨平台PDF查看器集成。

  • by matsengrp
  • Python
  • 本地部署
  • 9 星标
  • 更新于
在 GitHub 查看 matsengrp/pdf-navigator-mcp

使用说明

PDF导航器MCP

一个全面的模型上下文协议(MCP)服务器,用于PDF阅读、导航和文本搜索,并集成了跨平台PDF查看器。建于 PyMuPDF(MuPDF),通过MCP公开,因此依赖关系与您的项目环境保持隔离。

为什么存在

Claude Code的内置 Read 该工具可以直接打开PDF,因此询问是否仍需要此服务器是公平的。它是——但原因比以前更窄。内置阅读器有两个局限性,这个服务器是围绕这两个局限设计的,还有第三个工具(poppler的 pdftotext)也无法填补空白:

内置 Read 该工具将每个PDF页面渲染为光栅图像。 科学论文的两个后果:

  • 它象征性地昂贵,而且无法扩展。 一张25页的厚纸大约有25页的图片;阅读全文会消耗数万个图像标记,并挤出其余的对话。你 能 盖上一个 pages 范围(最近的版本需要过去10页),但前提是你已经知道你想要哪些页面。
  • 图像文本不可搜索。 您无法跨像素搜索。要找到一篇论文讨论的地方,比如“幸存者偏见”,你会把页面当作图像阅读,直到你发现它——这是填充上下文的确切行为。

Poppler's pdftotext 廉价且可搜索,但会破坏科学论文的内容:

  • 内联数学中断。 组合标记从其底部分离,例如。 p̃(x;t) 以流浪者的身份出现 ~ 在自己的线路上,从 p(x;t).
  • 多列布局混乱。 默认模式是拖动正在运行的标题,并可以重新排序文本; -layout 将两列水平粘合,使每一行都读起来 left-column … right-column,破坏阅读顺序并破坏跨越列的任何短语搜索。

此服务器使用MuPDF get_text(), 这保留了跨列的读取顺序并保持了内联数学的完整性, 可搜索的 文本加结构/大纲导航。预期的分工:

需要 工具
阅读文本,搜索相关页面,浏览结构 此服务器 (MuPDF文本+搜索)——便宜、可搜索、正确的阅读顺序
看 图形、面板、渲染的方程式或表格 内建 Read 与狭窄 pages 范围 --将其用于包含视觉效果的1-3页,而不是整个文档

特性

  • PDF文本提取 -阅读完整的PDF或特定的页面/范围
  • PDF结构分析 -摘录目录和页面摘要
  • 带位置的文本搜索 -查找文本并跳转到结果
  • 直接PDF导航 -将PDF打开到特定页面
  • 跨平台PDF查看器 -支持Skim、Zathura、Evince等
  • MCP集成 -与Claude Code和其他MCP客户合作
  • 无依赖性问题 -PyMuPDF在MCP服务器环境中隔离

安装

# Install with pipx (recommended)
pipx install git+https://github.com/matsengrp/pdf-navigator-mcp.git

# Or install in current environment
pip install git+https://github.com/matsengrp/pdf-navigator-mcp.git

Claude代码集成

添加到您的 ~/.claude.json:

{
  "mcpServers": {
    "pdf-navigator": {
      "type": "stdio",
      "command": "pdf-navigator-mcp"
    }
  }
}

用法

在Claude Code中,您可以:

  • “阅读paper.pdf中的摘要” → 提取并显示文本内容
  • “paper.pdf的目录是什么?” → 显示PDF结构
  • “阅读paper.pdf的第5-10页” → 提取特定页面范围
  • “在paper.pdf中搜索‘参数效率’” → 查找文本和位置
  • “打开纸张.pdf至第5页” → 将PDF查看器打开到特定页面

MCP工具

阅读工具

  • read_pdf_text(file_path, start_page, end_page) -从页面范围中提取文本
  • read_pdf_page(file_path, page_number) -从单页中提取文本
  • get_pdf_structure(file_path) -获取目录和页面摘要
  • get_pdf_info(file_path) -获取文档元数据

导航工具

  • search_pdf_text(file_path, query) -搜索文本并返回位置
  • open_pdf_page(file_path, page_number) -打开特定页面的PDF查看器
  • search_and_open(file_path, query, result_index) -搜索并打开结果

支持的PDF阅读器

  • 浏览 (macOS)- skim:// URL方案
  • 迷走星球 (Linux)- --page 争论
  • 证明 (Linux)- --page-index 争论
  • 苏门答腊岛 (Windows)- -page 争论
  • Adobe Acrobat (跨平台)- /A page=N 争论

配置

在中配置您的PDF阅读器 ~/.pdf-navigator-config.json:

{
  "pdf_reader": "skim",
  "reader_path": "/Applications/Skim.app"
}

发展

git clone https://github.com/matsengrp/pdf-navigator-mcp.git
cd pdf-navigator-mcp
pip install -e ".[dev]"

许可证

MIT许可证