websearch-mcp
Meta search via a self-hosted SearXNG instance with speed/balanced/quality modes, domain dedup, and trust scoring.
Click on "Install 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., "@websearch-mcpsearch the web for quantum computing breakthroughs in 2025"
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.
websearch-mcp
A self-hosted MCP server that gives AI agents deep internet research capabilities — no API keys required.
Powered by SearxNG (meta search engine), Playwright (web scraping), and Docker (Python sandbox).
Tools
Tool | Description |
| Meta search via SearxNG with speed/balanced/quality modes, domain dedup, and trust scoring |
| Scrape web pages with Playwright (stealth mode) + Readability extraction |
| Run Python code in an isolated Docker sandbox (no network, resource limits) |
| Get autocomplete suggestions for partial queries |
Related MCP server: sakutto-mcp-server
Prerequisites
Node.js >= 20
Docker (for SearxNG and Python sandbox)
Playwright Chromium (auto-installed on first run)
Quick Start
1. Start SearxNG
docker compose up -d searxngWait for it to be healthy:
curl -sf http://localhost:8080/healthz2. Install dependencies and build
npm install
npx playwright install chromium
npm run build3. Run the server
node dist/index.jsThe server communicates over stdio (MCP protocol). Connect it to any MCP-compatible client.
MCP Client Configuration
Claude Desktop / Claude Code
Add to your MCP settings:
{
"mcpServers": {
"websearch": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/websearch-mcp/dist/index.js"],
"env": {
"SEARXNG_URL": "http://localhost:8080"
}
}
}
}Tool Reference
search_internet
Search the internet using SearxNG meta-search engine.
Parameters:
Parameter | Type | Default | Description |
| string | required | Search query (1-500 chars) |
| enum |
|
|
| int |
| Max results (1-50) |
| enum |
|
|
| string |
| Language code filter (e.g. |
Features:
Deduplication by exact URL
Max 2 results per domain (ignoring www prefix)
Trust scoring via
config/website-weight-config.json
fetch_page
Fetch and extract content from a web page.
Parameters:
Parameter | Type | Default | Description |
| string | required | URL to fetch (http/https only) |
| enum |
|
|
| int |
| Page load timeout in ms (1000-30000) |
| string | - | CSS selector to wait for before extracting |
Features:
Stealth mode (custom user-agent, webdriver bypass)
Auto-managed browser pool with idle timeout
Content truncated to 50,000 characters
execute_python
Execute Python code in an isolated Docker container.
Parameters:
Parameter | Type | Default | Description |
| string | required | Python code to execute (max 100,000 chars) |
| int |
| Execution timeout in ms (1000-300000) |
| int |
| Memory limit in MB (128-4096) |
| bool |
| Save output files as artifacts |
Security:
Network disabled during code execution
All Linux capabilities dropped
Resource limits enforced (RAM + CPU)
Auto-detects and installs missing pip packages in a separate network-enabled stage
get_search_suggestions
Get autocomplete suggestions for a partial query.
Parameters:
Parameter | Type | Default | Description |
| string | required | Partial query (min 2 chars) |
| int |
| Max suggestions (1-10) |
Falls back to simple query expansion (e.g. "query tutorial", "query examples") when SearxNG autocomplete is unavailable.
Configuration
Environment Variables
Variable | Default | Description |
|
| SearxNG instance URL |
|
| Search request timeout |
|
| Max retries for failed requests |
|
| Base retry delay (exponential backoff) |
|
| Page fetch timeout |
|
| Max content length for fetched pages |
|
| Default Python sandbox memory limit |
|
| Default Python sandbox CPU limit |
|
| Default Python sandbox timeout |
Trust Weights
config/website-weight-config.json defines domain trust scores from -1.0 to 1.0. Domains with negative scores are filtered out. Others are reordered by score (highest trust first).
{
"wikipedia.org": 1.0,
"arxiv.org": 0.95,
"github.com": 0.9,
"stackoverflow.com": 0.85,
"medium.com": 0.5,
"reddit.com": 0.3,
"twitter.com": 0.2
}Development
# Build
npm run build
# Run in dev mode (auto-reload)
npm run dev
# Run tests
npm test
# Lint
npm run lint
# Type check
npm run typecheckProject Structure
websearch-mcp/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── lib/
│ │ ├── browser-pool.ts # Playwright browser pool with stealth mode
│ │ ├── config.ts # Configuration loader
│ │ ├── docker-sandbox.ts # Docker-based Python sandbox
│ │ ├── searxng-client.ts # SearxNG API client with retry
│ │ └── trust-filter.ts # Domain trust scoring and filtering
│ └── tools/
│ ├── fetch.ts # fetch_page tool
│ ├── python.ts # execute_python tool
│ ├── search.ts # search_internet tool
│ └── suggestions.ts # get_search_suggestions tool
├── tests/
├── config/
│ └── website-weight-config.json
├── infra/
│ └── searxng/settings.yml # SearxNG configuration
├── docker-compose.yml # SearxNG container
├── package.json
├── tsconfig.json
└── README.mdLicense
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/gawirable/websearch-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server