FetchV2 MCP Server
FetchV2 is a Model Context Protocol (MCP) server that retrieves web pages and returns clean Markdown. It uses Trafilatura to remove navigation, advertisements, footers, and other page elements.
What it does
| Tool | Use |
|---|---|
fetch |
Fetch one web page and extract its main content |
fetch_batch |
Fetch up to 10 web pages in one request |
discover_links |
Find and filter links on a web page |
fetch_llms_txt |
Read an llms.txt index and optionally fetch its linked pages |
FetchV2 can return raw HTML, preserve links and tables, and paginate long content.
The fetch tool checks robots.txt by default.
Quick start
Requirements
- Install
uv. - Install Python 3.11 or newer:
uv python install 3.11
Install for Cursor or VS Code
| Cursor | VS Code |
|---|---|
| Install MCP Server | Install on VS Code |
Configure another MCP client
Add this server definition to your MCP client configuration:
{
"mcpServers": {
"fetchv2": {
"command": "uvx",
"args": ["fetchv2-mcp-server@latest"]
}
}
}
Common configuration file locations:
- Claude Desktop on macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Claude Desktop on Windows:
%APPDATA%\Claude\claude_desktop_config.json - Windsurf:
~/.codeium/windsurf/mcp_config.json - Kiro:
.kiro/settings/mcp.jsonin your project
Install in a Python environment
Use one of these commands if you want to install the package directly:
uv add fetchv2-mcp-server
pip install fetchv2-mcp-server
Try it
Ask your MCP client to perform a task such as:
- "Fetch the documentation from
<URL>." - "Find links on
<docs URL>that containtutorial." - "Read these pages and summarize their differences:
[url1, url2, url3]."
Typical documentation workflow
First, find the relevant pages:
discover_links(url="https://docs.example.com/", filter_pattern="/guide/")
Then fetch the selected pages in one request:
fetch_batch(
urls=[
"https://docs.example.com/guide/intro",
"https://docs.example.com/guide/setup",
]
)
Tool reference
fetch
Fetch one web page and extract its main content as Markdown.
fetch(
url: str,
max_length: int = 5000,
start_index: int = 0,
get_raw_html: bool = False,
include_metadata: bool = True,
include_tables: bool = True,
include_links: bool = False,
bypass_robots_txt: bool = False,
) -> str
| Parameter | Type | Default | Description |
|---|---|---|---|
url |
str |
required | Web page URL |
max_length |
int |
5000 |
Maximum number of characters to return |
start_index |
int |
0 |
Character offset for pagination |
get_raw_html |
bool |
False |
Return raw HTML without extraction |
include_metadata |
bool |
True |
Include the title, author, and date |
include_tables |
bool |
True |
Preserve tables in Markdown |
include_links |
bool |
False |
Preserve links in Markdown |
bypass_robots_txt |
bool |
False |
Skip the robots.txt check for a user-requested fetch |
If the response is truncated, use the returned start_index value in the next call.
fetch_batch
Fetch up to 10 web pages and combine the results.
fetch_batch(
urls: list[str],
max_length_per_url: int = 2000,
get_raw_html: bool = False,
) -> str
| Parameter | Type | Default | Description |
|---|---|---|---|
urls |
list[str] |
required | Web page URLs to fetch |
max_length_per_url |
int |
2000 |
Maximum number of characters to return for each URL |
get_raw_html |
bool |
False |
Return raw HTML without extraction |
This tool reports a failed URL in its result and continues with the other URLs.
It does not check robots.txt.
discover_links
Find links on a web page and optionally filter them with a regular expression.
discover_links(url: str, filter_pattern: str = "") -> str
| Parameter | Type | Default | Description |
|---|---|---|---|
url |
str |
required | Web page URL to scan |
filter_pattern |
str |
"" |
Regular expression used to filter links |
The tool resolves relative links and returns up to 100 URLs.
fetch_llms_txt
Read an llms.txt file and list its documentation links.
fetch_llms_txt(
url: str,
include_content: bool = False,
max_length_per_url: int = 2000,
) -> str
| Parameter | Type | Default | Description |
|---|---|---|---|
url |
str |
required | URL of an llms.txt file |
include_content |
bool |
False |
Fetch the content of all linked pages |
max_length_per_url |
int |
2000 |
Maximum number of characters to return for each linked page |
By default, this tool fetches only the llms.txt index.
Set include_content=True to fetch all linked pages.
This option can return a large response.
The tool resolves relative URLs, such as /docs/guide.md, against the llms.txt URL.
Prompts
fetch_manualcreates a request to fetch and summarize one URL.research_topiccreates a request to research a topic with optional URLs.
Development
Clone the repository and install the development dependencies:
git clone https://github.com/praveenc/fetchv2-mcp-server.git
cd fetchv2-mcp-server
uv sync --dev
Run the tests:
uv run pytest
Run the server with MCP Inspector:
uv run mcp dev src/fetchv2_mcp_server/server.py
Run lint and type checks:
uv run ruff check .
uv run pyright
Contributing
Read CONTRIBUTING.md before you submit a change.
Support
Use the GitHub issue tracker to report a problem or request a feature.
License
This project uses the MIT License. See LICENSE for details.
Metadata
Release files for fetchv2-mcp-server 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fetchv2_mcp_server-2.0.0.tar.gz | 18.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fetchv2_mcp_server-2.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.5 kB
Release files / fetchv2_mcp_server-2.0.0.tar.gz
| Download URL | fetchv2_mcp_server-2.0.0.tar.gz |
|---|---|
| Size | 18.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5c995ae1d4404ceda5baca8bdc37c4d352e3877e08c092b2334964693f4a1221
|
|
BLAKE2b-256 checksum How to use checksums |
53541aee58cd4c720854b288357defa0e39450694625757fd11d271fe7943b35
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency logRelease files / fetchv2_mcp_server-2.0.0-py3-none-any.whl
| Download URL | fetchv2_mcp_server-2.0.0-py3-none-any.whl |
|---|---|
| Size | 13.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
82a7ef98789c94e98fd01a6825352931ca07f0f58da9911936b88fb64d7c978e
|
|
BLAKE2b-256 checksum How to use checksums |
6df33b0bd3eca4dd417ea02af646fd69c43f80d40ab2fb82b65aae696fc7c448
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 8, 2026.
Transparency log