Any web page as clean, LLM-ready Markdown with metadata, outline and token counts. Free preview.
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.
Free. What Readmd does, prices of the paid tools and HTTP endpoints, and links to docs.
This tool takes no arguments.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http readmd https://readmd.canisell.xyz/mcp
Free. What Readmd does, prices of the paid tools and HTTP endpoints, and links to docs.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Free. Fetches a URL and returns its title, metadata, outline, word and token counts and the first 500 characters of the clean Markdown. Use read_url (paid, $0.001) for the full text.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http(s) URL |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 4,
"description": "Public http(s) URL"
}
}
}Read a web page as clean Markdown for an LLM. Fetches the URL (robots.txt respected), extracts the main content (drops navigation, headers, footers, sidebars, cookie banners) and returns GitHub-flavoured Markdown with headings, lists, tables, code blocks (with language) and absolute links, plus metadata (title, description, author, published/modified dates, site name, language, canonical URL, image), an outline of headings, word count and a token estimate. Options: mode=full for the whole page, links=false to save tokens, images=true, include_links=true for the link list, max_tokens to truncate, chunk_tokens to get RAG-ready chunks with heading paths. Also converts native Markdown, plain text, JSON and RSS/Atom feeds. Never charged when it fails: unreachable or 4xx/5xx targets, robots.txt disallow, unsupported types (PDF, images) and empty/JavaScript-only pages return an error and are not settled. $0.001 per page. Costs $0.001 USDC per call via x402 (charged only on success). Without an x402 wallet you get the payment terms and the paid HTTP URL instead.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http(s) URL of the page to read. |
| mode | string | "main" (default): the article / main content only, without navigation, headers, footers, sidebars and cookie banners. "full": the whole page body. |
| links | any | Keep inline links as [text](url) in the Markdown. Default true; false saves tokens. |
| images | any | Keep images as . Default false. |
| max_tokens |
Read up to 10 web pages as clean Markdown in one call, in parallel: the same output as /v1/read for each URL, with a per-URL ok/error. $0.005 per call (= $0.0005 per page at 10 URLs). Charged only if at least one URL is read successfully. Costs $0.005 USDC per call via x402 (charged only on success). Without an x402 wallet you get the payment terms and the paid HTTP URL instead.
| Argument | Type | Description |
|---|---|---|
| mode | string | "main" (default): the article / main content only, without navigation, headers, footers, sidebars and cookie banners. "full": the whole page body. |
| urls* | array | Up to 10 public http(s) URLs, read in parallel. |
| links | any | Keep inline links as [text](url) in the Markdown. Default true; false saves tokens. |
| images | any | Keep images as . Default false. |
| max_tokens | integer | Truncate the Markdown to about this many tokens, at a paragraph boundary (`truncated` tells you). Default: no limit (400k characters max). |
| chunk_tokens | integer | Also return `chunks`: the Markdown split at headings/paragraphs into pieces of at most about this many tokens, each with its heading path. For RAG. |
| include_links |
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 2, 2026.
| integer |
| Truncate the Markdown to about this many tokens, at a paragraph boundary (`truncated` tells you). Default: no limit (400k characters max). |
| chunk_tokens | integer | Also return `chunks`: the Markdown split at headings/paragraphs into pieces of at most about this many tokens, each with its heading path. For RAG. |
| include_links | any | Also return `links`: every link in the content as {url, text} (up to 500). Default false. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 4,
"description": "Public http(s) URL of the page to read."
},
"mode": {
"enum": [
"main",
"full"
],
"type": "string",
"description": "\"main\" (default): the article / main content only, without navigation, headers, footers, sidebars and cookie banners. \"full\": the whole page body."
},
"links": {
"anyOf": [
{
"type": "boolean"
},
{
"enum": [
"0",
"1",
"true",
"false"
],
"type": "string"
}
],
"description": "Keep inline links as [text](url) in the Markdown. Default true; false saves tokens."
},
"images": {
"anyOf": [
{
"type": "boolean"
},
{
"enum": [
"0",
"1",
"true",
"false"
],
"type": "string"
}
],
"description": "Keep images as . Default false."
},
"max_tokens": {
"type": "integer",
"maximum": 100000,
"minimum": 100,
"description": "Truncate the Markdown to about this many tokens, at a paragraph boundary (`truncated` tells you). Default: no limit (400k characters max)."
},
"chunk_tokens": {
"type": "integer",
"maximum": 8000,
"minimum": 100,
"description": "Also return `chunks`: the Markdown split at headings/paragraphs into pieces of at most about this many tokens, each with its heading path. For RAG."
},
"include_links": {
"anyOf": [
{
"type": "boolean"
},
{
"enum": [
"0",
"1",
"true",
"false"
],
"type": "string"
}
],
"description": "Also return `links`: every link in the content as {url, text} (up to 500). Default false."
}
}
}| any |
| Also return `links`: every link in the content as {url, text} (up to 500). Default false. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"urls"
],
"properties": {
"mode": {
"enum": [
"main",
"full"
],
"type": "string",
"description": "\"main\" (default): the article / main content only, without navigation, headers, footers, sidebars and cookie banners. \"full\": the whole page body."
},
"urls": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2048,
"minLength": 4
},
"maxItems": 10,
"minItems": 1,
"description": "Up to 10 public http(s) URLs, read in parallel."
},
"links": {
"anyOf": [
{
"type": "boolean"
},
{
"enum": [
"0",
"1",
"true",
"false"
],
"type": "string"
}
],
"description": "Keep inline links as [text](url) in the Markdown. Default true; false saves tokens."
},
"images": {
"anyOf": [
{
"type": "boolean"
},
{
"enum": [
"0",
"1",
"true",
"false"
],
"type": "string"
}
],
"description": "Keep images as . Default false."
},
"max_tokens": {
"type": "integer",
"maximum": 100000,
"minimum": 100,
"description": "Truncate the Markdown to about this many tokens, at a paragraph boundary (`truncated` tells you). Default: no limit (400k characters max)."
},
"chunk_tokens": {
"type": "integer",
"maximum": 8000,
"minimum": 100,
"description": "Also return `chunks`: the Markdown split at headings/paragraphs into pieces of at most about this many tokens, each with its heading path. For RAG."
},
"include_links": {
"anyOf": [
{
"type": "boolean"
},
{
"enum": [
"0",
"1",
"true",
"false"
],
"type": "string"
}
],
"description": "Also return `links`: every link in the content as {url, text} (up to 500). Default false."
}
}
}