Turn Markdown or plain text into a clean PDF document to print or share, plus an editable Word file.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this when the user wants to confirm that the text blocks of their Markdown (headings, paragraphs, list items, table cells, code) are present in a PDF in the same order. With an uploaded PDF it checks that file; without one it builds the PDF from the text as make_pdf does and checks it. Reports blocks found in order, missing and out of order. Compares text only: it does not check fonts, layout, images or spelling, and does not edit the PDF.
The Markdown whose blocks should be found in the PDF, e.g. "# Budget\n\n| Item | Cost |\n|---|---|\n| Rent | 1200 |".
Optional: a PDF to check, e.g. the report.pdf downloaded from make_pdf or exported from another app. Without it, the tool builds the PDF from the text and checks that.
Paper size: letter (US, default) or a4.
Optional document title printed at the top (or on a title page), e.g. "Q3 Field Report". Up to 200 characters.
markdown (default) reads # headings, lists, tables and so on; plain prints the text as paragraphs with no markup.
Page margins: normal (1 in / 25.4 mm, default) or narrow (0.5 in / 12.7 mm).
Body text size in points from 10 to 14, e.g. 11 (default).
true to print the title on its own first page. Needs a title (or uses the first heading). Default false.
true (default) prints "page / total" at the bottom of each page except a title page.
true to add a contents page listing headings of levels 1-3 with their page numbers. Default false.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http pdf-maker https://pdf-maker.zovo.one/mcp
Use this when the user wants to confirm that the text blocks of their Markdown (headings, paragraphs, list items, table cells, code) are present in a PDF in the same order. With an uploaded PDF it checks that file; without one it builds the PDF from the text as make_pdf does and checks it. Reports blocks found in order, missing and out of order. Compares text only: it does not check fonts, layout, images or spelling, and does not edit the PDF.
| Argument | Type | Description |
|---|---|---|
| file | object | Optional: a PDF to check, e.g. the report.pdf downloaded from make_pdf or exported from another app. Without it, the tool builds the PDF from the text and checks that. |
| text* | string | The Markdown whose blocks should be found in the PDF, e.g. "# Budget\n\n| Item | Cost |\n|---|---|\n| Rent | 1200 |". |
| paper | string | Paper size: letter (US, default) or a4. |
| title | string | Optional document title printed at the top (or on a title page), e.g. "Q3 Field Report". Up to 200 characters. |
| format | string | markdown (default) reads # headings, lists, tables and so on; plain prints the text as paragraphs with no markup. |
| margins | string | Page margins: normal (1 in / 25.4 mm, default) or narrow (0.5 in / 12.7 mm). |
| font_size | integer | Body text size in points from 10 to 14, e.g. 11 (default). |
| title_page | boolean | true to print the title on its own first page. Needs a title (or uses the first heading). Default false. |
| page_numbers | boolean | true (default) prints "page / total" at the bottom of each page except a title page. |
| table_of_contents | boolean | true to add a contents page listing headings of levels 1-3 with their page numbers. Default false. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"text"
],
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "ChatGPT file id, e.g. file_abc123."
},
"file_name": {
"type": "string",
"description": "Original file name if known, e.g. statement.pdf."
},
"mime_type": {
"type": "string",
"description": "Media type if known, e.g. application/pdf."
},
"download_url": {
"type": "string",
"description": "Temporary download link for the file, supplied by ChatGPT."
}
},
"description": "Optional: a PDF to check, e.g. the report.pdf downloaded from make_pdf or exported from another app. Without it, the tool builds the PDF from the text and checks that."
},
"text": {
"type": "string",
"maxLength": 200000,
"description": "The Markdown whose blocks should be found in the PDF, e.g. \"# Budget\\n\\n| Item | Cost |\\n|---|---|\\n| Rent | 1200 |\"."
},
"paper": {
"enum": [
"letter",
"a4"
],
"type": "string",
"description": "Paper size: letter (US, default) or a4."
},
"title": {
"type": "string",
"maxLength": 200,
"description": "Optional document title printed at the top (or on a title page), e.g. \"Q3 Field Report\". Up to 200 characters."
},
"format": {
"enum": [
"markdown",
"plain"
],
"type": "string",
"description": "markdown (default) reads # headings, lists, tables and so on; plain prints the text as paragraphs with no markup."
},
"margins": {
"enum": [
"normal",
"narrow"
],
"type": "string",
"description": "Page margins: normal (1 in / 25.4 mm, default) or narrow (0.5 in / 12.7 mm)."
},
"font_size": {
"type": "integer",
"maximum": 14,
"minimum": 10,
"description": "Body text size in points from 10 to 14, e.g. 11 (default)."
},
"title_page": {
"type": "boolean",
"description": "true to print the title on its own first page. Needs a title (or uses the first heading). Default false."
},
"page_numbers": {
"type": "boolean",
"description": "true (default) prints \"page / total\" at the bottom of each page except a title page."
},
"table_of_contents": {
"type": "boolean",
"description": "true to add a contents page listing headings of levels 1-3 with their page numbers. Default false."
}
}
}Use this when the user wants Markdown or plain text (a chat answer, notes, a report, a README) as a downloadable PDF and an editable Word (DOCX) file. Reads ATX headings 1-4, paragraphs, bold, italic, inline code, fenced code blocks, bullet and numbered lists (2 levels), pipe tables, links, block quotes and rules; other Markdown prints as plain text and is listed in notes. Options: Letter or A4, normal or narrow margins, 10-14 pt text, title page, contents page, page numbers. Returns both links, the page count, the outline with page numbers, and a read-back check of the PDF text. Does not write or edit content, embed images, or convert existing files (Word, HTML, scans). Links expire in about 1 hour.
| Argument | Type | Description |
|---|---|---|
| text* | string | The Markdown or plain text to typeset, up to 200,000 characters, e.g. "# Trip notes\n\n- Day 1: Lisbon\n- Day 2: Porto". |
| paper | string | Paper size: letter (US, default) or a4. |
| title | string | Optional document title printed at the top (or on a title page), e.g. "Q3 Field Report". Up to 200 characters. |
| format | string | markdown (default) reads # headings, lists, tables and so on; plain prints the text as paragraphs with no markup. |
| margins | string | Page margins: normal (1 in / 25.4 mm, default) or narrow (0.5 in / 12.7 mm). |
| font_size | integer |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 8, 2026.
| Body text size in points from 10 to 14, e.g. 11 (default). |
| title_page | boolean | true to print the title on its own first page. Needs a title (or uses the first heading). Default false. |
| page_numbers | boolean | true (default) prints "page / total" at the bottom of each page except a title page. |
| table_of_contents | boolean | true to add a contents page listing headings of levels 1-3 with their page numbers. Default false. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 200000,
"description": "The Markdown or plain text to typeset, up to 200,000 characters, e.g. \"# Trip notes\\n\\n- Day 1: Lisbon\\n- Day 2: Porto\"."
},
"paper": {
"enum": [
"letter",
"a4"
],
"type": "string",
"description": "Paper size: letter (US, default) or a4."
},
"title": {
"type": "string",
"maxLength": 200,
"description": "Optional document title printed at the top (or on a title page), e.g. \"Q3 Field Report\". Up to 200 characters."
},
"format": {
"enum": [
"markdown",
"plain"
],
"type": "string",
"description": "markdown (default) reads # headings, lists, tables and so on; plain prints the text as paragraphs with no markup."
},
"margins": {
"enum": [
"normal",
"narrow"
],
"type": "string",
"description": "Page margins: normal (1 in / 25.4 mm, default) or narrow (0.5 in / 12.7 mm)."
},
"font_size": {
"type": "integer",
"maximum": 14,
"minimum": 10,
"description": "Body text size in points from 10 to 14, e.g. 11 (default)."
},
"title_page": {
"type": "boolean",
"description": "true to print the title on its own first page. Needs a title (or uses the first heading). Default false."
},
"page_numbers": {
"type": "boolean",
"description": "true (default) prints \"page / total\" at the bottom of each page except a title page."
},
"table_of_contents": {
"type": "boolean",
"description": "true to add a contents page listing headings of levels 1-3 with their page numbers. Default false."
}
}
}