MCP server and CLI tools for web search and crawling, built on SearXNG and Crawl4AI
# Add to your Claude Code skills
git clone https://github.com/DasDigitaleMomentum/searxNcrawlGuides for using mcp servers skills like searxNcrawl.
Last scanned: 10/9/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-10-09T11:09:41.270Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}See how searxNcrawl compares with popular alternatives.
searxNcrawl is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by DasDigitaleMomentum. MCP server and CLI tools for web search and crawling, built on SearXNG and Crawl4AI. It has 167 GitHub stars.
Yes. searxNcrawl passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/DasDigitaleMomentum/searxNcrawl" and add it to your Claude Code skills directory (see the Installation section above).
searxNcrawl is primarily written in Python. It is open-source under DasDigitaleMomentum on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh searxNcrawl against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
MCP server and CLI toolkit for web search and crawling, built on Crawl4AI and SearXNG.
Published at github.com/DasDigitaleMomentum/searxNcrawl — maintained by DDM – Das Digitale Momentum GmbH & Co KG. Successor to searxng-mcp.
Pick your setup:
MCP server with Playwright/Chromium, ready in one command. SearXNG required separately for search.
cp .env.example .env # set SEARXNG_URL to your SearXNG instance
docker compose up --build
➜ MCP server at http://localhost:9555/mcp
CLI tools, Python API, and MCP server. SearXNG required for search.
python -m venv .venv && source .venv/bin/activate
pip install -e .
playwright install chromium
Same capabilities as pip.
uv sync
uv run playwright install chromium
| Feature | Docker Compose | pip / uv |
|---|---|---|
| MCP Server (STDIO) | — | ✅ |
| MCP Server (HTTP) | ✅ | ✅ |
| Web Crawl | ✅ | ✅ |
| Web Search | ✅¹ | ✅¹ |
| CLI Tools | via exec² |
✅ |
| Python API | — | ✅ |
| CORS (HTTP) | ✅ | ✅ |
¹ Requires a SearXNG instance. ² docker compose exec searxncrawl crawl ...
exact (default) removes repeated blocks, off disables it--remove-links)crawl — crawl pages from the command linesearch — search the web via SearXNGcrawl-capture — session capture for authenticated crawlingThe Compose stack includes searxNcrawl + Playwright/Chromium. SearXNG must be provided separately.
cp .env.example .env
# Edit .env: set SEARXNG_URL to your SearXNG instance
docker compose up --build
| Variable | Default | Description |
|---|---|---|
MCP_PORT |
9555 |
MCP server HTTP port |
LOG_LEVEL |
INFO |
MCP server log level (DEBUG, INFO, WARNING, ERROR, CRITICAL) |
FASTMCP_HTTP_ALLOWED_HOSTS |
(FastMCP secure defaults) | JSON list of trusted HTTP Host headers, for example ["mcp.example.com"] |
The MCP server is available at http://localhost:9555/mcp.
cd searxNcrawl
python -m venv .venv
source .venv/bin/activate
pip install -e .
playwright install chromium
cd searxNcrawl
uv sync
uv run playwright install chromium
The search tool and CLI command require a SearXNG instance with JSON output enabled (search.formats in settings.yml). For all setups you need your own instance — self-hosting is recommended over public instances (rate limits).
Environment variables:
| Variable | Example / Recommended | Description |
|---|---|---|
SEARXNG_URL |
http://localhost:8888 |
SearXNG instance URL |
SEARXNG_USERNAME |
(none) | Optional basic auth user |
SEARXNG_PASSWORD |
(none) | Optional basic auth pass |
SEARCH_RESULT_FIELDS |
title,url,content,publishedDate |
Comma-separated result fields. Unset = all SearXNG fields. Available: title, url, content, publishedDate, engine, score, category, img_src, thumbnail |
Example .env:
SEARXNG_URL=http://localhost:8888
SEARCH_RESULT_FIELDS=title,url,content,publishedDate
LOG_LEVEL=INFO
Config file search order (CLI tools only):
./.env — current directory~/.config/searxncrawl/.env — user configIf no .env exists, .env.example is auto-copied to the user config path.
# STDIO transport (for MCP harnesses)
python -m crawler.mcp_server
# HTTP transport
python -m crawler.mcp_server --transport http --port 8000
# HTTP exposed through a specific public hostname
python -m crawler.mcp_server --transport http --host 0.0.0.0 --allowed-hosts "mcp.example.com"
# HTTP with CORS
python -m crawler.mcp_server --transport http --allowed-hosts "mcp.example.com" --cors-origins "https://app.example.com"
# Docker (HTTP only)
docker compose up --build
Python with venv:
{
"mcpServers": {
"crawler": {
"command": "python",
"args": ["-m", "crawler.mcp_server"],
"cwd": "/path/to/searxNcrawl",
"env": { "SEARXNG_URL": "http://your-searxng:8888" }
}
}
}
With uv (no manual venv):
{
"mcpServers": {
"crawler": {
"command": "uv",
"args": ["run", "--directory", "/path/to/searxNcrawl", "python", "-m", "crawler.mcp_server"],
"env": { "SEARXNG_URL": "http://your-searxng:8888" }
}
}
}
Docker (HTTP endpoint):
{
"mcpServers": {
"crawler": {
"url": "http://localhost:9555/mcp"
}
}
}
FastMCP validates the HTTP Host header independently of the address on which
the server listens. For remote access, allow the exact externally visible Host
header with a comma-separated CLI value:
crawl-mcp --transport http --host 0.0.0.0 --allowed-hosts "mcp.example.com,mcp.internal.example"
Alternatively, use FastMCP's environment setting. It uses JSON-list syntax:
FASTMCP_HTTP_ALLOWED_HOSTS='["mcp.example.com"]' crawl-mcp --transport http --host 0.0.0.0
Browser Origin validation and CORS response headers are separate from Host
validation. --cors-origins configures both FastMCP's Origin guard and the CORS
middleware using the same normalized, comma-separated values:
crawl-mcp --transport http --cors-origins "http://localhost:3000,https://myapp.com"
crawl-mcp --transport http --cors-origins "*" # all origins — local dev only
Omitting either allowlist preserves FastMCP's secure defaults (and permits the
upstream environment setting to apply). A value of * for Hosts or Origins is
an explicit opt-in to broad access and should only be used when that security
trade-off is intentional. Without --cors-origins, no CORS headers are sent.
After pip install -e . (or uv sync), the following commands are available:
# Crawl a page
crawl https://docs.example.com
# Site crawl with depth limit
crawl https://docs.example.com --site --max-depth 2 --max-pages 10 -o docs/
# Clean output (no links)
crawl https://example.com --remove-links
# Search
search "python tutorials"
search "Rezepte" --language de --max-results 5
# Session capture for authenticated crawling
crawl-capture --start-url https://example.com/login \
--completion-url 'https://example.com/dashboard.*' \
--output ./state.json
See Session Capture for the full crawl-capture guide.
from crawler import crawl_page, crawl_page_async, crawl_site, crawl_site_async
# Single page
doc = await crawl_page_async("https://docs.example.com/intro", dedup_mode="exact")
print(doc.markdown)
# Site crawl
result = crawl_site("https://docs.example.com", max_depth=2, max_pages=10)
for doc in result.documents:
print(f"{doc.status}: {doc.final_url}")
# Authenticated crawl
doc = await crawl_page_async(
"https://example.com/private",
auth={"storage_state": "/path/to/state.json"},
)
crawl, crawl_site, searchCrawledDocumentDefault config is optimized for documentation sites. Customize via overrides:
from crawler import build_markdown_run_config, RunConfigOverrides
config = build_markdown_run_config(
RunConfigOverrides(
delay_before_return_html=1.0,
mean_delay=1.0,