robbyczgw-cla/web-search-plus
Source-only multi-provider web search and bounded web extraction for agent clients.
Changelog
[Unreleased]
[5.1.6] - 2026-10-30
Fixed
- Failed extractions say why. A request where no page could be read used to return
results: []with "Provider returned an invalid response". It now returns one row per URL with a reason (page not found (HTTP 404),page removed (HTTP 410),the site refused automated access,the site could not be reached or timed out,<provider> does not support this site) and a summary such as "Could not read the page: page not found (HTTP 404)", or which providers were tried and how many were not tried because of the per-request attempt limit. Reasons come from Tavily, Exa, Parallel, Linkup and Firecrawl signals; provider text is matched, never copied. - A missing page costs one call. When a provider reports 404/410 from the site, no other provider is tried for that URL (live: 1 call instead of 3 paid calls).
- Extract fallback reaches three providers again. With another provider waiting, each provider gets one try; a retry used to spend one of the three attempt units.
- Firecrawl: a 404 page came back and was cached as content; its HTTP 403 "we do not support this site" counted as an auth failure and blocked Firecrawl for five minutes for all URLs.
- Research counts only pages actually read in
extracted_url_count.
Same engine changes as the Hermes plugin 5.1.7.
[5.1.5] - 2026-10-30
Fixed
- DonSeTch works again with DonSeTch 4.7.1 and newer. With DonSeTch 4.10.3, 5.1.4 answered every explicit
provider: "donsetch"search with "Provider execution failed": DonSeTch folds results into a[meta]text line for clients it does not recognize, and the MCP copy of the adapter had not received the Hermes fixes. The adapter is now the Hermes 5.1.6 one: it asks for the split result shape (DONSETCH_MCP__TEXT_ONLY=false), still reads a folded[meta]answer, reads the child's output with a thread instead ofselect(which fails on Windows pipes), and sends the Web Search Plus version in the MCP handshake. Tests use recorded DonSeTch 4.7.0 and 4.10.1 answers. WSP_FORCE_SUBPROCESS=1and the subprocess fallback work.search.pywas started as a file and stopped on its package-relative imports, so every call returned "Web Search Plus subprocess failed." It now runs aspython -m web_search_plus_mcp.search. The server tests had replacedsubprocess.runand never started the real child; a new test does.- A tool call no longer moves your config file. Choosing the output detail read the config with a stricter check than the engine uses. A config with
"extract_provider_priority": [](valid, it means the default order) was renamed toconfig.json.broken-*on the first tool call, and the search then ran without yourdisabled_providers. Read paths leave the file alone now, and an empty list means the default order, as in the engine. Theconfigcommand still keeps an invalid file as a.broken-*backup before it writes a new one.
[5.1.4] - 2026-10-30
Fixed
- Compact
web_searchoutput caps each snippet at 1,200 characters (word boundary, with a[TRUNCATED: showing first N of M characters]marker), like the Hermes plugin's display. A real Exa search returned a 21,830-character snippet and made one five-result compact response ~32 KB.detail: "full"keeps the original text. Found in the release smoke test of the built package; a size test with long provider snippets now guards it.
5.1.3 was tagged and released on GitHub but not published to PyPI; 5.1.4 contains all of it.
[5.1.3] - 2026-10-30
Changed
- MCP responses are compact by default.
web_searchandweb_extractaccept the optionaldetail: "compact" | "full"argument. Compact JSON removes repeated observations and execution diagnostics while preserving source text, short routing/cache/warning summaries, per-URL extraction errors, bounded content and full-text storage references. Failures retain setup guidance and MCPisError: true. - Clients parsing the full v3 contract must opt in: pass
detail: "full", setWEB_SEARCH_PLUS_MCP_DETAIL=fullin the server environment, or add{"mcp": {"detail": "full"}}to the existing config file. Precedence: argument > environment > config > compact. Full output preserves the 5.1.2 projection, including routing receipts, observations and requested quality reports. Tool names, existing arguments and content limits are unchanged; the compact projection itself does not change provider execution.
Fixed
5.1.3 also carries the Hermes 5.1.6 engine fixes (upstream faa0110, 2b7e544, 1eb9b8c):
- Google
/gotosource wrappers are dropped by default without Google requests; classic/url?q=wrappers decode locally.serper.resolve_redirects=trueopts into the bounded, one-hop resolver. Redirect counts survive fallback, Research and cache hits; compact output includes positive counts only, full mode retains all receipt details. - SerpBase defaults to
device=mobile, configurable viaserpbase.device(mobileordesktop), prefers canonicalurloverlinkand sends the WSP user agent. Cache identities separate devices and redirect policies. - Every search provider filters corrupt source URLs before ranking, observations and caching, preserving legitimate IRIs and UTF-8 escapes.
invalid_urls_droppedis included only when positive in compact output. - Security and shopping start with Brave; Serper remains a later fallback, matching the Hermes routing tables.
- DonSeTch's tested version is 4.10.3; setup documentation and status assertions are updated.
Hermes text headers, Hermes-only output-size tests and unrelated host configuration changes are not ported. MCP compact regression tests cover the new metadata within the existing ≤30% / <6 KB eight-source budget.
[5.1.2] - 2026-10-18
5.1.1 was never released, so this section covers everything since 5.0.1. Synced with the Hermes Web Search Plus 5.1.2 engine (5.0.1 → 5.1.2, including the engine parts of 5.1.0 and 5.1.1). Hermes-plugin-only changes are not ported: profile-scoped keys (catalog rule 11), the native backend, hermes web-search-plus commands, Hermes Desktop settings and the Jev key-file removal. Tool names, input schemas and the .env loading of the MCP server are unchanged.
Fixed
- No provider request starts after the request deadline. Batch extraction (Firecrawl, Linkup, Serper, Keenable, DonSeTch) keeps pages it already fetched and marks the rest
not tried: request ran out of time; socket timeouts shrink to the time left; Octen, TinyFish and DonSeTch respect the per-attempt timeout cap; research passes its deadline to every member and to its source extraction (with a short grace to collect pages already returned). - A request that runs out of its own time no longer counts against the provider: no circuit opens, no latency sample is recorded and, when nothing was sent, no budget unit is used. A retry starts only with at least 1 s left, and the Brave pacer does not wait past the deadline.
- Brave's per-second 429 retry moved into the attempt engine. It respects the deadline and shows as its own try in receipts; with another candidate left, automatic routing falls back instead of waiting.
- The per-request provider-attempt budget no longer depends on SQLite; a configured daily limit fails closed when the ledger cannot be read, and the state store re-probes SQLite 30 s after an I/O error.
- Half-open circuit probes release their lease when the call is budget-blocked, ends without a verdict on the provider (invalid request, internal or contract error) or is interrupted; a half-open retry no longer blocks itself and the failure history stays until a probe succeeds.
web_extractreturns exactly one result per requested URL, in request order, also when several providers served the batch. URLs with the same canonical form (?ref=1/?ref=2) are no longer collapsed, an unmatched provider item is no longer assigned to the first open URL, and content returned under a rewritten URL (http→https, redirect) is kept instead of paying a second provider.- A rate limit, out-of-credit or auth error partway through a
web_extractbatch keeps the pages already fetched (Hermes 5.1.2,5b689e2). Firecrawl, Linkup, Serper and Keenable stop the batch at a provider-wide error and mark the URL that failed and the URLs not yet tried with the cause, e.g.not tried: provider rate limit reached. Only those URLs go to the next provider. The attempt is reported aspartial, keeps the error in its receipt and opens the circuit; the batch is never retried at the same provider. Partial results are not cached. If the error comes on the first URL, the attempt fails as before. Serper and Keenable now report these errors to the circuit breaker; before, a 429 turned into a per-URL error on every URL. A DonSeTch session failure partway through a batch keeps the pages already fetched. - URLs past
bounded_context.max_urls(default 10) get their own row (Hermes 5.1.2,76a0d2f):error: "not tried: limit of 10 URLs per call reached", in request order, in the legacy projection and in the MCPweb_extractoutput. They used to vanish with only a note inlimits_applied. - The provider that served the pages is named in the header,
routing.provider,fallback_used, the receipt and the cache when a fallback provider took over. - Extract provider names are case-insensitive; unknown or search-only names return a clean error.
- The search cache is keyed by the credentials that produced a result (read from the process environment), so a changed key or SearXNG instance no longer serves cached results of the old one.
- A
jev.api_keyinconfig.jsonis ignored with a warning instead of discarding every routing setting in the file. - SearXNG error messages and result metadata keep only the instance origin (scheme, host, port).
- Brave queries are shortened only past Brave's documented 600 characters and 75 words (5.0.1 used 400 and 50).
- Research names why a provider was skipped (for example "Out of credits or quota at its last call").
- DonSeTch: a fetch that runs past the deadline keeps the pages fetched before it, and its child process gets the
DONSETCH_*values through the credentials layer.
Added
web_extractresults carryrequested_url, the URL you passed in, next tourl(where the page was fetched, after redirects and normalization). Two inputs such as?ref=aand?ref=bthat end on oneurlcan now be told apart without relying on order. MCP-only and additive:urlis unchanged and the canonical v3 response andschemas/v3are untouched.
Changed
- New module
web_search_plus_mcp.credentials:get_secretreads the process environment (no resolver is installed here) andredact_secrets/redact_urlare available for status output. The MCP server still loads its.envfiles itself. - Provider SDK:
wsp_sdkexportsRequestDeadlineExceeded,deadline_passed(),dispatch_timeout(timeout)andremaining_seconds()for providers with their own transport. - A partial extraction warning also carries
details.unmatched_countand extract payloads carryunmatched_resultsfor items that answered no requested URL (additive;details.failed_urlsis unchanged).
[5.0.1] - 2026-10-10
Synced with Hermes Web Search Plus 5.0.1. Bug fixes for 5.0.0, no breaking changes; routing, providers and config format stay the same.
Fixed
- Normal queries no longer trip the source-only filter. Searches with words such as "synthesizer" or "verify the claim" failed at Exa, Tavily and Linkup, and docs queries meant for Exa fell through to another provider. The filter now checks only what Web Search Plus itself sends, not your query, URLs or domain filters.
- One bad URL no longer sinks a
web_extractbatch. Each blocked, unresolvable or failing URL gets its ownerrorinresults[](also listed in thewsp.extract.partialwarning underdetails.failed_urls); the other URLs are still extracted, and failed ones are retried on the next extraction provider. Error messages no longer reveal internal IP addresses. - Empty pages are no longer a success. Blank extractions fall back to the next provider and are not cached.
- Bounded rate-limit waits. A long
Retry-Afteris not waited out inline (cap 30 s); retries without one back off briefly; malformed values no longer crash the attempt. - Long queries work at Brave. Queries are shortened at a word boundary to Brave's 400 characters / 50 words,
site:operators kept, instead of being rejected. A provider rejecting a too-long query reads "Query rejected … it may be too long". - Auto routing off without a default provider uses the configured provider order instead of failing every search.
- A private SearXNG URL without
SEARXNG_ALLOW_PRIVATE=1skips SearXNG instead of breaking every automatic search.
[5.0.0] - 2026-10-09
Synced with Hermes Web Search Plus 5.0.
Breaking changes
- Automatic routing picks the first provider by query type: Brave for general, news, local and community queries, Exa for docs and academic, Serper for security and shopping. In a 294-query test mix with every provider configured, Brave answered 62 % of automatic searches (4.3.5: 14 %). With a Brave key, expect more Brave usage.
auto_routing.order: "custom"inconfig.jsonmakesprovider_prioritythe order for every query. A config that still holds the 4.x defaultprovider_prioritygets the new order. - Without a configured language, a clearly detected query language is sent to the provider: a German query is searched in German. Set
defaults.locale.languageto keep one language for every query. - Removed: the heuristic router (
adaptive_routingandconfidence_thresholdare accepted and ignored), shadow routing, the source-independence estimator, reading the pre-v3 JSON search cache from the tools, and the Perplexity and Kilo-Perplexity config sections. Adefaults.providerset to a removed provider falls back to the default. - Code that patched
search.search_<provider>orsearch.make_requestpatchesweb_search_plus_mcp.providers;search.QueryAnalyzerandsearch.get_compatibility_shim_policy()are gone.
Changed
- Results drop spam and pages beyond two per domain from a larger candidate list, rank the vendor a query names first in docs, security and news results, and show
[published YYYY-MM-DD]where the provider returns a date. - Research mode merges provider lists with reciprocal rank fusion and returns up to two query-ranked passages per source.
- Automatic search starts the next provider when the current one fails, returns no results, or exceeds its p75 latency (at least 2.5 s).
- Snippets in the tool text are cut at 1,200 characters; the JSON payload keeps the full snippet.
include_domainsaccepts a plain string, ports, IDN domains and suffixes such as.gov. A filter without a usable entry is an error instead of an unfiltered search, and search operators can no longer be injected through Firecrawl. Several domains reach Firecrawl joined withOR. Tavily cannot filter by suffix and says so; automatic search skips it for such filters.- A provider is blocked only after three failures in a row; a success resets the count. A blocked provider names the reason in words ("Out of credits or quota at its last call …") instead of a bare code.
- A search every provider answered with no results is no longer cached, a hedged win counts as a normal answer, and
[published …]survives cache hits. wsp_sdk.api,wsp_sdk.errorsandwsp_sdk.conformanceresolve to the same modules the engine uses.- A 402, or a 400, 403 or 429 whose body reports no funds (also gzip-encoded), is reported as "Out of credits" instead of a rate limit. A 429 with
Retry-Afterstays a rate limit. - The engine is synced module for module from Hermes Web Search Plus 5.0 (
intents.py,urls.pyanddates.pyare new). Thebench,extract-benchand operator-receipt tooling stays in the Hermes plugin.
[4.3.5] - 2026-10-08
- MCP clients see missing-key guidance. The v3 error classification replaced it with
Provider configuration is invalid, so 4.3.4's setup hints never reached Claude Desktop, Cursor or other clients. A missing key now returnsMissing API key for <provider>witherror_v3.details.env_var,how_to_fixandsetup_required. Only WSP's own guidance in its exact shape is passed through; other configuration error text stays redacted. Synced with Hermes Web Search Plus 4.3.5. - Failed tool calls set MCP
isError: true. Before, a failed search or extract returnedisError: falsewith the failure only inside the JSON text. web_extractwithout a key returns the same setup guidance asweb_search.- Locale: built-in config no longer ships
country/languagefor Brave, You.com, Firecrawl, SerpBase and SearXNG. The resolver read those defaults as explicit user settings, sodefaults.localeand query location hints were ignored for these providers (a German query with localeatreached Brave asUS/en). Matches Hermes Web Search Plus; adds the Hermes locale test suite. - Research dedup keeps query parameters that identify a page (
youtube.com/watch?v=…,news.ycombinator.com/item?id=…) and drops only tracking parameters. Different videos or threads were merged into one result. web_extractno longer repeats the full page inobservations[].text. That copy bypassedmax_context_chars(a 105k-character page returned 168 KB); the bounded text stays inresults[].contentand the full page instored_content.
[4.3.4] - 2026-10-07
- Missing-key errors suggest
web-search-plus-mcp setup, the.envfile or the MCP clientenvblock instead of an inline key inconfig.json. Synced from Hermes Web Search Plus 4.3.4. - DonSeTch: closing a session lets the stderr reader finish before the pipe is closed, so the sanitized stderr excerpt is no longer lost and the reader thread no longer raises
ValueError.
[4.3.3] - 2026-10-01
web_extractconverts internationalized hostnames (müller.de,straße.de,例え.jp) to punycode and validates and fetches the converted URL instead of rejecting them. Mixed-script labels, compatibility characters and invalid IDNA are still rejected.idnais a declared dependency. Synced from Hermes Web Search Plus 4.3.3.- Clarified: the same-origin redirect rule covers calls to provider APIs, not the pages you extract.
[4.3.2] - 2026-10-01
- Security hardening, synced from Hermes Web Search Plus 4.3.2: extract rejects URLs that parse differently across URL parsers and checks literal IPs and DNS answers, including IPv6 embedded-IPv4 forms; the HTTP client follows only same-origin redirects and its urllib opener is http(s)-only; responses are limited to 16 MiB on the wire and after decoding; provider-supplied error text is no longer passed on; DonSeTch runs with an allowlisted environment.
include_domains,exclude_domainsandurlsvalues that start with-or are empty are refused with aninvalid_requesterror before any run.- Redirects across host, port or scheme now fail, and provider errors are less detailed.
[4.3.1] - 2026-09-23
web_searchandweb_extractrun the search engine inside the MCP server instead of spawningsearch.pyper call. Same argv, parser, and per-call config reload; error and timeout payloads are unchanged. Live stdio medians: auto routing 1.70 s → 0.99 s, Serper −18 %.WSP_FORCE_SUBPROCESS=1restores one process per call. Note:.envis now read once at server start, so restart the server after adding a key there.- Provider HTTP calls reuse keep-alive connections per host (synced from Hermes Web Search Plus). Proxies and
WSP_HTTP_KEEPALIVE=0keep plainurlopen. search.make_requestno longer resets the pooled opener to plainurlopenon every call.
[4.3.0] - 2026-09-23
- Fix adaptive routing on the v3 engine path, synced from Hermes Web Search Plus. Engine-owned search calls skipped
record_provider_outcome, so provider performance samples stopped and routing fell back to static priority. Every real provider call, including research members and each retry, now records a sample. Cache hits and config errors still record nothing. - Lock
provider_stats.jsonacross processes (POSIX). Concurrent writers lost up to half of the samples. web_searchno longer forces--max-results 5when the client omitscount, sodefaults.max_resultsinconfig.jsonapplies. Acount: nullargument no longer produces--max-results None, which the search script rejected. An explicitcountstill wins.
[4.2.1] - 2026-09-21
- Expose
no_cacheandcache_ttlon the MCPweb_searchtool so clients can bypass or shorten the search cache, matching the CLI flags. - Pin the optional DonSeTch adapter
TESTED_VERSIONto 4.2.9. Status reportstestedfor 4.2.9 andcompatible_unverifiedfor any other parsed version, including 3.x. A different major is not treated as broken. DonSeTch stays separately installed. Attribution: dondai44423/donsetch, AGPL-3.0-only.
[4.2.0] - 2026-09-18
- Align the public MCP version line with Hermes Web Search Plus 4.2.0.
- Optional Jev, default off: search-type overlay (keyword proposes
news, Jev confirms at confidence ≥ 0.95), extract quality, and language fill when WSP inferred none. Enable withsetup --jev --jev-key-file PATH. The key is never written toconfig.json. - Credited but not ported: Windows
fcntlimport fix from Hermes (#129 by @gzwahoo). MCP packaging remains POSIX-oriented; there is no equivalent import.
[4.1.1] - 2026-09-09
- Prefer Exa
highlightsover leading page text when both are present. - Send Parallel Search
max_resultsand domain filters inadvanced_settingsinstead ofsite:query stuffing. - Forward Tavily
time_rangefrom the unified freshness filter;--time-rangewins if both are set; MCP search output reportsmetadata.freshnessfrom the sent value. - Carry Exa publication-date bounds from the request into MCP freshness receipts through the v3 warning bridge.
time_range=houris a one-hour window.
[4.1.0] - 2026-09-05
- Align the public MCP version line with Hermes Web Search Plus 4.1.0.
- Carry DonSeTch 3.6.1 compact MCP evidence and namespaced diagnostics; retain older structured responses; preserve rank/URL binding; force stdio only for the DonSeTch child process.
- Document that the opt-in Hermes native
wspbackend is Hermes-plugin-only and is not ported into this MCP package. MCP clients keep the existingweb_searchandweb_extracttools. - Credit @LugMuad for the Hermes-only native integration direction in hermes-web-search-plus#125, and keep DonSeTch attribution as the separately installed upstream project (dondai44423/donsetch, AGPL-3.0-only).
[4.0.5] - Unpublished candidate, included in 4.1.0
- Sync DonSeTch 3.6.1 compact MCP evidence and namespaced diagnostics; retain older structured responses.
- Preserve rank/URL binding and force stdio only for the DonSeTch child process.
[4.0.4] - 2026-09-04
Fixed
- Preserve queries beginning with
-through structured search requests and subprocess adapters. Treatspans_queryas data even when it resembles a CLI flag. - Reject malformed section shapes in the shared budget-preflight helper.
Changed
- Share daily-budget settings and adapter-signature validation without removing either enforcement boundary.
- Replace prose-only compatibility assertions with export and defensive-copy checks; remove the nonexistent
search_providerfrom the compatibility inventory. - Remove empty section headers and the pass-through contract-error factory.
Added
- Grok Build plugin packaging:
.mcp.json(pinneduvxstdio server),skills/web-search-plus/SKILL.md, and.grok-plugin/plugin.json. Installable withgrok plugin install robbyczgw-cla/web-search-plus-mcp; no provider keys are shipped.
[4.0.3] - 2026-08-25
Changed
- Bump the tested DonSeTch version to 3.2.1. Live stdio Search and Fetch still
work; 2.x binaries now report
incompatible_major.
[4.0.2] - 2026-08-22
Added
- Parallel Search accepts
parallel.mode(turbo,fast,basic,advanced). The default isfast; setadvancedor use research mode for deeper work. - Parallel now joins the default auto-routing pool when a key is configured. Operators can still set
auto_allow.parallel=false.
[4.0.1] - 2026-08-17
Fixed
- Reuse one initialized DonSeTch stdio MCP session for every URL in a single extract request.
- Reap the DonSeTch child on timeout, initialize failure, tool errors, malformed MCP output, and broken pipes.
- Report DonSeTch binary readiness from status instead of treating
DONSETCH_BINas an API key.
Changed
- Bump the tested DonSeTch version to 2.3.1 (live-tested for stdio Search and multi-URL Fetch).
- Capture a bounded, sanitized DonSeTch stderr excerpt for diagnostics. Successful Search/Extract payloads do not include raw stderr.
[4.0.0] - 2026-08-16
Removed
- Remove the optional Hound provider and
HOUND_MCP_URLconfiguration.
Added
- Add DonSeTch 2.1.0 as a separately installed stdio Search/Fetch provider via
DONSETCH_BIN. - Keep DonSeTch explicit-only by default and document its AGPL-3.0-only separate-install boundary.
- Normalize DonSeTch initialization, Search, Fetch, and structured errors into the existing MCP envelopes.
Verification
- Exercise the adapter with DonSeTch 2.1.0 for stdio initialization, Search, Fetch, and structured error handling.
- Keep browser and anti-bot behavior explicitly environment-dependent.
[3.6.0] - 2026-08-06
Added
- Add root-level Agent Plugins 1.0 manifests for portable client discovery through the published
web-search-plus-mcppackage. - Add an exact-version
uvxstdio launcher that keeps PyPI as the runtime source of truth.
Security and compatibility
- Keep provider credentials outside both manifests; clients supply them through the process environment.
- Preserve the stable
web_searchandweb_extractMCP tools and existing SDK-v2 stdio compatibility.
Verification
- Validate both manifests against the canonical Agent Plugins schemas and exercise the exact
mcp.jsoncommand without provider requests. - Run the full package tests, lint, compilation, source/wheel build, and metadata checks.
[3.5.0] - 2026-08-01
Changed
- Require the MCP Python SDK v2 line (
mcp>=2.0.0,<3) and migrate the low-level stdio boundary to the stateless2026-07-28protocol while retaining2025-11-25legacy handshake compatibility. - Validate tool arguments at the SDK boundary and sanitize unknown-tool, invalid-argument, and unexpected-execution failures.
- Port the optional Hound sidecar bridge to the SDK-v2
httpx2, two-stream transport, float-timeout, and snake_case result APIs. - Keep the stable
web_searchandweb_extracttool surface and the package stdio-only.
[3.4.1] - 2026-07-30
Added
- Add explicit-only TinyFish source search with BYOK credentials, a fixed official HTTPS origin, redirect refusal, opaque upstream errors, and fail-closed query, domain, URL, response, and aggregate-size bounds.
- Add native Exa freshness support by converting unified day/week/month/year values into absolute UTC
startPublishedDateandendPublishedDatebounds.
Fixed
- Report explicit Exa
start_dateandend_dateoverrides in freshness metadata instead of generated bounds that were not sent upstream.
Security and documentation
- Keep TinyFish outside automatic routing and fallback by default (
auto_allow=false) and disclose its published Customer Data rights for analysis, training, fine-tuning, evaluation, and model improvement. - Preserve the stable two-tool MCP surface and 9-provider extraction surface while increasing source-search providers from 14 to 15.
Credits
- Exa freshness support originated in Web Search Plus #111 by @kesku.
- TinyFish provider integration originated in Web Search Plus #115.
[3.4.0] - 2026-07-28
Added
- Add Octen via Monid as a bundled, source-only Search provider through the public Provider SDK. The adapter supports native freshness plus include/exclude-domain filters and remains explicit-only by default (
auto_allow=false).
Security and cost controls
- Send credentials only to Monid's fixed HTTPS API origin, reject redirects, cap response bodies at 8 MiB, sanitize upstream failures, and keep Monid lifecycle errors separate from Octen provider HTTP errors.
- Keep Octen's answer, Broad Search, image/video, and full-content modes outside this integration. Search highlights are enabled for source snippets while billable full content is explicitly disabled.
Fixed
- Honor
ProviderSpec.supports_freshnessfor discovered SDK Search providers so a successfully applied canonical freshness filter is no longer reported as unsupported.
Documentation
- Add a repository-specific contribution guide covering the MCP compatibility boundary, portable-engine syncs, Provider SDK intake, security/privacy requirements, CI commands, packaging, and pull-request evidence.
- Add regression coverage that keeps the guide, README link, internal links, and CI commands synchronized.
[3.3.0] - 2026-07-24
Added
- Preserve bounded heading-aware semantic sections in
web_extractspans, including query-free body text and deeper subheadings through the next same-or-shallower heading. - Add provenance-safe cross-provider snippet aggregation plus additive
source_typeand explainablefetch_priorityresult hints. - Harvest Research providers in completion order and optionally preempt unfinished providers after a configurable quality quorum; preempted providers remain explicit as
preempted_after_quorumdiagnostics.
Fixed
- Preserve
snippet_aggregate,source_type, andfetch_priorityacross the canonical v3 engine to stable MCP result projection instead of silently dropping them. - Honor explicit Research-provider lists independently of automatic-routing allowlists while retaining disabled/configuration/cooldown safeguards; expose cooldown omissions in routing and quality receipts.
- Count unique evidence from every completed provider when evaluating Research quorum, even if the first provider alone fills the public result page.
- Honor MCP
quality_report=trueon the canonical v3 path by deriving diagnostics from validated results, routing receipts, provider attempts, source diversity, and cache status without issuing a second provider request.
Changed
- Realign the standalone MCP package version from 1.2.0 to 3.3.0 so it directly names the portable Web Search Plus 3.3.0 engine generation. The stable
web_searchandweb_extracttool names, arguments, and legacy result fields remain compatible.
Attribution
- These independently implemented portable improvements adapt product ideas from Hound/Master-Fetch v11.2.0, the independent MIT-licensed project by Bishesh Bhandari (
dondai1234). The implementation is reworked for WSP/MCP's own provider, provenance, budget, and receipt contracts; Hound code is neither bundled nor claimed as Robby's code.
[1.2.0] - 2026-07-22
Added
- Add Hound as an optional production Search and Extract provider through a separately installed MCP Streamable-HTTP sidecar.
- Expand the public source-only surface to 13 Search providers and 9 Extract providers while preserving the two stable MCP tools.
- Ship a Hound installation, security, keyless-trade-off, and opt-in routing guide plus dedicated 1.2 release notes in the wheel.
Changed
- Sync the portable Hound provider and automatic-extraction guard from Web Search Plus v3.2.0.
- Require
mcp>=1.26,<2and declarehttpx>=0.27,<1explicitly for the loopback MCP client bridge.
Security
- Accept Hound endpoints only on literal IPv4/IPv6 loopback addresses, without credentials, query strings, fragments, redirects, or proxy-environment inheritance.
- Keep Hound explicit-only by default for both Search and Extract; automatic participation requires an operator
auto_allowoverride. - Disable Hound-side response caching in provider calls so Web Search Plus remains the cache, freshness, policy, and receipt authority.
Fixed
- Preserve the originating provider in the stable MCP
providerfield on v3 cache hits, where no current provider attempt exists.
Attribution
- Hound / Master Fetch is an independent MIT-licensed project created and maintained by Bishesh Bhandari (
dondai1234). It is connected as a separate sidecar and is not bundled or forked by this package.
Verification
- Add network-free Hound transport, projection, endpoint-validation, failure, timeout, raw-HTML, cardinality, and automatic-routing regressions.
- Validate the packaged provider through Search and Extract MCP boundary smokes against
hound-mcp 11.1.6.
[1.1.1] - 2026-07-21
Fixed
- The MCP
web_extractprojection now preservesspansandspan_contract_versionon result items; previously the engine computed spans but clients never received them. wsp_sdkimports as a plain package again (itsProviderRequestErrorimport no longer depends on test-onlysys.pathlayout).- Extraction requests served by discovered Provider-SDK extraction providers no longer fail closed inside the cache identity; SDK providers contribute a deterministic identity derived from their spec and the non-secret scalar settings of their config section. Unknown providers still fail closed.
- The
providers.dnon-production gate acts before module execution: modules declaring a literalproduction=Falseare skipped without being imported unlessWSP_SDK_ALLOW_NON_PRODUCTIONis set.
[1.1.0] - 2026-07-20
Added
- Sync the portable Web Search Plus v3.1.1 policy layer: budget preflight, diversity scoring/reranking, self-hosted profiles, shadow-policy observations, semantic extraction spans, extraction cache identity v6, and SQLite state schema v3.
- Add the public
wsp_sdkpackage plus fail-closedproviders.ddiscovery, startup diagnostics, and network-free provider conformance checks. - Expose deterministic semantic spans through the MCP
web_extractschema and CLI projection.
Changed
- Generate and ship the current v3 request/response schemas, including budget-preflight receipts and span options.
- Keep MCP-specific stdio, subprocess, tool names, legacy projections, and auto-fallback behavior authoritative while syncing the portable engine to Web Search Plus v3.1.1.
No-port scope
- Hermes plugin loading, Operator Console, receipt journals, benchmark/release tooling, and Hermes runtime hooks remain intentionally outside the standalone MCP package.
Verification
- 265 tests pass, including 73 portable v3.1 feature tests and provider-SDK discovery/conformance subprocess coverage.
[1.0.1] - 2026-07-20
Fixed
- Restore multi-provider fallback expansion for normal
provider=autoSearch and Extract requests across the MCP → CLI → v3 projection boundary. The CLI's absent--allow-fallbackflag no longer serializes an explicitallow_fallback: falsethat collapses auto plans to one candidate. - Keep explicit provider requests strict by default; they fall back only when
--allow-fallbackis explicitly requested.
Verification
- Add issue #27 regressions proving multi-candidate auto plans and an executed second-provider fallback after a simulated
429for both Search and Extract. - Full suite: 187 tests passing locally and on Python 3.10, 3.11, and 3.12 in CI.
[1.0.0] - 2026-07-14
Breaking
- Align the standalone MCP server with Web Search Plus 3.0's mechanically source-only contract. Native Perplexity and Kilo Perplexity answer endpoints are removed from public provider schemas because they do not expose a verified source-only mode; direct low-level calls fail closed with the typed
wsp.provider.source_only_requirederror before provider dispatch. - Reduce the public search surface from 14 mixed providers to 12 source-result providers. The extraction surface remains 8 providers.
Added
- Port the Web Search Plus v3 request/response contracts, lossless source observations, provider-attempt and routing receipts, typed errors, cache-origin evidence, deterministic compatibility projections, and generated v3 JSON Schemas.
- Port bounded extraction context with a 10-URL call limit, deterministic inline truncation, local full-text storage, and page-on-demand references.
- Port marker-owned v3 cache/state storage, dry-run/backup/rollback migration primitives, provider adapter validation, guarded request gates, and source-independence metadata.
- Add
web-search-plus-mcp config set-auto-allow <provider> on|offfor explicit guarded-provider participation in auto-routing. - Add a 0.x-to-1.0 migration guide covering retired providers, additive response fields, MCP host schema refresh, and rollback.
Changed
- Keep the two stable MCP tools,
web_searchandweb_extract, while routing both through the canonical--contract-v3engine path and projecting v3 responses additively onto the established MCP result shape. - Keep Classic Routing v2 authoritative, promote Brave into the default auto-pool for independent-index diversity, and preserve deterministic source-only fallback behavior.
- Update package, server, User-Agent, README, Glama, lockfile, and build metadata to
1.0.0, aligned with the Web Search Plus v3.0.2 engine family.
Fixed
- Sync the portable Web Search Plus v3.0.2 entrypoint repairs: bounded Research Mode fan-out, immutable timeout/cancellation snapshots, honest provider-attempt evidence, and consistent cache keys across request options.
- Preserve extracted body text, immutable full-text references, global context bounds, cache provenance, and miss-to-hit semantics across the canonical v3 pipeline.
- Keep the MCP legacy projection's aggregate provider identity as
researchwhile preserving canonical multi-provider attempts, observations, and receipts additively. - Advertise the MCP package version in the
initializehandshake instead of leaking the installed MCP SDK version as the server version. - Give Research Mode subprocesses a fixed grace window beyond the requested inner budget and convert outer timeouts into sanitized, retryable
wsp.subprocess.timeoutresponses.
Security
- Preserve private/internal extraction-target blocking, credential-free public manifest data, typed provider failures, and fail-closed rejection of answer-only provider modes.
- Convert malformed subprocess stdout/stderr into controlled typed protocol errors without exposing raw diagnostics, while retaining the additive legacy
errorstring.
MCP-specific scope
- Keep the standalone stdio/subprocess boundary. The Hermes plugin's in-process lazy loader, Operator Console, setup helpers, and v3.0.1 import-precedence hotfix are intentionally not ported because they do not apply to a normal installed MCP package.
Tests
- Add contract, provider-surface, bounded-context, source-only rejection, compatibility-projection, schema, documentation, and Glama drift gates.
- Port the Web Search Plus 3.0 state-migration and SQLite-state suites: dry-run/apply/no-op/rollback, backup integrity, tamper and symlink rejection, WAL initialization, circuit isolation, and atomic concurrent budget reservation.
- Port the portable v3.0.2 entrypoint regressions and add MCP-boundary coverage for Research Mode identity and extract cache-hit body/provenance preservation.
- Add GitHub Actions coverage for Python 3.10, 3.11, and 3.12 plus Ruff, compile, wheel, and source-distribution builds.
Attribution
- Synced from upstream Web Search Plus PRs #104 and #105 by @robbyczgw-cla.
[0.17.0] - 2026-07-10
Security
- Sync the Web Search Plus v2.9.1 cache-ownership fix: cache stats and clear now recognize only complete WSP search-cache envelopes, preserving
provider_stats.json,provider_health.json, host-written usage state, unrelated/corrupt JSON, and invalid UTF-8 files byte-for-byte.
Added
- Add independent
auto_routing.extract_provider_priorityconfiguration forweb_extract(provider="auto"), includingweb-search-plus-mcp config set-extract-priority ...and status/config output. Partial lists append missing extract-capable providers in registry order; search priority remains independent. Synced from upstream #89 by @robbyczgw-cla.
Changed
- Raise Parallel extraction's default full-content budget from 6k to 60k characters per result and from 12k to 120k total, while preserving explicit config overrides. Synced from upstream #86 by @robbyczgw-cla.
- Bump package, server, User-Agent, lockfile, README, and build metadata to
0.17.0, aligned with Web Search Plus v2.9.1 plus the post-release extract-priority feature.
Attribution / no-port notes
- Upstream v2.9.1 release PR #88 by @robbyczgw-cla supplied the cache-safety maintenance and release inventory. Hermes-only release tooling/version surfaces remain intentionally outside the MCP package.
[0.16.0] - 2026-07-03
Synced from Web Search Plus v2.9.0
- Port registry-aligned provider dispatch updates from upstream PR #79 where applicable to MCP.
- Add Serper webpage scraper extraction support and include Serper in MCP extraction provider schema/fallback order (upstream PR #80).
- Add Serper news/search_type and configurable locale defaults/query-aware locale resolution to the MCP search surface (upstream PR #80/#81).
- Bump MCP package/server/User-Agent surfaces to v0.16.0 and align upstream Web Search Plus User-Agent baseline with v2.9.0 (upstream PR #82).
- Refresh README/API docs for Serper extraction capability (upstream PR #84).
Attribution / no-port notes
- Upstream PR #77 golden snapshot recorder is test/eval infrastructure and is credited but not ported wholesale.
- Upstream PR #83 prepare_release.py is repository-specific release automation; MCP keeps its own version surfaces for now.
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.15.0] - 2026-07-02
Security
- Sync Web Search Plus v2.8.1 authority-domain matcher hardening from upstream #68: canonical boosts now apply only to exact domains, true subdomains, or explicit label-prefix rules, blocking look-alike domains such as
nih.gov.evil.examplefrom inheriting trust. - Sync Web Search Plus v2.8.x HTTP provider hardening: corrupted gzip/deflate bodies, non-UTF-8 responses, invalid JSON, read interruptions,
socket.timeout, andRetry-Afteron HTTP 429 are normalized into structured provider errors.
Added
- Add MCP-specific extract preview/store handling for oversized extraction results. Large
content,markdown,text, orraw_contentfields are bounded in MCP responses and full text is stored under the local cache withstored_extractmetadata.
Fixed
- Derive
DEFAULT_USER_AGENTfrom the package__version__so MCP releases cannot drift again; v0.14.0 still advertisedClawdBot-WebSearchPlus-MCP/0.13.0.
Changed
- Bump package/server version to
0.15.0and align README/changelog with the Web Search Plus v2.8.1 engine family where applicable. - Keep upstream #72 provider bench and #75 Hermes standalone-plugin import fix out of MCP by design: bench is CLI/provider-quota-sensitive and #75 does not apply to a normal installed MCP package.
- Leave existing MCP
time_rangesearch plumbing behavior-preserving; upstream #71 freshness unification is not treated as a breaking schema rewrite in this release.
Tests
- Add regression coverage for authority look-alike rejection, HTTP hardening and User-Agent version drift, and oversized extract store/preview behavior.
[0.14.0] - 2026-06-30
Security
- Sync Web Search Plus v2.7.0 private/internal extraction target guard from upstream #61:
web_extractnow blocks loopback, RFC1918, CGNAT/shared-address ranges, IPv6 ULA/link-local/mapped-private addresses, multicast, cloud metadata hosts, and hostnames resolving to private/internal IPs before provider dispatch. Operator-configured provider endpoints (for example local Firecrawl-compatible backends) remain allowed; trusted intranet extraction requires explicitextract.allow_private_urls: true.
Fixed
- Sync upstream #63 behavior: provider configuration errors such as missing API keys no longer mark providers unhealthy or place them into cooldown.
Changed
- Bump package/server version to
0.14.0and align README/changelog with the Web Search Plus v2.7.0 engine family where applicable.
Notes
- Upstream #60 by @IlyaGusev added keyless-provider setup wizard and config rewrite preservation to the Hermes plugin. MCP already has its own onboarding/config surface and Keenable keyless semantics from v0.13.0, so no setup-wizard code was ported; attribution is carried forward for the synced release window.
- Upstream #62 added
setup.py fastpath, a public-Hermes diagnostic. That command is Hermes-plugin-specific and not applicable to the standalone MCP package. - Upstream #59 README hero/Querit URL cleanup and #64 release-prep changes are credited as release-window context; only MCP-relevant docs/version metadata changed here.
Tests
- Add extract target safety coverage for private IPv4/IPv6 ranges, CGNAT/Tailscale-style addresses, cloud metadata, DNS rebinding/mixed DNS answers, explicit private-URL escape hatch, and local provider endpoint preservation.
- Add regression coverage that explicit missing-key search failures do not call provider-health cooldown marking.
[0.13.0] - 2026-06-26
Added
- Sync Keenable provider support from Web Search Plus v2.6.0:
keenablesearch and extraction viaKEENABLE_API_KEY, plus an opt-in keyless public tier that is off by default. Thanks @IlyaGusev for WSP #56. - Document GroktoCrawl / local Firecrawl-compatible backend usage through existing Firecrawl
api_urlandscrape_urloverrides, with regression tests for custom endpoints. (#57)
Changed
- Bump package/server version to
0.13.0and align README, schemas, provider counts, and User-Agent with the Web Search Plus v2.6.1 engine family. - Add Keenable to generated provider metadata, MCP provider enums, auto-routing priority tail, and extraction fallback tail.
Notes
- Upstream Web Search Plus v2.6.0 also included an in-process Hermes-plugin loader fix (#55 by @maksym-mishchenko). That loader path is not applicable to the standalone MCP server, so no code was ported; it is noted here for release-history completeness.
Tests
- Add Keenable key/keyless configuration, search, extraction, public-warning, schema, and Firecrawl-compatible endpoint override tests.
[0.12.0] - 2026-06-16
Fixed
extract_plusnow respectsdisabled_providersfromconfig.json. Previously only search routing honored the disabled-provider list; extraction used a hardcoded provider order, causing disabled providers to still be called during URL extraction. Explicit provider selection still tries the requested provider first, matching search semantics.
Changed
- Bump package/server version to
0.12.0and align metadata/User-Agent with the Web Search Plus v2.5.1 engine family. - Update README version note to track v2.5 engine family.
Tests
- Add tests covering auto-mode extraction skip and explicit-provider fallback behavior when providers are disabled in config.
[0.11.0] - 2026-06-08
Added
- Sync Web Search Plus v2.4 engine improvements: bounded random retry-backoff jitter (
RETRY_JITTER_FRACTION) so concurrent or repeated retries against a recovering provider no longer synchronize into bursts. - Guard provider-health read-modify-write with a process lock (
_HEALTH_LOCK) so concurrent in-process provider calls (parallel research mode) cannot lose cooldown updates. - Research mode now queries its providers concurrently via a thread pool instead of sequentially, so wall-clock cost tracks the slowest provider rather than the sum of all of them. Result ordering stays deterministic (preserved by provider submission order) and the time budget still gates which providers launch and whether extraction runs.
Changed
- Bump package/server version to
0.11.0and align metadata/User-Agent with the Web Search Plus v2.4 engine family.
Notes
- Hermes-plugin-only changes from v2.4.0 (in-process search/extract entry points,
~/.hermes/.envprofile loading viaenv_loader) are intentionally not synced: the MCP package runssearch.pyas a subprocess and ships its own standalone.envloading and onboarding surface.
[0.10.0] - 2026-05-29
Added
- Sync Web Search Plus v2.3 provider registry into the MCP package so provider metadata, schemas, defaults, guarded auto-routing, and capability labels share one source of truth.
- Add provider health/doctor, cache, retry, quality, routing, search, and extraction parity updates from the v2.3 engine family.
Changed
- Generate MCP provider enums and server metadata from the shared registry instead of hand-maintained static lists.
- Align provider ordering, auto-routing behavior, and guarded explicit-only providers with Web Search Plus v2.3.
- Bump package/server version to
0.10.0.
Tests
- Add/refresh regression coverage for registry-derived schemas, SerpBase/guarded auto-allow behavior, Parallel metadata, HTTP content encoding, and compatibility shims.
- Release validation includes compileall, Ruff, 44 pytest tests, wheel build, clean-venv install, MCP stdio handshake/list-tools, doctor, no-key error path, and live search/extract smoke tests.
[0.9.0] - 2026-05-19
Added
- Sync Parallel provider support from Web Search Plus v2.2: explicit
parallelsearch/extract support viaPARALLEL_API_KEY. - Add Parallel to extraction auto fallback order: Tavily → Exa → Linkup → Parallel → Firecrawl → You.com.
Changed
- Keep Parallel guarded from automatic routing by default with
auto_allow=false; directprovider="parallel"calls still work. - Preserve user routing priority order while appending newly introduced default providers during config normalization.
Tests
- Add regression coverage for Parallel search normalization, extraction normalization, explicit-only routing, MCP schemas, and provider metadata.
[0.8.0] - 2026-05-16
Changed
- Sync MCP surface with Web Search Plus v2.1: remove the beta
web_answertool and keep the stable MCP surface toweb_search+web_extract. - Switch extraction auto fallback order to Tavily → Exa → Linkup → Parallel → Firecrawl → You.com based on the v2.1 extraction benchmark.
- Update package metadata, README, and Glama manifest for the v2.1 engine family.
Migration
- Remove
WSP_ENABLE_WEB_ANSWER; it is ignored becauseweb_answeris no longer exposed. Useweb_searchfor source discovery and synthesize in the MCP host.
[0.7.0] - 2026-05-15
Added
- Sync Routing v2 from Web Search Plus v2.0.0: class-aware query routing, multilingual/current detection, answer-mode recommendations, and
routing_policydiagnostics. - Add regression tests for guarded defaults, legacy
auto_allowmigration, multilingual routing, arXiv/docs/security classes, and answer/synthesis hints.
Changed
- Update the default auto-routing pool to You.com, Serper, Exa, Firecrawl, Tavily, and Linkup.
- Keep Brave, SerpBase, Querit, native Perplexity, and Kilo Perplexity explicit-only by default with
auto_allow=false. - Update MCP presets so
starteruses You.com + Serper + Linkup,leanuses You.com + Linkup, andminimaluses You.com.
Migration
- Existing config files are still valid. Missing
auto_allowentries inherit the new guarded defaults while explicit user overrides remain intact. - Explicit provider calls still work for guarded providers;
auto_allow=falseonly blocks automaticprovider="auto"selection.
[0.6.0] - 2026-05-15
Added
- Sync SerpBase provider support from Hermes Web Search Plus v1.10.0, including explicit
serpbaseselection,SERPBASE_API_KEY, and SerpBase result normalization.
Changed
- Add
auto_allowrouting gates so SerpBase and Querit stay explicit-only by default while remaining available for direct provider calls. - List explicit-only SerpBase and Querit last in general provider docs and MCP schemas.
- Align MCP package with the Web Search Plus v1.10.x engine family.
Tests
- Add regression coverage for explicit-only auto-routing gates, direct SerpBase calls, MCP schema ordering, and server auto-allow metadata.
[0.5.1] - 2026-05-14
Fixed
- Split native
perplexityfromkilo-perplexityso direct Perplexity usesPERPLEXITY_API_KEY,https://api.perplexity.ai/chat/completions, andsonar-pro. - Keep Kilo gateway routing under the distinct
kilo-perplexityprovider usingKILOCODE_API_KEY,https://api.kilo.ai/api/gateway/chat/completions, andperplexity/sonar-pro. - Normalize
kilo_perplexitytokilo-perplexitywithout aliasing it to nativeperplexity.
Migration
- Existing Kilo gateway users who previously selected
perplexitywith onlyKILOCODE_API_KEYshould switch explicit provider config tokilo-perplexityor set a nativePERPLEXITY_API_KEY.
Docs
- Add Web Search Plus logo assets used by the README and directory listings.
Tests
- Add regression coverage for provider defaults, env-key lookup, missing-key errors, aliases, auto-routing preference, cache separation, and MCP server metadata.
Contributors
- Robby Czesany / robbyczgw-cla
[0.5.0] - 2026-05-09
Added
- Add persistent routing preference CLI:
config show,set-default,set-routing,set-priority,set-fallback,disable/enable,set-threshold, andreset --yes. - Add
WEB_SEARCH_PLUS_CONFIGand--config-pathsupport for isolated MCP host installs. - Add routing preference fields to
status --jsonwithout exposing provider secrets.
Changed
- Align MCP package with the Web Search Plus v1.9.x engine family.
- Make fixed-provider mode strict when auto-routing is disabled:
provider="auto"uses only the configured default provider. - Validate and quarantine malformed or semantically invalid config files at runtime.
Tests
- Add coverage for config commands, alias normalization, strict fixed-provider routing, and invalid config quarantine.
[0.4.0] - 2026-05-09
Added
- Add optional beta
web_answerMCP tool for source-backed cited briefs. - Gate
web_answerbehindWSP_ENABLE_WEB_ANSWER=1so the default tool surface stays stable and small. - Add MCP-native onboarding CLI:
status,list providers,list presets, andsetup. - Add setup presets:
minimal,lean,starter, andall. - Add tests for beta tool gating, answer command mapping, and onboarding dry-run/status behavior.
Changed
- Bump MCP package to
0.4.0and align docs with the Web Search Plus v1.8.x engine family. - Keep
web_searchas the recommended default for source discovery, current events, prices, weather, sports lineups, and schedules. - Set
web_answerfreshness default tononeto avoid over-triggering recency filters. - Update the console entrypoint so
web-search-plus-mcpruns the server by default but also supports onboarding subcommands. - Prefer Linkup first in extraction provider docs/metadata.
Notes
web_answeris intentionally beta. Promote only after real MCP host dogfooding shows the contract is stable.- Hermes plugin users know this capability as
web_answer_plus; the MCP-native tool name isweb_answer. - Locale/language expansion and Routing v2 remain out of scope for this release.
[0.2.1] - 2026-05-07
Fixed
- Fix Brave Search failures when urllib receives gzip-compressed API responses.
- Add shared compressed-response handling for normal and HTTP error bodies.
- Add regression coverage for gzip/deflate response decoding.
[0.2.0] - 2026-05-03
Added
- Sync MCP server with the Web Search Plus v1.7 Python engine
- Add
web_extractMCP tool with Linkup, Firecrawl, Tavily, Exa, and You.com extraction providers - Add 10-provider search schema: Serper, Brave, Tavily, Exa, Querit, Linkup, Firecrawl, Perplexity, You.com, SearXNG
- Expose
depth,time_range, domain filters,quality_report, opt-inresearchmode, andresearch_time_budget
Changed
- Update README and package metadata for search + extraction MCP usage
[0.1.2] - 2026-03-14
Fixed
- Entry point now correctly wraps async
main()withasyncio.run()via arun()function - Fixes
coroutine 'main' was never awaitederror when running viauvx,pip install, or Docker - Previously only worked when invoked directly as
__main__; now works in all environments
[0.1.1] - 2026-03-13
Added
- Dockerfile for containerized deployment
glama.jsonmetadata for Glama MCP directory listing- Support for all 7 search providers: Serper, Tavily, Exa, Perplexity, You.com, SearXNG, Querit
- Intelligent auto-routing based on query intent
Changed
- Improved README with installation and configuration instructions
[0.1.0] - 2026-03-13
Added
- Initial release
- MCP server with
web_searchtool - Auto-routing between Serper (facts/news), Tavily (research), and Exa (discovery)
- Support for
uvx web-search-plus-mcpinstallation - Environment variable configuration for API keys