Agent-Native Calendar
Agent-Native Google Calendar - manage events, sync, and public booking
Descripción del creador (original en inglés)
Read, search and render the PDFs in one folder; merge, extract and create them from Markdown.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
PDF_WRITABLEEl creador no incluyó detalles de instalación en el registro. Consulta el README del creador más abajo.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub yarenty, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (0.1.3) llegó al registro hace 4 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Rust en tu computadora.
En la misma categoría: Agent-Native Calendar, Excel MCP Server, MCP Server for Excel
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
Agent-Native Google Calendar - manage events, sync, and public booking
Create and edit Excel files with AI: charts, PivotTables, formulas. No Excel needed.
Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
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:
https:// URL, with Google's PDFium, the engine inside Chrome, and fall back to a pure-Rust extractor when PDFium is not installed.cap-std directory handle, so .., absolute paths and symlinks that lead out of the root are refused by the operating system layer.--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.
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).
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
| Build | Release binary (macOS x86_64) |
|---|---|
default (create) | 51 MB |
--no-default-features | 14 MB |
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
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 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:
--pdfium-dir DIR (the library in DIR, DIR/lib or DIR/bin),PDFIUM_DYNAMIC_LIB_PATH (a folder, with the same lib/ and bin/ lookup, or the file),emperor-pdf binary,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.
# Streamable HTTP at http://127.0.0.1:8032/mcp, read-only
emperor-pdf serve --root ~/Documents/papers --pdfium-dir ./pdfium
emperor-pdf serve --root ~/Documents/papers --pdfium-dir ./pdfium --writable
emperor-pdf serve --stdio --root ~/Documents/papers
| Flag | Default | Meaning |
|---|---|---|
--root DIR | required | The only folder the server can see; tool paths are relative to it. Required even when clients only send data or url. |
--bind ADDR | 127.0.0.1:8032 | Listen address for Streamable HTTP. |
--writable | off | Offer 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 DIR | none | Where to look for PDFium first. |
--stdio | off | Speak MCP over stdin/stdout instead of HTTP. |
Logs go to stderr (RUST_LOG=debug for more). GET /health answers OK.
Claude Code
# HTTP (start the server first)
claude mcp add --transport http pdf http://127.0.0.1:8032/mcp
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"
[[mcp.servers]] name = "pdf" transport = "stdio" command = ["/path/to/emperor-pdf", "serve", "--stdio", "--root", "/path/to/pdfs", "--pdfium-dir", "/path/to/pdfium"]
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.
| Tool | Arguments | Returns |
|---|---|---|
pdf_info | path / data / url | Pages, title, author, subject, keywords, creator, producer, created / modified dates (ISO 8601), PDF version, encrypted, size in bytes. |
pdf_text | path / 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_search | path (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_page | path / 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_pages | operation (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_create | markdown, 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.
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:
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.
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).
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).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.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.Solo se muestra el principio; lee el resto en el repo