MCP SearXNG Enhanced

by OvertliDS

Integrations

  • Allows containerized deployment with configurable environment variables and persistent configuration between container restarts.

  • Provides optional Markdown embedding for image results when using the images search category.

  • Uses Pydantic for data validation and settings management in the server implementation.

Расширенный сервер MCP SearXNG

Сервер Model Context Protocol (MCP) для веб-поиска с учетом категорий, веб-скрапинга и инструментов даты/времени. Разработан для бесшовной интеграции с SearXNG и современными клиентами MCP.

Функции

  • 🔍 Поиск в Интернете на базе SearXNG с поддержкой категорий (общие, изображения, видео, файлы, карты, социальные сети)
  • 📄 Извлечение контента веб-сайта с помощью метаданных цитирования и автоматического преобразования URL-адресов Reddit
  • 💾 Кэширование в памяти с автоматической проверкой актуальности
  • 🚦 Ограничение скорости на основе домена для предотвращения злоупотреблений сервисом
  • 🕒 Инструмент даты/времени с учетом часового пояса
  • ⚠️ Надежная обработка ошибок с помощью пользовательских типов исключений
  • 🐳 Dockerized и настраиваемый через переменные среды
  • ⚙️ Сохранение конфигурации между перезапусками контейнера

Быстрый старт

Предпосылки

  • Docker установлен в вашей системе
  • Работающий экземпляр SearXNG (размещенный самостоятельно или доступная конечная точка)

Установка и использование

Создайте образ Docker:

docker build -t overtlids/mcp-searxng-enhanced:latest .

Запустите с помощью вашего экземпляра SearXNG (ручной запуск Docker):

docker run -i --rm --network=host \ -e SEARXNG_ENGINE_API_BASE_URL="http://127.0.0.1:8080/search" \ -e DESIRED_TIMEZONE="America/New_York" \ overtlids/mcp-searxng-enhanced:latest

В этом примере SEARXNG_ENGINE_API_BASE_URL задан явно. DESIRED_TIMEZONE также явно задан как America/New_York , что соответствует его значению по умолчанию. Если переменная среды не указана с помощью флага -e во время команды docker run , сервер автоматически будет использовать значение по умолчанию, определенное в его Dockerfile (см. таблицу переменных среды ниже). Таким образом, если вы собираетесь использовать значение по умолчанию для DESIRED_TIMEZONE , вы можете опустить флаг -e DESIRED_TIMEZONE="America/New_York" . Однако SEARXNG_ENGINE_API_BASE_URL имеет решающее значение и обычно его необходимо установить в соответствии с адресом вашего конкретного экземпляра SearXNG, если значение по умолчанию Dockerfile ( http://host.docker.internal:8080/search ) не подходит.

Примечание по ручному запуску Docker: эта команда запускает контейнер Docker независимо. Если вы используете клиент MCP (например, Cline в VS Code) для управления этим сервером, клиент запустит собственный экземпляр контейнера, используя настройки, определенные в его собственной конфигурации . Чтобы клиент MCP использовал определенные переменные среды, они должны быть настроены в настройках клиента для этого сервера (см. ниже).

Настройте свой MCP-клиент (например, Cline в VS Code):

Чтобы ваш клиент MCP мог правильно управлять и запускать этот сервер, вы должны определить все необходимые переменные среды в настройках клиента для сервера overtlids/mcp-searxng-enhanced . Клиент MCP будет использовать эти настройки для построения команды docker run .

Ниже приведена рекомендуемая конфигурация по умолчанию для этого сервера в настройках JSON вашего клиента MCP (например, cline_mcp_settings.json ). В этом примере явно перечислены все переменные среды, для которых установлены значения по умолчанию, как определено в Dockerfile . Вы можете скопировать и вставить это напрямую, а затем настроить любые значения по мере необходимости.

{ "mcpServers": { "overtlids/mcp-searxng-enhanced": { "command": "docker", "args": [ "run", "-i", "--rm", "--network=host", "-e", "SEARXNG_ENGINE_API_BASE_URL=http://host.docker.internal:8080/search", "-e", "DESIRED_TIMEZONE=America/New_York", "-e", "ODS_CONFIG_PATH=/config/ods_config.json", "-e", "RETURNED_SCRAPPED_PAGES_NO=3", "-e", "SCRAPPED_PAGES_NO=5", "-e", "PAGE_CONTENT_WORDS_LIMIT=5000", "-e", "CITATION_LINKS=True", "-e", "MAX_IMAGE_RESULTS=10", "-e", "MAX_VIDEO_RESULTS=10", "-e", "MAX_FILE_RESULTS=5", "-e", "MAX_MAP_RESULTS=5", "-e", "MAX_SOCIAL_RESULTS=5", "-e", "TRAFILATURA_TIMEOUT=15", "-e", "SCRAPING_TIMEOUT=20", "-e", "CACHE_MAXSIZE=100", "-e", "CACHE_TTL_MINUTES=5", "-e", "CACHE_MAX_AGE_MINUTES=30", "-e", "RATE_LIMIT_REQUESTS_PER_MINUTE=10", "-e", "RATE_LIMIT_TIMEOUT_SECONDS=60", "-e", "IGNORED_WEBSITES=", "overtlids/mcp-searxng-enhanced:latest" ], "timeout": 60 } } }

Ключевые моменты конфигурации клиента MCP:

  • В приведенном выше примере представлен полный набор аргументов для запуска контейнера Docker со всеми переменными среды, для которых заданы значения по умолчанию.
  • Чтобы настроить любой параметр, просто измените значение для соответствующей строки -e "VARIABLE_NAME=value" в массиве args в конфигурации вашего клиента MCP. Например, чтобы изменить SEARXNG_ENGINE_API_BASE_URL и DESIRED_TIMEZONE , вам нужно будет изменить соответствующие строки.
  • Подробное описание каждой переменной и ее значения по умолчанию см. в таблице «Переменные среды» ниже.
  • Поведение сервера в первую очередь контролируется этими переменными среды. Хотя файл ods_config.json также может влиять на настройки (см. Управление конфигурацией), переменные среды, передаваемые клиентом MCP, имеют приоритет.

Работает в исходном коде (без Docker)

Если вы предпочитаете запускать сервер напрямую с помощью Python без Docker, выполните следующие действия:

1. Установка Python:

  • Для этого сервера требуется Python 3.9 или более новая версия . Рекомендуется Python 3.11 (используемый в образе Docker).
  • Вы можете загрузить Python с сайта python.org .

2. Клонируйте репозиторий:

  • Получите код с GitHub:
    git clone https://github.com/OvertliDS/mcp-searxng-enhanced.git cd mcp-searxng-enhanced

3. Создайте и активируйте виртуальную среду (рекомендуется):

  • Использование виртуальной среды помогает управлять зависимостями и избегать конфликтов с другими проектами Python.
    # For Linux/macOS python3 -m venv .venv source .venv/bin/activate # For Windows (Command Prompt) python -m venv .venv .\.venv\Scripts\activate.bat # For Windows (PowerShell) python -m venv .venv .\.venv\Scripts\Activate.ps1

4. Установите зависимости:

  • Установите необходимые пакеты Python:
    pip install -r requirements.txt
    Ключевые зависимости включают httpx , BeautifulSoup4 , pydantic , trafilatura , python-dateutil , cachetools и zoneinfo .

5. Убедитесь, что SearXNG доступен:

  • Вам все еще нужен работающий экземпляр SearXNG. Убедитесь, что у вас есть его базовый URL API (например, http://127.0.0.1:8080/search ).

6. Установите переменные среды:

  • Сервер настраивается через переменные среды. Как минимум, вам, скорее всего, понадобится установить SEARXNG_ENGINE_API_BASE_URL .
  • Linux/macOS (bash/zsh):
    export SEARXNG_ENGINE_API_BASE_URL="http://your-searxng-instance:port/search" export DESIRED_TIMEZONE="America/Los_Angeles"
  • Windows (командная строка):
    set SEARXNG_ENGINE_API_BASE_URL="http://your-searxng-instance:port/search" set DESIRED_TIMEZONE="America/Los_Angeles"
  • Windows (PowerShell):
    $env:SEARXNG_ENGINE_API_BASE_URL="http://your-searxng-instance:port/search" $env:DESIRED_TIMEZONE="America/Los_Angeles"
  • Обратитесь к таблице "Переменные среды" ниже для всех доступных опций. Если не установлено, будут использоваться значения по умолчанию из скрипта или файла ods_config.json (если он есть в корневом каталоге или в ODS_CONFIG_PATH ).

7. Запустите сервер:

  • Выполните скрипт Python:
    python mcp_server.py
  • Сервер запустится и будет прослушивать клиентские подключения MCP через stdin/stdout.

8. Файл конфигурации ( ods_config.json ):

  • В качестве альтернативы или в сочетании с переменными окружения вы можете создать файл ods_config.json в корневом каталоге проекта (или по пути, указанному переменной окружения ODS_CONFIG_PATH ). Переменные окружения всегда будут иметь приоритет над значениями в этом файле. Пример: json { "searxng_engine_api_base_url": "http://127.0.0.1:8080/search", "desired_timezone": "America/New_York" }

Переменные среды

Следующие переменные среды управляют поведением сервера. Вы можете задать их в конфигурации клиента MCP (рекомендуется для серверов, управляемых клиентом) или при запуске Docker вручную.

ПеременнаяОписаниеПо умолчанию (из Dockerfile)Примечания
SEARXNG_ENGINE_API_BASE_URLКонечная точка поиска SearXNGhttp://host.docker.internal:8080/searchРешающее значение для работы сервера
DESIRED_TIMEZONEЧасовой пояс для инструмента даты/времениAmerica/New_YorkНапример, America/Los_Angeles . Список часовых поясов базы данных tz: https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones
ODS_CONFIG_PATHПуть к постоянному файлу конфигурации/config/ods_config.jsonОбычно остается по умолчанию в контейнере.
RETURNED_SCRAPPED_PAGES_NOМаксимальное количество страниц, возвращаемых за один поиск3
SCRAPPED_PAGES_NOМаксимальное количество страниц для попытки скрейпинга5
PAGE_CONTENT_WORDS_LIMITМаксимальное количество слов на очищенную страницу5000
CITATION_LINKSВключить/отключить события цитированияTrueTrue или False
MAX_IMAGE_RESULTSМаксимальное количество возвращаемых результатов изображения10
MAX_VIDEO_RESULTSМаксимальное количество возвращаемых видеорезультатов10
MAX_FILE_RESULTSМаксимальное количество возвращаемых результатов файла5
MAX_MAP_RESULTSМаксимальное количество возвращаемых результатов карты5
MAX_SOCIAL_RESULTSМаксимальное количество результатов в социальных сетях для возврата5
TRAFILATURA_TIMEOUTВремя ожидания извлечения контента (секунды)15
SCRAPING_TIMEOUTВремя ожидания HTTP-запроса (секунды)20
CACHE_MAXSIZEМаксимальное количество кэшированных веб-сайтов100
CACHE_TTL_MINUTESВремя жизни кэша (минуты)5
CACHE_MAX_AGE_MINUTESМаксимальный срок хранения кэшированного контента (минуты)30
RATE_LIMIT_REQUESTS_PER_MINUTEМаксимальное количество запросов на домен в минуту10
RATE_LIMIT_TIMEOUT_SECONDSОкно отслеживания ограничения скорости (секунды)60
IGNORED_WEBSITESСписок сайтов, которые следует игнорировать, разделенный запятыми"" (пустой)Например, "example.com,another.org"

Управление конфигурацией

Сервер использует трехуровневый подход к конфигурации:

  1. Настройки скрипта по умолчанию (жёстко закодированы в Python)
  2. Файл конфигурации (загружается из ODS_CONFIG_PATH , по умолчанию /config/ods_config.json )
  3. Переменные среды (наивысший приоритет)

Файл конфигурации обновляется только когда:

  • Файл еще не существует (первая инициализация)
  • Переменные среды явно указаны для текущего запуска

Это гарантирует сохранение пользовательских конфигураций между перезапусками контейнера, если не установлены новые переменные среды.

Инструменты и псевдонимы

Название инструментаЦельПсевдонимы
search_webПоиск в Интернете через SearXNGsearch , web_search , find , lookup_web , search_online , access_internet , lookup *
get_websiteСоскребать содержимое веб-сайтаfetch_url , scrape_page , get , load_website , lookup *
get_current_datetimeТекущая дата/времяcurrent_time , get_time , current_date

* lookup зависит от контекста:

  • Если вызван с аргументом url , он сопоставляется с get_website
  • В противном случае он отображается в search_web

Пример: вызов инструментов

Поиск в Интернете

{ "name": "search_web", "arguments": { "query": "open source ai" } }

или используя псевдоним:

{ "name": "search", "arguments": { "query": "open source ai" } }

Поиск по конкретной категории

{ "name": "search_web", "arguments": { "query": "landscapes", "category": "images" } }

Скрапинг веб-сайта

{ "name": "get_website", "arguments": { "url": "example.com" } }

или используя псевдоним:

{ "name": "lookup", "arguments": { "url": "example.com" } }

Текущая дата/время

{ "name": "get_current_datetime", "arguments": {} }

или:

{ "name": "current_time", "arguments": {} }

Расширенные функции

Поиск по конкретной категории

Инструмент search_web поддерживает различные категории с настраиваемыми результатами:

  • изображения : возвращает URL-адреса изображений, заголовки и исходные страницы с возможностью встраивания Markdown.
  • Видео : возвращает информацию о видео, включая заголовки, источники и URL-адреса для встраивания.
  • файлы : возвращает информацию о загружаемых файлах, включая формат и размер.
  • карта : возвращает данные о местоположении, включая координаты и адреса.
  • социальные сети : возвращает посты и профили из социальных платформ.
  • общие сведения : категория по умолчанию, которая извлекает и возвращает полное содержимое веб-страницы

Преобразование URL-адресов Reddit

При извлечении контента Reddit URL-адреса автоматически преобразуются для использования домена old.reddit.com для лучшего извлечения контента.

Ограничение скорости

Ограничение скорости на основе домена предотвращает чрезмерные запросы к одному и тому же домену в течение временного окна. Это предотвращает перегрузку целевых веб-сайтов и потенциальную блокировку IP.

Проверка кэша

Кэшированный контент веб-сайта автоматически проверяется на актуальность на основе возраста. Устаревший контент обновляется автоматически, в то время как действительный кэшированный контент быстро обслуживается.

Обработка ошибок

Сервер реализует надежную систему обработки ошибок со следующими типами исключений:

  • MCPServerError : Базовый класс исключений для всех ошибок сервера
  • ConfigurationError : Возникает, если значения конфигурации недействительны.
  • SearXNGConnectionError : Возникает при сбое подключения к SearXNG.
  • WebScrapingError : Возникает при сбое веб-скрапинга.
  • RateLimitExceededError : Возникает при превышении лимита скорости для домена.

Ошибки надлежащим образом передаются клиенту с помощью информативных сообщений.

Поиск неисправностей

  • Невозможно подключиться к SearXNG : убедитесь, что экземпляр SearXNG запущен и переменная среды SEARXNG_ENGINE_API_BASE_URL указывает на правильную конечную точку.
  • Ошибки ограничения скорости : отрегулируйте RATE_LIMIT_REQUESTS_PER_MINUTE , если у вас слишком много ошибок ограничения скорости.
  • Медленное извлечение контента : увеличьте значение TRAFILATURA_TIMEOUT , чтобы выделить больше времени на обработку контента на сложных страницах.
  • Проблемы с сетью Docker : если вы используете Docker Desktop на Windows/Mac, host.docker.internal должен разрешаться в хост-машину. В Linux вам может потребоваться использовать IP-адрес хоста.

Благодарности

Вдохновлено:

Лицензия

Лицензия MIT © 2025 OvertliDS

-
security - not tested
A
license - permissive license
-
quality - not tested

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Сервер Model Context Protocol, который обеспечивает веб-поиск с поддержкой категорий, извлечение содержимого веб-сайта с использованием метаданных цитирования и инструменты даты/времени с учетом часового пояса.

  1. Функции
    1. Быстрый старт
      1. Предпосылки
      2. Установка и использование
    2. Работает в исходном коде (без Docker)
      1. Переменные среды
        1. Управление конфигурацией
          1. Инструменты и псевдонимы
            1. Пример: вызов инструментов
          2. Расширенные функции
            1. Поиск по конкретной категории
            2. Преобразование URL-адресов Reddit
            3. Ограничение скорости
            4. Проверка кэша
          3. Обработка ошибок
            1. Поиск неисправностей
              1. Благодарности
                1. Лицензия

                  Related MCP Servers

                  • A
                    security
                    A
                    license
                    A
                    quality
                    A Model Context Protocol (MCP) server implementation that integrates with FireCrawl for advanced web scraping capabilities.
                    Last updated -
                    9
                    15,275
                    2,745
                    JavaScript
                    MIT License
                    • Apple
                    • Linux
                  • A
                    security
                    F
                    license
                    A
                    quality
                    Built as a Model Context Protocol (MCP) server that provides advanced web search, content extraction, web crawling, and scraping capabilities using the Firecrawl API.
                    Last updated -
                    4
                    1
                    Python
                    • Apple
                    • Linux
                  • -
                    security
                    A
                    license
                    -
                    quality
                    A Model Context Protocol server that allows LLMs to interact with web content through standardized tools, currently supporting web scraping functionality.
                    Last updated -
                    Python
                    MIT License
                    • Linux
                    • Apple
                  • -
                    security
                    A
                    license
                    -
                    quality
                    A Model Context Protocol server that enables web search, scraping, crawling, and content extraction through multiple engines including SearXNG, Firecrawl, and Tavily.
                    Last updated -
                    35
                    11
                    TypeScript
                    MIT License

                  View all related MCP servers

                  ID: 517w3plzdq