SourceWeave Web Search

io.github.MRNAQAPublished by GitHub account MRNAQAv0.5.0Updated Oct 25, 2026

Fully local MCP server and CLI for web research

The publisher's own server: Source

Overview

AI-generated overview

Local MCP server and CLI for web research that searches the web, reads stored pages by page_id, and reads direct URLs.

What you can do
Search the web with optional domain and URL filters, returning compact results with stable page_id handles for later reference (search_web). Read previously stored pages by their page_id, optionally with a focus (read_pages). Read direct URLs without searching first, optionally with a focus (read_urls). Convert PDFs and other supported documents to text through MarkItDown. Run the same search-first workflow from a command-line tool without the MCP wrapper.
When to use it
Useful when an assistant needs to research topics on the open web and then read the sources it found, keeping page references stable across a session. Suited to local, self-hosted setups where search, crawling and caching run on the user's own machine.
Requirements
Python 3.12 or newer, launched with uvx from the sourceweave-web-search package. Docker with Compose support for the default managed local runtime, which starts SearXNG, Crawl4AI and Redis or Valkey automatically. Alternatively, set SOURCEWEAVE_SEARCH_SEARXNG_BASE_URL (must contain ), SOURCEWEAVE_SEARCH_CRAWL4AI_BASE_URL and SOURCEWEAVE_SEARCH_CACHE_REDIS_URL to point at services you run or host yourself. Network access is needed for web search and page fetching.
Before you install
Without explicit endpoints the server starts and supervises Docker containers on the local machine and removes them when the last managed process exits, though named volumes are kept. It fetches arbitrary URLs and sends queries to the configured SearXNG and Crawl4AI services, so point those endpoints only at services you trust. The Redis URL may carry credentials; keep it out of shared configuration.

Installation

In SourceWeft

  1. Open SourceWeave Web Search in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

SourceWeave Web Search

[Python 3.12+] [MIT License] [MCP] [Docker managed runtime]

Search-first MCP server and CLI for web research.

[!NOTE] sourceweave-search-mcp is the default local entrypoint. When explicit SOURCEWEAVE_SEARCH_* endpoint variables are absent, it discovers or starts the local Docker-backed stack automatically. If you already run the services yourself, set explicit endpoints and it will use them instead.

Overview • Getting started • Managed local runtime • MCP client setup • CLI • Container deployments • OpenWebUI • Runtime configuration • Development

Overview

SourceWeave Web Search gives MCP clients a compact three-tool contract for web research:

  • search_web(query, domains?, urls?, effort?) discovers sources and returns compact results with stable page_id handles.
  • read_pages(page_ids, focus?) reads stored pages by page_id.
  • read_urls(urls, focus?) reads direct URLs without searching first.

It combines:

ComponentRole
SearXNGSearch discovery
Crawl4AIClean HTML extraction
Redis or ValkeyPersisted page cache and page_id store
MarkItDownDocument conversion for PDFs and other supported files

Getting started

Requirements

  • Python 3.12+
  • Docker with Compose support for the default managed local runtime
  • Explicit SOURCEWEAVE_SEARCH_* endpoints only if you want hosted or self-managed services

Managed local runtime

Run the server from the published package:

bash
uvx --from sourceweave-web-search sourceweave-search-mcp

Or start the MCP server over HTTP:

bash
uvx --from sourceweave-web-search sourceweave-search-mcp \  --transport streamable-http \  --host 127.0.0.1 \  --port 8000

When no endpoint env vars are set, sourceweave-search-mcp:

ModeWhat happens
Managed stack foundJoin the existing SourceWeave-managed stack for the current runtime state directory
Healthy external stack foundReuse the canonical local ports 19080, 19235, and 16379 without ownership
No reusable stackStart and supervise a Docker-backed stack on canonical or free local ports

Managed state lives under ~/.sourceweave-local/managed-runtime. Multiple MCP processes on the same machine share one managed stack per state directory.

[!IMPORTANT] Managed runtime removes containers only when the last active SourceWeave-managed process exits. Named volumes are preserved, so cache data survives restarts. If the original owning process dies, a later process can recover the same stack from Docker project identity and persisted runtime state.

Explicit endpoint mode

If you already run SearXNG, Crawl4AI, and Redis or Valkey yourself, or want to point at hosted services, set explicit endpoints and the MCP entrypoint will bypass managed Docker startup:

bash
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

Direct CLI

sourceweave-search runs the tool directly. Use it when the supporting services are already available or when you provide explicit endpoints. It does not start Docker.

bash
sourceweave-search --query "python programming" --read-first-pages 2sourceweave-search --read-url "https://packaging.python.org/en/latest/"

[!TIP] The direct CLI also accepts --searxng-base-url, --crawl4ai-base-url, and --cache-redis-url overrides.

MCP client setup

OpenCode

Example opencode.json / opencode.jsonc / ~/.config/opencode/opencode.json:

jsonc
{  "$schema": "https://opencode.ai/config.json",  "mcp": {    "sourceweave": {      "type": "local",      "command": [        "uvx",        "--from",        "sourceweave-web-search",        "sourceweave-search-mcp"      ],      "enabled": true,      "timeout": 300000    }  }}

For a shared HTTP endpoint instead:

json
{  "$schema": "https://opencode.ai/config.json",  "mcp": {    "sourceweave": {      "type": "remote",      "url": "http://127.0.0.1:18000/mcp",      "enabled": true,      "timeout": 300000    }  }}

VS Code Copilot

Example .vscode/mcp.json:

json
{  "servers": {    "sourceweave": {      "type": "stdio",      "command": "uvx",      "args": [        "--from",        "sourceweave-web-search",        "sourceweave-search-mcp"      ]    }  }}

For a shared HTTP endpoint instead:

json
{  "servers": {    "sourceweave": {      "type": "http",      "url": "http://127.0.0.1:18000/mcp"    }  }}

Claude Code

Example .mcp.json:

json
{  "mcpServers": {    "sourceweave": {      "type": "stdio",      "command": "uvx",      "args": [        "--from",        "sourceweave-web-search",        "sourceweave-search-mcp"      ]    }  }}

For a project-scoped shared config, place the same block in .mcp.json at the repo root.

CLI

The direct CLI is useful once the supporting services are already reachable. It gives you the same search-first workflow without the MCP wrapper.

bash
sourceweave-search --query "react useEffect cleanup example" --read-first-pagesourceweave-search --query "HTTP overview" --domain developer.mozilla.org --read-first-pagesourceweave-search --read-url "https://packaging.python.org/en/latest/"

Container deployments

The managed local runtime is for host-side uvx or uv run launches. Containerized deployments still use explicit endpoint wiring.

  • Image: ghcr.io/mrnaqa/sourceweave-web-search-mcp
  • Repo-local compose entrypoint: docker compose up -d --build mcp

Example container run:

bash
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

OpenWebUI

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:

bash
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.

Runtime configuration

Optional environment variables:

VariablePurpose
SOURCEWEAVE_SEARCH_SEARXNG_BASE_URLSearXNG URL template. Must contain <query>.
SOURCEWEAVE_SEARCH_CRAWL4AI_BASE_URLCrawl4AI base URL.
SOURCEWEAVE_SEARCH_CACHE_REDIS_URLRedis or Valkey URL used for caching.
FASTMCP_HOSTHost for sse or streamable-http transport.
FASTMCP_PORTPort for sse or streamable-http transport.

If the endpoint variables are unset, sourceweave-search-mcp defaults to managed local runtime.

  • Canonical host endpoints remain the preferred defaults and the external-reuse probe targets.
  • A SourceWeave-managed stack may use different free host ports when the canonical defaults are already occupied.
  • Multiple MCP processes on the same machine share one managed stack per local runtime state directory.

Default endpoint values:

  • SearXNG: http://127.0.0.1:19080/search?format=json&q=<query>
  • Crawl4AI: http://127.0.0.1:19235
  • Redis: redis://127.0.0.1:16379/2

Default preferred host ports for managed startup:

  • SearXNG: 19080
  • Crawl4AI: 19235
  • Redis: 16379
  • MCP: 8000 when run directly with uvx; 18000 at /mcp when using the repo's mcp compose service

Development

bash
git clone https://github.com/MRNAQA/sourceweave-web-search.gitcd sourceweave-web-searchuv sync --locked --group devuv run sourceweave-search-mcp

Useful checks:

bash
uv run sourceweave-build-openwebui --checkuv run sourceweave-search-mcp --helpuv run pytest tests/test_config.py tests/test_packaging.py tests/test_tool.py tests/test_managed_runtime.py -m "not integration"

Source: README.md at commit e151f5f

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.5.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Source integrations