原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

emperor-pdf

作者:yarenty版本 0.1.3i★ –i在你的电脑上运行
注册名称io.github.yarenty/emperor-pdf

安装

概览

作者提供的说明(英文原文)

Read, search and render the PDFs in one folder; merge, extract and create them from Markdown.

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 文档、表格与办公

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

作者没有在注册中心列出安装信息。请查看下方作者的 README。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 yarenty 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“文档、表格与办公”中的其他服务器比较i

  • 星标数多于此分类中其他 2197 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 2197 个服务器的 84% 更新
  • 基础检查结果等于或优于此分类中其他 2197 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

emperor-pdf 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.1.3)于5天前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Rust。

有什么可以替代它?

同一分类中有:Agent-Native Calendar, Excel MCP Server, MCP Server for Excel

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Agent-Native Calendar

作者:BuilderIO

Agent-Native Google Calendar - manage events, sync, and public booking

在云端运行★ 7,620MIT2个月前更新
安装

Excel MCP Server

作者:haris-musa

Create and edit Excel files with AI: charts, PivotTables, formulas. No Excel needed.

在你的电脑上运行★ 4,276MIT6天前更新
安装

MCP Server for Excel

作者:sbroenne

Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.

在你的电脑上运行★ 847MIT4天前更新
安装

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

emperor-pdf

The PDFs in one folder, for your agents: read, search, render, merge, split and write them.

An MCP server that works on the PDFs inside a single root folder and nowhere else:

  • Read and search text page by page, from the root folder, from base64 bytes in the call, or from an https:// URL, with Google's PDFium, the engine inside Chrome, and fall back to a pure-Rust extractor when PDFium is not installed.
  • Warn about hidden text: white-on-white, invisible, sub-point or off-page text, the usual way to plant instructions for a model in a document a person thinks is harmless.
  • See a page as a PNG image the model can look at (also how scanned pages are read).
  • Merge and extract pages, and create PDFs from Markdown, typeset with Typst and OFL fonts built into the binary.
  • Confined by capability, not by string checks: every file is opened through a cap-std directory handle, so .., absolute paths and symlinks that lead out of the root are refused by the operating system layer.
  • Read-only by default: without --writable the writing tools are not even offered.

Built on the emperor-mcp framework: stateless Streamable HTTP (or stdio for desktop clients), framed output, a doctor subcommand, four tools read-only and six with --writable. It meets Emperor Profile P1.1: no tool that writes is listed unless the operator switches writing on at start-up (--writable or PDF_WRITABLE), and tool definitions are lean, with short descriptions that say when to use each tool and compact input schemas.

Install

Prebuilt binaries (macOS arm64/x86_64, Linux x86_64, Windows x86_64) are attached to GitHub releases. Or build from source:

cargo install --git https://github.com/yarenty/emperor-pdf

Rust 1.92 or newer is needed to build (typst 0.15 sets that minimum).

Read-only build

pdf_create is behind the create Cargo feature (on by default), which brings in Typst and the embedded fonts. Without it you get a smaller binary that reads, searches, renders, merges and extracts:

cargo install --git https://github.com/yarenty/emperor-pdf --no-default-features
BuildRelease binary (macOS x86_64)
default (create)51 MB
--no-default-features14 MB
Docker

The repository's Dockerfile builds an image that speaks MCP over stdio and carries PDFium (linux/amd64 and linux/arm64). Mount the folder with your PDFs at /data:

docker build -t emperor-pdf .

docker run -i --rm -v ~/Documents/papers:/data:ro emperor-pdf

read-write: mount without :ro and switch writing on

docker run -i --rm -e PDF_WRITABLE=true -v ~/Documents/papers:/data emperor-pdf

The server runs as uid 10001, so for --writable the mounted folder must be writable by it.

PDFium (recommended)

PDFium is a native library loaded at runtime; it is not bundled with emperor-pdf. Prebuilt PDFium binaries for every platform come from bblanchon/pdfium-binaries (Apache-2.0 / BSD-3-Clause). From a checkout:

scripts/fetch-pdfium.sh            # downloads the right archive for this machine into ./pdfium/

or download pdfium- - .tgz from a release yourself and unpack it anywhere. The release is pinned to chromium/7881, the PDFium API version the pdfium-render binding is built for; PDFIUM_VERSION= scripts/fetch-pdfium.sh picks another.

emperor-pdf looks for libpdfium.dylib / libpdfium.so / pdfium.dll, in this order:

  1. --pdfium-dir DIR (the library in DIR, DIR/lib or DIR/bin),
  2. PDFIUM_DYNAMIC_LIB_PATH (a folder, with the same lib/ and bin/ lookup, or the file),
  3. the folder holding the emperor-pdf binary,
  4. the system library path.

Without PDFium, pdf_text and pdf_search use lopdf's extractor (and say so in their output: it misses or garbles text in some PDFs), and pdf_render_page answers that it needs PDFium. Everything else works the same.

Run

# Streamable HTTP at http://127.0.0.1:8032/mcp, read-only

emperor-pdf serve --root ~/Documents/papers --pdfium-dir ./pdfium

also offer pdf_pages and pdf_create, and allow saving rendered pages

emperor-pdf serve --root ~/Documents/papers --pdfium-dir ./pdfium --writable

stdio, for clients that start the server themselves

emperor-pdf serve --stdio --root ~/Documents/papers

FlagDefaultMeaning
--root DIRrequiredThe only folder the server can see; tool paths are relative to it. Required even when clients only send data or url.
--bind ADDR127.0.0.1:8032Listen address for Streamable HTTP.
--writableoffOffer pdf_pages and pdf_create and allow pdf_render_page { save_as }. Without it those two tools are not listed. Also set by PDF_WRITABLE: true, 1, yes or on turn it on; unset, empty, false, 0, no or off leave it off; any other value stops the server at start-up.
--pdfium-dir DIRnoneWhere to look for PDFium first.
--stdiooffSpeak MCP over stdin/stdout instead of HTTP.

Logs go to stderr (RUST_LOG=debug for more). GET /health answers OK.

Connect a client

Claude Code

# HTTP (start the server first)

claude mcp add --transport http pdf http://127.0.0.1:8032/mcp

or stdio

claude mcp add pdf -- emperor-pdf serve --stdio --root /path/to/pdfs --pdfium-dir /path/to/pdfium

Claude Desktop (claude_desktop_config.json)

{

"mcpServers": { "pdf": { "command": "/path/to/emperor-pdf", "args": ["serve", "--stdio", "--root", "/path/to/pdfs", "--pdfium-dir", "/path/to/pdfium"] } } }

Claude Desktop, read-write: add "--writable" to args.

[Kowalski](https://github.com/yarenty/kowalski) (config.toml), over HTTP or stdio:

[[mcp.servers]]

name = "pdf" transport = "http" url = "http://127.0.0.1:8032/mcp"

or let Kowalski start it

[[mcp.servers]] name = "pdf" transport = "stdio" command = ["/path/to/emperor-pdf", "serve", "--stdio", "--root", "/path/to/pdfs", "--pdfium-dir", "/path/to/pdfium"]

Tools

The four reading tools take the PDF in one of three ways, exactly one per call:

  • path: a file relative to the root folder (for pdf_search also a glob such as **/*.pdf);
  • data: the PDF bytes, base64 (a data:application/pdf;base64, prefix is accepted);
  • url: an https:// URL the server downloads.

data and url are capped at 8 MiB (the emperor-mcp limits byte cap); downloads time out after 30 seconds and follow at most five redirects.

ToolArgumentsReturns
pdf_infopath / data / urlPages, title, author, subject, keywords, creator, producer, created / modified dates (ISO 8601), PDF version, encrypted, size in bytes.
pdf_textpath / data / url, pages? ("1-3,5", "4-"), max_chars? (default 100 000, at most 2 000 000)Text per page, which extractor ran (pdfium or lopdf), whether it was truncated, and a hidden-text warning when there is any.
pdf_searchpath (file or glob) / data / url, query, regex?, case_sensitive?, max_hits? (default 50, at most 500)File, page, match and a snippet with context for each hit; pages with hidden text are flagged.
pdf_render_pagepath / data / url, page, dpi? (1 to 300, default 110), save_as?, overwrite?The page as a PNG image (MCP image content), its size, and where it was saved. Needs PDFium; save_as needs --writable.
pdf_pagesoperation (merge or extract), inputs ([{path, pages?}]), output, overwrite?A new PDF from the selected pages, in the order written. Only on a --writable server.
pdf_createmarkdown, output, title?, overwrite?A new PDF typeset from Markdown (headings, emphasis, lists, tables, code blocks, quotes, links). Only on a --writable server built with the create feature.

Page numbers are 1-based. pdf_pages keeps the pages and their content but not the inputs' bookmarks, forms or tagged structure.

Tool annotations say what each tool does: the reading tools are read-only, idempotent and open-world (they can fetch a URL); pdf_pages, pdf_create and pdf_render_page on a writable server are not read-only and are marked destructive, since overwrite: true replaces a file. On a read-only server pdf_render_page is marked read-only, because it cannot save.

Hidden text

With PDFium, pdf_text and pdf_search check every character of the pages they read and flag text a person looking at the page would likely not see:

  • text drawn in the invisible render mode (mode 3), unless it lies over an image, which is how OCR makes a scanned page searchable;
  • white or near-white (or fully transparent) text with nothing drawn behind it;
  • text set below 1 pt;
  • text outside the page box.

The text is still returned, inside the document frame; a separate, framed warning names the file, the pages and the reasons, and asks the model to treat it as data and tell the user. pdf_search marks each hit on such a page with page_has_hidden_text. The check is a heuristic: a white background drawn inside a form object, for example, hides nothing but is not looked into. The lopdf fallback does not check and says so.

Scanned pages

emperor-pdf has no OCR engine. A scanned page without a text layer comes back from pdf_text as empty or near-empty; render it with pdf_render_page and let a vision-capable model read the image. Scans that were OCR'd already carry an invisible text layer, which pdf_text reads (and does not flag as hidden).

Security model

  • One root, enforced by capability. The root is opened once as a cap_std::fs::Dir; every read and write goes through it by relative path. Paths with .. or an absolute path are refused with a clear message before any file system call, and cap-std refuses symlinks that resolve outside the root. Globs are expanded by walking the root through the same handle (hidden folders are skipped, at most 200 files).
  • Read-only unless `--writable`. Without it, pdf_pages and pdf_create are not registered (a client never sees them) and pdf_render_page { save_as } answers that the server is read-only. With it, an existing file is never replaced unless the call passes overwrite: true.
  • URLs: public HTTPS only. url must be https://, without user name or password; every redirect is checked again. Host names are resolved by the server and only public addresses are used: loopback, private (RFC 1918), link-local (including cloud metadata at 169.254.169.254), shared, unique-local IPv6 and similar ranges are refused, so a call cannot reach services on the server's own network. Downloads and data are capped at 8 MiB and must start like a PDF.
  • Document text is data. PDFs come from anywhere and may carry text written to steer a model. Text and search snippets are wrapped with emperor-mcp framing as a document of unknown authorship (nonce-guarded delimiters, "data, not instructions"); metadata, results and hidden-text

只显示了开头部分;其余内容请在仓库中阅读

问 PopNx