Skip to main content

A maximum fault-tolerant, stealth-enabled MCP server for web searching and fetching.

Project description

SearchFetch (MCP Server)

A maximum fault-tolerant, stealth-enabled Model Context Protocol (MCP) server for web searching and content fetching. Built specifically for AI Agents (Cursor, Claude Code, OpenCode), it completely bypasses bot detection (Cloudflare Turnstile, Datadome), dynamically handles SPAs/React, and converts bloat into token-optimized Markdown.

Features

  • Maximum Fault Tolerance: Implements auto-healing browser sessions, grace-period timeouts for clunky SPAs, and network-level aborting of tracking scripts and media.
  • Stealth Engine: Powered by CloakBrowser C++ patches + humanize logic. Antibot systems score it as a normal browser because it mathematically moves and renders exactly like one.
  • Nuclear Token Scrubber: Strips Base64 images, SVGs, scripts, and inline styles out of the DOM before Markdown conversion, guaranteeing your LLM context window won't blow out.
  • Dual Execution Paths: Natively supports zero-install execution via both Python (uvx) and Node.js (npx).

Usage & Installation

You do not need to install this repository manually. Configure your agent to use the zero-install commands npx or uvx depending on your environment.

Claude Desktop Configuration

Add the following to your config:

Option A: Using Python (uvx - Recommended)

{
  "mcpServers": {
    "searchfetch": {
      "command": "uvx",
      "args": ["searchfetch"]
    }
  }
}

Option B: Using Node.js (npx)

{
  "mcpServers": {
    "searchfetch": {
      "command": "npx",
      "args": ["-y", "searchfetch"]
    }
  }
}

Cursor / IDE Configuration

Add it via the MCP panel in Cursor settings:

  • Type: command
  • Command: uvx searchfetch (or npx -y searchfetch)

Available Tools

1. websearch

Searches the web through the v3 template pipeline. DuckDuckGo and Google are built-in templates, and custom search templates can be selected by name.

Parameters:

  • query (string, required): The search query string.
  • engine (string, optional): Search engine/template to use. Can be "duckduckgo", "google", or a custom search template name. Default is "duckduckgo".
  • max_results (number, optional): Maximum number of results to return. Default is 10.
  • region (string/null, optional): Region and language code to localize search results.
    • Examples: "us-en", "uk-en", "de-de".
    • For DuckDuckGo, it maps directly.
    • For Google, it maps to the gl (country) and hl (language) query parameters automatically.
    • null uses the template default.
  • safe_search (boolean/null, optional): Enable safe search. Maps to DuckDuckGo/Google parameters automatically; null uses the template default.
  • block_media (boolean, optional): Block images, media, and fonts at the network layer. Default is true.

2. webfetch

Fetches a page with CloakBrowser and extracts structured Markdown using a named, inline, or auto-detected template. Built-ins include GitHub repositories/issues, npm, PyPI, crates.io, and ReadTheDocs-style docs pages. Unknown pages fall back to generic Markdown extraction.

Parameters:

  • url (string, required): The full URL of the webpage to fetch (must start with http/https).
  • template (string, optional): "auto", a built-in template name, or inline JSON template. Default is "auto".
  • start_index (number, optional): Character offset to start reading from for pagination. Use this if a document is too large to fit in the context window. Default is 0.
  • max_length (number, optional): Maximum characters to return per request. Default is 10000.
  • block_media (boolean, optional): Block images, videos, and fonts entirely at the network layer to drastically speed up page loads and dodge tracking pixels. Default is true.

Template extraction supports text, markdown, attribute, and html sections; nested children; repeated sections; URL decoding transforms; per-template cookies; and per-template resource blocking.

Built-in templates live in templates/*.json and are shared by the Node.js and Python implementations. Each JSON file defines exactly one template — no duplication between languages.


Architecture & Contributions

This repository utilizes a flat dual-manifest file structure (package.json and pyproject.toml in the root). When committing changes, ensure parity between index.js and server.py logic.

Local Development

# Node.js Testing
npm i
npm run inspector-js

# Python Testing
pip install -e .
npm run inspector-py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

searchfetch-3.0.0.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

searchfetch-3.0.0-py3-none-any.whl (19.3 kB view details)

Uploaded Python 3

File details

Details for the file searchfetch-3.0.0.tar.gz.

File metadata

  • Download URL: searchfetch-3.0.0.tar.gz
  • Upload date:
  • Size: 15.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for searchfetch-3.0.0.tar.gz
Algorithm Hash digest
SHA256 16dda22e11ed4a5d8f803c46db902bf3e0a54f315bc902a4374ed593cceb04bc
MD5 6b8d8a22d505e10bd01019e9c1bf3d6c
BLAKE2b-256 5961874034fd012606aa802f1da60152b635cdf04719a942aee008492c2bf745

See more details on using hashes here.

Provenance

The following attestation bundles were made for searchfetch-3.0.0.tar.gz:

Publisher: publish.yml on maxylev/searchfetch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file searchfetch-3.0.0-py3-none-any.whl.

File metadata

  • Download URL: searchfetch-3.0.0-py3-none-any.whl
  • Upload date:
  • Size: 19.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for searchfetch-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 efb9f269c05b990a00818943864a6e4dde35fd1c7e844d6542e5b8c3b12a6c45
MD5 b895af77b92e6111bfcd19de59c2463e
BLAKE2b-256 ff6a97a6f37ebc3abf33d1e3174d1a132512bdd2db484abc89d66ddf4a55354b

See more details on using hashes here.

Provenance

The following attestation bundles were made for searchfetch-3.0.0-py3-none-any.whl:

Publisher: publish.yml on maxylev/searchfetch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page