MCP Server SearXNG
MCP server for SearXNG meta search engine with enhanced error handling and parameter validation for AI agents. Enables privacy-focused web searches with structured JSON results and advanced filtering.
README
SearXNG MCP Server (Enhanced Error Handling Fork)
A fork of kevinwatt/mcp-server-searxng with enhanced error messaging and parameter validation, specifically designed to improve the experience when used with AI agents.
This MCP server implementation integrates with SearXNG, providing privacy-focused meta search capabilities with improved feedback for LLM agents.
For LLMs and Beginners
How to get a specific range of results:
- To get results 1-10: set
offset=0,max_results=10 - To get results 11-20: set
offset=10,max_results=10 - To get results 40-43: set
offset=39,max_results=4
Important:
- Do NOT use
pagefor pagination. Useoffsetandmax_results. offsetis zero-based:offset=0means start from the first result.max_resultsis the number of results you want to get (not the last result number).
Common Patterns Table:
| Results Wanted | offset | max_results |
|---|---|---|
| 1-10 | 0 | 10 |
| 11-20 | 10 | 10 |
| 21-30 | 20 | 10 |
| 40-43 | 39 | 4 |
Example:
{ "offset": 39, "max_results": 4 }
Features
- Meta Search: Combines results from multiple search engines
- Privacy-Focused: No tracking, no user profiling
- Multiple Categories: Support for general, news, science, files, images, videos, and more
- Language Support: Search in specific languages or all languages
- Time Range Filtering: Filter results by day, week, month, or year
- Safe Search: Three levels of safe search filtering
- Fallback Support: Multiple SearXNG instances for reliability
- Structured JSON Responses: Structured format for programmatic access to search results
Enhanced Error Handling Features
- Improved Parameter Validation: Clear messaging about valid formats for all parameters
- Contextual Error Messages: Detailed feedback showing what was provided vs. what was expected
- LLM-Friendly Descriptions: Schema descriptions optimized for LLM understanding
- Example-Based Feedback: Error messages include examples of correct formats
- Enhanced Debug Logging: More detailed logging of parameter validation issues
Why This Fork?
This fork was created to address specific issues when AI agents (particularly models like qwen3) interact with MCP tools. The main improvements include:
-
Better Error Messages for LLMs: Enhanced error responses that clearly explain what went wrong in a way that's easier for LLMs to understand and correct.
-
Explicit Format Requirements: More detailed schema definitions that help prevent common mistakes like using shorthand date formats (e.g., "3d" instead of "day").
-
Comparative Error Feedback: When validation fails, the error shows both what was received and what was expected, making it easier for agents to learn from mistakes.
-
Example-Based Learning: Error messages include concrete examples of valid values and explicitly mention invalid formats to avoid.
-
Structured JSON Responses: The
web_searchtool returns search results in a structured JSON format, making it easier for applications to programmatically process search results with proper metadata, scores, and categorization.
These changes aim to reduce the friction when AI agents use this tool through the MCP protocol, leading to fewer errors and a better overall user experience.
Installation
Manual Installation
npm install -g @jharding_npm/mcp-server-searxng
From Source
git clone https://github.com/jhstatewide/mcp-server-searxng.git
cd mcp-server-searxng
npm install
npm run build
Usage
Direct Run
mcp-server-searxng
With Dive Desktop
- Click "+ Add MCP Server" in Dive Desktop
- Copy and paste this configuration:
{
"mcpServers": {
"searxng": {
"command": "npx",
"args": [
"-y",
"@jharding_npm/mcp-server-searxng"
]
}
}
}
- Click "Save" to install the MCP server
Usage Examples
Basic Search:
# Returns structured JSON results
web_search("artificial intelligence news")
Advanced Search with Filters:
# Search with specific parameters
web_search("climate change", {
"time_range": "week",
"language": "en",
"safesearch": 1
})
Parameter Control Examples:
# Pagination: Get results 21-30 with custom content length
web_search("artificial intelligence", {
"max_results": 10,
"offset": 20,
"content_length": 300
})
# Large batch: Get 50 results with short snippets
web_search("machine learning", {
"max_results": 50,
"offset": 0,
"content_length": 100
})
Tool Documentation
web_search
Execute meta searches across multiple engines with structured JSON results.
Inputs:
query(string, required): Text to search formax_results(number, optional, default 10): Maximum number of results to return (1-100)offset(number, optional, default 0): Number of results to skip (zero-based)content_length(number, optional, default 200): Maximum characters per result content snippet (50-1000)page(number, optional, default 1): Page number (advanced, use offset/max_results instead)language(string, optional, default 'all'): Language code (e.g., 'en', 'all')time_range(string, optional, default 'all_time'): 'all_time', 'day', 'week', 'month', or 'year'safesearch(number, optional, default 1): 0 = None, 1 = Moderate, 2 = Strict
Output: Structured JSON response with the following format:
{
"results": [
{
"title": "Title of the search result",
"url": "https://www.example.com",
"content": "Content of the search result (truncated to 2 sentences if long)",
"score": 0.85,
"category": "news",
"engine": "google",
"publishedDate": "2023-01-01"
}
],
"metadata": {
"total_results": 100,
"time_taken": 0.123,
"query": "original search query"
}
}
Features:
- Individual result objects with all available fields
- Automatic content truncation for readability
- Search metadata including timing and result counts
- Relevance scores when available from search engines
- Engine and category information for each result
- Advanced pagination with offset and max_results parameters
Development
git clone https://github.com/jhstatewide/mcp-server-searxng.git
cd mcp-server-searxng
npm install
npm run build
npm start
License
This MCP server is licensed under the MIT License. See the LICENSE file for details.
Prerequisites
You need a local SearXNG instance running. To set it up:
Run SearXNG with Docker
Quick Start
# Create config directory
mkdir -p searxng
# Create config file
tee searxng/settings.yml << EOF
use_default_settings: true
server:
bind_address: "0.0.0.0"
secret_key: "CHANGE_THIS_TO_SOMETHING_SECURE" # Generate a random key
port: 8080
search:
safe_search: 0
formats:
- html
- json
engines:
- name: google
engine: google
shortcut: g
- name: duckduckgo
engine: duckduckgo
shortcut: d
- name: bing
engine: bing
shortcut: b
server.limiter: false
EOF
# Start container
docker run -d \
--name searxng \
-p 8080:8080 \
-v "$(pwd)/searxng:/etc/searxng" \
searxng/searxng
Test Search Function
# Test JSON API with curl
curl -v 'http://localhost:8080/search?q=test&format=json'
# Or visit in browser
http://localhost:8080/search?q=test
Container Management
# Stop container
docker stop searxng
# Remove container
docker rm searxng
# View container logs
docker logs searxng
# Enable auto-start on boot
docker update --restart always searxng
The --restart always flag ensures that:
- Container starts automatically when Docker daemon starts
- Container restarts automatically if it crashes
- Container restarts automatically if it is stopped unless explicitly stopped by user
Custom Configuration
Edit searxng/settings.yml to:
- Modify search engine list
- Adjust security settings
- Configure UI language
- Change API limits
For detailed configuration options, see SearXNG Documentation
Environment Variables
-
SEARXNG_INSTANCES: Comma-separated list of SearXNG instances URLs Default:http://localhost:8080 -
SEARXNG_USER_AGENT: Custom User-Agent header for requests Default:MCP-SearXNG/1.0 -
SEARXNG_MAX_ATTEMPTS: Total number of attempts per instance (initial request + retries) Default:4(1 initial attempt + 3 retries) -
SEARXNG_RETRY_BASE_DELAY_MS: Base retry delay in milliseconds (exponential backoff) Default:300 -
SEARXNG_RETRY_JITTER_MS: Random jitter added to each retry delay in milliseconds Default:100 -
SEARXNG_REQUEST_TIMEOUT_MS: Per-attempt request timeout in milliseconds Default:10000 -
NODE_TLS_REJECT_UNAUTHORIZED: Set to '0' to bypass SSL certificate verification (for development with self-signed certificates) Default: undefined (SSL verification enabled)
Example configuration with all options:
{
"mcpServers": {
"searxng": {
"name": "searxng",
"command": "npx",
"args": [
"-y",
"@jharding_npm/mcp-server-searxng"
],
"env": {
"SEARXNG_INSTANCES": "http://localhost:8080,https://searx.example.com",
"SEARXNG_USER_AGENT": "CustomBot/1.0",
"SEARXNG_MAX_ATTEMPTS": "4",
"SEARXNG_RETRY_BASE_DELAY_MS": "300",
"SEARXNG_RETRY_JITTER_MS": "100",
"SEARXNG_REQUEST_TIMEOUT_MS": "10000",
"NODE_TLS_REJECT_UNAUTHORIZED": "0"
}
}
}
}
When NODE_ENV=test, retry defaults are optimized for fast deterministic tests:
SEARXNG_RETRY_BASE_DELAY_MS=1SEARXNG_RETRY_JITTER_MS=0SEARXNG_REQUEST_TIMEOUT_MS=1000
⚠️ Warning: Disabling SSL certificate verification is not recommended in production environments.
By default, safe search is OFF (0), which returns the most complete set of results. This is recommended for research and general use, as enabling safe search may filter out relevant information.
The tool is now optimized for use with small LLMs (7b models) by simplifying the schema and defaults.
Maintainer: Build, Pack, and Release Procedure
To release a new version to npm:
-
Bump the version in
package.json(e.g., to 0.5.4):# Edit package.json and update the "version" field -
Build the project:
npm run build # or yarn build -
Pack the project (optional, to verify contents):
npm pack # This creates a tarball like jharding_npm-mcp-server-searxng-0.5.4.tgz # You can inspect it with: tar -tzf jharding_npm-mcp-server-searxng-0.5.4.tgz -
Test the packed tarball locally (optional):
npx -y ./jharding_npm-mcp-server-searxng-0.5.4.tgz --help # Should show CLI help and not hang -
Publish to npm:
npm publish --access public -
Verify the published CLI:
npx @jharding_npm/mcp-server-searxng@latest --help
Note: Ensure you have the correct permissions to publish to npm and that your npm account is logged in.
Versioning Note
When making a new release, you must update the version number in both:
package.jsonsrc/index.ts(theversionconstant)
This ensures the version displayed by the CLI matches the published package version.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。