Fully local MCP server and CLI for web research
Valid MCP server (1 strong, 3 medium validity signals). 7 known CVEs in dependencies Package registry verified. Imported from the Official MCP Registry.
4 files analyzed · 8 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: SOURCEWEAVE_SEARCH_SEARXNG_BASE_URL
Environment variable: SOURCEWEAVE_SEARCH_CRAWL4AI_BASE_URL
Environment variable: SOURCEWEAVE_SEARCH_CACHE_REDIS_URL
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-mrnaqa-sourceweave-web-search": {
"env": {
"SOURCEWEAVE_SEARCH_CACHE_REDIS_URL": "your-sourceweave-search-cache-redis-url-here",
"SOURCEWEAVE_SEARCH_SEARXNG_BASE_URL": "your-sourceweave-search-searxng-base-url-here",
"SOURCEWEAVE_SEARCH_CRAWL4AI_BASE_URL": "your-sourceweave-search-crawl4ai-base-url-here"
},
"args": [
"sourceweave-web-search"
],
"command": "uvx"
}
}
}From the project's GitHub README.
SourceWeave Web Search is a fully local MCP server and CLI for web research.
It uses SearXNG for discovery, Crawl4AI for cleaned page extraction, and Redis or Valkey as the canonical persisted page cache.
For most users, the setup is simple:
uvxstdio or local HTTPstdio, sse, and streamable-http transportssearch_web, read_pages, and read_urls, plus optional search effort control for quick, normal, or deep discovery3.12+Optional:
Start the supporting services locally:
git clone https://github.com/MRNAQA/sourceweave-web-search.git
cd sourceweave-web-search
cp .env.example .env
docker compose up -d redis crawl4ai searxng
Then start the MCP server from the published package with uvx and point it at those local endpoints:
SOURCEWEAVE_SEARCH_SEARXNG_BASE_URL="http://127.0.0.1:19080/search?format=json&q=<query>" \
SOURCEWEAVE_SEARCH_CRAWL4AI_BASE_URL="http://127.0.0.1:19235" \
SOURCEWEAVE_SEARCH_CACHE_REDIS_URL="redis://127.0.0.1:16379/2" \
uvx --from sourceweave-web-search sourceweave-search-mcp
For a local HTTP MCP endpoint instead of stdio:
SOURCEWEAVE_SEARCH_SEARXNG_BASE_URL="http://127.0.0.1:19080/search?format=json&q=<query>" \
SOURCEWEAVE_SEARCH_CRAWL4AI_BASE_URL="http://127.0.0.1:19235" \
SOURCEWEAVE_SEARCH_CACHE_REDIS_URL="redis://127.0.0.1:16379/2" \
uvx --from sourceweave-web-search sourceweave-search-mcp \
--transport streamable-http \
--host 127.0.0.1 \
--port 8000
You can also point the same uvx command at externally hosted SearXNG, Crawl4AI, and Redis or Valkey endpoints by changing the environment variables.
Published releases can be installed from PyPI:
pip install sourceweave-web-search
Or run directly without a global install:
uvx --from sourceweave-web-search sourceweave-search-mcp
uvx --from sourceweave-web-search sourceweave-search --query "python programming"
For local development or source-based runs:
git clone https://github.com/MRNAQA/sourceweave-web-search.git
cd sourceweave-web-search
uv sync --locked --group dev
uv run sourceweave-search-mcp
The release workflow can publish a container image to:
ghcr.io/mrnaqa/sourceweave-web-search-mcpExample runtime:
docker run --rm -p 8000:8000 \
-e SOURCEWEAVE_SEARCH_SEARXNG_BASE_URL="http://host.docker.internal:19080/search?format=json&q=<query>" \
-e SOURCEWEAVE_SEARCH_CRAWL4AI_BASE_URL="http://host.docker.internal:19235" \
-e SOURCEWEAVE_SEARCH_CACHE_REDIS_URL="redis://host.docker.internal:16379/2" \
ghcr.io/mrnaqa/sourceweave-web-search-mcp:latest
Example docker compose recipe:
services:
redis:
image: valkey/valkey:9-alpine
command: ["redis-server", "--appendonly", "no"]
crawl4ai:
image: unclecode/crawl4ai:0.8.6
searxng:
image: searxng/searxng:2026.4.11-9e08a6771
sourceweave-mcp:
image: ghcr.io/mrnaqa/sourceweave-web-search-mcp:latest
depends_on:
- redis
- crawl4ai
- searxng
environment:
SOURCEWEAVE_SEARCH_SEARXNG_BASE_URL: http://searxng:8080/search?format=json&q=<query>
SOURCEWEAVE_SEARCH_CRAWL4AI_BASE_URL: http://crawl4ai:11235
SOURCEWEAVE_SEARCH_CACHE_REDIS_URL: redis://redis:6379/2
FASTMCP_HOST: 0.0.0.0
FASTMCP_PORT: 8000
ports:
- "8000:8000"
That gives you a local HTTP MCP endpoint at http://127.0.0.1:8000/mcp with the SourceWeave container linked to the supporting services by container name.
The repo's own docker compose up -d --build mcp path also builds and runs this same publishable image locally.
Set these environment variables:
| Variable | Purpose |
|---|---|
SOURCEWEAVE_SEARCH_SEARXNG_BASE_URL | SearXNG URL template. Must contain <query>. |
SOURCEWEAVE_SEARCH_CRAWL4AI_BASE_URL | Crawl4AI base URL. |
SOURCEWEAVE_SEARCH_CACHE_REDIS_URL | Redis or Valkey URL used for caching. |
FASTMCP_HOST | Host for sse or streamable-http transport. |
FASTMCP_PORT | Port for sse or streamable-http transport. |
Example:
SOURCEWEAVE_SEARCH_SEARXNG_BASE_URL="http://127.0.0.1:19080/search?format=json&q=<query>" \
SOURCEWEAVE_SEARCH_CRAWL4AI_BASE_URL="http://127.0.0.1:19235" \
SOURCEWEAVE_SEARCH_CACHE_REDIS_URL="redis://127.0.0.1:16379/2" \
sourceweave-search --query "python programming" --read-first-pages 2
The CLI is useful for smoke testing the runtime outside an MCP client.
Search and immediately read the first results:
sourceweave-search --query "python programming" --read-first-pages 2
Verified live examples from the repo-local stack:
sourceweave-search --read-url https://en.wikipedia.org/wiki/Comparison_of_HTTP_server_software ... returned cleaned page contentsourceweave-search --query 'HTTP overview' --domain developer.mozilla.org --read-first-page ... returned compact search results plus a focused page readConstrain search to a specific host with --domain:
sourceweave-search \
--query "react useEffect cleanup example" \
--domain developer.mozilla.org \
--read-first-page
Read a direct URL without running search_web first:
sourceweave-search \
--read-url "https://packaging.python.org/en/latest/"
Read a document URL directly without extra flags:
sourceweave-search \
--query "guide pdf" \
--url "https://example.com/guide.pdf"
Run over stdio:
sourceweave-search-mcp
Run as a local HTTP endpoint:
sourceweave-search-mcp --transport streamable-http --host 127.0.0.1 --port 8000
MCP clients receive a lean three-tool contract:
search_web(query, domains?, urls?, effort?): discover relevant sources and get compact results with stable page_id handlesread_pages(page_ids, focus?): read stored pages by page_idread_urls(urls, focus?): read one or more direct URLs without searching firstPublic result shapes are intentionally small:
search_web returns page_id, url, title, summary, and key_pointsread_pages and read_urls return page_id, url, title, and contentcontent_type is only included when the content is not HTML, and truncated is only included when trueHuman operators usually only need to know how to run the server and where to point the runtime endpoints. MCP clients handle the exact tool parameters.
Example opencode.json / opencode.jsonc / ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sourceweave": {
"type": "local",
"command": [
"uvx",
"--from",
"sourceweave-web-search",
"sourceweave-search-mcp"
],
"environment": {
"SOURCEWEAVE_SEARCH_SEARXNG_BASE_URL": "http://127.0.0.1:19080/search?format=json&q=<query>",
"SOURCEWEAVE_SEARCH_CRAWL4AI_BASE_URL": "http://127.0.0.1:19235",
"SOURCEWEAVE_SEARCH_CACHE_REDIS_URL": "redis://127.0.0.1:16379/2"
},
"enabled": true,
"timeout": 30000
}
}
}
For a shared HTTP endpoint instead:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sourceweave": {
"type": "remote",
"url": "http://127.0.0.1:18000/mcp",
"enabled": true,
"timeout": 30000
}
}
}
Example .vscode/mcp.json:
{
"servers": {
"sourceweave": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"sourceweave-web-search",
"sourceweave-search-mcp"
],
"env": {
"SOURCEWEAVE_SEARCH_SEARXNG_BASE_URL": "http://127.0.0.1:19080/search?format=json&q=<query>",
"SOURCEWEAVE_SEARCH_CRAWL4AI_BASE_URL": "http://127.0.0.1:19235",
"SOURCEWEAVE_SEARCH_CACHE_REDIS_URL": "redis://127.0.0.1:16379/2"
}
}
}
}
For a shared HTTP endpoint instead:
{
"servers": {
"sourceweave": {
"type": "http",
"url": "http://127.0.0.1:18000/mcp"
}
}
}
This repo also ships a generated standalone OpenWebUI tool file at artifacts/sourceweave_web_search.py.
From a repo checkout, verify it is in sync with the canonical implementation:
uv run sourceweave-build-openwebui --check
Paste that artifact into OpenWebUI when you want the standalone tool-file deployment path. The generated file rewrites the default endpoints to the repo-local compose service names so it matches the container deployment path out of the box.
Default host-side endpoints used by the package:
http://127.0.0.1:19080/search?format=json&q=<query>http://127.0.0.1:19235redis://127.0.0.1:16379/2Default repo-local ports:
1908019235163798000 when run directly with uvx; 18000 at /mcp when using the repo's mcp compose serviceBe the first to review this server!
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption
by mcp-marketplace · Developer Tools
Scaffold, build, and publish TypeScript MCP servers to npm — conversationally
by mcp-marketplace · Finance
Free stock data and market news for any MCP-compatible AI assistant.
by Taylorwilsdon · Productivity
Control Gmail, Calendar, Docs, Sheets, Drive, and more from your AI