ReflowPDF
REMOTE · APP.REFLOWPDF.COM
Paged PDFs from HTML and CSS, document templates, and an editor link for every document.
Available components
Last scanned (2 hours ago)
Scores higher than 58% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Documents and Files
Recent critical change
Authorization (28 Oct 2026). See the changelog before you install this server.
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (update_document). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability81
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 2713 tokens (~135/item across 20 items; 12 tools + 8 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management33
- Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (92% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 12 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 14 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 0
- Server version: 8394b2f7b985 → f75780684968 functional
- 4 Nov 26 0
- Server version: c11301561c2e → 8394b2f7b985 functional
- 3 Nov 26 +1
- Server version: 153cf7acef45 → c11301561c2e functional
- 2 Nov 26 0
- Server version: 866470307627 → 153cf7acef45 functional
- 1 Nov 26 +1
- Server version: a39601293d02 → 866470307627 functional
- 30 Oct 26 +1
- Server version: efa515265efa → a39601293d02 functional
- 28 Oct 26 −6
- Authorization: partial → fail ▼ critical
- The server rewrote its instructions, which are the text every model session reads security
- Tool “render_pdf” rewrote its description, which is the text the model reads security
- Tool “update_document” rewrote its description, which is the text the model reads security
- Tool “update_document” is now declared destructive security
- Server version: 219fe1209722 → efa515265efa functional
- 27 Oct 26 0
- Tool “import_pdf” rewrote its description, which is the text the model reads security
- Tool “upload_image” rewrote its description, which is the text the model reads security
- Schema quality: 106 → 135 ▼ functional
- Stability: unverified → 0.03 ▲ functional
- Server version: 05b002883231 → 219fe1209722 functional
- New tool “ask_for_images” functional
- “import_pdf” added an optional parameter “pdf” cosmetic
- “render_pdf” added an optional parameter “preview” cosmetic
- “render_pdf” added an optional parameter “preview_pages” cosmetic
- “render_template” added an optional parameter “preview” cosmetic
- “render_template” added an optional parameter “preview_pages” cosmetic
- “update_document” added an optional parameter “preview” cosmetic
- “update_document” added an optional parameter “preview_pages” cosmetic
- “upload_image” added an optional parameter “image” cosmetic
- “update_document” reworded the description of “filename” cosmetic
- “upload_image” made “image_base64” optional cosmetic
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://app.reflowpdf.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=reflowpdf.com | CN=YE1,O=Let's Encrypt,C=US | 10 Oct 2026 | 8 Jan 2027 | ECDSA 256 | ECDSA-SHA384 | 583d1c3280b47fddb2b0fd10c119dc9d3da |
| SANs: *.reflowpdf.com, reflowpdf.com | ||||||
| CN=YE1,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 5ddd70dd31f801c85c186a7a04b80afe |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of app.reflowpdf.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| reflowpdf.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| content-security-policy | default-src 'self'; script-src 'self' 'wasm-unsafe-eval' 'unsafe-inline' https://accounts.google.com/gsi/client https://static.cloudflareinsights.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://accounts.google.com/gsi/style; font-src 'self' data: blob: https://fonts.gstatic.com; img-src 'self' data: blob: https:; connect-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com https://accounts.google.com/gsi/ https://cloudflareinsights.com; worker-src 'self' blob:; frame-src 'self' blob: https://demo.reflowpdf.com https://accounts.google.com/gsi/; frame-ancestors 'self' https://reflowpdf.com https://www.reflowpdf.com https://app2.reflowpdf.com; base-uri 'self'; form-action 'self'; object-src 'none' |
| x-content-type-options | nosniff |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | geolocation=(), microphone=(), camera=() |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://app.reflowpdf.com/mcp | Verified | 200 | |
| http (plaintext) | http://app.reflowpdf.com/mcp | HTTPS enforced | 301 | https://app.reflowpdf.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
ask_for_images Ask the person for their images ~254
Gives a link where the person uploads pictures from their device for you — their logo, photos, a signature scan — when you cannot take the file from the chat yourself (you see an attached picture but have no file of it, or they have not sent it yet). Give them the link and say what to upload. When they say they are done, call ask_for_images again with upload_id: you get each image's link (with its size and file name) to put in the document — render_pdf, update_document. A program with the file (a shell, a code sandbox) can POST its bytes to the same link instead. The link works for 24 hours and takes up to 50 images — photos straight from a phone or a camera too (HEIC, up to 40 MB each; brought to print size, 4096 px on the long side).
| Name | Type | Req | Description |
|---|---|---|---|
| note | string | – | What to upload, shown to the person on the page, e.g. "Your company logo (PNG with a transparent background is best)". Only for a new link. |
| upload_id | string | – | The upload_id of a link you gave: what the person has uploaded to it so far. |
| Name | Type | Req | Description |
|---|---|---|---|
| expiresAt | string | yes | – |
| images | array | yes | – |
| notes | array | yes | – |
| uploadId | string | yes | – |
| uploadUrl | string | yes | The link for the person. |
No examples provided.
connect_account Connect the person's ReflowPDF account ~91
Signs the person in to their ReflowPDF account (a free one is enough), when they want PDFs without the ReflowPDF mark, their plan's pages, or the documents you make kept in their account. Their client shows a Connect button; once they have signed in, every call of yours is their account's. Without it everything works too, as a guest: every page, with a small mark.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| connected | boolean | yes | – |
| notes | array | yes | – |
No examples provided.
get_document Read a document by its link ~89
Returns a document made with ReflowPDF (by you, or opened in the editor from your link) as it is now — the person may have edited it in the editor: its source HTML, template data and revision. Read it before changing it with update_document.
| Name | Type | Req | Description |
|---|---|---|---|
| document_id | string | yes | The document_id (or the edit link) from render_pdf, render_template or open_in_editor. |
| Name | Type | Req | Description |
|---|---|---|---|
| by | string | yes | Who wrote this revision: you, or the person in the editor. |
| data | object | yes | – |
| documentId | string | yes | – |
| editUrl | string | yes | – |
| html | string | yes | The document's source (a template when data is not empty). |
| kind | string | – | An HTML document (its {{ … }} is text), or a template with its data. |
| name | string | – | – |
| owned | boolean | – | The document is the person's account's: your prints of it count to their plan. |
| revision | integer | yes | – |
| updatedAt | string | yes | – |
No examples provided.
get_template Read a template and its sample data ~52
Returns a gallery template's source and its sample data, to fill with the person's values (render_template) or to adapt into your own template.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The template's id, from list_templates. |
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | yes | – |
| data | object | yes | – |
| description | string | yes | – |
| id | string | yes | – |
| name | string | yes | – |
| paper | string | yes | – |
| template | string | yes | – |
No examples provided.
import_pdf Import a PDF into the editor ~254
Returns a link (valid 24 hours) that opens an existing PDF in the ReflowPDF editor's import, which rebuilds it as an editable document. A PDF exported from the ReflowPDF editor with «Keep the PDF editable» opens from its own source at once; any other — the PDFs these tools print too — is rebuilt by AI, which needs a free account and uses its AI pages (the editor shows the cost first). A document you made with these tools needs no import: give the person its edit link. Give the PDF the person attached in the chat (pdf, as your client passes attached files), a public https URL of it, or its bytes in base64 (small files). A PDF you cannot pass on: the person opens the editor (https://app.reflowpdf.com) and imports it there.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | – | The document's name. Default: the file's. |
| object | – | A PDF the person attached in the chat, as your client passes attached files to tools. | |
| pdf_base64 | string | – | The PDF's bytes, base64 (up to 20 MB). |
| url | string | – | A public https address of the PDF. |
| Name | Type | Req | Description |
|---|---|---|---|
| documentId | string | – | – |
| expiresAt | string | yes | When the link stops working (ISO 8601). |
| notes | array | yes | What to tell the person about this link. |
| revision | integer | – | – |
| url | string | yes | The link; it works until expiresAt. |
No examples provided.
list_templates Find a document template ~91
Lists the gallery's ready documents — invoices, quotes, receipts, statements, reports, contracts, letters, CVs, certificates, tickets, labels, menus and more — each a template with sample data. Search by a word ("invoice", "contract") or a category.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | Only this category. |
| query | string | – | Words to look for in the name, purpose or category. |
| Name | Type | Req | Description |
|---|---|---|---|
| templates | array | yes | – |
No examples provided.
open_in_editor Open in the ReflowPDF editor ~149
Returns the edit link of a document in the ReflowPDF editor, where the person edits it on the page and downloads it: your HTML, or a template with its data (kept as template and data, both editable). Use when the person wants to change the document themselves; you can read their changes and change it too (get_document, update_document).
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | – | The values of the template, if it is one. |
| html | string | – | The HTML document (or your own template source, with data). |
| name | string | – | The document's name in the editor. |
| template_id | string | – | A gallery template's id, instead of html. |
| Name | Type | Req | Description |
|---|---|---|---|
| documentId | string | – | – |
| expiresAt | string | yes | When the link stops working (ISO 8601). |
| notes | array | yes | What to tell the person about this link. |
| revision | integer | – | – |
| url | string | yes | The link; it works until expiresAt. |
No examples provided.
read_guide How to write documents for ReflowPDF ~136
The engine's guide: "overview" (the tools), "html" (paper, headers/footers, page numbers, tables of contents, footnotes, fonts, images, accessibility), "pages" (page kinds, breaks and keeping together, covers, numbering, bleed and crop marks), "design" (columns, drop caps, page decorations and watermarks, spacing, images and text wrap, typography), "charts" (the chart block), "codes" (QR codes and barcodes), "forms" (fillable fields), "templates" (the template language).
| Name | Type | Req | Description |
|---|---|---|---|
| topic | string | – | Default: html. |
No output schema declared.
No examples provided.
render_pdf Print HTML to PDF ~280
Lays out a whole HTML document (with its CSS) as paged print and returns a download link to the PDF, valid 24 hours, and the document's edit link in the ReflowPDF editor. Use @page for paper and margins, margin boxes for headers, footers and page numbers; JavaScript does not run. Read read_guide topic "html" before the first document. To change the document later, use update_document with its document_id.
| Name | Type | Req | Description |
|---|---|---|---|
| filename | string | – | The PDF file name, e.g. "invoice-1042.pdf". Default: the document's <title>. |
| html | string | yes | The whole HTML document: <!doctype html>, <html lang>, a <title>, a <style> in <head> with @page. Self-contained; images and fonts by https URL, data: URI or an upload_image link. |
| preview | boolean | – | Pictures (PNG) of pages come with the answer, so you can check the layout, fonts and images before giving the links. Default: true. |
| preview_pages | array | – | Which pages to see, 1-based; -1 is the last page. Default: page 1 and the last page (a page that spilled over shows there). Up to 4, e.g. [1, 2, -1]. |
| Name | Type | Req | Description |
|---|---|---|---|
| bytes | integer | yes | – |
| documentId | string | – | The document, for get_document and update_document. |
| editUrl | string | – | The document in the ReflowPDF editor: the person edits it there (the link is the document; it lasts while it is used). |
| expiresAt | string | yes | When the link stops working (ISO 8601). |
| filename | string | yes | – |
| mark | string | yes | Whether the PDF carries the ReflowPDF mark, and why. |
| missingFonts | array | – | Font families the document named that no face answered: their text took the next family of its list. |
| missingVariables | array | – | Template values the data did not have (printed empty). |
| notes | array | yes | Facts about this PDF: how long its link works, its mark, what was not fetched or filled. |
| pages | integer | yes | – |
| preview | string | – | Which pages came with this answer as pictures (PNG), or why none did. |
| renderMs | integer | – | How long the print took on the server, in milliseconds (the engine and its adapter). |
| revision | integer | – | Its revision: name it to update_document as base_revision. |
| skippedResources | array | – | Images, fonts or style sheets the server could not fetch. |
| timing | object | – | The engine's own parts of it, when it states them: layoutMs (styles, layout and pagination) and writeMs (writing the PDF). |
| url | string | yes | The link, valid 24 hours. |
No examples provided.
render_template Fill a template and print it ~301
Fills a template with JSON data and prints it to PDF (a download link, valid 24 hours, and the edit link in the editor, where its template and data stay editable — until the person edits it on the page, which makes it a plain HTML document: then change its html). Either a gallery template (template_id from list_templates; without data it prints its sample) or your own template source. Send data in the shape of the template's sample (get_template). The language: read_guide topic "templates".
| Name | Type | Req | Description |
|---|---|---|---|
| data | object | – | The values the template reads, in the shape of its sample data. |
| filename | string | – | The PDF file name. Default: the template's name or the document's <title>. |
| preview | boolean | – | Pictures (PNG) of pages come with the answer, so you can check the layout, fonts and images before giving the links. Default: true. |
| preview_pages | array | – | Which pages to see, 1-based; -1 is the last page. Default: page 1 and the last page (a page that spilled over shows there). Up to 4, e.g. [1, 2, -1]. |
| template | string | – | Your own template source (HTML with {{ value }}, {% for %}, {% if %}), instead of template_id. |
| template_id | string | – | A gallery template's id, from list_templates. |
| Name | Type | Req | Description |
|---|---|---|---|
| bytes | integer | yes | – |
| documentId | string | – | The document, for get_document and update_document. |
| editUrl | string | – | The document in the ReflowPDF editor: the person edits it there (the link is the document; it lasts while it is used). |
| expiresAt | string | yes | When the link stops working (ISO 8601). |
| filename | string | yes | – |
| mark | string | yes | Whether the PDF carries the ReflowPDF mark, and why. |
| missingFonts | array | – | Font families the document named that no face answered: their text took the next family of its list. |
| missingVariables | array | – | Template values the data did not have (printed empty). |
| notes | array | yes | Facts about this PDF: how long its link works, its mark, what was not fetched or filled. |
| pages | integer | yes | – |
| preview | string | – | Which pages came with this answer as pictures (PNG), or why none did. |
| renderMs | integer | – | How long the print took on the server, in milliseconds (the engine and its adapter). |
| revision | integer | – | Its revision: name it to update_document as base_revision. |
| skippedResources | array | – | Images, fonts or style sheets the server could not fetch. |
| timing | object | – | The engine's own parts of it, when it states them: layoutMs (styles, layout and pagination) and writeMs (writing the PDF). |
| url | string | yes | The link, valid 24 hours. |
No examples provided.
update_document Change a document by its link ~368
Writes a new version of a document by its link — e.g. the person asks in the chat to remove something on page 2 — and prints it again: the PDF link, the same edit link (the editor open on it shows the change). The new version replaces the one before. Send the whole new html (and data, if it is a template), changed from what get_document returned, with base_revision: a document the person changed after you read it is refused, so read it again.
| Name | Type | Req | Description |
|---|---|---|---|
| base_revision | integer | yes | The revision you read (get_document, or the last result). Required: a document the person changed after it is refused, never overwritten. |
| data | object | – | The template's new data. Alone, only for a template (kind "template"); with html, non-empty data makes the document a template. Omitted: the data stays. |
| document_id | string | yes | The document_id (or the edit link). |
| filename | string | – | A new PDF file name, kept for its later prints. Default: the name it was printed with (render_pdf filename), else its <title>. |
| html | string | – | The whole new source. Omitted: the source stays (e.g. new data only). |
| name | string | – | A new name. |
| preview | boolean | – | Pictures (PNG) of pages come with the answer, so you can check the layout, fonts and images before giving the links. Default: true. |
| preview_pages | array | – | Which pages to see, 1-based; -1 is the last page. Default: page 1 and the last page (a page that spilled over shows there). Up to 4, e.g. [1, 2, -1]. |
| Name | Type | Req | Description |
|---|---|---|---|
| bytes | integer | yes | – |
| documentId | string | – | The document, for get_document and update_document. |
| editUrl | string | – | The document in the ReflowPDF editor: the person edits it there (the link is the document; it lasts while it is used). |
| expiresAt | string | yes | When the link stops working (ISO 8601). |
| filename | string | yes | – |
| mark | string | yes | Whether the PDF carries the ReflowPDF mark, and why. |
| missingFonts | array | – | Font families the document named that no face answered: their text took the next family of its list. |
| missingVariables | array | – | Template values the data did not have (printed empty). |
| notes | array | yes | Facts about this PDF: how long its link works, its mark, what was not fetched or filled. |
| pages | integer | yes | – |
| preview | string | – | Which pages came with this answer as pictures (PNG), or why none did. |
| renderMs | integer | – | How long the print took on the server, in milliseconds (the engine and its adapter). |
| revision | integer | – | Its revision: name it to update_document as base_revision. |
| skippedResources | array | – | Images, fonts or style sheets the server could not fetch. |
| timing | object | – | The engine's own parts of it, when it states them: layoutMs (styles, layout and pagination) and writeMs (writing the PDF). |
| url | string | yes | The link, valid 24 hours. |
No examples provided.
upload_image Keep an image for a document ~257
Keeps an image and returns its link, to use as <img src> or CSS url() in render_pdf, render_template, open_in_editor and update_document — so the document stays small when you read it back. Give one of: image — a picture the person attached in the chat, as your client passes attached files to tools; image_base64 — bytes you have yourself (one you made, a small file you can read: base64 is text you write, so tens of KB). PNG, JPEG, HEIC, GIF, WebP or AVIF; a photo over 10 MB or in HEIC is brought to print size (4096 px on the long side). A picture the person attached that you can see but have no file of: call ask_for_images, which gives them a link to upload it from their device. An image at a public https address needs no upload: use that address. An SVG goes into the HTML as it is. The image lasts 30 days after a document using it last changed.
| Name | Type | Req | Description |
|---|---|---|---|
| image | object | – | A picture the person attached in the chat. |
| image_base64 | string | – | The image's bytes, base64 (a data: URI is taken too). |
| Name | Type | Req | Description |
|---|---|---|---|
| bytes | integer | yes | – |
| height | integer | yes | – |
| type | string | yes | – |
| url | string | yes | The image's link, for <img src>. |
| width | integer | yes | Pixels (0: not read from this format). |
No examples provided.
How do I install the ReflowPDF MCP server?
ReflowPDF is a hosted endpoint at https://app.reflowpdf.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · app.reflowpdf.com
claude mcp add --transport http com-reflowpdf-reflowpdf 'https://app.reflowpdf.com/mcp'
What is the ReflowPDF MCP server?
ReflowPDF is an MCP server listed in the public MCP registry as com.reflowpdf/reflowpdf. Paged PDFs from HTML and CSS, document templates, and an editor link for every document. This page covers its hosted endpoint (https://app.reflowpdf.com/mcp).
Is the ReflowPDF MCP server safe to use?
ReflowPDF scores 72 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the ReflowPDF MCP server expose?
ReflowPDF exposes 12 tools: render_pdf, render_template, list_templates, get_template, open_in_editor, and 7 more. Their descriptions and schemas cost roughly 2,322 tokens of context every time the server is loaded.
Does the ReflowPDF MCP server require authentication?
No. We connected to ReflowPDF without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the ReflowPDF MCP server still maintained?
ReflowPDF is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.