WET - Web Extended Toolkit
The WET (Web Extended Toolkit) MCP server provides AI agents with web search, content extraction, library documentation access, and media handling — often without requiring API keys.
Web Search
General web search via embedded SearXNG metasearch (Google, Bing, DuckDuckGo, Brave) with query expansion, caching, domain filtering, recency filters, and 'similar pages' lookup
Optional cloud search backends: Tavily, Brave, Exa
Academic/scientific research across Google Scholar, Semantic Scholar, arXiv, PubMed, CrossRef, and BASE
Library Documentation
Auto-discover, index, and search library docs with FTS5 hybrid search and HyDE-enhanced retrieval
Version-aware queries and project locking (detects pyproject.toml, package.json, go.mod, Cargo.toml) for context isolation
Content Extraction
Single or batch URL extraction (up to 50 URLs) using a 5-strategy scraping chain with anti-bot bypass (Cloudflare, Medium, LinkedIn, Twitter)
Deep crawling (up to depth 5, 100 pages) and site mapping
Local file conversion: PDF, DOCX, XLSX, PPTX, EPUB, HTML, CSV → Markdown
Structured data extraction using JSON Schema + LLM synthesis
Multi-step AI research agent with cited Markdown output
Browser interaction: click, fill, and submit forms via patchright with optional persistent sessions and screenshots
Media Handling
Discover and list images, videos, and audio from web pages with metadata
Download media to local storage (SSRF-safe)
Configuration & Management
Check server status, manage settings, clear caches, reindex docs, warm up models
Google Drive sync for cross-machine documentation indexing
Key Highlights
Zero config: runs out-of-the-box with local Qwen3 ONNX embedding/reranking models
Optional cloud providers: Jina AI, Gemini, OpenAI, Cohere, xAI, Anthropic for higher-quality results
Self-hostable: Docker or Cloudflare Workers with HTTP transport and OAuth
Supports both stdio and HTTP transport modes
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
mcp-name: io.github.n24q02m/wet-mcp
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 |
Peer AI agents chat in a shared folder — no human relay, no orchestrator, wor... | Tooling | |
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) 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 providers (Jina AI, Gemini, OpenAI, Cohere, xAI, Anthropic) selected per task via the
EMBEDDING_MODELS/RERANK_MODELS/LLM_MODELSmodel chains for higher-quality vectors and LLM featuresSync -- Cross-machine sync of indexed docs via Google Drive (OAuth Device Code, no browser redirect)
Quick install
# Method 1 (default): plugin install via Claude Code
/plugin marketplace add n24q02m/claude-plugins
/plugin install wet-mcp@n24q02m-plugins
# Method 2 (CLI): direct uvx invocation
claude mcp add wet -- uvx wet-mcp
# Method 3 (source-built container for HTTP / multi-device / OAuth)
docker build --target http -t wet-mcp:local .
docker run -d --name wet-mcp-http -p 8084:8080 \
-v wet-data:/data -e PUBLIC_URL=https://wet.example.com \
wet-mcp:local
# Method 4 (remote): point a client at an HTTP deployment
claude mcp add --transport http wet https://<your-host>/mcpPublic 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 and is OAuth-gated -- your client is prompted to authenticate in the browser on first connect (no API key to paste). Stand one up via Method 3 or the Deploy to Cloudflare section.
Full setup matrices live at the canonical docs site mcp.n24q02m.com/servers/wet-mcp/setup/ and the paste-to-agent snippets at claude-plugins/plugins/wet-mcp/setup-with-agent.md (per Spec F single source of truth).
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, point each task at a cloud model chain. All settings are plain environment variables (no app prefix) -- in the HTTP self-host mode they are entered through the browser setup form instead.
Model chains (CSV provider/model,provider/model; order = fallback). Leave a
chain empty to use the local ONNX models (embedding/rerank) or to disable LLM
features (LLM):
Env var | Task | Empty default |
| Embeddings for docs search | Local fastretrieval ONNX |
| Result reranking | Local fastretrieval cross-encoder |
|
| LLM features disabled |
Provider keys -- the provider is inferred from each model's prefix; supply the
matching key (litellm <PROVIDER>_API_KEY convention):
Model prefix | Key env var | Get it at |
|
| jina.ai/api-key |
|
| aistudio.google.com/apikey |
|
| cloud.google.com/vertex-ai/generative-ai/docs/start/express-mode/overview |
|
| platform.openai.com |
|
| dashboard.cohere.com |
|
| console.x.ai |
|
| console.anthropic.com |
Any other litellm provider works via env passthrough -- see litellm provider docs for its key name.
FASTRETRIEVAL_CACHE_PATH controls the local model cache.
Search backends -- SEARCH_BACKENDS (CSV, runtime fallback chain) over
searxng (default, local) plus optional cloud providers tavily / brave /
exa. Point at an external SearXNG with SEARXNG_URL. Cloud providers need
TAVILY_API_KEY / BRAVE_API_KEY / EXA_API_KEY.
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.
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.
Docs sync -- SYNC_ENABLED (default true), GOOGLE_DRIVE_CLIENT_ID
(required for sync), SYNC_FOLDER (default wet-mcp), SYNC_INTERVAL (default
300s). Sync uses Google Drive over the OAuth Device Code flow (no browser
redirect).
HTTP self-host -- MCP_TRANSPORT=http, PUBLIC_URL=<your-domain>. The setup
form is gated by MCP_RELAY_PASSWORD; multi-user deployments require
CREDENTIAL_SECRET (per-user vault key), MCP_JWT_SIGNING_SECRET (rotatable
OAuth JWT key), and MCP_DCR_SERVER_SECRET.
Example stdio config (cloud chains):
{
"mcpServers": {
"wet": {
"command": "uvx",
"args": ["wet-mcp"],
"env": {
"EMBEDDING_MODELS": "jina_ai/jina-embeddings-v5-text-small",
"RERANK_MODELS": "jina_ai/jina-reranker-v3",
"LLM_MODELS": "gemini/gemini-3-flash-preview",
"JINA_AI_API_KEY": "jina_xxx",
"GEMINI_API_KEY": "AIza_xxx"
}
}
}
}Status
Stable architecture with two transports: stdio (default, local) and
HTTP (self-host, OAuth-gated). No daemon-bridge layer and no auto-spawn
from stdio. 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-mcp/setup/:
Setup -- install methods for Claude Code, Codex, Gemini CLI, Cursor, Windsurf, mcp.json
Modes overview -- stdio / local-relay / remote-relay / remote-oauth
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-mcp/):
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
wet-mcpfollowing the steps at https://raw.githubusercontent.com/n24q02m/claude-plugins/main/plugins/wet-mcp/setup-with-agent.md
Tools
6 MCP tools (3 domain + config + help + config__open_relay). 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: |
| Re-trigger the zero-config relay setup flow (prints a fresh relay URL for the browser form). Registered via |
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 wet-mcp console script starts the server and also exposes a few one-shot
operator subcommands. A bare invocation (or any leading-dash flag) starts the
server; a leading positional argument is dispatched as a subcommand.
wet-mcp # start the server over stdio (default transport)
wet-mcp --http # start the server over Streamable HTTP (self-host mode)
wet-mcp auth google # authorize the Google credential provider for Drive sync
wet-mcp logout # clear the local Google Drive sync token
wet-mcp warmup # pre-download local models + run auto-setup (SearXNG, browser) to avoid first-run delays
wet-mcp docs reindex <library> # drop the cached docs index for <library>; the next docs search re-indexes itauth google accepts an optional bring-your-own OAuth client via --client-id
and --client-secret (single-user / local machine only; the token is written to
the local store). Each subcommand prints a JSON result and exits.
Capability | wet-mcp | 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 -- Optional
CONVERT_ALLOWED_DIRSrestriction
Build from Source
git clone https://github.com/n24q02m/wet-mcp.git
cd wet-mcp
uv sync
uv run wet-mcpDeploy to Cloudflare
Run your own single-user wet instance serverless on Cloudflare (Containers + D1 + Vectorize + KV).
Prerequisites: a Cloudflare account on the Workers Paid plan — required for Containers, D1, and Vectorize (the Cloudflare free tier does not include them) — and the wrangler CLI.
git clone https://github.com/n24q02m/wet-mcp && cd wet-mcpwrangler loginProvision resources and apply the D1 schema:
wrangler d1 create wet-docs wrangler d1 execute wet-docs --file migrations/0001_init_wet.sql --remote wrangler d1 execute wet-docs --file migrations/0002_project_context.sql --remote wrangler d1 execute wet-docs --file migrations/0003_version_index_state.sql --remote wrangler vectorize create wet-docs-vectors --dimensions 768 --metric cosine wrangler kv namespace create wet-kvPaste the returned IDs into
wrangler.jsonc.Build the slim HTTP image from this checkout and push it directly to Cloudflare's managed registry (CF Containers cannot pull from external registries):
docker build --target http --build-arg SLIM=1 -t wet-mcp:beta . wrangler containers push wet-mcp:beta # prints registry.cloudflare.com/<ACCOUNT_ID>/wet-mcp:betaSet secrets (
TAVILY_API_KEYis required whenSEARCH_BACKENDSincludestavily; Cloudflare Browser Run is the default headless render backend):wrangler secret put CREDENTIAL_SECRET wrangler secret put MCP_JWT_SIGNING_SECRET wrangler secret put JINA_AI_API_KEY wrangler secret put GOOGLE_VERTEX_EXPRESS_API_KEY wrangler secret put XAI_API_KEY wrangler secret put MCP_RELAY_PASSWORD wrangler secret put MCP_DCR_SERVER_SECRET wrangler secret put TAVILY_API_KEY wrangler secret put CF_BROWSER_RENDERING_TOKENwrangler deployand complete setup in the browser relay form at your Worker domain.
Storage maps to Cloudflare via MCP_STORAGE_BACKEND=cf-kv (credentials/tokens, encrypted),
DOCS_DB_BACKEND=cf-d1 (docs + BM25 full-text), and Vectorize (embeddings). The
example Worker uses SEARCH_BACKENDS=tavily,duckduckgo,startpage and
BROWSER_BACKENDS=cf-browser-rendering; embed/rerank are forced cloud via
EMBEDDING_MODELS/RERANK_MODELS.
Smithery
wet-mcp ships a smithery.yaml so it can be installed and run
through Smithery. The manifest declares a stdio start
command (uvx --python 3.13 wet-mcp) with an empty config schema -- no config is
required to start, and providers and credentials are configured at runtime via
the server's own config flow (see Configuration).
Trust 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? |
stdio (default) |
| AES-GCM, machine-bound key | Only your OS user (file perm 0600) |
HTTP self-host | Same as stdio | Same | Only you (admin = user) |
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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| force | No | ||
| value | No | ||
| action | Yes | ||
| remote_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose behavioral traits such as side effects, permissions, reversibility, or what happens on success/failure. The annotations indicate idempotent and non-destructive, but the description does not elaborate on these, leaving the actual behavior of actions like set or cache_clear unclear.
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 appropriately sized: it opens with a clear summary then lists actions in a compact, pipe-separated format. It is front-loaded with the main purpose and does not include unnecessary fluff.
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 tool's apparent complexity (many distinct actions), the description is incomplete. It does not explain what each action does, any side effects, or required parameters for each action. It relies on the help tool for full docs, which is not sufficient for a complete understanding.
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 description adds no meaning to the schema parameters. It lists actions but does not explain the role of 'key', 'force', 'value', or 'remote_type'. The schema provides types and defaults but no descriptions, so the parameter semantics are entirely undocumented.
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 purpose as 'Server config and management' and enumerates specific actions (status, set, cache_clear, etc.), which gives a good high-level understanding. It is distinct enough from sibling tools, though it does not explicitly compare with them.
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 does not explicitly state when to use this tool versus alternatives. It only suggests using the help tool for full documentation, which is a weak form of guidance. There is no indication of prerequisites or typical use cases for the listed actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| ctx | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the responsibility for disclosing behavior. It mentions the side effect of opening a browser 'when possible', and lists return values (URL, browser launched, status). However, it omits potential failures, permission requirements, or any side effects beyond the browser action.
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 concise sentences, front-loaded with the primary purpose, and includes all essential behavioral information without superfluous details. It earns its length efficiently.
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 tool's simplicity and the presence of an output schema (likely documenting the return values), the description covers the core purpose and side effects adequately. It lacks details on error handling or integration with other tools, but for a straightforward config command it is sufficiently complete.
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 only parameter is 'ctx', a standard context object, but the description does not mention or explain it. Schema coverage is 0% as the description adds no parameter-specific meaning. While the ctx parameter is typically auto-injected, the description should at least note its presence or purpose, making this a gap.
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 verb 'Get' and the resource 'relay configuration URL', and specifies the browser-opening behavior. It distinguishes itself from the sibling 'config' tool by focusing on the relay URL retrieval and browser action.
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 no guidance on when to use this tool versus alternatives, no preconditions, and no mention of when it should not be used. It simply states what the tool does without contextual advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| urls | No | ||
| depth | No | ||
| paths | No | ||
| query | No | ||
| action | Yes | ||
| format | No | markdown | |
| prompt | No | ||
| schema | No | ||
| actions | No | ||
| refetch | No | ||
| session | No | ||
| stealth | No | ||
| max_urls | No | ||
| max_pages | No | ||
| screenshot | No | ||
| token_budget | No | ||
| synthesis_model | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint, but the description adds substantial behavioral context: batch per-domain rate limiting (max 50 URLs), crawl depth and max_pages constraints, stealth anti-bot bypass, persistent browser sessions, refetch behavior, and the ability to click/fill/submit via interact. This goes well beyond the annotations and sets accurate expectations.
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 long but well-structured: opening purpose, actionable examples for each of nine modes, and a key-parameters section. It front-loads the core use case and search distinction. Every sentence earns its place given the tool's complexity; the final pointer to 'help' is a minor but useful note.
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?
For an 18-parameter, multi-action tool, the description is remarkably complete. It documents every action mode with examples, covers nearly all parameters with defaults and constraints, and notes the existence of an output schema. No critical gaps remain for an agent to select and invoke the tool correctly.
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 0% description coverage, so the description carries the full burden. It compensates with action-specific mappings, defaults (max_urls=5, depth=2, token_budget=10000), constraints (max crawl depth 5, max_pages 100), and concrete examples showing how to pass parameters. Only 'prompt' is not explicitly described, but overall semantics are richly defined.
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 'Read and return full page content from URLs or local files' and enumerates nine specific action modes (extract, batch, crawl, map, convert, extract_structured, agent, interact, diff). It distinguishes itself from the sibling 'search' tool by explicitly saying 'For finding URLs first, use the search tool instead.'
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?
Provides explicit when-to-use guidance: 'Use this when you have a specific URL and need its content.' It names the alternative search tool, and each action includes an example with concrete parameter usage. The key parameters section further clarifies which parameters apply to which action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| tool_name | No | search |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, covering safety. Description adds that it returns detailed documentation, but no extra behavioral traits beyond what annotations convey. Consistent but not additive.
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?
Efficient: first sentence states purpose, second lists valid values, then a concise quick guide in bullet-style. No fluff, every sentence earns its place.
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 has one parameter; description covers purpose, usage guidelines, valid values, and sibling differentiation. Output schema exists but return values are self-explanatory. Complete for the tool's simplicity.
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?
Schema coverage is 0% with only type 'string' and a default. Description compensates by explicitly listing valid tool_name values ('search, extract, media, config') and explaining each's usage in the guide, adding meaning beyond the schema.
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 'Get detailed documentation for any tool,' using a specific verb and resource. It distinguishes from siblings via the quick guide that maps each sibling tool to its purpose.
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?
Explicitly says 'Call this when you need full parameter reference or usage examples.' Provides a quick guide comparing sibling tools, stating when to use each (e.g., 'Need to FIND information? Use search'), giving clear when-to-use and when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| action | Yes | ||
| prompt | No | Describe this image in detail. | |
| max_items | No | ||
| media_type | No | all | |
| media_urls | No | ||
| output_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description openly discloses that the tool downloads files to local storage (a side effect consistent with readOnlyHint=false), and it explains the reserved 'prompt' parameter is ignored. It also describes the legacy action removal, adding context beyond the annotations.
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 structured with bullet points and examples, front-loaded with the core purpose. It is somewhat verbose due to the workflow and legacy notes, but every section adds value and aids usage.
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 description covers actions, parameters, workflow, and even directs to the help tool for full documentation. Given the output schema exists and the tool is complex, the description is remarkably complete and self-sufficient.
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?
With 0% schema coverage, the description compensates well by explaining url, media_urls, media_type, output_dir, and prompt behavior. It also gives defaults and examples, though it omits 'max_items' and detailed accepted values for 'action'.
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 it discovers and downloads media files, lists specific actions (list, download) with examples, and distinguishes from sibling tools like extract and search by naming the resource type (media) and workflow. The purpose is specific and unambiguous.
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 explicitly explains the typical workflow (list then download), tells when to use which action, and points to the alternative for LLM analysis (imagine-mcp's understand action). It also warns that the legacy 'analyze' action is removed, preventing misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-onlyIdempotent
Find information across web, academic sources, X/Twitter, 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")
x: X/Twitter search via xAI. Returns a SYNTHESIZED answer with citations (NOT a link list for extract() -- X blocks direct extraction). Bills ~$0.032/query (grok-4.3). Requires XAI_API_KEY. Example: search(action="x", query="latest reactions to the GPT-5 launch", handles=["OpenAI"], time_range="week")
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
handles / exclude_handles (x only): Restrict to / exclude up to 20 X handles (mutually exclusive), e.g. handles=["nasa"]
from_date / to_date (x only): ISO8601 date bounds; override time_range for precise windows
video (x only): Enable video understanding of linked X media (default: false)
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| topic | No | ||
| video | No | ||
| action | Yes | ||
| enrich | No | ||
| expand | No | ||
| refine | No | ||
| region | No | ||
| handles | No | ||
| library | No | ||
| to_date | No | ||
| version | No | ||
| language | No | ||
| parallel | No | ||
| from_date | No | ||
| categories | No | general | |
| time_range | No | ||
| max_results | No | ||
| project_path | No | ||
| exclude_domains | No | ||
| exclude_handles | No | ||
| include_domains | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly, idempotent, and openWorld hints, so the bar for extra behavioral value is high. The description goes beyond them by disclosing cost (~$0.032/query for X), authentication requirements (XAI_API_KEY), latency implications of enrich/refine, and backend-skip behavior for region. This is rich, useful behavioral context.
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 long but appropriately so for a tool with eight distinct actions and 23 parameters. It is front-loaded with the critical 'NOT full page content' warning and the extract alternative before diving into action details. Each bullet and parameter earns its place through examples, constraints, or caveats.
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 tool's complexity, the description is remarkably complete: it covers all actions, key parameters, examples, costs, authentication requirements, latency trade-offs, and fallback behavior. It also points to the help tool for full parameter documentation, which closes any remaining gaps.
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?
Schema description coverage is 0%, so the description carries the parameter-documentation burden alone. It explains many parameters including query, library, language, expand, enrich, max_results, time_range, include/exclude_domains, handles, from_date/to_date, video, region, and refine. However, a few schema parameters such as limit, topic, categories, and parallel are not described in either the schema or the description.
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 is for finding information across web, academic, X/Twitter, and library docs, and explicitly says it returns listings, not full content. It names the sibling 'extract' as the alternative for reading full pages, which differentiates it sharply. Each action is given a specific verb and resource.
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 gives explicit guidance: use 'extract' for full content, and explains that X results are not a link list because X blocks direct extraction. It also documents when to use each action with concrete examples, including the caveat that region-unaware backends are skipped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v3.10.0- Changed
search3 fields changed- added
Input schema / properties / parallelAdded value: +{ + "default": false, + "title": "Parallel", + "type": "boolean" +} - added
Input schema / properties / refineAdded value: +{ + "default": false, + "title": "Refine", + "type": "boolean" +} - added
Input schema / properties / regionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Region" +}
5 tool updates
v3.7.3- Added
config - Added
config__open_relay - Added
extract - Added
media - Added
search
5 tool updates
v3.6.0- Removed
config - Removed
config__open_relay - Removed
extract - Removed
media - Removed
search
4 tool updates
v3.5.0- Changed
config4 fields changed- added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "title": "Result", - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"configOutput"New value: +"configDictOutput"
- Changed
extract5 fields changed- added
Input schema / properties / refetchAdded value: +{ + "default": true, + "title": "Refetch", + "type": "boolean" +} - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "title": "Result", - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"extractOutput"New value: +"extractDictOutput"
- Changed
media4 fields changed- added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "title": "Result", - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"mediaOutput"New value: +"mediaDictOutput"
- Changed
search9 fields changed- added
Input schema / properties / exclude_handlesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Exclude Handles" +} - added
Input schema / properties / from_dateAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "From Date" +} - added
Input schema / properties / handlesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Handles" +} - added
Input schema / properties / to_dateAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "To Date" +} - added
Input schema / properties / videoAdded value: +{ + "default": false, + "title": "Video", + "type": "boolean" +} - added
Output schema / additionalPropertiesAdded value: +true - removed
Output schema / propertiesRemoved value: -{ - "result": { - "title": "Result", - "type": "string" - } -} - removed
Output schema / requiredRemoved value: -[ - "result" -] - changed
Output schema / titlePrevious value: -"searchOutput"New value: +"searchDictOutput"
4 tool updates
v3.1.0- Changed
config2 fields changed- added
Input schema / properties / forceAdded value: +{ + "default": false, + "title": "Force", + "type": "boolean" +} - added
Input schema / properties / remote_typeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Remote Type" +}
- Added
config__open_relay - Changed
extract11 fields changed- added
Input schema / properties / actionsAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Actions" +} - added
Input schema / properties / max_urlsAdded value: +{ + "default": 5, + "title": "Max Urls", + "type": "integer" +} - added
Input schema / properties / pathsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Paths" +} - added
Input schema / properties / promptAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Prompt" +} - added
Input schema / properties / queryAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Query" +} - added
Input schema / properties / schemaAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Schema" +} - added
Input schema / properties / screenshotAdded value: +{ + "default": false, + "title": "Screenshot", + "type": "boolean" +} - added
Input schema / properties / sessionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session" +} - added
Input schema / properties / synthesis_modelAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Synthesis Model" +} - added
Input schema / properties / token_budgetAdded value: +{ + "default": 10000, + "title": "Token Budget", + "type": "integer" +} - added
Input schema / properties / urlAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Url" +}
- Changed
search7 fields changed- added
Input schema / properties / enrichAdded value: +{ + "default": false, + "title": "Enrich", + "type": "boolean" +} - added
Input schema / properties / exclude_domainsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Exclude Domains" +} - added
Input schema / properties / expandAdded value: +{ + "default": false, + "title": "Expand", + "type": "boolean" +} - added
Input schema / properties / include_domainsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Include Domains" +} - added
Input schema / properties / project_pathAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Project Path" +} - added
Input schema / properties / time_rangeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Time Range" +} - added
Input schema / properties / topicAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Topic" +}
5 tool updates
v2.13.0- First observed
config - First observed
extract - First observed
help - First observed
media - First observed
search
TDQS
Scored across 6 tools
Search, extract, and media have clearly separated primary roles, and config/help are distinct management tools. Minor ambiguity exists between config__open_relay and config, and the extract agent sub-action overlaps with search, but descriptions are explicit enough to guide correct selection.
Five tools use simple lowercase single-word names (search, extract, media, help, config), but config__open_relay breaks the pattern with a double-underscore namespaced style. The sub-action naming inside search and extract also mixes conventions, though these are not top-level tool names.
Six top-level tools is a reasonable size for the server's broad web research/extraction scope. The count is slightly padded by config__open_relay being exposed separately from config, and several tools are actually large action bundles, making the surface bigger than the count suggests.
The surface covers search, content extraction, crawling, structured extraction, browser automation, media discovery/download, local file conversion, change tracking, and server configuration. This is comprehensive for a web extended toolkit; no obvious dead ends or missing core operations were found.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
LLM-ready web search + instant answers + URL-to-clean-text fetch for agents and RAG.
Search your knowledge bases from any AI assistant using hybrid RAG.
Web search, URL content extraction to Markdown, site mapping, and recursive web crawler.
The best web search for your AI Agent
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.1185536Apache 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.2-
- AlicenseAqualityAmaintenancePersistent AI memory with SQLite hybrid search (FTS5 + semantic), built-in Qwen3 embedding, and rclone sync across machines.1510Apache 2.0
- AlicenseAqualityAmaintenanceIMAP/SMTP email MCP server with App Passwords. Auto-discovers Gmail, Outlook, Yahoo, iCloud. 5 composite tools, multi-account.587434Apache 2.0
Appeared in Searches
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/n24q02m/wet-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server