keyless-web-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_WEB_PROXY | No | Fallback proxy, host:port or http://host:port. Direct is always tried first. | |
| KEYLESS_WEB_ENGINES | No | Default engine list, comma separated. Defaults to duckduckgo,google,wikipedia. Unknown names are dropped. | duckduckgo,google,wikipedia |
| KEYLESS_WEB_TIMEOUT | No | Per-request timeout in seconds. | 15 |
| KEYLESS_WEB_CACHE_TTL | No | Search result cache TTL in seconds; 0 disables caching. | 300 |
| KEYLESS_WEB_USER_AGENT | No | User-Agent header for scraping and web_fetch. Defaults to a desktop Chrome user agent. The Wikipedia engine always identifies itself separately. | |
| KEYLESS_WEB_MIN_INTERVAL | No | Minimum seconds between two requests to the same host; 0 disables rate limiting. | 1.0 |
| KEYLESS_WEB_CACHE_TTL_FETCH | No | Fetched page cache TTL in seconds; 0 disables caching. | 900 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Keyless web access: web_search finds pages and news, web_fetch reads a page as plain text. Quote the source URL next to any claim you took from a tool result. Both tools need no API key and no configuration.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| web_searchA | Search the web without an API key and return a JSON array of results, each shaped {"title": str, "url": str, "snippet": str, "engine": str} plus optional "source" and "date" fields for news hits. Engines are tried in the given order and results are merged and de-duplicated by URL. engines: any of "bing", "duckduckgo", "google", "wikipedia"; omitted uses the server default (duckduckgo, then google, then wikipedia). Note that "google" is Google News RSS (news and tech coverage, no general web index) and that "bing" is opt-in only. max_results must be 1-20. Always valid JSON: an empty array [] means no engine produced results (retry with different terms or another engine); on failure it returns a text starting with 'error[KEYLESS_...]:' plus a Hint. |
| web_fetchA | Fetch one http(s) URL and return its readable main text for reading or citation; JSON endpoints are pretty-printed instead. Only http:// and https:// are accepted. include_links=true also lists up to 30 links found on the page (useful to discover follow-up URLs). max_chars caps the returned text and must be 500-100000. On failure it returns a text starting with 'error[KEYLESS_...]:' plus a Hint instead of raising. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 2 tools
The two tools split cleanly into discovery (web_search) and retrieval (web_fetch) of a single URL, with no overlapping behavior or ambiguous inputs. An agent can decide which to call without hesitation.
Both names follow the same snake_case verb_noun pattern (web_search, web_fetch) with a consistent 'web_' prefix. Parameter conventions (max_results vs max_chars) are also parallel.
Two tools is thin, though search+fetch is the minimal viable pair for a web-access server. There is no tool for batch fetching or content extraction beyond readable text, leaving the surface at the borderline of under-scoped.
Search plus fetch covers the core read-only lifecycle of web access, and the search tool's engine selection, dedup, and JSON contract make it self-sufficient. Minor gaps remain: no multi-URL or batch fetch, and no structured extraction beyond links and pretty-printed JSON.