Fetch MCP Server
Fetches web content and converts it to Markdown format, allowing retrieval of web content in a structured, readable format.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Fetch MCP Serverfetch the latest news from the BBC homepage as markdown"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Fetch MCP Server

This MCP server provides functionality to fetch web content in various formats, including HTML, JSON, plain text, and Markdown.
Components
Tools
fetch_html
Fetch a website and return the content as HTML
Input:
url(string, required): URL of the website to fetchheaders(object, optional): Custom headers to include in the request
Returns the raw HTML content of the webpage
fetch_json
Fetch a JSON file from a URL
Input:
url(string, required): URL of the JSON to fetchheaders(object, optional): Custom headers to include in the request
Returns the parsed JSON content
fetch_txt
Fetch a website and return the content as plain text (no HTML)
Input:
url(string, required): URL of the website to fetchheaders(object, optional): Custom headers to include in the request
Returns the text content of the webpage with HTML tags, scripts, and styles removed
fetch_markdown
Fetch a website and return the content as Markdown
Input:
url(string, required): URL of the website to fetchheaders(object, optional): Custom headers to include in the request
Returns the content of the webpage converted to Markdown format
Resources
This server does not provide any persistent resources. It's designed to fetch and transform web content on demand.
Related MCP server: Fetch MCP Server
Getting started
Clone the repository
Install dependencies:
npm installBuild the server:
npm run build
Installing via Smithery
To install fetch-mcp for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @goswamig/fetch-mcp --client claudeUsage
To use the server, you can run it directly:
npm startThis will start the Fetch MCP Server running on stdio.
Usage with Desktop App
To integrate this server with a desktop app, add the following to your app's server configuration:
{
"mcpServers": {
"fetch": {
"command": "node",
"args": [
"{ABSOLUTE PATH TO FILE HERE}/dist/index.js"
]
}
}
}Features
Fetches web content using modern fetch API
Supports custom headers for requests
Provides content in multiple formats: HTML, JSON, plain text, and Markdown
Uses JSDOM for HTML parsing and text extraction
Uses TurndownService for HTML to Markdown conversion
Development
Run
npm run devto start the TypeScript compiler in watch modeUse
npm testto run the test suite
License
This project is licensed under the MIT License.
Available Tools
4 toolsfetch_htmlC
Fetch a website and return the content as HTML
| Name | Required | Description | Default |
|---|---|---|---|
| headers | No | Optional headers to include in the request | |
| url | Yes | URL of the website to fetch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral context. It states the basic operation but doesn't disclose important traits like error handling, timeout behavior, authentication needs, rate limits, or what happens with invalid URLs. For a network tool with zero annotation coverage, this is insufficient.
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?
The description is a single, efficient sentence that communicates the core functionality without unnecessary words. It's appropriately sized and front-loaded with the essential information.
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 network fetch tool with no annotations and no output schema, the description is inadequate. It doesn't explain what gets returned beyond 'HTML' (structure, errors, status codes), doesn't mention network behavior, and provides no guidance on usage versus siblings. The complexity warrants more complete documentation.
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 both parameters (url and headers). The description doesn't add any parameter-specific information beyond what's in the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
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?
The description clearly states the action ('fetch') and resource ('a website'), specifying the return format ('content as HTML'). It distinguishes from sibling tools by mentioning HTML output, but doesn't explicitly contrast with fetch_json, fetch_markdown, or fetch_txt beyond format differences.
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?
No guidance is provided on when to use this tool versus the sibling tools (fetch_json, fetch_markdown, fetch_txt). The description implies it's for fetching websites, but doesn't specify scenarios where HTML output is preferred over JSON, Markdown, or plain text alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_jsonC
Fetch a JSON file from a URL
| Name | Required | Description | Default |
|---|---|---|---|
| headers | No | Optional headers to include in the request | |
| url | Yes | URL of the JSON to fetch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Fetch a JSON file from a URL' implies a read operation but doesn't specify error handling, authentication needs, rate limits, or what happens if the URL doesn't return valid JSON. This leaves significant behavioral gaps for an agent.
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?
The description is extremely concise at just one sentence with zero wasted words. It's front-loaded with the core purpose and appropriately sized for a simple tool, making it easy to parse quickly.
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?
Given the lack of annotations and output schema, the description is incomplete for effective tool use. It doesn't explain what the tool returns (parsed JSON object? raw response?), error conditions, or behavioral constraints, leaving the agent with insufficient context for a fetch operation.
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?
The schema description coverage is 100%, with both parameters clearly documented in the schema itself. The description doesn't add any meaningful parameter semantics beyond what's already in the schema, so it meets the baseline for high schema coverage without providing extra value.
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?
The description 'Fetch a JSON file from a URL' clearly states the action (fetch) and resource (JSON file from URL), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like fetch_html or fetch_markdown, which perform similar fetch operations but for different content types.
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?
The description provides no guidance on when to use this tool versus alternatives. There are no explicit instructions about when to choose fetch_json over fetch_html, fetch_markdown, or fetch_txt, nor any context about prerequisites or exclusions for its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_markdownC
Fetch a website and return the content as Markdown
| Name | Required | Description | Default |
|---|---|---|---|
| headers | No | Optional headers to include in the request | |
| url | Yes | URL of the website to fetch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool fetches a website and returns Markdown, but lacks details on error handling, rate limits, authentication needs, or what happens with invalid URLs. For a tool that performs network operations with no annotation coverage, this is a significant gap in transparency.
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?
The description is a single, efficient sentence: 'Fetch a website and return the content as Markdown.' It is front-loaded with the core purpose, has zero waste, and is appropriately sized for the tool's complexity.
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?
Given the tool's complexity (network fetching with 2 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't explain return values, error cases, or behavioral traits like timeouts or content conversion limitations. For a tool with no structured safety or output information, the description should provide more context to be fully helpful.
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 both parameters (url and headers). The description doesn't add any meaning beyond what the schema provides, such as examples of headers or URL formats. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.
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?
The description clearly states the tool's purpose: 'Fetch a website and return the content as Markdown.' It specifies the verb ('fetch'), resource ('website'), and output format ('Markdown'). However, it doesn't explicitly differentiate from sibling tools like fetch_html, fetch_json, and fetch_txt, which likely fetch websites but return different formats.
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?
The description provides no guidance on when to use this tool versus its siblings (fetch_html, fetch_json, fetch_txt). It doesn't mention alternatives, exclusions, or specific contexts for preferring Markdown output over other formats. Usage is implied based on the need for Markdown, but no explicit guidelines are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_txtA
Fetch a website, return the content as plain text (no HTML)
| Name | Required | Description | Default |
|---|---|---|---|
| headers | No | Optional headers to include in the request | |
| url | Yes | URL of the website to fetch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the action ('fetch') and output format, but lacks details on error handling, rate limits, authentication needs, timeouts, or what happens with non-text content. For a tool that performs network requests with no annotation coverage, this is a significant gap.
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?
The description is a single, efficient sentence that is front-loaded with the core purpose. Every word earns its place by specifying the action, resource, and output format without redundancy or unnecessary details.
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?
Given the tool's moderate complexity (network fetch with 2 parameters), no annotations, and no output schema, the description is incomplete. It covers purpose and usage but lacks behavioral details like error handling or output structure. It meets minimal viability but has clear gaps for a tool with no structured support.
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 both parameters (url and headers). The description does not add any meaning beyond what the schema provides, such as examples or constraints on URL formats or header usage. Baseline 3 is appropriate when the schema does the heavy lifting.
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?
The description clearly states the specific action ('fetch a website') and the resource ('website'), and distinguishes it from siblings by specifying the output format ('plain text (no HTML)'). This directly contrasts with fetch_html, fetch_json, and fetch_markdown, making the purpose unambiguous.
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?
The description explicitly states when to use this tool by specifying the output format ('plain text (no HTML)'), which inherently indicates when not to use it (e.g., when HTML, JSON, or Markdown is needed). This provides clear alternatives by naming the sibling tools implicitly through their output formats.
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.
4 tool updates
v1.0.0- First observed
fetch_html - First observed
fetch_json - First observed
fetch_markdown - First observed
fetch_txt
TDQS
Scored across 4 tools
The tools are mostly distinct, with each handling a different content type (HTML, JSON, Markdown, plain text). However, fetch_html and fetch_txt could be slightly confusing as both fetch websites, but their output formats (HTML vs. plain text) clarify the distinction. There is no significant overlap in purpose.
All tool names follow a consistent verb_noun pattern with 'fetch_' prefix and descriptive suffixes (html, json, markdown, txt). The naming is predictable and uniform, making it easy to understand the tool set at a glance.
With 4 tools, the count is reasonable for a fetch server focused on retrieving different content types. It is slightly lean but covers core use cases well. A few additional tools (e.g., for handling errors or metadata) might enhance it, but it's not incomplete.
The server covers fetching various content types, which aligns with its purpose. However, there are notable gaps: no tools for handling HTTP methods beyond GET (e.g., POST), error handling, or configuration (e.g., headers, timeouts). This limits advanced use cases but suffices for basic retrieval.
Maintenance
Related MCP Connectors
Fetch any URL as clean Markdown or metadata, and buy digital goods via x402 — for AI agents.
Screenshot any URL/HTML as PNG/JPEG/WebP, or read it as clean Markdown/text for LLMs.
Read any web page as clean Markdown for AI agents: fetch, search, metadata, links. SSRF-safe.
Fetch pages as markdown, search web and news, extract structured data. For AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides functionality to fetch web content in various formats, including HTML, JSON, plain text, and Markdown.245,132 npm827MIT
- AlicenseAqualityCmaintenanceProvides functionality to fetch web content in various formats, including HTML, JSON, plain text, and Markdown.473,147 npm2MIT
- AlicenseNot gradedqualityCmaintenanceProvides functionality to fetch and transform web content in various formats (HTML, JSON, plain text, and Markdown) through simple API calls.73,147 npm1MIT
- AlicenseNot gradedqualityDmaintenanceEnables fetching and converting web content into various formats including HTML, JSON, plain text, and Markdown. It supports custom request headers and provides specialized tools for on-demand web data retrieval and transformation.73,147 npmMIT