by ihor-sokoliuk (community) Claude Desktop, Claude Code, SearXNG self-hosted
MCP-сервер для приватного веб-поиска через SearXNG. Позволяет LLM искать информацию через self-hosted SearXNG без трекеров и API-ключей крупных корпораций. Возможности: - Веб-поиск через локальный или публичный SearXNG - Приватность: нет трекинга, нет Google/Bing API - Агрегация результатов из 70+ поисковиков - Фильтры по категориям (news, science, files) - Поддержка любого SearXNG инстанса по URL - JSON-результаты с URL, заголовками, сниппетами
# Claude Desktop — claude_desktop_config.json:
{
"mcpServers": {
"searxng": {
"command": "uvx",
"args": ["mcp-searxng"],
"env": {
"SEARXNG_URL": "http://localhost:8080"
}
}
}
}
# Claude Code (CLI):
claude mcp add searxng --env SEARXNG_URL=http://localhost:8080 -- uvx mcp-searxng
# OpenCode — ~/.config/opencode/opencode.json:
{
"mcp": {
"searxng": {
"type": "local",
"command": ["uvx", "mcp-searxng"],
"environment": {
"SEARXNG_URL": "http://localhost:8080"
}
}
}
}
Приватный веб-поиск для ИИ-ассистентов — подключите любой экземпляр SearXNG к Claude, Cursor и другим.
MCP-сервер, интегрирующий API SearXNG, предоставляющий ИИ-ассистентам возможности веб-поиска.
✨ Рекомендован в GitHub MCP Registry.
Добавьте в конфигурацию вашего MCP-клиента (например, claude_desktop_config.json):
{
"mcpServers": {
"searxng": {
"command": "npx",
"args": ["-y", "mcp-searxng"],
"env": {
"SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"
}
}
}
}
Замените YOUR_SEARXNG_INSTANCE_URL на URL вашего экземпляра SearXNG (например, https://searxng.example.com).
response_format./autocompleter./config.min_score.| Brave MCP | Exa MCP | Firecrawl MCP | mcp-searxng | |
|---|---|---|---|---|
| Веб-поиск | ✓ | ✓ | ✓ | ✓ |
| Чтение URL | ✗ | ✓ | ✓ | ✓ |
| Пагинация | ✗ | ✗ | ✓ | ✓ |
| Самостоятельный хостинг | ✗ | ✗ | Частично | ✓ |
| Приватность | ✗ | ✗ | ✗ | ✓ |
| Бесплатно / Без API-ключа | ✗ | ✗ | ✗ | ✓ |
mcp-searxng — это автономный MCP-сервер — отдельный процесс Node.js, к которому ваш ИИ-ассистент подключается для веб-поиска. Он обращается к любому экземпляру SearXNG через его HTTP JSON API.
Не плагин SearXNG: Этот проект не может быть установлен как нативный плагин SearXNG. Укажите его URL для любого существующего экземпляра SearXNG, установив переменную
SEARXNG_URL.
ИИ-ассистент (например, Claude)
│ Протокол MCP
▼
mcp-searxng (этот проект — процесс Node.js)
│ HTTP JSON API (SEARXNG_URL)
▼
Экземпляр SearXNG
Входные параметры:
query (строка): Поисковый запрос. Эта строка передается во внешние поисковые сервисы.pageno (число, опционально): Номер страницы результатов, начинается с 1 (по умолчанию 1)time_range (строка, опционально): Фильтр результатов по временному диапазону — одно из: "day", "week", "month", "year" (по умолчанию: нет)language (строка, опционально): Код языка для результатов (например, "en", "fr", "de") или "all" (по умолчанию: "all")safesearch (число, опционально): Уровень фильтрации безопасного поиска (0: Нет, 1: Умеренный, 2: Строгий) (по умолчанию: настройка экземпляра)min_score (число, опционально): Минимальный показатель релевантности от 0.0 до 1.0. Результаты с меньшим показателем отсеиваются.num_results (число, опционально): Максимальное количество возвращаемых результатов, от 1 до 20. Применяется лимит SEARXNG_MAX_RESULTS.categories (строка, опционально): Категории SearXNG через запятую (например, "news", "it,science"). Когда доступен конфиг /config, значения очищаются и нормализуются без учета регистра в соответствии с каноническими именами категорий экземпляра; неизвестные значения отвергаются с перечнем доступных категорий. Если /config недоступен, значения передаются как есть с предупреждением. По умолчанию: настройка экземпляра SearXNG.engines (строка, опционально): Имена движков SearXNG через запятую (например, "google,bing,ddg", "semantic scholar"). Когда доступен конфиг /config, значения очищаются и нормализуются без учета регистра в соответствии с каноническими именами движков, включая движки, отключенные по умолчанию; неизвестные значения отвергаются с перечнем доступных движков. Если /config недоступен, значения передаются как есть с предупреждением. По умолчанию: настройка экземпляра SearXNG.response_format (строка, опционально): Формат ответа, либо "text" для форматированного вывода для чтения агентом, либо "json" для исходного JSON SearXNG с фильтрованным/срезанным results. (по умолчанию: "text")searxng_search_suggestions
Входные параметры:
query (строка): Частичный или полный запрос для автодополнения.language (строка, опционально): Код языка для подсказок (например, "en", "fr", "de") или "all" (по умолчанию: "all")searxng_instance_info
Входные параметры:
includeEngines (булево, опционально): Включать имена включенных движков в ответ. (по умолчанию: false)includeDisabled (булево, опционально): Включать имена отключенных движков, если includeEngines равен true. (по умолчанию: false)category (строка, опционально): Фильтровать категории и движки по одному имени категории.refresh (булево, опционально): Игнорировать кэш процесса и получать свежие данные /config. (по умолчанию: false)web_url_read
url (строка): URL для получения и обработкиstartChar (число, опционально): Начальная позиция символа для извлечения контента (по умолчанию: 0)maxLength (число, опционально): Максимальное количество возвращаемых символовsection (строка, опционально): Извлекать контент под определенным заголовком (ищет текст заголовка)paragraphRange (строка, опционально): Возвращать определенные диапазоны абзацев (например, '1-5', '3', '10-')readHeadings (булево, опционально): Возвращать только список заголовков вместо полного контентаNPM (глобальная установка)
npm install -g mcp-searxng
{
"mcpServers": {
"searxng": {
"command": "mcp-searxng",
"env": {
"SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"
}
}
}
}
Docker
Готовый образ:
docker pull isokoliuk/mcp-searxng:latest
Подписи образов можно проверить с помощью Cosign — см. инструкции в SECURITY.md).
{
"mcpServers": {
"searxng": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "SEARXNG_URL",
"isokoliuk/mcp-searxng:latest"
],
"env": {
"SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"
}
}
}
}
Для передачи дополнительных переменных окружения добавьте -e VAR_NAME в args и переменную в env.
Локальная сборка:
docker build -t mcp-searxng:latest -f Dockerfile .
Используйте ту же конфигурацию, заменив isokoliuk/mcp-searxng:latest на mcp-searxng:latest.
Docker Compose
docker-compose.yml:
services:
mcp-searxng:
image: isokoliuk/mcp-searxng:latest
stdin_open: true
environment:
- SEARXNG_URL=YOUR_SEARXNG_INSTANCE_URL
# Добавьте дополнительные переменные по необходимости — см. CONFIGURATION.md
Конфигурация MCP-клиента:
{
"mcpServers": {
"searxng": {
"command": "docker-compose",
"args": ["run", "--rm", "mcp-searxng"]
}
}
}
HTTP-транспорт
По умолчанию сервер использует STDIO. Установите MCP_HTTP_PORT для включения HTTP-режима:
{
"mcpServers": {
"searxng-http": {
"command": "mcp-searxng",
"env": {
"SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL",
"MCP_HTTP_PORT": "3000"
}
}
}
}
Эндпоинты: POST/GET/DELETE /mcp (протокол MCP), GET /health (проверка работоспособности)
Тестирование:
MCP_HTTP_PORT=3000 SEARXNG_URL=http://localhost:8080 mcp-searxng
curl http://localhost:3000/health
Установите SEARXNG_URL на URL вашего экземпляра SearXNG. Все остальные переменные опциональны.
Полный справочник переменных окружения: CONFIGURATION.md)
Вероятно, в вашем экземпляре SearXNG отключен формат JSON. Отредактируйте settings.yml (обычно /etc/searxng/settings.yml):
search:
formats:
- html
- json
Перезапустите SearXNG (docker restart searxng), затем проверьте:
curl 'http://localhost:8080/search?q=test&format=json'
Вы должны получить ответ в формате JSON. Если нет, убедитесь, что файл правильно смонтирован, а отступы в YAML верны.
См. также: Документация настроек SearXNG · обсуждение
Если вы вынуждены использовать публичный экземпляр, который вы не контролируете, и он отклоняет format=json (упомянутая ошибка 403), вместо редактирования сервера установите флаг для подключения:
"SEARXNG_HTML_FALLBACK": "true"
Поиск, получающий 403/404 или ответ не в формате JSON, автоматически повторяется без format=json и парсится из обычной HTML-страницы результатов.
sourceFormat: "html", а в текстовом режиме добавляется строка "Примечание: Результаты распознаны из HTML-резервного варианта SearXNG; метаданные ограничены." Показатели релевантности и имена движков из HTML недоступны.429), требует аутентификации (401) или ошибка сервера (5xx) — исходная ошибка выводится без изменений. Резервный вариант срабатывает только при 403/404/ответе не в JSON, никогда при ошибках аутентификации или сети.Включение JSON на управляемом вами экземпляре (см. выше) остается рекомендуемой конфигурацией — резервный вариант служит средством совместимости, а не заменой.
См. CONTRIBUTING.md)
MIT — подробности см. в LICENSE).