Fetch and Convert Web Content to Markdown
MCP fetch server using Defuddle instead of Readability.js for cleaner web-page-to-markdown extraction, with rich metadata and paginated reading.
Why it matters
Enhance web content fetching with advanced cleaning and markdown conversion. This MCP server replaces standard fetch tools, providing superior extraction of main content, metadata, and readability from modern web pages.
Outcomes
What it gets done
Fetch URLs and extract content as clean markdown.
Clean HTML, removing clutter and preserving key information.
Extract rich metadata including title, author, and publication date.
Support chunked reading and pagination for large content.
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/vb-defuddle-fetch | bash Capabilities
Tools your agent gets
Fetches a URL and extracts its content as clean markdown text using Defuddle library
Overview
Defuddle Fetch MCP Server
An MCP server that fetches and converts web pages to clean markdown using Defuddle, a drop-in replacement for the default Readability.js-based fetch server, with pagination and rich metadata extraction (title, author, date, word count). Use as a general-purpose fetch MCP server replacement, especially for sites like GitHub where the default Readability.js-based extractor performs poorly. Same interface as the default fetch server, so it's a straightforward swap.
What it does
A Model Context Protocol server that fetches web content and converts it to clean, readable markdown using the Defuddle library, positioned as a drop-in replacement for the default MCP fetch server, which relies on Mozilla's Readability.js instead. The project's own motivation, drawn from a GitHub issue on the Defuddle repository, is that Readability.js performs noticeably worse than Defuddle at extracting content from certain modern sites - GitHub pages specifically called out as a weak spot - and that Defuddle's support for custom per-site extractors makes it a stronger foundation for a general-purpose web-fetching MCP server.
It exposes a single tool, fetch, which retrieves a URL and extracts its content as clean markdown (or raw HTML, if preferred). Parameters are url (required), max_length (optional, defaulting to 5000 characters, for capping how much content is returned), start_index (optional, defaulting to 0, for paginating through long pages by starting extraction at a given character offset), and raw (optional boolean, defaulting to false, to skip markdown conversion and return raw content instead). Beyond the cleaned content itself, the tool returns rich metadata: title, author, publication date, word count, domain, and processing time.
Three features summarize the value proposition: better content extraction (Defuddle strips webpage clutter while keeping the page title and key metadata intact), flexible output (markdown or raw HTML), and chunked reading (via start_index/max_length pagination for long pages that would otherwise be truncated or overwhelming in a single fetch).
When to use - and when NOT to
Use this connector as a general-purpose replacement for the default fetch MCP server whenever an AI assistant needs to read and summarize web page content, particularly for sites where Readability.js-based extraction produces messy or incomplete results (GitHub pages are the documented example). It is a straightforward drop-in swap - same fetch-style interface, better extraction quality - rather than a fundamentally different tool, so existing fetch-based workflows can adopt it without redesigning how content requests are made.
Capabilities
A single fetch tool, functionally interchangeable with the default fetch MCP server's own tool signature, so a client already calling that server's fetch can point at this one without changing how it invokes it - only the extraction quality and the added metadata fields change.
How to install
{
"mcpServers": {
"defuddle-fetch": {
"command": "npx",
"args": ["-y", "defuddle-fetch-mcp-server"]
}
}
}
Install via npx defuddle-fetch-mcp-server and configure into Claude Desktop through an mcpServers entry in claude_desktop_config.json; can also be built and run locally from source with Node.js for development or contribution, and follows semantic versioning for releases published to the NPM registry via GitHub Actions.
Who it's for
Anyone using an MCP client like Claude Desktop who wants more reliable web-page-to-markdown extraction than the default Readability.js-based fetch server provides, especially when regularly fetching content from sites like GitHub where the default extractor performs poorly.
Source README
defuddle-fetch-mcp-server
A Model Context Protocol server that provides web content fetching capabilities using the Defuddle library. This server enables LLMs to retrieve and process content from web pages, automatically cleaning up the HTML and converting it to clean, readable markdown.
This is a drop-in replacement for the default fetch MCP server that uses Readability. This generally provides better results for most modern webpages.
Comparison
(using this issue)
| Default Fetch MCP | Defuddle Fetch MCP |
|---|---|
| Contents of https://github.com/kepano/defuddle/issues/61: The MCP protocol is a standard for giving AI models access to tools. There's a default fetch MCP server, which enables AI models to fetch content from websites. This uses Readability.js which is a bit meh, particularly at navigating GitHub (which I try to use it for a lot). I appreciate there is the GitHub MCP, but a more general web browsing solution seems particularly nice here. Defuddle seems significantly better than Readability.js at processing pages nicely, and the model of having custom extractors to make particular sites work well seems great. It'd be neat if someone built a defuddle-based fetch MCP server. I might get round to this later if I get frustrated enough with the default fetch MCP 😄 |
# idea: defuddle-based fetch MCP server · Issue #61 · kepano/defuddle URL: https://github.com/kepano/defuddle/issues/61 Open #61 [](https://github.com/domdomegg)## Description The MCP protocol is a standard for giving AI models access to tools. There's a default fetch MCP server, which enables AI models to fetch content from websites. This uses Readability.js which is a bit meh, particularly at navigating GitHub (which I try to use it for a lot). I appreciate there is the GitHub MCP, but a more general web browsing solution seems particularly nice here. Defuddle seems significantly better than Readability.js at processing pages nicely, and the model of having custom extractors to make particular sites work well seems great. It'd be neat if someone built a defuddle-based fetch MCP server. I might get round to this later if I get frustrated enough with the default fetch MCP 😄 |
Features
- Better Content Extraction: Uses Defuddle to remove webpage clutter and extract main content: while keeping things like the page title and key metadata
- Flexible Output: Supports both markdown and raw HTML output
- Chunked Reading: Supports pagination with
start_indexandmax_lengthparameters - Rich Metadata: Extracts title, author, publication date, word count, and more
Installation
To use this server with the Claude Desktop app, add the following configuration to the "mcpServers" section of your claude_desktop_config.json:
{
"mcpServers": {
"defuddle-fetch": {
"command": "npx",
"args": [
"-y",
"defuddle-fetch-mcp-server"
]
}
}
}
Components
Tools
- fetch
- Fetches a URL from the internet and extracts its contents as clean, markdown text using Defuddle
- Input parameters:
url(string, required): URL to fetchmax_length(number, optional): Maximum number of characters to return. Defaults to 5000.start_index(number, optional): Start content from this character index. Defaults to 0.raw(boolean, optional): Get raw content without markdown conversion. Defaults to false.
- Returns cleaned content with metadata including title, author, publication date, word count, domain, and processing time
Releases
Versions follow the semantic versioning spec.
To release:
- Use
npm version <major | minor | patch>to bump the version - Run
git push --follow-tagsto push with tags - Wait for GitHub Actions to publish to the NPM registry.
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.