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 Desktop, OpenHands), 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 +
humanizelogic. 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(ornpx -y searchfetch)
Available Tools
1. websearch
Searches the web using DuckDuckGo or Google. Returns a clean list of titles, URLs, and snippets. Excellent for researching general knowledge, news, and finding URLs.
Parameters:
query(string, required): The search query string.engine(string, optional): Search engine to use. Can be"duckduckgo"or"google". Default is"duckduckgo".max_results(number, optional): Maximum number of results to return. Default is10.region(string, 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) andhl(language) query parameters automatically. - Default is
"wt-wt"(global/US English).
- Examples:
safe_search(string, optional): Safe search filtering mode."-1"for Moderate."1"for Strict."-2"for Off.- Default is
"-1". - Note: Only applies to DuckDuckGo.
2. webfetch
Fetch and extract the main text content from any webpage. Fully executes JavaScript to load React/SPAs and aggressively strips images/media (including base64) to save context tokens.
Parameters:
url(string, required): The full URL of the webpage to fetch (must start with http/https).format(string, optional): Output format. Set to"markdown","clean_html", or"raw_html". Default is"markdown"(highly recommended to save context tokens).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 is0.max_length(number, optional): Maximum characters to return per request. Default is10000.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 istrue.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file searchfetch-2.0.0.tar.gz.
File metadata
- Download URL: searchfetch-2.0.0.tar.gz
- Upload date:
- Size: 6.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
67b9741efc32c6726b2244fdef5bb4ec8ec0a7dc8618af36387d6e16dc6fb275
|
|
| MD5 |
2fdf428b90d1c6a74b98a8252e8622e1
|
|
| BLAKE2b-256 |
e70242662b743b49dac706f861ca8ea90333fa62a92cd5ee3d6bcc38d767ae0b
|
Provenance
The following attestation bundles were made for searchfetch-2.0.0.tar.gz:
Publisher:
publish.yml on maxylev/searchfetch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
searchfetch-2.0.0.tar.gz -
Subject digest:
67b9741efc32c6726b2244fdef5bb4ec8ec0a7dc8618af36387d6e16dc6fb275 - Sigstore transparency entry: 1497346382
- Sigstore integration time:
-
Permalink:
maxylev/searchfetch@7278343f3f15a0e6c8de7601ce0f29d8208ca737 -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/maxylev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7278343f3f15a0e6c8de7601ce0f29d8208ca737 -
Trigger Event:
release
-
Statement type:
File details
Details for the file searchfetch-2.0.0-py3-none-any.whl.
File metadata
- Download URL: searchfetch-2.0.0-py3-none-any.whl
- Upload date:
- Size: 7.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
524cd0554435803558ccd1a3824498300765d514b69fe92afbfa6cb630b3524c
|
|
| MD5 |
8b06f5f1a44154e714a2f7c24406b540
|
|
| BLAKE2b-256 |
61f4df240307458d44d733d7173b2700de4e0c7bc9919b386fc4202329f63c83
|
Provenance
The following attestation bundles were made for searchfetch-2.0.0-py3-none-any.whl:
Publisher:
publish.yml on maxylev/searchfetch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
searchfetch-2.0.0-py3-none-any.whl -
Subject digest:
524cd0554435803558ccd1a3824498300765d514b69fe92afbfa6cb630b3524c - Sigstore transparency entry: 1497346550
- Sigstore integration time:
-
Permalink:
maxylev/searchfetch@7278343f3f15a0e6c8de7601ce0f29d8208ca737 -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/maxylev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7278343f3f15a0e6c8de7601ce0f29d8208ca737 -
Trigger Event:
release
-
Statement type: