URL to Markdown MCP avatar

URL to Markdown MCP

Pricing

from $0.01 / 1,000 results

Go to Apify Store
URL to Markdown MCP

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.

Pricing

from $0.01 / 1,000 results

Rating

0.0

(0)

Developer

Jordan C

Jordan C

Maintained by Community

Actor stats

0

Bookmarked

0

Total users

0

Monthly active users

19 days ago

Last modified

Categories

Share

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_TOKEN
Content-Type: application/json
Accept: 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; default 15000.

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 at maxLength and then given a truncation marker;
  • excerpt: Readability’s excerpt, or the first 200 fallback characters;
  • byline: extracted author string or null;
  • length: character count of the returned content.

batch-url-to-markdown

  • urls — required array containing 1–10 URL strings.
  • maxLength — optional per-URL number from 100 to 50,000; default 10000.

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 ci
npm test
npm run build
apify validate-schema
npm run start:dev

The local MCP endpoint is http://localhost:3000/mcp.