A bridge to use SearXNG as an MCP server from Claude Code.
- searxng_search: Web search with multiple engines
- searxng_images: Image search
- searxng_news: News search
-
SearXNG instance running with JSON format enabled
Important: SearXNG's default configuration only allows HTML format. To use this MCP server, you must enable JSON format by mounting a custom configuration file.
First, create your configuration file from the example:
cp searxng-config/settings.yml.example searxng-config/settings.yml # Edit settings.yml to set your own secret_keyThen start SearXNG with the configuration:
# Using Docker (recommended) docker run -d \ -p 8080:8080 \ -v $(pwd)/searxng-config/settings.yml:/etc/searxng/settings.yml:ro \ -e SEARXNG_BASE_URL=http://localhost:8080/ \ searxng/searxng # Or install locally # See: https://docs.searxng.org/admin/installation.html
The
searxng-config/settings.yml.examplefile includes the necessary configuration to enable JSON format:use_default_settings: true search: formats: - html - json server: secret_key: "your-secret-key-here" limiter: false image_proxy: true
-
Verify SearXNG is running with JSON format enabled
curl "http://localhost:8080/search?q=test&format=json"If you get a
403 Forbiddenerror, the JSON format is not enabled. Make sure you mounted the configuration file correctly.
cd searxng-mcp-server
npm install
npm run build# Add to local scope (current project)
claude mcp add --transport stdio searxng -- node /path/to/searxng-mcp-server/dist/index.js
# Add to user scope (all projects)
claude mcp add --transport stdio searxng --scope user -- node /path/to/searxng-mcp-server/dist/index.jsTo add environment variables:
claude mcp add --transport stdio searxng \
--env SEARXNG_BASE_URL=http://localhost:8080 \
-- node /path/to/searxng-mcp-server/dist/index.jsProject scope (.mcp.json in project root):
{
"mcpServers": {
"searxng": {
"command": "node",
"args": ["/path/to/searxng-mcp-server/dist/index.js"],
"env": {
"SEARXNG_BASE_URL": "http://localhost:8080"
}
}
}
}User scope (~/.claude.json):
{
"mcpServers": {
"searxng": {
"command": "node",
"args": ["/path/to/searxng-mcp-server/dist/index.js"],
"env": {
"SEARXNG_BASE_URL": "http://localhost:8080"
}
}
}
}# List configured MCP servers
claude mcp list
# Inside Claude Code
/mcpBy default, Claude Code asks for confirmation each time a SearXNG tool is called. To skip confirmations, add the following to ~/.claude/settings.json:
{
"permissions": {
"allow": [
"mcp__searxng__searxng_search",
"mcp__searxng__searxng_images",
"mcp__searxng__searxng_news"
]
}
}| Variable | Default | Description |
|---|---|---|
SEARXNG_BASE_URL |
http://localhost:8080 |
SearXNG server URL |
From Claude Code:
Search for "Rust programming language features" using SearXNG
Find images of "Mount Fuji" using SearXNG
Get latest news about "AI developments" using SearXNG
If you get a 403 Forbidden error when using format=json, the JSON format is not enabled in your SearXNG instance. Make sure you:
-
Mount the configuration file when starting Docker:
docker run -d \ -p 8080:8080 \ -v $(pwd)/searxng-config/settings.yml:/etc/searxng/settings.yml:ro \ -e SEARXNG_BASE_URL=http://localhost:8080/ \ searxng/searxng -
Verify the configuration includes JSON format:
docker exec <container_id> grep -A 3 "formats" /etc/searxng/settings.yml
# Check if SearXNG is running
curl "http://localhost:8080/search?q=test&format=json"
# If not running (Docker) - make sure to mount the config file
docker run -d \
-p 8080:8080 \
-v $(pwd)/searxng-config/settings.yml:/etc/searxng/settings.yml:ro \
-e SEARXNG_BASE_URL=http://localhost:8080/ \
searxng/searxngSearXNG aggregates results from multiple search engines. If no results are returned:
- Check if your SearXNG instance has engines enabled
- Try specifying engines:
engines: "google,bing,duckduckgo" - Check SearXNG logs for errors
# Verify server is registered
claude mcp list
# Check server health
claude mcp get searxngMIT