Skip to main content

FetchV2 MCP Server

PyPI version CI Python 3.11+ License: MIT

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

  1. Install uv.
  2. 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.json in 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 contain tutorial."
  • "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.

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_manual creates a request to fetch and summarize one URL.
  • research_topic creates 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)

Source distribution for fetchv2-mcp-server 2.0.0
File Size Uploaded
fetchv2_mcp_server-2.0.0.tar.gz 18.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fetchv2-mcp-server 2.0.0
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

1.1.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page