PDF Generator MCP by Nova (CIVAI)
Server Details
Create PDF documents from your request. Preview the content first, then download when ready.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 5 tools
Each tool maps to a distinct lifecycle action: write/revise draft, list drafts, read a draft, generate PDF, and delete draft. The main risk is that `preview_document` sounds like it should display a document, when it actually writes or revises content, which could be confused with `get_preview`. Descriptions clarify the boundary, but the naming gap leaves some ambiguity.
All names use a consistent snake_case verb_noun pattern, with no mixed conventions. However, `preview_document` uses 'preview' as a verb, which does not match its actual write/revise behavior and differs semantically from `get_preview` and `preview_document` related terms.
Five tools is well-scoped for a focused PDF draft/preview/generation workflow. Each tool earns its place by covering a distinct step, and there are no redundant or filler tools.
The draft lifecycle is well covered: create/revise, list, read, generate, and delete. Minor gaps exist around managing generated public PDFs, since `delete_preview` explicitly does not remove them and there is no tool to list or delete generated PDFs.
Available Tools
5 toolsdelete_previewAInspect
Delete one stored PDF draft by preview_id from this chat session only. Hidden from suggestion buttons — agent-only. Returns deleted true/false. Does not remove already-generated public PDF files. Never accept path-like ids.
| Name | Required | Description | Default |
|---|---|---|---|
| preview_id | Yes | Hex preview_id from list_previews / get_preview in THIS session only | |
| notification_message | No | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well: it discloses that this is a delete operation, limited to session drafts, hidden from suggestion buttons, returns a boolean result, and does not affect generated public PDF files. It also adds a concrete safety rule against path-like ids.
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 front-loaded with the core action and then adds only high-value constraints. Every sentence contributes scope, behavioral, or parameter-safety information without repetition.
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?
Given the lack of annotations and output schema, the description sufficiently covers the operation's scope, side effects, return value, and id safety constraints. An agent has enough information to invoke this tool correctly without needing additional clarification.
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 the schema already documents both parameters. The description adds useful semantic constraints beyond the schema, especially that preview_id must come from this session and must never be path-like; it does not add extra meaning for notification_message.
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: delete one stored PDF draft by preview_id. It also scopes the action to this chat session and distinguishes it from generated public PDF files, which helps differentiate it from sibling tools such as get_preview and list_previews.
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?
It gives clear usage context: this deletes a draft from this chat session only, is agent-only, and must not be used for already-generated public PDF files. It does not explicitly name get_preview or list_previews as alternatives for obtaining the preview_id, though the schema points to them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_pdfAInspect
Generate a PDF from a preview. Call with no args first: if multiple previews exist, returns needs_selection + previews (title + preview_id) — ask the user which one, then call again with preview_id. If only one preview exists, generates it immediately. Returns pdf_url when generated.
| Name | Required | Description | Default |
|---|---|---|---|
| preview_id | No | Unique preview_id from a prior preview_document result. Omit to list choices (when multiple) or generate the only/last preview. | |
| notification_message | No | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the conditional early-return shape (needs_selection plus previews with title and preview_id) and the success shape (pdf_url). It omits side effects — whether a PDF is persisted or overwritten, and any auth/cost considerations.
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?
Three tight sentences, front-loaded with purpose then the branching call sequence. Every clause is functional — no restatement of the title or filler.
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?
No output schema exists, and the description compensates by naming both response shapes (selection payload and pdf_url). For a 2-param, all-optional tool with zero annotations it is nearly complete; only failure/error behavior and persistence semantics are unaddressed.
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 both parameters are already documented, including the meaning of omitting preview_id. The description reinforces the no-arg branch but adds no syntax or format detail beyond the schema; notification_message is untouched in the description.
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 from a preview.' The preview linkage implicitly separates it from list_previews/get_preview, but it never names a sibling or explicitly contrasts with them, leaving differentiation to inference.
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 explicit operational guidance: call with no args first, handle the needs_selection branch by asking the user, then re-call with preview_id — and the single-preview case resolves immediately. It covers how to drive the tool but offers no guidance on prerequisites (e.g., that preview_document must have run) or when to prefer list_previews instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_previewAInspect
Preview PDF button. Call with no args first: if one draft exists, returns document_markdown; if multiple, returns needs_selection + previews — emit_display layout P (interaction_mode none) numbered picker only. NEVER collect_user_input or emit_display input for preview_id. After user replies with a number/title, call again with preview_id.
| Name | Required | Description | Default |
|---|---|---|---|
| preview_id | No | Optional. Omit on first Preview PDF tap so the tool can list drafts. Pass only after the user picks from the numbered list (or when chat already has a clear id). | |
| notification_message | No | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well: it discloses the single-draft return (document_markdown), the multiple-draft return (needs_selection + previews), the required display layout, and an explicit prohibition against certain interaction mechanisms. This is substantial operational context beyond the schema.
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 compact and front-loads the key workflow: no args first, then preview_id after user selection. It is dense and somewhat run-on, but every sentence contributes actionable information and there is no filler.
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 two-parameter tool with no output schema and no annotations, the description covers the critical call flow, return modes, and interaction constraints. It stops short of detailing the structure of previews or error behavior, but it is sufficient to invoke the tool correctly in the described workflow.
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 both parameters are already documented in the input schema. The description adds workflow context around preview_id by explaining the first-call/second-call sequence, but it largely restates the schema's own optional/omit/pass guidance and adds nothing for notification_message.
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 clearly states that this is the Preview PDF button and explains its two operating modes: no-arg draft listing and preview_id lookup. It is behaviorally specific, but it does not explicitly distinguish itself from siblings such as list_previews or preview_document, leaving some ambiguity about when this tool is preferred over those.
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?
It gives explicit sequencing: call with no args first, then call again with preview_id after the user replies with a number or title. It also clearly forbids using collect_user_input or emit_display input for preview_id. The main gap is that it does not name sibling alternatives or explain when another preview/list tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_previewsAInspect
List all stored PDF drafts in this session. Returns previews[{preview_id, title}], count, and most_recent_preview_id. Use when the user taps List PDFs or asks which drafts exist. Does not show document body — follow with get_preview after they pick.
| Name | Required | Description | Default |
|---|---|---|---|
| notification_message | No | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose the key behavioral traits: it is a session-scoped enumeration, it returns only id/title metadata, and it explicitly does not return document bodies. It does not discuss ordering or size limits, which is a minor gap for a read-only list of this kind.
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?
Three short sentences: purpose and return shape first, then trigger conditions, then the exclusion and next step. Every sentence carries distinct information with no restatement of the name.
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 no-annotation, no-output-schema list tool it covers purpose, return fields, and sequencing, which is nearly everything an agent needs. The only omission is any mention of the notification_message parameter's role, though the schema covers it.
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 single notification_message parameter is already documented in the schema. The description says nothing about it, so it neither clarifies the surprising fallback-message parameter nor compensates for any gap — the 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?
"List all stored PDF drafts in this session" gives a specific verb, resource, and scope, and the return shape (previews[{preview_id, title}], count, most_recent_preview_id) is spelled out. It differentiates from siblings by stating it does not show document body and pointing to get_preview instead.
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?
It names concrete invocation triggers ("user taps List PDFs or asks which drafts exist") and prescribes the follow-up sequence ("follow with get_preview after they pick"), so the agent knows both when to call this and what to do next.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_documentAInspect
Write or revise draft markdown into session storage (creates preview_id). Agent-only — not a suggestion button. Use when the user asks to create/write/edit document content. For showing an existing draft use get_preview (Preview PDF). Never put emit_display chrome into content.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Document title (real topic title, not 'Preview') | |
| content | Yes | Full substantive markdown for the PDF pages (use --- between pages; each page needs a heading). Must be the document the user requested — never UI phrases like 'Here is a preview of your PDF document.' | |
| update_preview_id | No | When the user asks to adjust an existing preview, set this to that preview's preview_id. Omit to create a new preview. | |
| notification_message | No | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden and does disclose key traits: it writes into session storage, creates a preview_id, and supports revising an existing preview. It also warns about content hygiene, though it does not fully explain persistence, overwrite semantics, or expiration 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 front-loaded with the core action and scope, followed by usage routing and content constraints. Every sentence has a clear purpose, and there is no redundant restatement of the tool name or schema details.
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?
Given a four-parameter mutation tool with full schema coverage and no output schema, the description covers purpose, usage alternatives, and the key return artifact (preview_id). An agent has enough information to select and invoke the tool correctly.
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 all four parameters are already documented in structured form. The description adds general context about creating or revising a preview but does not add parameter-specific semantics beyond what the schema provides.
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 and resource: write or revise draft markdown into session storage, creating a preview_id. It also distinguishes the tool from the read-oriented sibling get_preview, 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?
It explicitly states when to use the tool (user asks to create/write/edit document content) and when to use an alternative (showing an existing draft should use get_preview). It also rules out a misinterpretation with 'Agent-only — not a suggestion button.'
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.
5 tool updates
- First observed
delete_preview - First observed
generate_pdf - First observed
get_preview - First observed
list_previews - First observed
preview_document
Related MCP Connectors
I create PDF documents from markdown, preview, then generate a downloadable file
Turn HTML or Markdown into a clean, styled PDF and get a download link.
Render PDFs from templates you design once: list templates, check the data shape, preview, render.
Turn a description into a shareable, editable PDF — invoices, certificates, reports, resumes.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables creating PDF documents (invoices, certificates, reports, etc.) from natural language descriptions, returning a shareable link to preview and edit the document.1219 npmMIT

@sheetrender/mcpofficial
AlicenseAqualityBmaintenanceRenders PDFs from HTML templates or saved templates and spreadsheet data, with batch job support and document retrieval.11131 npm1MIT- AlicenseNot gradedqualityBmaintenanceCreate readable, paginated PDFs from code, Markdown, JSON and CSV, with local rendering and inline previews in compatible MCP clients. Public file URL imports run on your computer, and physical printing requires separate approval of a prepared job.AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to synthesize print-ready vector PDFs and high-resolution PNG previews for invoices, estimates, receipts, contracts, and other business documents, with configurable themes, compliance notices, and verification seals.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.