mcpField
W
websearch

websearch

Local
github.com/SK-DEV-AISearch1Updated 2d ago

About websearch

websearch is an MCP server for research across web, news, reference, and specialist sources. It combines parallel search, page retrieval and browser interaction with deduplication, optional local reranking, and Groq-based synthesis.

Key features

  1. 01Parallel multi-engine search
  2. 02Fetch pages with browser fallback
  3. 03Browser interaction and screenshots
  4. 04Structured page and PDF extraction
  5. 05Deduplication and optional reranking
  6. 06Groq synthesis with citations

Use cases

  1. 01Research a topic across search engines
  2. 02Read and extract content from web pages
  3. 03Inspect pages requiring browser interaction
  4. 04Find papers, vulnerabilities, or code

MCP support

The server exposes search, fetch, browser, extraction, and source-specific capabilities as MCP tools over stdio. MCP clients connect using the `run` script or `websearch-mcp` command.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"sk-dev-ai-websearch": {
"command": "uvx",
"args": [
"skdev-websearch-mcp"
],
"env": {
"GROQ_API_KEYS": "<GROQ_API_KEYS>",
"TAVILY_KEYS": "<TAVILY_KEYS>",
"NV_KEY": "<NV_KEY>",
"SE_KEY": "<SE_KEY>",
"S2_KEY": "<S2_KEY>"
}
}
}
}
Run commanduvx skdev-websearch-mcp
Environment variables to set
GROQ_API_KEYSSecretOptional. Groq keys for synthesis and query rewriting.
TAVILY_KEYSSecretOptional. Tavily search lane.
NV_KEYSecretOptional. NVIDIA embeddings for ranking.
SE_KEYSecretOptional. Stack Exchange key (10k/day instead of 300).
S2_KEYSecretOptional. Semantic Scholar key (1 RPS).

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
pypiskdev-websearch-mcp1.10.0

Tools

11

Saved tool list · updated 3d ago

ParameterTypeRequiredDescription
probe_networkbooleanNoRun an outbound HTTPS check (adds ~1s)

Details

From the project README

websearch MCP Server

mcp-name: io.github.SK-DEV-AI/websearch

skills.sh · npx skills add SK-DEV-AI/skills

Multi-engine web search + fetch MCP server. Parallel fan-out across DuckDuckGo, Bing Web/News RSS, Tavily, Wikipedia, arXiv, Google News RSS, Brave (last resort — rate-limited from some networks), Google AI Mode, and intent-gated vertical lanes (MDN, Stack Exchange, GitHub, HN, Semantic Scholar, OSV vuln, grep.app/Sourcegraph code, GDELT news) — with consensus-merge dedup, a local cross-encoder reranker, and Groq synthesis with grounding checks.

Tools (10)

  • search — Open research questions. depth=1 snippets, depth≥2 full-page fetch + rerank. synthesize returns a Groq answer with [N] citations.
  • fetch — URL to markdown/text. Direct fetch with auto-fallback to the Helium CDP browser for blocked/JS pages. PDF/EPUB/DOCX supported. Paginated (offset). For structured JSON use extract.
  • screenshot — ARIA accessibility snapshot (LLM-readable page text and interactive structure).
  • browser_action — Drive a real browser page (navigate, click, type, press a key, evaluate JS, read HTML/text, ARIA tree, screenshot). Use when a page needs interaction; for plain reading use fetch.
  • wikipedia — Full Wikipedia API client: articles, summaries, categories, links, pageviews, revisions, backlinks, geosearch, recent changes, random pages.
  • arxiv — arXiv paper search with boolean/phrase/wildcard query syntax (single-source; multi-source paper search lives in codesearch papers).
  • extract — Structured JSON from a page via CSS (fast, free), LLM, or regex strategies. Repeat calls cached.
  • pdf_extract — PDF to markdown/json/html. PyMuPDF fast path for text-layer PDFs, Docling+OCR fallback for scanned PDFs.
  • map_site — Survey a site's pages via sitemap XML (primary) + HTML link fallback, before fetching individually.
  • ping — Connectivity check for the internet and key search endpoints. Use before expensive calls when uncertain.

Setup

Requires Python 3.14+.

python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp run.example run   # fill in your API keys (run is gitignored — never commit it)
chmod +x run

Point your MCP client at run (stdio):

{ "websearch": { "command": "/path/to/websearch/run" } }
API keys (run)
KeyUsed forRequired?
GROQ_API_KEYSquery rewrite, synthesis, grounding checksRecommended (search works without, no synthesis)
TAVILY_KEYSTavily engine laneOptional
NV_KEYNVIDIA embedding endpointOptional

Everything else (DDG, Bing RSS, Wikipedia, arXiv, RSS) is keyless. Brave's HTML scrape is currently rate-limited from some networks, so Bing RSS is the primary general-web door and Brave is a last resort.

Install from PyPI

pip install skdev-websearch-mcp          # core install, small
pip install skdev-websearch-mcp[all]     # + browser/OCR/extract extras (multi-GB)

The websearch-mcp console script speaks MCP over stdio:

{ "websearch": { "command": "websearch-mcp" } }

Docker

docker build -t websearch-mcp .
docker run --rm -i websearch-mcp

Keys are passed at run time, never baked in: -e GROQ_API_KEYS=.... Heavy extras: docker build --build-arg EXTRAS="[all]" -t websearch-mcp .

Notes

  • Reranker (optional, local): ranking uses a local gte-reranker-modernbert-base cross-encoder over a Unix socket (RERANKER_MODEL overrides the model). Without it, results return unranked with relevance_score 0.0 — everything still works.
  • Helium CDP (optional): bot-walled pages escalate to a Chrome DevTools browser at 127.0.0.1:9222 when available; without it those pages return a terminal verdict instead of hanging.
  • Caching: fetch results cache for 1h (cache_ttl=0 forces fresh). No database, no state beyond the cache dir.
  • Safety: all user-URL fetches are SSRF-validated (private-IP blocking + redirect-hop revalidation + robots.txt gate).
  • Groq model split: synthesis + grounding + extract-llm use openai/gpt-oss-120b; rewrite/classify/expand/decompose use openai/gpt-oss-20b (the previous llama-3.1-8b-instant was retired by Groq and now 404s). Constants GROQ_SMART_MODEL/GROQ_CHEAP_MODEL in config.py.
  • Keyless lanes (all advisory-only): OSV.dev vuln vertical + NVD CVE enrichment; grep.app MCP code search (Sourcegraph backup); Bing Web RSS + Bing News RSS (Brave's scrape is rate-limited, GDELT 429s from some networks); Wikipedia vertical; Jina Reader pre-CDP tier; Wayback CDX-history recovery in enrich(); Common Crawl domain-survey assist in map_site.
  • Local reranker: a gte-reranker-modernbert-base cross-encoder runs as one shared worker over a Unix socket; either server spawns it on demand and it unloads when idle. Optional — without it results are engine-ranked only.
  • Optional keys (graceful keyless fallback): SE_KEY/STACKEXCHANGE_KEY (10k/day SE), S2_KEY/S2_API_KEY (dedicated S2 1 RPS).
  • Marginalia: best-effort lane only (shared public key pool, 503s under load); independent-index recall, no dedicated key wired ([email protected] for one).

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.