PDF-MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PDF-MCPextract the text from pages 1-5 of Q4_report.pdf"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
PDF-MCP (v1.1.0): Model Context Protocol (MCP) Server & CLI Toolkit
🌐 🇬🇧 English Documentation | 🇹🇷 Türkçe Dokümantasyon
🇬🇧 English Documentation
PDF-MCP is a lightweight, high-performance Model Context Protocol (MCP) server and command-line (CLI) toolkit designed for AI coding assistants (Google Antigravity, Claude Desktop, Cursor) and developers.
It empowers AI agents to natively inspect, batch-search, and diff PDF documents, as well as compile publication-grade A4 PDF reports directly from Markdown (.md) or structured JSON—complete with cover pages, Q&A cards, code blocks, zebra-striped tables, callout alerts, embedded diagrams, and full UTF-8/Unicode typography support—without writing intermediate dump scripts.
🆕 What's New in v1.1.0
📝 Markdown-First PDF Compiler (
pdf_from_markdown): Pass a standard Markdown file or string; the engine automatically compiles YAML frontmatter,#sections,##Q&A cards, fenced code blocks, Markdown tables,> [!NOTE]callouts, andfigures into a styled PDF.📊 Native Styled Table Engine (
table): Automatic column sizing, primary-colored headers, and alternating row backgrounds (zebra striping).💡 Rich Alert / Callout Boxes (
callout): Left-accented callout panels forNOTE,TIP,WARNING,IMPORTANT, andCAUTION.🖼️ Smart Image & Diagram Embedding (
image): Aspect-ratio preserving centered image rendering with italic captions and graceful fallback placeholders if an image path is missing.📂 Direct File Input (
input_file): Pass a disk path (.mdor.json) topdf_generate_reportinstead of serializing 100KB+ payloads into the LLM context window.
Related MCP server: PDF Reader MCP Server
✨ Core Tools & Capabilities
Tool Name | Description |
| (New) Compiles a |
| Builds a styled PDF from structured JSON data or an external |
| Extracts clean text from an entire PDF or specific page ranges ( |
| Rapidly searches across dozens of PDFs in a directory ( |
| Retrieves total page count, file size, title, author, and encryption status. |
| Compares two PDF files page-by-page to pinpoint textual differences. |
Full Unicode / Turkish | Native TrueType font support ( |
🚀 Quick Start & Installation (EN)
1. Install Dependencies
PDF-MCP requires only two lightweight packages (pypdf and fpdf2):
git clone https://github.com/your-username/pdf-mcp.git
cd pdf-mcp
pip install -r requirements.txt(Optional) Install in editable mode for global pdf-mcp CLI access:
pip install -e .2. MCP Server Configuration
Google Antigravity (~/.gemini/config/mcp_config.json)
{
"mcpServers": {
"pdf-toolkit": {
"command": "python",
"args": [
"C:/path/to/pdf-mcp/pdf_mcp/server.py"
],
"disabled": false
}
}
}Claude Desktop / Cursor (claude_desktop_config.json)
{
"mcpServers": {
"pdf-toolkit": {
"command": "python",
"args": [
"C:/path/to/pdf-mcp/pdf_mcp/server.py"
]
}
}
}⚡ Instant Usage Guide (Markdown → PDF)
Scenario: Compile Markdown to PDF in One Step (Recommended)
Create a .md file with optional YAML frontmatter to configure the cover page and theme (navy_blue, emerald, slate):
---
title: CLOUD INFRASTRUCTURE AUDIT REPORT
subtitle: Q4 Security, Latency & Scalability Review
category: TECHNICAL REPORT
description: Comprehensive architectural evaluation of distributed API services and storage layers.
theme: navy_blue
Prepared By: Platform Engineering Team
Author: Alex Rivera
Date: 2026
---
# SECTION 1: SERVICE ARCHITECTURE & LATENCY
## Question 1.1: How does edge caching impact P99 response times?
Deploying regional edge caches reduces round-trip latency by serving static and pre-computed payloads directly from points of presence closest to the client.
> [!IMPORTANT] Rate Limiting Policy
> All public endpoints must enforce token-bucket rate limiting at the API Gateway layer prior to production rollout.
- **Edge Gateway:** Handles TLS termination and request routing.
- **Worker Pool:** Processes asynchronous background jobs with automatic retry policies.
```sql
SELECT service_name, AVG(latency_ms) AS avg_latency
FROM telemetry_logs
WHERE status_code = 200
GROUP BY service_name;
```
| Service ID | Component Name | Uptime SLA |
| :--- | :--- | :--- |
| SVC-101 | Auth Gateway | 99.99% |
| SVC-204 | Billing Engine | 99.95% |
Invoke via MCP Tool (pdf_from_markdown):
{
"output_path": "C:/path/to/Output_Report.pdf",
"markdown_file": "C:/path/to/draft.md"
}Markdown-to-PDF Syntax Mapping
Markdown Syntax | Rendered PDF Component |
| Cover page title, subtitle, abstract box, color theme, and bottom metadata key-values |
| Full-width colored Section Header banner ( |
| Left-accented shaded Q&A Card ( |
| Shaded monospace Code Block ( |
| Zebra-striped Table with primary-colored header ( |
| Styled Callout / Alert Box ( |
| Centered auto-scaled Image with italic caption ( |
| Bold-prefixed Bullet Point ( |
💻 CLI Usage (EN)
# 1. Compile a Markdown file into a styled PDF (with emerald theme)
python pdf_mcp/cli.py from-md "notes.md" "Output.pdf" --theme emerald
# 2. Generate a PDF from a structured JSON file
python pdf_mcp/cli.py generate "payload.json" "Report.pdf"
# 3. Extract text from specific pages (pages 1 to 3)
python pdf_mcp/cli.py read "manual.pdf" --start 1 --end 3
# 4. Batch-search across all PDFs in a folder
python pdf_mcp/cli.py search "./docs" --pattern "*.pdf" -q "latency"
# 5. Inspect PDF metadata
python pdf_mcp/cli.py meta "document.pdf"
# 6. Compare two PDF files page by page
python pdf_mcp/cli.py diff "v1.pdf" "v2.pdf"🐍 Python API Usage (EN)
from pdf_mcp import build_pdf_from_markdown, PDFReportBuilder
# Option 1: One-Line Markdown Compilation
build_pdf_from_markdown(
output_path="Quick_Report.pdf",
markdown_file="draft.md",
theme="navy_blue"
)
# Option 2: Programmatic Builder API
builder = PDFReportBuilder(header_title="Architecture Report", theme_name="slate")
builder.draw_cover(
title="SYSTEM ARCHITECTURE REPORT",
subtitle="Performance & Throughput Benchmarks",
category="ENGINEERING",
description="Comparative analysis of distributed caching and message queue throughput.",
metadata={"Author": "Alex Rivera", "Version": "1.1.0"}
)
builder.add_page()
builder.add_section_header("1. BENCHMARK SUMMARY", "Throughput Under Load")
builder.add_table(
headers=["Engine", "Read Latency", "Write Throughput"],
rows=[
["In-Memory Cache", "0.4 ms", "120,000 ops/sec"],
["Distributed Store", "2.1 ms", "45,000 ops/sec"]
]
)
builder.add_callout("Enable connection pooling to prevent socket exhaustion under peak load.", kind="tip")
builder.add_image("diagram.png", caption="Figure 1: Cluster Replication Flow")
builder.output("Architecture_Report.pdf")🇹🇷 Türkçe Dokümantasyon
PDF-MCP, yapay zeka kodlama asistanları (Google Antigravity, Claude Desktop, Cursor) ve geliştiriciler için tasarlanmış hafif, yüksek performanslı bir Model Context Protocol (MCP) sunucusu ve komut satırı (CLI) araç setidir.
Ajanların PDF belgelerini okumasına, onlarca doküman içinde toplu arama yapmasına, iki PDF'i karşılaştırmasına ve hiçbir ara JSON dönüştürücü script yazmaya gerek kalmadan doğrudan Markdown (.md) veya JSON üzerinden yayın kalitesinde A4 PDF raporlar üretmesine olanak tanır.
🆕 v1.1.0 ile Gelen Yenilikler
📝 Markdown-First PDF Derleyici (
pdf_from_markdown): Ajan veya kullanıcı standart bir Markdown metni/dosyası verir; sistem otomatik olarak kapak sayfası, bölüm başlıkları, soru-cevap kartları, kod blokları, tablolar, uyarı kutuları ve görseller içeren şık bir PDF üretir.📊 Yerleşik Stilize Tablo Motoru (
table): Tema renkli başlık satırı, zebra desenli (alternatif satır dolgulu) ve otomatik metin kaydırmalı tablolar.💡 Renkli Uyarı / Bilgi Panelleri (
callout):NOTE,TIP,WARNING,IMPORTANT,CAUTIONtiplerinde sol kenarı renk şeritli vurgu kutuları.🖼️ Akıllı Görsel ve Diyagram Gömme (
image): En-boy oranını (aspect ratio) koruyarak ortalanmış resim/diyagram ekleme, alt yazı (caption) desteği ve eksik görsellerde çökmeyi önleyen hata toleranslı yer tutucu (fallback).📂 Dosya Yolu Desteği (
input_file): Büyük raporlarda 100 KB+ veriyi sohbet bağlamına (context) basmak yerine doğrudan diskteki.mdveya.jsondosya yolunu vererek tek adımda derleme.
✨ Temel Özellikler
Özellik / Araç | Açıklama |
| (Yeni) |
| Yapılandırılmış JSON verisinden veya harici |
| Tam belgeyi veya belirli sayfa aralıklarını ( |
| Bir klasördeki onlarca PDF içinde ( |
| Sayfa sayısı, dosya boyutu, başlık, yazar ve şifreleme durumunu döndürür. |
| İki PDF dosyasını sayfa sayfa karşılaştırarak metin farklarını tespit eder. |
Tam Türkçe / UTF-8 |
|
🚀 Hızlı Kurulum (TR)
1. Gereksinimlerin Kurulması
Proje yalnızca iki hafif kütüphaneye (pypdf ve fpdf2) ihtiyaç duyar:
git clone https://github.com/your-username/pdf-mcp.git
cd pdf-mcp
pip install -r requirements.txt(İsteğe Bağlı) Terminalden her yerden pdf-mcp komutuyla erişmek için düzenlenebilir modda kurun:
pip install -e .2. MCP Sunucu Kurulumu
Google Antigravity (~/.gemini/config/mcp_config.json)
{
"mcpServers": {
"pdf-toolkit": {
"command": "python",
"args": [
"C:/path/to/pdf-mcp/pdf_mcp/server.py"
],
"disabled": false
}
}
}Claude Desktop / Cursor (claude_desktop_config.json)
{
"mcpServers": {
"pdf-toolkit": {
"command": "python",
"args": [
"C:/path/to/pdf-mcp/pdf_mcp/server.py"
]
}
}
}⚡ Anlık Kullanım Rehberi (Markdown → PDF)
Senaryo: Markdown Dosyasından Tek Adımda PDF Üretimi (Tavsiye Edilen)
Herhangi bir .md dosyası oluşturun. YAML başlığı (frontmatter) ile kapak bilgilerini ve temayı (navy_blue, emerald, slate) belirleyebilirsiniz:
---
title: BULUT ALTYAPI VE PERFORMANS RAPORU
subtitle: 4. Çeyrek Güvenlik, Gecikme ve Ölçeklenebilirlik Analizi
category: TEKNİK RAPOR
description: Dağıtık mikroservislerin ve depolama katmanlarının kapsamlı mimari değerlendirmesi.
theme: navy_blue
Birim: Platform Mühendisliği Ekibi
Hazırlayan: Deniz Yılmaz
Tarih: 2026
---
# BÖLÜM 1: SERVİS MİMARİSİ VE GECİKME ANALİZİ
## Soru 1.1: Uç önbellekleme (Edge Caching) yanıt sürelerini nasıl etkiler?
Bölgesel önbellek sunucuları, statik ve sık erişilen verileri istemciye en yakın noktadan sunarak ağ gecikmesini minimuma indirir.
> [!IMPORTANT] Hız Sınırlandırma (Rate Limiting) Kuralı
> Tüm dışa açık API uç noktalarında üretim ortamına geçilmeden önce API Gateway katmanında istek sınırlandırma aktif edilmelidir.
- **API Geçidi:** TLS sonlandırma ve yük dengeleme işlemlerini yürütür.
- **İşçi Havuzu (Worker Pool):** Asenkron arka plan görevlerini otomatik yeniden deneme mekanizmasıyla işler.
```sql
SELECT servis_adi, AVG(gecikme_ms) AS ortalama_gecikme
FROM sistem_kayitlari
WHERE durum_kodu = 200
GROUP BY servis_adi;
```
| Servis Kodu | Bileşen Adı | Çalışma Süresi (SLA) |
| :--- | :--- | :--- |
| SRV-101 | Kimlik Doğrulama Geçidi | 99.99% |
| SRV-204 | Ödeme Motoru | 99.95% |
MCP Aracı İle Çağrımı (pdf_from_markdown):
{
"output_path": "C:/path/to/Cikti_Raporu.pdf",
"markdown_file": "C:/path/to/rapor_taslagi.md"
}Markdown Sözdizimi Eşleme Tablosu
Markdown İfadesi | PDF Çıktısındaki Karşılığı |
| Kapak sayfası başlığı, alt başlığı, özet kutusu, tema ve alt bilgi metaverileri |
| Tam genişlikte renkli Bölüm Başlığı ( |
| Sol şeritli, gölgeli Soru-Cevap Kartı ( |
| Monospace fontlu, çerçeveli Kod Bloğu ( |
| Zebra desenli, renkli başlıklı Tablo ( |
| Renkli Uyarı / Bilgi Paneli ( |
| Ortalanmış, ölçeklenmiş Görsel ve İtalik Alt Yazı ( |
| Kalın başlıklı Madde İmi ( |
💻 Komut Satırı (CLI) Kullanımı (TR)
# 1. Markdown dosyasını PDF'e derle (Zümrüt Yeşili tema ile)
python pdf_mcp/cli.py from-md "notlar.md" "Cikti.pdf" --theme emerald
# 2. JSON payload dosyasından PDF üret
python pdf_mcp/cli.py generate "payload.json" "Rapor.pdf"
# 3. PDF'ten belirli sayfa aralığını oku (1-3. sayfalar)
python pdf_mcp/cli.py read "kilavuz.pdf" --start 1 --end 3
# 4. Klasördeki tüm PDF belgelerinde kelime ara
python pdf_mcp/cli.py search "./Belgeler" --pattern "*.pdf" -q "performans"
# 5. PDF teknik bilgilerini görüntüle
python pdf_mcp/cli.py meta "dokuman.pdf"
# 6. İki PDF dosyasını karşılaştır
python pdf_mcp/cli.py diff "v1.pdf" "v2.pdf"🐍 Python API Kullanımı (TR)
from pdf_mcp import build_pdf_from_markdown, PDFReportBuilder
# Yöntem 1: Doğrudan Markdown'dan PDF Üretimi
build_pdf_from_markdown(
output_path="Hizli_Rapor.pdf",
markdown_file="taslak.md",
theme="navy_blue"
)
# Yöntem 2: Programatik Builder API
builder = PDFReportBuilder(header_title="Teknik Rapor", theme_name="slate")
builder.draw_cover(
title="SİSTEM MİMARİSİ RAPORU",
subtitle="Performans ve Yük Testi Analizi",
category="MÜHENDİSLİK",
description="Dağıtık önbellek ve mesaj kuyruğu sistemlerinin karşılaştırmalı analizi.",
metadata={"Hazırlayan": "Deniz Yılmaz", "Sürüm": "1.1.0"}
)
builder.add_page()
builder.add_section_header("1. PERFORMANS ÖZETİ", "Yük Altında Tepki Süreleri")
builder.add_table(
headers=["Motor Türü", "Okuma Gecikmesi", "Yazma Kapasitesi"],
rows=[
["Bellek İçi Önbellek", "0.4 ms", "120,000 işlem/sn"],
["Dağıtık Depolama", "2.1 ms", "45,000 işlem/sn"]
]
)
builder.add_callout("Yoğun trafik altında soket tükenmesini önlemek için bağlantı havuzu (connection pool) kullanılmalıdır.", kind="tip")
builder.add_image("diyagram.png", caption="Şekil 1: Küme Replikasyon Akışı")
builder.output("Mimari_Rapor.pdf")🧪 Testing / Testler
Run the unit and MCP server integration test suite / Birim ve entegrasyon testlerini çalıştırın:
python -m unittest discover -s tests -v📄 License / Lisans
MIT License — see LICENSE for details.
Available Tools
6 toolspdf_compare_filesC
Compare two PDF files page by page to detect text differences and page count mismatches.
| Name | Required | Description | Default |
|---|---|---|---|
| file1 | Yes | Path to the first PDF file. | |
| file2 | Yes | Path to the second PDF file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It reveals what is detected (text differences, page count mismatches) but not whether the operation is read-only, whether it works on scanned or image-only PDFs, how large files are handled, or how failures on one file are reported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the action and scope front-loaded and no filler wording. It is exactly as long as it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description needed to explain the shape of the result - what a difference report looks like, whether it is per page or aggregated - and it does not. For a two-file comparison tool with no structured return-value documentation, this leaves a material gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters ('Path to the first/second PDF file') documented in the schema itself. The description adds only the framing that the two inputs are compared to each other, which is marginal but consistent with the schema-driven baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (compare) and resource (two PDF files) and states the scope of comparison: page-by-page text differences and page count mismatches. That is far more informative than the bare tool name, though it never names a sibling tool to contrast with, which is why it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives such as pdf_read_text or pdf_get_metadata, and no mention of preconditions (both files must exist and be readable PDFs). The agent must infer usage entirely from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_from_markdownA
Compile a Markdown file (.md) or raw Markdown string directly into a styled, publication-grade PDF report without needing JSON conversion. Supports YAML frontmatter, # sections, ##/### Q&A headers, code blocks, | tables |, > [!NOTE] callouts, figures, and bullet points.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | Visual color theme (default: 'navy_blue'). | |
| title | No | Optional main document title (overrides YAML frontmatter or first # H1). | |
| category | No | Category banner on cover (default: 'DOKÜMAN RAPORU'). | |
| metadata | No | Optional key-value metadata pairs displayed at the bottom of the cover page. | |
| subtitle | No | Optional subtitle displayed on the cover page. | |
| description | No | Optional overview / abstract displayed in the cover summary box. | |
| output_path | Yes | File path where the generated PDF document will be saved. | |
| markdown_file | No | Path to a Markdown (.md) file to compile. Provide either 'markdown_file' or 'markdown_text'. | |
| markdown_text | No | Raw Markdown content string to compile. Provide either 'markdown_file' or 'markdown_text'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses supported Markdown constructs and that JSON conversion is unnecessary, but it omits key side-effect details such as whether output_path is overwritten, permission requirements, and error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that states the action first and then lists supported syntax. The feature list is dense but each item conveys real capability, with little wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter file-writing tool with no output schema, the description covers the input format and supported Markdown features adequately. It still lacks guidance on overwriting existing files, behavioral side effects, and explicit comparison with sibling tools, leaving notable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all nine parameters, including the theme enum and nested metadata object. The description adds no parameter-specific meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Compile', and names the exact resource: a Markdown file or raw Markdown string turned into a PDF report. The phrase 'without needing JSON conversion' implicitly distinguishes it from the sibling pdf_generate_report tool, so an agent can identify its role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the supported input types: the tool is for Markdown-to-PDF compilation. However, the description does not explicitly state when to choose this over pdf_generate_report or other alternatives, nor does it give exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_generate_reportB
Generate a publication-grade, styled PDF document from structured JSON data or an external JSON/Markdown file ('input_file') with cover page, headers/footers, Q&A cards, tables, images, callouts, code blocks, and full Turkish Unicode support.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | Visual color theme for accents, cards, and borders (default: 'navy_blue'). | |
| title | No | Main document title. | |
| category | No | Top-level category banner on cover (e.g. 'DERS RAPORU', 'TEKNİK DOKÜMAN'). | |
| metadata | No | Key-value metadata pairs displayed on cover (e.g. Author, Date, Course). | |
| sections | No | List of document sections. Each section has 'title', optional 'subtitle', and an 'items' array with items of type 'qa', 'paragraph', 'bullet', 'code', 'table', 'callout', or 'image'. | |
| subtitle | No | Document subtitle or descriptive tagline. | |
| input_file | No | Optional path to a .json or .md file on disk containing the document payload. | |
| description | No | Abstract / description text displayed in the cover card. | |
| output_path | Yes | File path where the generated PDF document will be saved. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It does disclose that a file is written and where ('output_path'), and that input can come from either inline JSON or a .json/.md file on disk, which is useful beyond the schema. It says nothing about overwriting existing files, required system dependencies, error behavior on bad paths, or output size, leaving material gaps for a file-creating mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that reads as a feature list ('Q&A cards, tables, images, callouts, code blocks, Turkish Unicode support'). Nothing is strictly wasted, but the enumeration crowds out the operational guidance an agent actually needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Nine parameters, nested objects, no output schema, and no annotations make this a complex tool. The description outlines the visual output but omits the item-type contract referenced in sections, file-overwrite semantics, and sibling disambiguation, so it is only adequate for the complexity involved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including nested section items is already documented. The description restates the input_file capability but adds no syntax, format, or structural detail beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generate a ... PDF document') and enumerates the content it produces. It is not differentiated from the sibling pdf_from_markdown, even though it accepts '.md' input files, which creates real ambiguity about which tool handles markdown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance. With pdf_from_markdown as a sibling and this tool accepting .md input, the agent is given no rule for choosing between them, and no prerequisites or failure conditions are described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_get_metadataC
Retrieve technical metadata, total page count, file size, title, and author of a PDF file.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the PDF file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It implies a read-only lookup but says nothing about permissions, behavior on missing or encrypted files, or whether it fails or returns partial metadata — real gaps for a file-system tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tightly written sentence with the verb and the returned fields front-loaded and no filler. It is appropriately sized for a one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully lists the returned fields (page count, size, title, author), which is enough for a simple read tool. However, it omits error and edge-case behavior, leaving the agent without a picture of what happens when the path is invalid or the PDF is encrypted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single file_path parameter is fully documented in the schema, so the description adds no syntax or format detail beyond that. Baseline 3 is appropriate since the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ("Retrieve") and resource ("technical metadata ... of a PDF file") and enumerates the returned fields, so the agent knows this is a metadata-inspection tool rather than a content reader. It doesn't explicitly name a sibling like pdf_read_text to contrast with, which keeps it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no mention of alternatives such as pdf_read_text or pdf_compare_files. The agent must infer that this is the cheap first step before reading full text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_read_textC
Extract readable text from a PDF file with optional page range boundaries (1-based index).
| Name | Required | Description | Default |
|---|---|---|---|
| end_page | No | Last page to extract (1-based, inclusive). Optional. | |
| file_path | Yes | Absolute or relative path to the PDF file. | |
| start_page | No | First page to extract (1-based, inclusive). Optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden, and it discloses little. It does not say what happens with scanned PDFs lacking a text layer (no OCR implied), password-protected or corrupt files, encoding of the returned text, or whether large files are truncated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the core action first and the optional modifier second. No wasted words, though it is short enough that structure barely matters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter read tool with full schema documentation and no output schema, the core is covered. However, with no annotations and no mention of return shape or failure modes (scanned PDFs, unreadable text), an agent lacks context needed to predict results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so file_path and the two page bounds are already fully documented, including the 1-based inclusive semantics. The description restates the 1-based page-range behavior but adds no format or default details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Extract readable text from a PDF file', plus scope of the optional page range. It distinguishes itself adequately from siblings like pdf_get_metadata and pdf_search_batch by naming the concrete output (readable text), though it never explicitly contrasts with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives no when-to-use or when-not-to-use guidance and names no alternatives. The agent must infer from the name alone that full-document text extraction is the intent and that pdf_search_batch or pdf_get_metadata cover other needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_search_batchB
Search across multiple PDF files in a directory matching a pattern (e.g. '.pdf', 'L.pdf') for a keyword or regex.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Keyword or regex to search for in page content. | |
| pattern | No | Filename glob pattern (default: '*.pdf'). | |
| directory | Yes | Directory path containing the PDF files. | |
| max_results | No | Maximum number of page matches to return (default: 100). | |
| case_sensitive | No | Whether the search should be case sensitive (default: false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It does not disclose whether subdirectories are searched recursively, which regex flavor is supported, how matches are returned, or whether max_results truncates across files or pages, leaving key operational behavior unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured sentence with no redundant wording, and the core action and scope are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents parameters, but the tool has no output schema and the description does not explain the return format or recursive-search behavior. For a five-parameter batch search tool, this leaves meaningful gaps despite the concise and clear core statement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters including defaults and meanings. The description adds only illustrative glob examples like '*.pdf' and 'L*.pdf', which is marginal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: search across multiple PDF files in a directory, filtered by a filename pattern, for a keyword or regex. It implicitly distinguishes itself from single-file siblings like pdf_read_text by emphasizing batch search, but it does not explicitly name or differentiate from those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The batch-search scope implies when to use this tool, but there is no explicit guidance on when to choose it over pdf_read_text or pdf_get_metadata, nor any stated exclusions or prerequisites. The usage context is inferable rather than documented.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v1.1.0- First observed
pdf_compare_files - First observed
pdf_from_markdown - First observed
pdf_generate_report - First observed
pdf_get_metadata - First observed
pdf_read_text - First observed
pdf_search_batch
TDQS
Scored across 6 tools
Each tool targets a distinct operation: metadata, text extraction, batch search, comparison, and two generation paths. The only real overlap is pdf_generate_report vs pdf_from_markdown, both producing styled PDFs, though the descriptions clearly delineate JSON/structured input versus Markdown input.
All tools share a pdf_ prefix and snake_case, with verb-led names (get, read, search, compare, generate). Minor deviations: pdf_search_batch orders noun-before-verb, and pdf_from_markdown uses a preposition rather than an action verb.
Six tools is a tight, well-scoped surface for a PDF utility server, with no redundant entries. Every tool corresponds to a recognizable user task in the PDF lifecycle.
Reading, metadata, search, comparison, and generation from two input formats are covered, but document manipulation operations (split, merge, rotate, page extraction, image extraction, PDF forms) are absent. Agents wanting to modify existing PDFs rather than just read or create them will hit dead ends.
Maintenance
Related MCP Connectors
Generate and read PDFs for AI agents: a generate_pdf and a read_pdf tool, priced per document.
PDF tools for AI agents: validate, extract, merge, split, compress, OCR, sign and redact.
Deterministic PDF tools for AI agents: inspect fields, fill forms, merge PDFs, invoices.
PDF, image, video, OCR, screenshot, SQL, QR and text tools for agents. No API key, no signup.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to generate professional PDF documents from markdown content with advanced typography, syntax highlighting, math equations, dark mode, and customizable styling options.MIT
- AlicenseAqualityDmaintenanceEnables AI agents to securely read and extract information from PDF files including text content, metadata, and page counts from both local files and URLs within the project context.1664 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI applications to read and process PDF files with intelligent file search, text extraction, image processing, and optional OCR support for scanned documents.MIT
- AlicenseAqualityDmaintenanceEnables AI agents to process and inspect PDFs by detecting document type, extracting text, and generating Markdown with layout information.71MIT