Web Research Assistant
The Web Research Assistant is a comprehensive MCP server offering 13 specialized tools for technical web research, package management, content extraction, and infrastructure monitoring.
Search & Discovery:
Web Search: Federated search across multiple engines via SearXNG for general queries and recent information
Technical Content Search: Find code examples, tutorials, and technical articles with time filtering
Image Search: High-quality royalty-free stock photos, illustrations, and vectors via Pixabay
Package Management: Search and retrieve detailed metadata (license, downloads, versions) across npm, PyPI, crates.io, and Go registries
Content Extraction & Analysis:
Web Crawling: Extract full, cleaned page content from URLs with configurable character limits
Structured Data Extraction: Extract tables, lists, fields (via CSS selectors), or JSON-LD from web pages into clean JSON
API Documentation: Dynamically discover and crawl official API documentation with examples and explanations
Development Tools:
GitHub Analysis: Repository health metrics, stars, forks, issues, commits, and development activity
Error Resolution: Find Stack Overflow and GitHub solutions for stack traces and error messages with automatic language/framework detection
Technology Comparison: Side-by-side comparison of 2-5 technologies with popularity metrics and performance insights
Changelog Access: Release notes and breaking change detection for safe package upgrades
Infrastructure Monitoring:
Service Status Checks: Instant health checks for 25+ popular services (Stripe, AWS, GitHub, OpenAI, etc.)
Key Features: All tools require a reasoning parameter for usage analytics, include automatic response size limiting (8KB default), comprehensive error handling, and dynamic discovery for maximum flexibility.
Requires a local Docker instance to run SearXNG for federated search capabilities.
Provides repository health metrics including stars, forks, issues, recent commits, and project details for evaluating open source projects.
Allows searching for npm packages by keywords and retrieving detailed package metadata including versions, downloads, licenses, and dependencies.
Enables checking OpenAI service status including operational health, current incidents, and component status for production debugging.
Enables searching for high-quality royalty-free stock images, photos, illustrations, and vectors through the Pixabay API.
Enables searching for Python packages and retrieving package metadata including versions, downloads, licenses, and dependencies from PyPI.
Provides federated web search across multiple search engines via a local SearXNG instance, enabling comprehensive web research and content discovery.
Enables finding solutions for error messages and stack traces by searching Stack Overflow with automatic language/framework detection and filtering.
Enables checking Stripe service status including operational health, current incidents, and component status for production debugging.
Enables checking Vercel service status including operational health, current incidents, and component status for production debugging.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Web Research Assistant compare React vs Vue for a new dashboard project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Web Research Assistant MCP Server
Comprehensive Model Context Protocol (MCP) server that provides web research and discovery capabilities. Includes 16 tools, 4 resources, and 5 prompts for searching, crawling, and analyzing web content, powered by your local Docker SearXNG instance, Exa AI neural search, Scrapling, and Pixabay API:
web_search— federated search across multiple engines via SearXNGbatch_web_search— run up to 20 searches in one call instead of loopingweb_searchsearch_examples— find code examples, tutorials, and articles (defaults to recent content)search_images— find high-quality stock photos, illustrations, and vectors via Pixabaycrawl_url— full page content extraction with advanced crawlingbatch_crawl_urls— read up to 20 pages in parallel in one call instead of loopingcrawl_urlpackage_info— detailed package metadata from npm, PyPI, crates.io, Gopackage_search— discover packages by keywords and functionalitygithub_repo— repository health metrics and development activitytranslate_error— find solutions for error messages and stack traces from Stack Overflow (auto-detects CORS, fetch, and web errors)api_docs— auto-discover and crawl official API documentation with examples (works for any API - no hardcoded URLs)extract_data— extract structured data (tables, lists, fields, JSON-LD) from web pages with automatic detectioncompare_tech— compare technologies side-by-side with NPM downloads, GitHub stars, and aspect analysis (React vs Vue, PostgreSQL vs MongoDB, etc.)get_changelog— NEW! Get release notes and changelogs with breaking change detection (upgrade safely from version X to Y)check_service_status— NEW! Instant health checks for 25+ services (Stripe, AWS, GitHub, OpenAI, etc.) - "Is it down or just me?"
The server's MCP instructions tell agents to batch: several pages or searches go into one
batch_crawl_urls or batch_web_search call, never one crawl_url or web_search call per item.
All tools feature comprehensive error handling, response size limits, usage tracking, and clear documentation for optimal AI agent integration.
MCP Resources (Direct Data Lookups)
package://{registry}/{name}- Package info from npm, PyPI, crates.io, or Go modulesgithub://{owner}/{repo}- Repository information and health metricsstatus://{service}- Service health status for 120+ serviceschangelog://{registry}/{package}- Package release notes and changelogs
MCP Prompts (Reusable Workflows)
research_package- Comprehensive package evaluationdebug_error- Structured error debugging with solutionscompare_technologies- Side-by-side technology comparisonevaluate_repository- GitHub repository health assessmentcheck_service_health- Multi-service status monitoring
Quick Start
Option 1: Full Docker Setup (Recommended)
Everything runs in Docker - no Python installation needed:
./docker-start.shThis starts both SearXNG and the MCP server in containers. See DOCKER_SETUP.md for details.
Option 2: Python + Docker SearXNG
Set up SearXNG (5 minutes):
# Using Docker (recommended) docker run -d -p 2288:8080 searxng/searxng:latestThen configure search engines - see SEARXNG_SETUP.md for optimized settings.
Install the MCP server:
uvx web-research-assistant # or: pip install web-research-assistantConfigure Claude Desktop - add to
claude_desktop_config.json:{ "mcpServers": { "web-research-assistant": { "command": "uvx", "args": ["web-research-assistant"] } } }Restart Claude Desktop and start researching!
⚠️ For best results: Configure SearXNG with GitHub, Stack Overflow, and other code-focused search engines. See SEARXNG_SETUP.md for the recommended configuration.
Related MCP server: SearXNG MCP Server
Prerequisites
Required
Python 3.10+
A running SearXNG instance on
http://localhost:2288📖 See SEARXNG_SETUP.md for complete Docker setup guide
⚠️ IMPORTANT: For best results, enable these search engines in SearXNG:
GitHub, Stack Overflow, GitLab (for code search - critical!)
DuckDuckGo, Brave (for web search)
MDN, Wikipedia (for documentation)
Reddit, HackerNews (for tutorials and discussions)
See SEARXNG_SETUP.md for the full optimized configuration
Optional
Exa API key for neural search - Get API key (recommended for better search results)
Pixabay API key for image search - Get free key
Playwright browsers for advanced crawling (installed with
scrapling install)
Developer Setup (if running from source)
uv tool install uv # if you do not already have uv
uv sync --all-extras --all-groups # creates the virtual environment
uv run scrapling install # installs Chromium for ScraplingYou can also use
pip install -e .if you prefer pip over uv (deps come frompyproject.toml).
Installation
Option 1: Using uvx (Recommended - No installation needed!)
uvx web-research-assistantThis runs the server directly from PyPI without installing it globally.
Option 2: Install with pip
pip install web-research-assistant
web-research-assistantOption 3: Install with uv
uv tool install web-research-assistant
web-research-assistantBy default the server communicates over stdio, which makes it easy to wire into Claude Desktop or any other MCP host.
MCP Client Configuration
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
Option 1: Using uvx (Recommended - No installation needed!)
{
"mcpServers": {
"web-research-assistant": {
"command": "uvx",
"args": ["web-research-assistant"]
}
}
}Option 2: Using installed package
{
"mcpServers": {
"web-research-assistant": {
"command": "web-research-assistant"
}
}
}OpenCode
Add to ~/.config/opencode/opencode.json:
Using uvx (Recommended)
{
"mcp": {
"web-research-assistant": {
"type": "local",
"command": ["uvx", "web-research-assistant"],
"enabled": true
}
}
}Using installed package
{
"mcp": {
"web-research-assistant": {
"type": "local",
"command": ["web-research-assistant"],
"enabled": true
}
}
}Development (Running from source)
For Claude Desktop:
{
"mcpServers": {
"web-research-assistant": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/web-research-assistant",
"run",
"web-research-assistant"
]
}
}
}For OpenCode:
{
"mcp": {
"web-research-assistant": {
"type": "local",
"command": [
"uv",
"--directory",
"/ABSOLUTE/PATH/TO/web-research-assistant",
"run",
"web-research-assistant"
],
"enabled": true
}
}
}Restart your MCP client afterwards. The MCP tools will be available immediately.
Tool behavior
Tool | When to use | Arguments |
| Use first to gather recent information and URLs from SearXNG. Returns 1–10 ranked snippets with clickable URLs. |
|
| Use instead of calling |
|
| Find code examples, tutorials, and technical articles. Optimized for technical content with optional time filtering. Perfect for learning APIs or finding usage patterns. |
|
| Find high-quality royalty-free stock images from Pixabay. Returns photos, illustrations, or vectors. Requires |
|
| Call immediately after search when you need the actual article body for quoting, summarizing, or extracting data. Continue long pages with the returned |
|
| Use instead of calling |
|
| Look up specific npm, PyPI, crates.io, or Go package metadata including version, downloads, license, and dependencies. Use when you know the package name. |
|
| Search for packages by keywords or functionality (e.g., "web framework", "json parser"). Use when you need to find packages that solve a specific problem. |
|
| Get GitHub repository health metrics including stars, forks, issues, recent commits, and project details. Use when evaluating open source projects. |
|
| Find Stack Overflow solutions for error messages and stack traces. Auto-detects language/framework, extracts key terms, filters irrelevant results, and prioritizes Stack Overflow solutions. |
|
| Auto-discover and crawl official API documentation, then extract overviews, parameters, examples, and related links. |
|
| Extract tables, lists, fields, JSON-LD, or auto-detected structured data from HTML pages. |
|
| Compare 2-5 technologies side-by-side using package, repository, and web evidence. |
|
| Get release notes, identify breaking changes, and provide upgrade guidance. Automatically tries npm and PyPI when the registry is unknown. |
|
| Check whether a supported external service has an active incident. |
|
Tool responses are capped at 30,000 characters by default. crawl_url returns an exact
start_char continuation value when a page is longer than the requested chunk.
The batch tools share one 50,000-character budget across their items: short pages come back
whole and long ones are cut evenly. A cut batch_crawl_urls result ends with the exact
arguments that continue every cut page in one more call. Items still running after 45 seconds
are reported as timed out, so the batch returns before typical 60-second client timeouts.
Resources
MCP Resources provide direct data access via URI templates - perfect for quick lookups without tool calls.
Resource URI | Description | Example |
| Package metadata (version, downloads, license, dependencies) |
|
| Repository info (stars, forks, issues, activity) |
|
| Service health status |
|
| Release notes and changelogs |
|
Prompts
MCP Prompts are reusable message templates that guide AI assistants through common workflows.
Prompt | Arguments | Use Case |
|
| Evaluate a package before adding it as a dependency |
|
| Debug an error with context and solutions |
|
| Compare frameworks, databases, or languages |
|
| Assess a GitHub project's health and activity |
|
| Monitor multiple services at once |
Configuration
Environment variables let you adapt the server without touching code:
Variable | Default | Description |
|
| Endpoint queried by |
|
| Category used when none is provided. |
|
| Default number of search hits. |
|
| Hard cap on hits per request. |
|
| Default character budget for each |
|
| Overall response limit applied to every tool reply. |
|
| Output budget shared by all items of one |
|
| Items of a batch call still running after this many seconds are reported as timed out. |
|
| User-Agent header for outward HTTP calls. |
| (empty) | API key for Pixabay image search. Get free key at pixabay.com/api/docs. |
| (empty) | API key for Exa AI neural search. Get key at dashboard.exa.ai. |
|
| Search provider: |
|
| Location for usage analytics data. |
Development
The codebase is intentionally modular and organized:
web-research-assistant/
├── src/searxng_mcp/ # Source code
│ ├── config.py # Configuration and environment
│ ├── search.py # SearXNG integration
│ ├── exa.py # Exa AI neural search client
│ ├── crawler.py # Scrapling wrapper
│ ├── images.py # Pixabay client
│ ├── registry.py # Package registries (npm, PyPI, crates, Go)
│ ├── github.py # GitHub API client
│ ├── errors.py # Error parser (language/framework detection)
│ ├── api_docs.py # API docs discovery (NO hardcoded URLs)
│ ├── tracking.py # Usage analytics
│ ├── batch.py # Batch tool helpers (parallel runs, shared output budget)
│ ├── instructions.py # MCP instructions sent to every agent
│ └── server.py # MCP server + 16 tools
├── docs/ # Documentation (27 files)
└── [config files]Each module is well under 400 lines, making the codebase easy to understand and extend.
Usage Analytics
All tools automatically track usage metrics including:
Tool invocation counts and success rates
Response times and performance trends
Common use case patterns (via the
reasoningparameter)Error frequencies and types
Analytics data is stored in ~/.config/web-research-assistant/usage.json. The optional
reasoning parameter improves use-case grouping, but omitting analytics context never blocks
a tool call.
Documentation
Comprehensive documentation is available in the docs/ directory:
Project Status - Current status, metrics, roadmap
API Docs Implementation - NEW tool documentation
Error Translator Design - Error translator details
Tool Ideas Ranked - Prioritization and progress
SearXNG Configuration - Recommended setup
Quick Start Examples - Usage examples
See the docs README for a complete index.
Available Tools
14 toolsapi_docsA
Search and fetch official API documentation with examples and explanations.
Documentation-first approach: fetches human-written docs with context, examples,
and best practices. Much more useful than OpenAPI specs alone.
Discovery strategy:
1. Try common URL patterns (docs.{api}.com, {api}.com/docs, etc.)
2. If patterns fail, search for "{api} API official documentation"
3. Crawl discovered docs and extract relevant content
No hardcoded URLs - works for ANY API by discovering docs dynamically.
Examples:
- api_docs("stripe", "create customer", reasoning="Setting up payments")
- api_docs("github", "create repository", reasoning="Automating repo creation")
- api_docs("spartan", "button component", reasoning="Learning UI library")
Inputs: api_name (required), reasoning (required), topic (required), max_results. Returns: result
check_service_statusC
Check if an API service or platform is experiencing issues.
Inputs: service (required), reasoning (required). Returns: result
compare_techA
Compare multiple technologies, frameworks, or libraries side-by-side.
Automatically gathers information about each technology and presents
a structured comparison to help make informed decisions.
Categories:
- "framework": Web frameworks (React, Vue, Angular, etc.)
- "library": JavaScript/Python/etc. libraries
- "database": Databases (PostgreSQL, MongoDB, etc.)
- "language": Programming languages (Python, Go, Rust, etc.)
- "tool": Build tools, CLIs, etc. (Webpack, Vite, etc.)
- "auto": Auto-detect category
Examples:
- compare_tech(["React", "Vue", "Svelte"], reasoning="Choose framework for new project")
- compare_tech(["PostgreSQL", "MongoDB"], category="database", reasoning="Database for user data")
- compare_tech(["FastAPI", "Flask"], aspects=["performance", "learning_curve"], reasoning="Python web framework")
Inputs: technologies (required), reasoning (required), category, aspects, +1 more. Returns: result
crawl_urlC
Fetch a URL and return the page text as markdown for quoting or analysis.
Inputs: url (required), reasoning (required), max_chars, country. Returns: result
extract_dataA
Extract structured data from web pages.
Extracts tables, lists, or specific fields from HTML pages and returns
structured data. Much more efficient than parsing full page text.
Extract Types:
- "table": Extract HTML tables as list of dicts
- "list": Extract lists (ul/ol/dl) as structured list
- "fields": Extract specific elements using CSS selectors
- "json-ld": Extract JSON-LD structured data
- "auto": Automatically detect and extract structured content
Examples:
- extract_data("https://pypi.org/project/fastapi/", reasoning="Get package info")
- extract_data("https://github.com/user/repo/releases", reasoning="Get releases", extract_type="list")
- extract_data(
"https://example.com/product",
reasoning="Extract product details",
extract_type="fields",
selectors={"price": ".price", "title": "h1.product-name"}
)
Inputs: url (required), reasoning (required), extract_type, selectors, +1 more. Returns: result
get_changelogC
Get changelog and release notes for a package.
Inputs: package (required), reasoning (required), registry, max_releases. Returns: result
github_repoA
Fetch GitHub repository information and health metrics.
Returns stars, forks, issues, recent activity, language, license, and description.
Use this to evaluate open source projects before using them.
Examples:
- github_repo("microsoft/vscode", reasoning="Evaluate editor project")
- github_repo("https://github.com/facebook/react", reasoning="Research UI framework")
Inputs: repo (required), reasoning (required), include_commits. Returns: result
package_infoA
Look up package information from npm, PyPI, crates.io, or Go modules.
Returns version, downloads, license, dependencies, security status, and repository links.
Use this to quickly evaluate libraries before adding them to your project.
Examples:
- package_info("express", reasoning="Need web framework", registry="npm")
- package_info("requests", reasoning="HTTP client for API", registry="pypi")
- package_info("serde", reasoning="JSON serialization", registry="crates")
Inputs: name (required), reasoning (required), registry. Returns: result
package_searchB
Search for packages by keywords or description across registries.
Use this to find packages that solve a specific problem or provide certain functionality.
Perfect for discovering libraries when you know what you need but not the package name.
Examples:
- package_search("web framework", reasoning="Need backend framework", registry="npm")
- package_search("json parsing", reasoning="Data processing", registry="pypi")
Inputs: query (required), reasoning (required), registry, max_results. Returns: result
search_examplesA
Search for code examples, tutorials, and technical articles.
Optimized for finding practical examples and learning resources. Can optionally filter by
time range for the most recent content. Perfect for learning new APIs, finding usage patterns,
or discovering how others solve specific technical problems.
Content Types:
- 'code': GitHub repos, code snippets, gists, Stack Overflow code examples
- 'articles': Blog posts, tutorials, documentation, technical articles
- 'both': Mix of code and written content (default)
Time Ranges:
- 'all': Search all available content (default, recommended for best results)
- 'year', 'month', 'week', 'day': Filter to recent content only
Examples:
- search_examples("FastAPI dependency injection examples", content_type="code")
- search_examples("React hooks tutorial", content_type="articles", time_range="year")
- search_examples("Rust lifetime examples", content_type="both")
Inputs: query (required), reasoning (required), content_type, time_range, +1 more. Returns: result
search_imagesA
Search for high-quality stock images using Pixabay.
Returns royalty-free images that are safe to use. Perfect for finding photos,
illustrations, and vector graphics for projects, presentations, or design work.
Image Types:
- 'photo': Real photographs
- 'illustration': Digital illustrations and artwork
- 'vector': Vector graphics (SVG format available)
- 'all': All types (default)
Examples:
- search_images("mountain landscape", image_type="photo")
- search_images("business icons", image_type="vector")
- search_images("technology background", orientation="horizontal")
Inputs: query (required), reasoning (required), image_type, orientation, +1 more. Returns: result
stealth_scrapeA
Scrape a URL using a stealth browser that bypasses anti-bot protections.
Uses scrapling's StealthyFetcher with Patchright (hardened Playwright) to evade
Cloudflare, DataDome, and similar anti-bot systems. Much slower than crawl_url
but works on protected sites.
Requires browser binaries: run 'scrapling install' once before first use.
When to use:
- crawl_url returns a Cloudflare challenge page or empty content
- The target site blocks automated requests
- JavaScript rendering is required for the content to appear
- You need to wait for a specific element to load
Examples:
- stealth_scrape("https://protected-site.com/pricing")
- stealth_scrape("https://spa-app.com/data", wait_selector=".results-table")
Inputs: url (required), reasoning (required), max_chars, wait_selector, +3 more. Returns: result
translate_errorA
Find solutions for error messages and stack traces from Stack Overflow and GitHub.
Takes an error message or stack trace and finds relevant solutions with code examples.
Automatically detects language and framework, extracts key error information, and
searches for the best solutions ranked by votes and relevance.
Perfect for:
- Debugging production errors
- Understanding cryptic error messages
- Finding working code fixes
- Learning from similar issues
Examples:
- translate_error("TypeError: Cannot read property 'map' of undefined", reasoning="Debugging React app crash")
- translate_error("CORS policy: No 'Access-Control-Allow-Origin' header", reasoning="Fixing API integration", framework="FastAPI")
- translate_error("error[E0382]: borrow of moved value", reasoning="Learning Rust ownership", language="rust")
Inputs: error_message (required), reasoning (required), language, framework, +1 more. Returns: result
web_searchC
Use this first to gather fresh web search results via the local SearXNG instance.
Inputs: query (required), reasoning (required), category, max_results. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Each tool targets a distinct research task (e.g., web_search vs. api_docs vs. compare_tech), with clear descriptions that prevent overlap. Even similar tools like crawl_url and stealth_scrape are differentiated by use cases.
Names mostly follow a verb_noun or noun_noun pattern with underscores, but there are minor inconsistencies (e.g., 'github_repo' vs. 'check_service_status'). Overall readable and predictable.
14 tools are well-scoped for a web research assistant, covering searching, fetching, extracting, and analyzing without being overwhelming or too few.
Covers core research workflows (search, fetch, extract, compare, check status, find packages/images/errors). Minor gaps like direct social media scraping are acceptable for the stated purpose.
Maintenance
Related MCP Connectors
8-tool AI web intelligence suite: search, scrape, screenshot, SEO, docs, crypto, code.
Read the web (page text, DNS, WHOIS, TLS, uptime) + research (Wikipedia, arXiv, GitHub, packages).
Read the web (page text, DNS, WHOIS, TLS, uptime) + research (Wikipedia, arXiv, GitHub, packages).
Web search, scraping, crawling, research, a browser agent, and company and people data.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides 14 enhanced intelligent search tools for both international platforms (GitHub, StackOverflow, NPM, etc.) and Chinese platforms (CSDN, Juejin, WeChat docs, etc.). Each tool includes smart URL generation, search tips, and related suggestions for comprehensive technical research.1423 npm14MIT
- AlicenseAqualityDmaintenanceProvides privacy-focused web search capabilities through SearXNG metasearch engine, enabling web, image, video, and news searches without tracking. Includes comprehensive research tools that aggregate and analyze results from multiple search engines.34MIT
- AlicenseAqualityFmaintenanceTools for AI assistant's deep research: * Google search + webpage reading (incl. JS-rendered pages) * Document & decks analysis * YouTube transcript extraction * Patents + academic paper search * Company and competitors research * Prompts for comprehensive-research, fact-check, summarize-url, news-briefing, patent-portfolio-analysis, competitive-analysis, literature-review, technical-deep-dive8157 npm36MIT
- FlicenseNot gradedqualityDmaintenanceProvides free web search, content fetching, image search, and deep research via SearXNG, no API keys required.-