URL to Markdown MCP
Pricing
from $0.01 / 1,000 results
URL to Markdown MCP
Convert any web page to clean markdown for AI agents. Uses Firefox Reader Mode engine for content extraction. Perfect for RAG pipelines, research, and LLM content ingestion.
Fetch a web page and turn its reader-focused content into Markdown for AI agents, research workflows, and lightweight ingestion. The server uses Mozilla Readability in JSDOM, then converts the extracted HTML with Cheerio. It is intended for public, directly accessible, server-rendered HTML—not arbitrary files or protected browser sessions.
Use cases
- prepare article text for summarization or retrieval pipelines;
- remove common navigation, advertising, and page chrome before analysis;
- collect up to ten public pages in one batch request;
- preserve basic headings, links, images, lists, emphasis, quotations, and code formatting.
Connect over Streamable HTTP
Use this exact MCP endpoint:
https://reverberant-equality--mcp-url-to-markdown.apify.actor/mcp
Authenticate through Apify with a Bearer token:
Authorization: Bearer $APIFY_API_TOKENContent-Type: application/jsonAccept: application/json, text/event-stream
Select Streamable HTTP in your MCP client and perform the standard initialize exchange before calling a tool.
Tools and exact arguments
url-to-markdown
url— required URL string.maxLength— optional number from 100 to 100,000; default15000.
One successful call returns a JSON object inside an MCP text content item:
url: the requested URL;title: Readability’s title, or the hostname/fallback<title>;content: converted Markdown; long Readability output is sliced atmaxLengthand then given a truncation marker;excerpt: Readability’s excerpt, or the first 200 fallback characters;byline: extracted author string ornull;length: character count of the returnedcontent.
batch-url-to-markdown
urls— required array containing 1–10 URL strings.maxLength— optional per-URL number from 100 to 50,000; default10000.
The pages are fetched in parallel. The result is an array containing the same fields for each URL. A failed item contains error plus empty content fields; failures are isolated, so one bad URL does not make the entire batch response an MCP error.
Example tool-call payload:
{"jsonrpc": "2.0","id": 1,"method": "tools/call","params": {"name": "url-to-markdown","arguments": {"url": "https://example.com/article","maxLength": 20000}}}
Illustrative result shape, with intentionally shortened content:
{"url": "https://example.com/article","title": "Example article","content": "# Example article\n\nExtracted text.","excerpt": "Extracted text.","byline": null,"length": 34}
Readability output longer than the cap keeps its first maxLength characters and then appends [...truncated], so the final returned length can exceed maxLength by the marker length. The fallback body-text path is sliced exactly at maxLength without that marker.
Pricing
A charged tool-call unit costs $0.005. url-to-markdown charges one unit. batch-url-to-markdown charges one unit per URL, so a batch of ten costs $0.05. Charging occurs before fetching; invalid upstream responses, timeouts, and per-item batch failures can still be charged.
Extraction and security limits
The upstream source is the URL supplied by the caller. Fetches use Axios with a 30-second timeout and up to five automatic redirects. Pages are not rendered in a browser, so client-side-only content will usually be absent. The server does not sign in, execute page JavaScript, manage cookies, bypass paywalls, solve challenges, or reliably parse PDFs, images, audio, video, or other binary formats. Relative links and image URLs are not normalized. Markdown conversion is intentionally basic and can lose tables, nested structure, styling, or complex code metadata.
Use only public HTTP(S) pages you are authorized to access. The current implementation has no HTTP(S)-only protocol allowlist, private-address/DNS block, redirect revalidation, response-byte cap, or content-type allowlist. maxLength limits returned characters only after the complete response has downloaded and parsed. This is not a hardened arbitrary-URL fetcher, and it must not be used to probe localhost, private networks, cloud metadata endpoints, or internal services.
Extracted pages are untrusted input. The service does not detect or neutralize prompt injection, malicious instructions, misleading markup, or harmful links. Keep content separated from system instructions and validate it before agent execution.
For a single URL, fetch or parse failures return MCP isError: true with url, error, empty strings, byline: null, and length: 0. Batch failures remain item-level objects. The full requested URL—including query parameters—is written to Actor logs and sent to the destination server. Do not submit signed links, credentials, or secrets. Results are returned directly and are not written to a dataset.
Local development
Requires Node.js 20+ and the Apify CLI:
npm cinpm testnpm run buildapify validate-schemanpm run start:dev
The local MCP endpoint is http://localhost:3000/mcp.