WET - Web Extended Toolkit
WET is an HTTP-only MCP server that lets AI agents search, extract/research web content, handle media, and manage server configuration.
Search: web via SearXNG, academic sources, library docs with resolve/query/project-lock, and similar pages.
Extract: read URLs/files, batch up to 50 URLs, crawl/map sites, convert local documents to Markdown, structured JSON-schema extraction, multi-step cited research, browser interaction, and content diffs.
Media: list and download images/videos/audio/files; vision/audio analysis is delegated to imagine-mcp.
Config/Help: status, set config, clear cache, reindex docs, warmup, setup/sync actions, and per-tool documentation.
Relay: get/open the wet-mcp relay configuration URL and report launch/status.
Enables searching for and retrieving academic papers from the arXiv repository for research purposes.
Integrates Brave as a source for web metasearch queries via an embedded SearXNG instance.
Provides stealth features to bypass Cloudflare anti-bot protections when performing web crawling or content extraction.
Supports synchronization of indexed documentation and cached data using Dropbox as a storage provider via rclone.
Utilizes DuckDuckGo as a metasearch source via SearXNG for privacy-focused web searches.
Facilitates the discovery and indexing of FastAPI library documentation for fast hybrid search.
Supports media discovery from GitHub repositories and utilizes GitHub tokens for higher rate limits during documentation discovery.
Incorporates Google as a metasearch engine source for comprehensive web search results.
Provides automatic synchronization of indexed documentation and cached web data using Google Drive via rclone.
Allows for specialized academic research searching and citation retrieval through Google Scholar.
Extracts and converts web content into clean Markdown format for efficient LLM processing.
Features anti-bot bypass capabilities to allow clean content extraction from Medium articles.
Supports offloading embedding and reranking tasks to custom AI workers hosted on the Modal platform.
Integrates with OpenAI for cloud-based embeddings and multimodal analysis of web media.
Enables specialized academic research searches within the PubMed medical database.
Facilitates searching and indexing of documentation for various Python libraries.
Uses rclone to manage the automatic synchronization of indexed documentation and cached content across different cloud storage providers.
Utilizes an embedded SearXNG instance to perform privacy-respecting metasearch across multiple engines like Google, Bing, and DuckDuckGo.
Provides integration for searching and analyzing academic literature through Semantic Scholar.
Allows for the discovery, indexing, and searching of documentation for the Spring and Spring Boot frameworks.
WET - Web Extended Toolkit MCP Server
Distribution & CLI: the repo, CLI and Python module are
wet. The PyPI distribution isn24q02m-wet(installpip install n24q02m-wet/uvx n24q02m-wet). wet is an HTTP-only MCP server: start it withwet server startand point clients athttp://127.0.0.1:8000/mcp. There is no stdio mode; a barewetprints the control-plane usage. Thewetandwet-mcpaliases remain available.
mcp-name: io.github.n24q02m/wet
Open-source MCP server for AI agents: web search, content extraction, and library docs.
Phase | Status | Scope |
Phase 1 | Shipped | web-core ScrapingAgent migration, smart chunks output, search polish, media slim |
Phase 2 | Shipped | Context7-level docs search: library index (Tier 1 + Tier 2), version-aware queries with token cap, project lock (Cabinets) |
Phase 3 | Shipped |
|
Current release: v3.x.
media(action="analyze")was removed in the v2.0.0 BREAKING release. Useimagine-mcp'sunderstandaction for vision/audio/video analysis. Seedocs/migration.mdfor the upgrade recipe.
Project | Tagline | Tag |
Knowledge graph for token-efficient code reviews -- semantic search and call-... | MCP | |
2-way Google Drive sync with .driveignore filter — rclone engine, Windows tray | Tooling | |
IMAP/SMTP email for AI agents -- read, send, organize folders, and manage att... | MCP | |
Composite MCP server for Godot Engine -- 17 composite tools for AI-assisted g... | MCP | |
Markdown-first Notion for AI agents -- pages, databases, blocks, and comments... | MCP | |
Drop-in python-semantic-release fork with built-in release-safety guards (orp... | Tooling | |
Telegram for AI agents -- messages, chats, media, and contacts across both bo... | MCP | |
Google Workspace MCP server (Docs/Drive/Calendar/Gmail/Sheets/Slides/Tasks/Ch... | MCP | |
Claude Code plugin marketplace for the n24q02m MCP servers -- install web sea... | Marketplace | |
Image and video understanding + generation for AI agents -- across Gemini, Op... | MCP | |
Chrome Extension for bulk operations on Jules tasks via batchexecute API -- a... | Tooling | |
Shared foundation for building MCP servers -- Streamable HTTP transport, OAut... | MCP | |
Persistent AI memory with hybrid search and embedded sync. Open, free, unlimi... | MCP | |
Multi-model embedding and reranking runtime via ONNX and GGUF | Library | |
Secrets without the server. | CLI | |
A self-distilling neuro-symbolic cascade that amortises LLM cost across knowl... | Tooling | |
Shared web infrastructure package for search, scraping, HTTP security, and st... | Library | |
Open-source MCP server for AI agents: web search, content extraction, and lib... | MCP |
Table of contents
Related MCP server: Nexus MCP Server
Features
Web Search -- Embedded SearXNG metasearch (Google, Bing, DuckDuckGo, Brave) with query expansion, TTL cache (1 h general / 5 min time-sensitive), standardized citation format, and 200-token snippet cap. Optional cloud search backends (Tavily, Brave, Exa, Kagi, OpenRouter, Firecrawl) as a fallback chain via
SEARCH_BACKENDSAcademic Research -- Search Google Scholar, Semantic Scholar, arXiv, PubMed, CrossRef, BASE
Library Docs -- Auto-discover and index documentation with FTS5 hybrid search, HyDE-enhanced retrieval, and version-specific docs
Content Extract -- 5-strategy escalation chain via
n24q02m-web-coreScrapingAgent(basic_http->tls_spoof-> render backends fromBROWSER_BACKENDS(native/browserless/cf-browser-rendering) -> optional key-gatedcaptcha), markitdown bridge for low-tier HTML/MD fallback, smart chunks structured output (clean text + markdown + JSON-LD + code blocks + metadata), batch processing (up to 50 URLs), deep crawling, site mappingLocal File Conversion -- Convert PDF, DOCX, XLSX, CSV, HTML, EPUB, PPTX to Markdown
Media -- List + download images / videos / audio files.
analyzewas removed in v2.0.0 -- useimagine-mcp.understandfor vision/audio inferenceAnti-bot -- Stealth strategies bypass Cloudflare, Medium, LinkedIn, Twitter
Zero Config -- Built-in local reference embedding + reranking through fastretrieval, no API keys needed. Optional cloud models configured per task via the
[models.embed|rerank|chat|jev_score]cells in~/.wet/config.toml(OpenRouter default; oneOPENROUTER_API_KEYserves every cell)
Quick install
# Method 1 (default): plugin install via Claude Code
/plugin marketplace add n24q02m/claude-plugins
/plugin install wet@n24q02m-plugins
# Method 2 (CLI): start a local instance, then register its HTTP endpoint
uvx --python 3.13 --from n24q02m-wet wet server start
claude mcp add --transport http wet http://127.0.0.1:8000/mcp
# Method 3 (always-on): compose stack from a clone of this repo (token auth)
docker compose up --build -d
# Method 4 (remote): point a client at an HTTP deployment
claude mcp add --transport http wet https://<your-host>/mcpEvery method needs a running instance: wet never runs as a client-spawned subprocess. Install matrix (all Streamable HTTP; see the Setup page for full steps):
Client | Install |
Claude Code (plugin) |
|
Claude Code (CLI) |
|
Codex | register the HTTP URL under |
Gemini CLI | add the |
Cursor / Windsurf | add the |
Any client (HTTP self-host) | point the client at |
Public OCI image publication is discontinued. Existing historical registry tags remain untouched; new container deployments build from source or use the Cloudflare-managed registry.
The HTTP endpoint speaks Streamable HTTP. With auth = "token" or "multi"
the client sends Authorization: Bearer <token>; no-auth is loopback-only.
Stand one up via Method 2 or 3.
Full setup matrices live at the canonical docs site mcp.n24q02m.com/servers/wet/setup/ and the paste-to-agent snippets at claude-plugins/plugins/wet/setup-with-agent.md (per Spec F single source of truth).
Self-host usage
Two supported ways to run the always-listening HTTP server. In both, the MCP
endpoint is http://127.0.0.1:8000/mcp (Streamable HTTP) and the config root
is ~/.wet/ (config.toml, docs.db, subs/). Never run the server as a
spawned subprocess of a client — register the endpoint in your client instead.
Dev (uv, no-auth loopback)
git clone https://github.com/n24q02m/wet && cd wet
uv run wet config init # writes ~/.wet/config.toml (default: auth = "no-auth")
uv run wet server start # serves http://127.0.0.1:8000/mcp (--foreground to stay attached)no-auth refuses non-loopback binds — the server is localhost-only until you
switch to token auth.
Always-on (docker)
# 1. Mint a token and its scrypt hash (hull-core canonical; the hash command
# never echoes the token itself)
openssl rand -hex 32 # the token — give it to clients, keep it secret
uv run wet token hash <token> # paste the output as token_hash
# 2. Instance config from the example
cp docker-config/config.example.toml docker-config/config.toml
# edit [server] token_hash and the [models.*] cells (see below)
# 3. Data continuity (optional): carry an existing instance over by copying
# docs.db and subs/ into the wet-home named volume BEFORE first start:
docker volume create wet-wet-home && \
docker cp ~/.wet/docs.db wet-wet-home:/docs.db && \
docker cp ~/.wet/subs wet-wet-home:/subs # adjust: files land as root, chown 999:999
docker compose up -d --buildCompose publishes 127.0.0.1:${WET_PORT:-8000} → container 8000 (loopback
only) and mounts docker-config/config.toml read-only at
/home/appuser/.wet/config.toml. Persistent data (docs.db, subs/) lives in
the wet-home named volume; the download/cache dir in wet-data. Editing the
config takes effect on docker compose restart.
Consumers
# CLI (talks to the running server over HTTP; exits 2 with a hint when none runs):
uvx --python 3.13 --from n24q02m-wet wet search "<query>"
# MCP client (Claude Code):
claude mcp add --transport http wet http://127.0.0.1:8000/mcp \
--header "Authorization: Bearer <token>"
# Raw probe:
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8000/mcp \
-X POST -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' # 401
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8000/mcp \
-X POST -H 'Authorization: Bearer <token>' -H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}' # 200Config: local vs cloud models
The [models.embed|rerank|chat|jev_score] cells in ~/.wet/config.toml are
per-task (each its own base_url + api_key + model, OpenAI-spec). The
example ships OpenRouter examples; any OpenAI-compatible endpoint works —
cloud, or a local server such as Ollama (base_url = "http://host.docker.internal:11434/v1" from the container). Keys in the file
are host-only material; alternatively leave api_key = "" and inject at start
via HULL_EMBED_API_KEY / HULL_RERANK_API_KEY / HULL_CHAT_API_KEY /
HULL_JEV_SCORE_API_KEY.
Configuration
wet runs zero-config out of the box: web search uses an embedded local SearXNG,
and embedding/reranking fall back to the bundled local ONNX models through
fastretrieval when no cloud keys are set. For higher-quality results, configure
the per-task provider cells in ~/.wet/config.toml. Operational settings are
plain environment variables (no app prefix) -- in HTTP self-host mode configure them via environment variables or ~/.wet/config.toml.
Provider cells -- [models.embed|rerank|chat|jev_score] each take their own
base_url + api_key + model (OpenAI-spec). OpenRouter is the pre-wired
default for every cell; any OpenAI-compatible endpoint works. Cell keys may be
left empty in the file and injected at start via HULL_EMBED_API_KEY /
HULL_RERANK_API_KEY / HULL_CHAT_API_KEY / HULL_JEV_SCORE_API_KEY. When a
cell keeps the OpenRouter default base_url, OPENROUTER_API_KEY in the
environment serves it as a last-resort credential — one OpenRouter key can
power every task. Empty embed/rerank cells fall back to the local ONNX models;
an unkeyed chat cell disables LLM features (e.g. extract(action="agent")).
FASTRETRIEVAL_CACHE_PATH controls the local model cache.
Search backends -- SEARCH_BACKENDS is an ordered runtime fallback chain:
searxng (default, local or external via SEARXNG_URL), keyed tavily / brave /
exa / kagi / openrouter, optional-key firecrawl, and credential-free duckduckgo /
startpage. Keyed providers use TAVILY_API_KEY, BRAVE_API_KEY, EXA_API_KEY,
KAGI_API_KEY, or OPENROUTER_API_KEY (comma-separate for rotation). The
openrouter backend runs the query through a chat completion with the
openrouter:web_search server tool and maps the returned url_citation
annotations onto the shared result shape; OPENROUTER_MODEL (default a
free-tier model), OPENROUTER_BASE_URL, and OPENROUTER_SEARCH_ENGINE
override its behavior. Firecrawl attempts a keyless request when FIRECRAWL_API_KEY
is absent; rejection or a DuckDuckGo/Startpage bot challenge advances the chain.
Result reranking uses the configured rerank cell ([models.rerank] — cloud via OpenRouter by default, or local ONNX when unkeyed); the same chain serves web search, research, similar-page search, agent search, and docs discovery/indexing fallbacks. SearXNG retains its science-category filter for research; other providers use their own search capabilities.
Browser render backends -- BROWSER_BACKENDS (CSV, escalation chain) picks
the headless render leg of extract: native (in-process chromium, the
zero-config default), browserless (self-host render service -- set
BROWSERLESS_URL + BROWSERLESS_TOKEN), and cf-browser-rendering (Cloudflare
Browser Rendering -- set CF_ACCOUNT_ID + CF_BROWSER_RENDERING_TOKEN). Empty
chain falls back to native. Set CAPSOLVER_API_KEY to append an optional,
key-gated CAPTCHA tier as the last escalation step.
Robots policy -- set RESPECT_ROBOTS_TXT=true to enforce robots.txt
across both the extract strategy chain and the Crawl4AI-backed crawl,
sitemap, and list_media actions. The default is false to preserve existing
deployment behaviour; configure this process-level policy explicitly when the
operator requires robots enforcement.
Invisible tier + seeded identity (opt-in) -- append invisible to
BROWSER_BACKENDS to add a stealth-Firefox engine tier as the last escalation
step (n24q02m-hull[invisible] extra: pip install "n24q02m-wet[invisible]"). One
coherent browser identity spans the whole chain: seed it with WET_IDENTITY_SEED
(or let wet derive once and persist it under ~/.wet/subs/<sub>/identity.json)
and install the wet[identity] extra. Without the extras the chain keeps
legacy behaviour (warn-once). STEALTHFOX_BINARY points at a patched Firefox
build to skip the engine download; IDENTITY_PROFILE_DIR (default
~/.wet/subs/<sub>/profiles) keeps persistent browser profiles per namespace.
Disable local fallbacks -- opt out of the heavy in-process local fallbacks
per capability (e.g. on a slim container that renders/searches/embeds via cloud
backends only): DISABLE_LOCAL_BROWSER, DISABLE_LOCAL_SEARCH,
DISABLE_LOCAL_EMBED, DISABLE_LOCAL_RERANK.
Auth -- [server] auth in ~/.wet/config.toml is no-auth (loopback only), token (store only token_hash, see wet token hash) or multi (per-user tokens). Server-host settings such as OPENROUTER_API_KEY belong to the process that runs wet server start (or the compose environment), not to the MCP client config.
Example client config (add headers with the Bearer token for token / multi):
{
"mcpServers": {
"wet": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}To use a different endpoint or model per task, edit the [models.*] cells in
~/.wet/config.toml, or inject HULL_EMBED_API_KEY / HULL_RERANK_API_KEY /
HULL_CHAT_API_KEY / HULL_JEV_SCORE_API_KEY at start instead of storing keys
in the file.
Status
Stable architecture with a single transport: Streamable HTTP, always served by
wet server start (self-host). No stdio mode, no daemon-bridge layer and no
auto-spawn by clients. The media.analyze action was removed in the v2.0.0 BREAKING
release -- see docs/migration.md for the upgrade
recipe. Current release line: v3.x.
Documentation
Full docs at mcp.n24q02m.com/servers/wet/setup/:
Setup -- install methods for Claude Code, Codex, Gemini CLI, Cursor, Windsurf, mcp.json
Modes overview -- transports and HTTP auth modes
Multi-user setup -- per-JWT-sub credential model
In-repo references (Spec F single source of truth: setup docs live in claude-plugins/plugins/wet/):
docs/ARCHITECTURE.md-- web-core ScrapingAgent integration, strategy chain, storage layout, LLM provider dispatchdocs/BENCHMARKS.md-- v1.x baseline coverage / latency placeholders + tier-1 fixture metrics
Install with AI agent -- paste this to your AI coding agent:
Install MCP server
wetfollowing the steps at https://raw.githubusercontent.com/n24q02m/claude-plugins/main/plugins/wet/setup-with-agent.md
Tools
5 MCP tools (3 domain + config + help). The legacy
setup tool merged into config action dispatch.
Tool | Description |
| Web (SearXNG metasearch), news, images, academic research (Scholar / arXiv / PubMed / CrossRef / Semantic Scholar / BASE), library docs (HyDE + FTS5), find similar pages. Includes |
| URL -> smart chunks dict ( |
|
|
|
|
| Per-tool documentation: |
Media boundary: For vision / audio understanding (image captioning, OCR, audio transcription, video summarization), use imagine-mcp.
media.analyzewas removed in wet v2.0.0 -- useimagine-mcp.understandinstead.
CLI
The package installs three console scripts: n24q02m-wet (primary package command), wet (short alias), and wet-mcp (legacy alias). wet is the control plane for the HTTP server plus one thin client; a bare invocation prints its usage.
uvx --from n24q02m-wet wet warmup # try a subcommand without a persistent install
wet server start # start the Streamable HTTP server (detached; --foreground to attach)
wet server status # pid, lock and HTTP liveness
wet server stop
wet config init # write ~/.wet/config.toml; `config get|set` reads/edits one key
wet token hash <token> # print the storable scrypt hash for users.toml
wet users path # print the users.toml path
wet docs list # indexed library names (the input for `docs reindex`)
wet docs reindex <library> # drop the cached docs index for <library>; the next docs search re-indexes it
wet search "<query>" # call the running server; exits 2 when it is down
wet warmup # pre-download local models + run auto-setup (SearXNG, browser) to avoid first-run delaysEvery subcommand prints its result and exits; there is no interactive auth or credential flow in the CLI. Google Drive sync lives in better-drive, not in wet.
Capability | wet | Brave Search | Tavily | Firecrawl | Context7 |
Web search | Yes (SearXNG aggregation) | Yes | Yes | No | No |
Extract URL | Yes (5-strategy chain) | No | Yes (basic) | Yes | No |
Media list / download | Yes | No | No | No | No |
Library docs search | Yes (Tier 1 curated + Tier 2 on-demand, version-aware, Cabinets) | No | No | No | Yes |
Academic research | Yes (6 providers) | No | No | No | No |
Self-hostable | Yes | No | No | No | Yes |
Free tier | Yes (open source) | Limited | Limited | Limited | Yes |
Security
SSRF prevention -- URL validation on crawl targets
Graceful fallbacks -- Cloud → Local embedding, multi-tier crawling
Error sanitization -- No credentials in error messages
File conversion sandboxing -- Defaults to the working directory and temp dir; override with
CONVERT_ALLOWED_DIRS
Build from Source
git clone https://github.com/n24q02m/wet.git
cd wet
uv sync
uv run wetTrust Model
This plugin implements TC-Local (machine-bound, single trust principal). See mcp-core trust model for full classification.
Mode | Storage | Encryption | Who can read your data? |
HTTP, |
| Machine-bound key | Only your OS user (file perm 0600) |
HTTP, |
| Same | Holders of a token; |
License
Apache-2.0 -- See LICENSE.
Available Tools
6 toolsconfigCIdempotent
Server config and management. Actions: status|set|cache_clear|docs_reindex|warmup|setup_sync|setup_status|setup_start|setup_skip|setup_reset|setup_complete. Use help tool with tool_name='config' for full docs.
Inputs: action (required), key, force, value, +1 more. Returns: object
config__open_relayA
Get the relay configuration URL for wet-mcp, opening it in the user's browser when possible. Returns the relay URL, whether the browser launched, and the current status.
Inputs: ctx (required). Returns: object
extractARead-only
Read and return full page content from URLs or local files. Use this when you have a specific URL and need its content. For finding URLs first, use the search tool instead.
Actions:
extract: Get clean content from URLs. Example: extract(action="extract", urls=["https://example.com/article"])
batch: Batch extract with per-domain rate limiting (max 50 URLs). Example: extract(action="batch", urls=["https://a.com/1", "https://b.com/2"])
crawl: Deep crawl following links from root URLs. Example: extract(action="crawl", urls=["https://docs.example.com"], depth=2)
map: Discover site URL structure without extracting content. Example: extract(action="map", urls=["https://example.com"])
convert: Convert local files (PDF, DOCX, PPTX, XLSX) to Markdown. Example: extract(action="convert", paths=["/home/user/report.pdf"])
extract_structured: Extract structured data using JSON Schema + LLM. Example: extract(action="extract_structured", urls=["https://example.com/pricing"], schema={"type": "object", "properties": {"price": {"type": "string"}}})
agent: Multi-step research orchestration -- search the web, extract top results, synthesize a cited Markdown answer. Example: extract(action="agent", query="latest pydantic 2 changes", max_urls=5)
interact: Drive a page with click/fill/submit via patchright. Example: extract(action="interact", url="https://example.com/login", actions=[{"type": "fill", "selector": "#email", "value": "x@y.com"}, {"type": "submit", "selector": "form"}])
diff: Track content changes across fetches of the same URL(s). Example: extract(action="diff", urls=["https://example.com/pricing"])
Key parameters:
urls (required for extract/batch/crawl/map/extract_structured/diff): List of URLs
paths (required for convert): List of local file paths
query (required for agent): Research question to answer
url (required for interact): Page URL to drive
actions (required for interact): List of {type, selector?, description?, value?} ops
max_urls (agent): Default 5, hard cap 20
synthesis_model (agent): Override LLM model for the synthesis step
token_budget (agent): Max prompt tokens (default 10000)
session (interact): Persistent session id; reuses browser across calls
screenshot (interact): Capture post-interaction screenshot
format: Output format -- "markdown" (default), "text", "html"
depth: Crawl depth (default: 2, max: 5)
max_pages: Max pages for crawl/map (default: 20, max: 100)
stealth: Enable anti-bot bypass for protected sites (default: false)
schema: JSON Schema dict for extract_structured
refetch (diff): Fetch a fresh copy before comparing (default: true). Set false to compare already-recorded snapshots without a new network fetch.
Use help tool with tool_name="extract" for full parameter documentation.
Inputs: action (required), url, urls, depth, +14 more. Returns: object
helpARead-onlyIdempotent
Get detailed documentation for any tool. Call this when you need full parameter reference or usage examples.
Valid tool_name values: search, extract, media, config.
Quick guide -- which tool to use:
Need to FIND information? Use
search(returns result listings with URLs)Need to READ a page? Use
extract(returns full page content from a URL)Need media files? Use
media(discover, download images/videos/audio)Need server settings? Use
config(status, cache, settings, warmup, sync setup)
Inputs: tool_name. Returns: result
mediaA
Discover and download media files (images, videos, audio) from web pages.
Actions:
list: Scan a page and return media URLs with metadata. Example: media(action="list", url="https://example.com/gallery", media_type="images")
download: Download media files to local storage. Example: media(action="download", media_urls=["https://example.com/photo.jpg"])
Key parameters:
url (required for list): Page URL to scan
media_urls (required for download): List of media URLs to download
media_type: Filter for list -- "images", "videos", "audio", "files", "all" (default: "all")
output_dir: Download directory (default: ~/.wet-mcp/downloads)
prompt: Reserved -- accepted for backward compatibility, ignored
Typical workflow: list (discover) -> download (save locally). For LLM analysis (vision/audio/video), hand the downloaded path to imagine-mcp's understand action. The legacy media(action="analyze") was REMOVED in wet v2.0.0 (deprecated since v1.x.y); calling it now returns the standard unknown-action error.
Use help tool with tool_name="media" for full documentation.
Inputs: action (required), url, prompt, max_items, +3 more. Returns: object
searchARead-onlyIdempotent
Find information across web, academic sources, or library docs. Returns search result listings (titles, URLs, snippets) -- NOT full page content. To read full content from a URL, use the extract tool instead.
Actions:
search: Web search via SearXNG. Example: search(action="search", query="python async patterns")
research: Academic/scientific search (Google Scholar, arXiv, PubMed). Example: search(action="research", query="transformer attention mechanism")
docs: Search library documentation with auto-indexing. Example: search(action="docs", query="how to create routes", library="fastapi")
docs_resolve: Free-form library name to ranked library_id list. Example: search(action="docs_resolve", query="react")
docs_query: Version-aware library docs query honoring project lock + token cap. Example: search(action="docs_query", library="react", version="latest", topic="useState", query="how to set initial state")
docs_lock_project: Detect project manifests (pyproject/package.json/go.mod/Cargo.toml) and lock the library set for Cabinets isolation. Example: search(action="docs_lock_project", project_path="/repo/my-app")
similar: Find pages similar to a URL (pass URL as query). Example: search(action="similar", query="https://example.com/article")
Key parameters:
query (required for all actions): Search terms or URL (for similar)
library (required for docs): Library name, e.g. "react", "fastapi"
language: Programming language for disambiguation in docs, e.g. "python", "java"
expand: Enable LLM query expansion for broader coverage (default: false)
enrich: Fetch actual page content for richer snippets (default: false, adds latency)
max_results: Number of results (default: 10)
time_range: Recency filter -- day, week, month, year
include_domains / exclude_domains: Domain filters
region (search only): 2-letter ISO 3166-1 country code (e.g. "US", "vn") geo filter. Backends without region support are skipped (named in a warning); a chain with no region-capable backend returns a structured error naming them.
refine (search only): Opt-in iterative refinement. When results are empty or low-relevance, re-queries up to 2 times with LLM-rewritten terms and returns the best round (adds LLM latency/cost per round).
Use help tool with tool_name="search" for full parameter documentation.
Inputs: action (required), limit, query, topic, +14 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Top-level tools are cleanly separated by intent (search finds URLs, extract reads content, media handles files, config manages the server, help documents everything), and descriptions explicitly cross-reference each other. Minor overlap remains: extract's `agent` action bundles search+extract, and config__open_relay overlaps the config tool's setup domain.
Names and all internal actions are consistently lowercase snake_case (docs_query, cache_clear, extract_structured, setup_sync). The one deviation is `config__open_relay`, whose double-underscore namespace prefix breaks the single-word pattern of every other top-level tool.
Six top-level tools sit squarely in the ideal 3-15 range and are well-scoped via an action-based dispatch pattern. However this count is somewhat deceptive, since extract (9 actions), search (7), and config (11) each pack a large hidden surface, making the set heavier than six names suggest.
The surface covers the full web-toolkit lifecycle: discovery (search/research/docs/similar), retrieval and parsing (extract/crawl/map/convert/structured), interaction (interact), change tracking (diff), media (list/download), and server management (config/help). Gaps are minor, e.g. no dedicated result-history or cache-inspection tool beyond config's status.
Maintenance
Related MCP Connectors
LLM-ready web search + instant answers + URL-to-clean-text fetch for agents and RAG.
Web search, Google SERP, page extraction to markdown and cited answers for AI agents.
Web search and page reading for AI agents, including JSON APIs, RSS feeds and YouTube.
Search your knowledge bases from any AI assistant using hybrid RAG.
Related MCP Servers
- AlicenseAqualityAmaintenanceMarkdown-first MCP server for Notion that provides 7 composite action-based tools consolidating 28+ REST API endpoints, enabling AI agents to efficiently manage pages, databases, blocks, and content with automatic pagination and bulk operations.10269 npm36Apache 2.0
- AlicenseAqualityNot gradedmaintenanceEnables hybrid web search and intelligent content extraction, combining semantic search with documentation-optimized reading that strips noise and returns clean, token-efficient context for AI agents.2MIT
- AlicenseAqualityAmaintenancePersistent AI memory with SQLite hybrid search (FTS5 + semantic), built-in Qwen3 embedding, and rclone sync across machines.1512 npm12Apache 2.0
- AlicenseAqualityAmaintenanceIMAP/SMTP email MCP server with App Passwords. Auto-discovers Gmail, Outlook, Yahoo, iCloud. 5 composite tools, multi-account.5284 npm37Apache 2.0