v1.1.0 — pdfnative 1.3 alignment + AI-friendliness
pdfnative-mcp v1.1.0 — pdfnative 1.3 alignment + AI-friendliness
Released 2026-06-09
A minor, fully backward-compatible release that upgrades the engine to
pdfnative v1.3.0 and
makes the server markedly more robust for AI agents. It adds a 13th tool
(validate_pdf for PDF/UA structural checks), six new scripts, COLRv1 colour
emoji, and a deterministic newline sanitizer that turns common LLM formatting
habits into valid PDF/A output without manual workarounds. No breaking changes —
existing tool calls keep working unchanged.
Highlights
- 🆕 Tool
validate_pdf— read-only PDF/UA (ISO 14289-1) structural conformance check wrapping pdfnative'svalidatePdfUA(). Reports{ standard, valid, errors[], warnings[], summary }. - 🆕 Six new scripts —
add_international_textnow covers 24 scripts: Telugu (te), Sinhala (si), Tibetan (bo), Khmer (km), Myanmar (my), Ethiopic (am). - 🆕 COLRv1 colour emoji — the
emojilang code now renders native colour emoji (Noto Color Emoji), with automatic monochrome fallback. - 🆕 Newline sanitizer (Safe PDF/A) — embedded
\ninside a paragraph is automatically split into separate paragraph blocks, eliminating.notdeftofu from LLM-style multi-line text. Applies togenerate_basic_pdfandadd_international_text. - 🆕 Automatic NFC normalisation —
add_international_textnormalises input to NFC for maximal glyph coverage. - 🛠 Survival directives —
SERVER_INSTRUCTIONS,llms.txt, anddocs/AI_GUIDE.mdupdated with PDF/A authoring guidance reflecting the engine fixes below.
Added
- Tool
validate_pdf(new, read-only): PDF/UA (ISO 14289-1) structural validation — verifies catalog/MarkInfo /Marked true,/StructTreeRoot(+/ParentTree),/Metadata(XMP),/Lang, and per-page MCID uniqueness. Returns{ standard: 'pdf-ua-1', valid, errors[], warnings[], summary }. This is a fast developer-time gate, not a substitute for a full reference validator (veraPDF). add_international_text: six new scripts (te,si,bo,km,my,am) via the new bundled Noto font data modules in pdfnative v1.3; 24 scripts total.add_international_text: COLRv1 colour emoji vianoto-color-emoji-data.js(theemojilang code), with automatic monochrome fallback.- Newline auto-split: paragraphs containing
\n/\r\n/\rare split into discrete paragraph blocks (src/text.ts). Whitespace-only paragraphs are rejected with a clearVALIDATION_ERROR.
Changed
- Dependency:
pdfnativebumped^1.2.0→^1.3.0. add_international_textpassesnormalize: 'NFC'to the document builder for maximal glyph coverage (output bytes differ from v1.0.0 for some decomposed inputs — this is intentional and improves rendering).- MCP
_meta.apiVersionbumped1.0.0→1.1.0on every tool;SERVER_VERSION→1.1.0. SERVER_INSTRUCTIONS/llms.txt: refreshed decision tree (13 tools), 24-script copy, and PDF/A survival directives.- Tool count: 13 (was 12 in v1.0.0).
Fixed
- Euro sign and CP-1252 symbols (
€ ‚ ƒ „ … † ‡ ™ œ ž Ÿ) now render and extract correctly thanks to pdfnative v1.3's Base-14/ToUnicodefix (pdfnative #48). The previousEURworkaround is no longer needed. - Duplicate MCID in wrapped table cells — pdfnative v1.3 assigns a unique MCID per line, so tagged/PDF-A tables with wrapping cells are now PDF/UA-safe.
Deferred (still blocked)
merge_pdfs,split_pdf,redact_pdf— pdfnative v1.3 still does not export page-tree manipulation primitives (openPdf/createModifierprovide only incremental object updates). Building these on raw primitives would require production-unsafe page-tree surgery that contradicts the project's "faithful, thin wrapper" philosophy. They remain on the roadmap, blocked on an upstream page-tree export API.- Per-tool HTTP page-by-page streaming and encrypted-PDF round-trip fixtures — unchanged from v1.0.0; still pending upstream capabilities.
Upgrade guide
- Bump your dependency to
^1.1.0— no code changes required; all v1.0.0 calls work unchanged. - Stop pre-splitting multi-line text or substituting
EURfor€; write naturally and let the server handle it. - New: after producing a tagged/PDF-A document, call
validate_pdfto assert PDF/UA structural conformance. - New scripts are available immediately via
add_international_textlangcodes:te,si,bo,km,my,am.