PrintFriendly
Server Details
Read clean web pages and create PDF, Word and Markdown documents with a PrintFriendly API key.
- Status
- Healthy
- Uptime
- 99.7% over 26 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- printfriendly/printfriendly-mcp
- GitHub Stars
- 0
- Server Listing
- PrintFriendly MCP Server
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 2 tools
create_document and read_page have distinct purposes: one produces a shareable/printable document artifact, the other extracts page content for reading/summarising. The create_document description explicitly redirects users to read_page for page reading, eliminating ambiguity even though both can handle web pages and markdown output.
Both tools follow a clean verb_noun pattern in snake_case (create_document, read_page). There are no deviations or mixed conventions.
Only two tools are provided. While they cover the core actions, the set feels thin for a document conversion/reading service; a few more operations (e.g., checking plan usage, retrieving document status) could round it out.
The surface covers the primary workflows: creating documents from web pages in multiple formats and reading page content. Minor gaps exist (e.g., no way to list or manage previously created documents, no usage/plan query), but these are likely out of scope and easily worked around.
Available Tools
2 toolscreate_documentCreate a documentAInspect
Make a document from a web page, HTML or Markdown and return it. Use this when the user wants to save, share, print or download something: output pdf or docx (Word) returns a download link that works for 48 hours; markdown, html, json or text (plain text) returns the content itself. Give exactly one of url, html or markdown. To read a page for your own use, call read_page instead. Markdown, text and json output leave link addresses out unless include_links is true, and are never cut short, however long the page. Counts as one document on the API key's plan.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | A web page to turn into a document. Starts with https://. | |
| html | No | HTML to turn into a document, instead of a url. Up to 2 MB of markup. | |
| title | No | The document's title. Used for html and markdown input; a url supplies its own. | |
| output | Yes | pdf or docx (Word): a file with a download link. markdown or html: the clean content. text: the clean content as plain text, with no Markdown syntax. json: the content with its details (title, author, date, word count). | |
| markdown | No | Markdown to turn into a document, instead of a url. Up to 1 MB. | |
| page_size | No | Paper size for pdf and docx (Word). letter for the US and Canada, a4 elsewhere. | |
| include_links | No | Keep link addresses: as [text](url) in Markdown, or as text (url) in plain text. Affects markdown, text and json output only. Off by default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| output | Yes | The format that was made. |
| content | No | The document itself (markdown, html and text only). |
| document | Yes | The page's details: title, url, site, author, date, excerpt, image and word_count. For json output it also holds content_html and content_markdown. |
| file_url | No | Download link for the PDF or Word file, for pdf and docx (Word) output only. Valid for 48 hours. |
| expires_at | No | When the download link stops working, as an ISO 8601 time. For pdf and docx (Word) output only. |
| size_bytes | No | Size of the file in bytes. For pdf and docx (Word) output only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: 48-hour download-link lifetime, per-format return behavior, link-stripping default, no truncation guarantee, and quota cost ('Counts as one document on the API key's plan'). These are the operational traits an agent must know before calling.
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?
Front-loaded with purpose, then behavior, then the sibling pointer and quota note. Dense and mostly waste-free, though the format-behavior and link sentences could be tightened slightly.
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?
A rich output schema exists, so return values need no explanation, and the description still covers exclusivity, format behavior, TTL and quota. Nothing an agent needs to invoke this correctly is missing.
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 baseline is 3, but the description adds real value: the exactly-one-of url/html/markdown constraint (not expressed by the schema) and per-enum output semantics. It stops short of covering page_size or the full interaction of include_links beyond the default.
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 ('Make a document from a web page, HTML or Markdown and return it') and immediately differentiates itself from the sibling read_page. An agent can tell what it produces and how it differs from the alternative without opening a 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?
Explicitly names the trigger ('when the user wants to save, share, print or download something') and the alternative with its condition ('To read a page for your own use, call read_page instead'). Also states the input exclusivity rule ('Give exactly one of url, html or markdown').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_pageRead a web pageARead-onlyIdempotentInspect
Get the main content of a web page as clean Markdown, without ads, navigation, pop-ups or comments, plus its title, author, date and word count. Use this whenever you need to read, quote or summarise a page. It is cheaper than fetching and cleaning the raw HTML yourself. Link addresses are left out to save tokens: set include_links to true when you need the URLs. A page longer than 60000 characters is cut at a paragraph and the result says so: set max_chars to read more. Reads public pages only. Counts as one document on the API key's plan.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The full address of the web page, starting with https://. | |
| max_chars | No | Most characters of Markdown to return (60000 is about 15,000 tokens). A longer page is cut at a paragraph or heading, and the result says so and gives the full length. Call again with a larger value, up to 400000, to read more; each call counts as a document. | |
| include_links | No | Keep the page's link addresses in the Markdown, as [text](url). Off by default, because the addresses can be most of the output. Turn on when you need to cite or follow a link. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | The address the content came from. |
| date | No | The publication date, when the page gives one. |
| site | No | The site's name. |
| image | No | The page's lead image, when it has one. |
| title | Yes | The page's title. |
| author | No | The author, when the page names one. |
| excerpt | No | A one or two sentence summary of the page. |
| markdown | Yes | The main content of the page as Markdown, cut at max_chars when it is longer. |
| truncated | Yes | True when the Markdown was cut short at max_chars. |
| word_count | Yes | Words in the main content. |
| total_chars | Yes | Length in characters of the page's whole Markdown, cut or not. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the bar is lower, yet the description goes well beyond: it discloses the 60000-character truncation and that the result says so, that link addresses are stripped by default, that only public pages are readable, and that each call counts as one document on the API key's plan.
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?
Front-loaded with purpose, then usage, then parameter caveats, then limits – a sensible order. It is somewhat long and repeats the max_chars truncation rule already spelled out in the schema, which is minor waste.
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 read-only fetch tool with a full output schema, the description covers everything an agent needs: what content comes back, token/cost implications, truncation and how to extend, link handling, and the public-pages-only constraint.
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 url, max_chars and include_links in detail. The description restates the max_chars truncation and include_links tradeoff but adds no syntax or format meaning the schema lacks; 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 ('Get the main content of a web page as clean Markdown') and enumerates what comes with it (title, author, date, word count). An agent can immediately tell this is a page-reader and not the sibling write tool create_document.
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?
Explicitly says when to use it ('whenever you need to read, quote or summarise a page') and gives a rationale ('cheaper than fetching and cleaning the raw HTML yourself'), plus one exclusion ('Reads public pages only'). It stops short of naming an alternative tool or covering non-public/JS-heavy pages.
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.
1 tool update
- Changed
create_document5 fields changed- changed
Input schema / properties / include_links / descriptionPrevious value: -"Keep link addresses in the Markdown, as [text](url). Affects markdown and json output only. Off by default."New value: +"Keep link addresses: as [text](url) in Markdown, or as text (url) in plain text. Affects markdown, text and json output only. Off by default." - changed
Input schema / properties / output / descriptionPrevious value: -"pdf or docx (Word): a file with a download link. markdown or html: the clean content. json: the content with its details (title, author, date, word count)."New value: +"pdf or docx (Word): a file with a download link. markdown or html: the clean content. text: the clean content as plain text, with no Markdown syntax. json: the content with its details (title, author, date, word count)." - changed
Input schema / properties / output / enumPrevious value: -[ - "pdf", - "docx", - "markdown", - "html", - "json" -]New value: +[ + "pdf", + "docx", + "markdown", + "html", + "json", + "text" +] - changed
Output schema / properties / content / descriptionPrevious value: -"The document itself (markdown and html only)."New value: +"The document itself (markdown, html and text only)." - changed
Output schema / properties / output / enumPrevious value: -[ - "pdf", - "docx", - "markdown", - "html", - "json" -]New value: +[ + "pdf", + "docx", + "markdown", + "html", + "json", + "text" +]
1 tool update
- Changed
create_document5 fields changed- changed
Input schema / properties / output / descriptionPrevious value: -"pdf or docx: a file with a download link. markdown or html: the clean content. json: the content with its details (title, author, date, word count)."New value: +"pdf or docx (Word): a file with a download link. markdown or html: the clean content. json: the content with its details (title, author, date, word count)." - changed
Input schema / properties / page_size / descriptionPrevious value: -"Paper size for pdf and docx. letter for the US and Canada, a4 elsewhere."New value: +"Paper size for pdf and docx (Word). letter for the US and Canada, a4 elsewhere." - changed
Output schema / properties / expires_at / descriptionPrevious value: -"When the download link stops working, as an ISO 8601 time (pdf and docx only)."New value: +"When the download link stops working, as an ISO 8601 time. For pdf and docx (Word) output only." - changed
Output schema / properties / file_url / descriptionPrevious value: -"Download link for the PDF or Word file (pdf and docx only). Valid for 48 hours."New value: +"Download link for the PDF or Word file, for pdf and docx (Word) output only. Valid for 48 hours." - changed
Output schema / properties / size_bytes / descriptionPrevious value: -"Size of the file in bytes (pdf and docx only)."New value: +"Size of the file in bytes. For pdf and docx (Word) output only."
2 tool updates
- First observed
create_document - First observed
read_page
Publisher details
- Operator
- PrintFriendly · Publisher source
- Operator website
- https://www.printfriendly.com
- Vendor relationship
- First-party
- Documentation
- https://www.printfriendly.com/help/api-mcp
- Trust center
- Not applicable
- Restrictions
- Requires a PrintFriendly API key. Free plan: 100 documents a month, no card. Paid plans from $19 a month at https://www.printfriendly.com/api
Related MCP Connectors
Convert public web pages to PDF, images, Markdown, or JSON using one API key.
PDFs from HTML, Markdown, web pages and Office files; merge PDFs, screenshots. Sign in or API key.
Printwren: web page or HTML to PDF with real Chrome; pages, base64 or download link. Free, no key.
Printwren: web page or HTML to PDF with real Chrome; pages, base64 or download link. Free, no key.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables clients to read web pages and PDFs as markdown, capture screenshots, search the web and academic sources, rerank/deduplicate content, and extract PDF elements. Supports API-key access, tool filtering, and response token limits.Apache 2.0
- AlicenseAqualityBmaintenanceFetch any web page as clean Markdown or plain text, split it into heading-aware, token-bounded RAG chunks, convert raw HTML, and read page metadata. Uses the Web2MD API on RapidAPI with your own key (free BASIC plan).4447 npmMIT
- AlicenseAqualityBmaintenanceEnables AI agents to turn live web pages or supplied HTML into clean, main-content Markdown with title, author, date and language metadata. It respects robots.txt and AI opt-outs, reporting refusal reasons, quota, and plain-language errors back to the agent.2MIT
- AlicenseNot gradedqualityCmaintenanceProvides functionality to fetch and transform web content in various formats (HTML, JSON, plain text, and Markdown) through simple API calls.127,538 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.