MCP Server for Stealth Web Search and Fetching
Allows fetching and extracting structured content from Docker Hub pages.
Allows searching the web using the DuckDuckGo search engine.
Allows fetching and extracting structured content from GitHub repositories and issues.
Allows fetching and extracting structured content from GitLab repositories and issues.
Allows searching the web using the Google search engine.
Allows fetching and extracting structured content from npm package pages.
Allows fetching and extracting structured content from PyPI package pages.
Allows fetching and extracting structured content from Reddit pages.
Allows fetching and extracting structured content from Wikipedia pages.
Allows fetching and extracting structured content from YouTube pages.
SearchFetch (MCP Server)
A fault-tolerant, stealth-enabled Model Context Protocol (MCP) server for web searching and content fetching. Built for AI Agents (Cursor, Claude Code, OpenCode), it uses a stealth browser engine to fetch pages, dynamically handles SPAs/React, and converts bloat into token-optimized Markdown.
Features
Stealth Engine: Powered by CloakBrowser C++ patches +
humanizelogic. The browser renders and moves like a real user, reducing bot-detection scores.Fault Tolerance: Auto-healing browser sessions, grace-period timeouts for SPAs, and network-level blocking of tracking scripts and media.
Token-Optimized Output: Strips base64 images, SVGs, scripts, and inline styles from the DOM before Markdown conversion.
Dual Runtime: Natively supports zero-install execution via both Python (
uvx) and Node.js (npx).Template-Driven Extraction: Structured extraction via shared JSON templates (GitHub, npm, PyPI, crates.io, docs pages, Docker Hub, and more). Supports custom inline templates.
Related MCP server: markdown-for-agents-mcp
Usage & Installation
You do not need to install this repository manually. Configure your agent to use the zero-install commands npx or uvx.
Claude Desktop Configuration
Option A: Python (uvx - Recommended)
{
"mcpServers": {
"searchfetch": {
"command": "uvx",
"args": ["searchfetch"]
}
}
}Option B: Node.js (npx)
{
"mcpServers": {
"searchfetch": {
"command": "npx",
"args": ["-y", "searchfetch"]
}
}
}Cursor / IDE Configuration
Add via the MCP panel in Cursor settings:
Type:
commandCommand:
uvx searchfetch(ornpx -y searchfetch)
Available Tools
1. websearch
Search the web through the template pipeline. DuckDuckGo and Google are built-in; custom search templates can be selected by name.
Parameter | Type | Default | Description |
| string | required | The search query string. |
| string |
|
|
| number |
| Maximum number of results to return. |
| string/null |
| Region/language code (e.g. |
| boolean/null |
| Enable safe search. |
| boolean |
| Block images, media, and fonts at the network layer. |
2. webfetch
Fetch a page with the stealth browser and extract structured Markdown using a template. Falls back to generic Markdown extraction for unknown pages.
Parameter | Type | Default | Description |
| string | required | Full URL (must start with |
| string |
|
|
| number |
| Character offset for pagination. |
| number |
| Maximum characters per request. |
| boolean |
| Block images, videos, and fonts at the network layer. |
Template extraction supports text, markdown, attribute, and html formats; 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.
Available page templates (auto-detected by URL or selectable by name):
wikipedia, reddit, mdn-web-docs, gitlab, youtube, devto, go-pkg, javadoc,
github-repo, github-issue, npm-package, pypi-package, crates-package,
docker-hub, docs-rs, docs-page
raw — special template that applies minimal filtering and returns full body content as markdown. Use when you need the complete page without template-specific extraction.
Local Development
# Install dependencies
npm install
pip install -e ".[dev]"
# Run tests
npm test # runs all tests (JS + Python)
npm run test:js # Node.js unit tests (built-in test runner)
npm run test:py # Python unit tests (pytest)
# Lint
npm run lint # runs all linters
npm run lint:js # ESLint
npm run lint:py # Ruff
# Format
npm run format # auto-format all source files
npm run format:check # check formatting without changes
# MCP inspector (for manual testing)
npm run inspector-js # test with MCP Inspector (Node.js)
npm run inspector-py # test with MCP Inspector (Python)Architecture
This repository uses a flat dual-manifest structure (package.json and pyproject.toml in the root). Both runtimes (index.js for Node, server.py for Python) share the same templates/*.json files and maintain feature parity.
Available Tools
2 toolswebfetchWeb FetchA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The full URL of the webpage to fetch (must start with http/https). | |
| template | No | Template to use: 'auto' (auto-detect from URL), a built-in page template name (wikipedia, reddit, mdn-web-docs, gitlab, youtube, devto, go-pkg, javadoc, github-repo, github-issue, npm-package, pypi-package, crates-package, docker-hub, docs-rs, docs-page), 'raw' for minimal-filtering full-page output, or inline JSON. | auto |
| max_length | No | Maximum characters to return per request. Default is 10000. | |
| block_media | No | Block images, videos, and fonts entirely at the network layer. Default is true. | |
| start_index | No | Character offset for pagination. Default: 0. |
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. It explicitly mentions full JavaScript execution for React/SPAs and aggressive stripping of images/media, including base64, to save context tokens. This gives substantial insight into the tool's behavior, though it does not cover error handling or rate limits.
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 two sentences long, front-loaded with the primary action, and every phrase adds value. It is information-dense with no wasted words, making it easy for an agent 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 absence of an output schema, the description clarifies that the tool returns extracted main text content and highlights key behaviors like JS execution and media stripping. It does not mention template usage or pagination, but those are fully described in the parameter schema, making the overall picture complete enough.
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 input schema covers 100% of the parameters, so the baseline is 3. The description adds context about aggressive media stripping and base64 handling, which goes slightly beyond the schema's block_media parameter description. No major parameter semantics are missing.
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 fetches and extracts the main text content from any webpage, using the specific verb 'Fetch and extract'. This distinctly differentiates it from the sibling 'websearch' tool, which would be used for searching rather than fetching a specific URL.
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 implies this tool is for retrieving content from a known URL, while the sibling 'websearch' is for finding URLs. It provides clear context ('any webpage') but does not explicitly state when to choose this over alternatives or mention exclusion cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
websearchWeb SearchA
Search the web using DuckDuckGo or Google. Returns a clean list of titles, URLs, and snippets. Excellent for researching general knowledge, news, and finding URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query string. | |
| engine | No | Search engine to use. Can be 'duckduckgo' or 'google'. Default is 'duckduckgo'. | duckduckgo |
| region | No | Region and language code to localize search results (e.g., 'us-en', 'uk-en', 'de-de'). For DuckDuckGo it maps directly. For Google, 'us' is country code and 'en' is language. Default is null (uses template default). | |
| block_media | No | Block images, videos, and fonts entirely at the network layer. Default is true. | |
| max_results | No | Maximum number of search results to return. Default is 10. | |
| safe_search | No | Enable safe search filtering. null = use template default. Applies to both DuckDuckGo and Google. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the burden. It discloses the return format ('clean list of titles, URLs, snippets') and the engines used, which is some behavioral transparency. However, it omits details like rate limits, error behavior, or how the network-layer blocking (block_media) affects results, which would be useful beyond the schema. This is adequate but not rich.
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 concise two-sentence summary that front-loads the action ('Search the web') and immediately explains the output and ideal use cases. Every sentence serves a purpose with no wasted words, achieving excellent conciseness and structure.
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?
The tool is a simple search operation, and the description covers purpose, output, and use cases. Since there is no output schema, it compensates by describing the return list. It does not mention limitations (e.g., engine-specific differences, pagination) but those are not critical for basic usage. Overall, it is complete for the tool's complexity.
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 input schema has 100% coverage, meaning every parameter (query, engine, region, block_media, max_results, safe_search) already has a description. The tool description adds no additional parameter-specific meaning beyond what the schema provides. Per the baseline rule, a score of 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 tool's function: 'Search the web using DuckDuckGo or Google' and describes the output as 'titles, URLs, and snippets.' It defines a specific verb and resource, but does not explicitly differentiate from the sibling tool 'webfetch', which searches vs. fetches. The phrase 'finding URLs' hints at a distinction but lacks direct comparison.
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 clear use cases ('researching general knowledge, news, and finding URLs') which tells when to use the tool. However, it does not discuss when not to use it or mention the alternative 'webfetch' for fetching specific pages. This is clear context without exclusions, so it earns a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Websearch and webfetch have completely distinct purposes: one finds URLs via search, the other retrieves and extracts content from a specific URL. There is no ambiguity between the two tools.
Both tool names follow the same verb_noun pattern with 'web' as the prefix and the action as the suffix: websearch and webfetch. The naming is perfectly consistent.
With only 2 tools, the count is thin but appropriate for a server dedicated to a narrow scope (search and fetch). It covers the essential operations without unnecessary bloat.
The server's stated purpose is stealth web search and fetching, and it provides exactly the two core operations needed: searching for pages and fetching their content. No obvious gaps exist for this domain.
Maintenance
Related MCP Connectors
Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.
Scrape, crawl and search the web for AI agents via MCP.
Web scraping for AI agents. Converts URLs to clean, LLM-ready Markdown with anti-bot bypass.
Jina AI Reader/Search MCP — turn any URL into clean LLM-ready markdown, plus web search.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA production-ready Model Context Protocol server that brings AI-powered web search directly into development environments, providing intelligent search results with proper citations in Claude Desktop, Cursor, or any MCP-compatible client.10123MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for AI agents -- fetch any URL with full JavaScript rendering (Playwright/Chromium) and convert to clean, token-efficient markdown. Works on React, Vue, Angular, and any JS-heavy page. Includes web search, batch fetching, binary file download, LRU cache, SSRF protection, and structured output.25MIT

Crawlbase MCPofficial
AlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI agents to fetch live web content with JavaScript rendering, proxy rotation, and anti-bot evasion.94556MIT- AlicenseAqualityBmaintenanceMCP server for browser automation with anti-detection. Scout pages, find elements, interact with websites, and monitor network traffic from any AI client that supports the Model Context Protocol.211MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/maxylev/searchfetch'
If you have feedback or need assistance with the MCP directory API, please join our Discord server