Research MCP
Частный шлюз поиска
Этот проект представляет собой детерминированный, самостоятельно размещаемый серверный компонент для поиска и извлечения страниц, предназначенный для внешних интерфейсов ИИ. Он предоставляет конечную точку поиска, совместимую с SearXNG, обнаруживает источники с помощью небольшого набора поисковых систем, открывает наиболее релевантные страницы, извлекает их фактическое содержимое, следует по ограниченному числу релевантных ссылок в пределах того же сайта, повторно ранжирует доказательства локально и возвращает процитированные URL-адреса источников и текст, полученный со страниц.
Он не использует платный поисковый API или внутреннюю языковую модель. Модель внешнего интерфейса получает извлеченные доказательства и составляет ответ. Это обеспечивает конфиденциальность, предсказуемость и пригодность сервиса для любого внешнего интерфейса, который принимает пользовательский SearXNG или JSON-провайдер поиска.
Что работает
search-gateway: единственный сервис, обращенный к клиенту, на внутреннем порту8080searxng: поиск по вебу, техническим темам, новостям, изображениям и исследованиямreranker: локальное ранжирование релевантностиBAAI/bge-reranker-basecrawl4ai: обход сайтов с поддержкой JavaScript для сложных страницweb-runner: изолированное управление Crawl4AI и Playwright через Unix-сокетpdf-runner: изолированное от сети извлечение PDFsafe-egress: блокировка назначений частных сетей и метаданных для браузеровredis: кэш ответов и запасной вариант при устаревших результатах
Стек не публикует порты хоста. Внешний интерфейс обращается к нему через общую сеть Docker по адресу:
http://search-gateway:8080/searchКаждый контейнер, подключенный к этой общей сети, может вызывать шлюз. Используйте выделенную общую сеть, если другие не связанные контейнеры не должны иметь доступа.
Related MCP server: bathys
Требования
64-битный Linux VPS
Docker Engine и Docker Compose v2.24.4 или новее
Около 10 ГБ свободного места на диске для образов, Chromium и модели ранжировщика
16 ГБ ОЗУ рекомендуется для полного стека
Указанные лимиты в сумме составляют около 10,5 ГБ, не считая разделяемой памяти и обычных накладных расходов Docker. Это лимиты, а не резервирования, но при этом оставляют полезный запас на хосте с 16 ГБ. Первая сборка выполняется медленно, так как загружает Chromium, образ Crawl4AI и модель ранжировщика.
Чистая установка
Создайте сеть Docker один раз, если она еще не существует:
docker network inspect docker-stacks_app-network >/dev/null 2>&1 || \
docker network create docker-stacks_app-networkКлонируйте и настройте проект:
git clone https://github.com/ZDOSt/Research-MCP.git
cd Research-MCP
cp .env.example .env
chmod 600 .envСгенерируйте два разных секрета:
openssl rand -hex 32
openssl rand -hex 32Отредактируйте .env и замените SEARXNG_SECRET и CRAWL4AI_API_TOKEN этими значениями. Измените CLIENT_DOCKER_NETWORK только в том случае, если ваш внешний интерфейс использует другую внешнюю сеть Docker.
Проверьте и запустите полный стек:
docker compose config --quiet
docker compose up -d --build --wait
docker compose psЗаписи ports: не нужны. Не добавляйте их, если вы намеренно не хотите открыть шлюз за пределами Docker.
Проверка
Выполните проверку работоспособности из контейнера шлюза:
docker compose exec -T search-gateway python -c \
"import urllib.request; print(urllib.request.urlopen('http://127.0.0.1:8080/healthz').read().decode())"Выполните реальный поиск из любого контейнера в общей сети. Замените your-frontend-container на anythingllm, librechat или другое имя контейнера:
docker exec your-frontend-container sh -lc \
"wget -qO- 'http://search-gateway:8080/search?q=how+to+install+docker+compose&format=json' | head -c 1000"Ответ должен содержать results, URL-адреса источников, извлеченное content и диагностику. Сниппеты поиска используются только как четко обозначенный запасной вариант, если сайт блокирует извлечение или достигнут срок запроса.
Настройка внешнего интерфейса
Используйте следующий базовый URL везде, где внешний интерфейс запрашивает URL SearXNG:
http://search-gateway:8080Если он запрашивает полный путь поиска, используйте:
http://search-gateway:8080/searchAnythingLLM требует полный путь поиска, даже если его поле называется SearXNG API Base URL. Настройте его как:
http://search-gateway:8080/searchСтандартный запрос:
GET /search?q=your+question&format=jsonПоддерживаемые параметры запроса включают:
language=autotime_range=day|week|month|yearcategories=general,it,news,science,imagesmax_results=1..8mode=auto|quick|balanced|deep
Если категория не указана, шлюз определяет полезные категории SearXNG на основе запроса. auto использует быстрый режим для простых запросов и сбалансированный режим для технических вопросов и рекомендаций.
Для прямых интеграций также доступна более богатая конечная точка JSON:
POST /v1/research
Content-Type: application/json
{
"query": "What are the recommended settings for an AW3426DW?",
"mode": "balanced",
"max_results": 5,
"language": "auto",
"categories": []
}Обновление
Из каталога репозитория на VPS:
git pull --ff-only
docker compose config --quiet
docker compose up -d --build --remove-orphans --wait
docker compose psВам не нужно выполнять docker compose down для обычного обновления. Существующий кэш Redis и загрузки ранжировщика остаются в именованных томах.
Эксплуатация
Полезные команды:
docker compose ps
docker compose logs --tail=200 search-gateway searxng reranker
docker compose logs --tail=200 crawl4ai web-runner safe-egress pdf-runner
docker compose restart search-gateway
docker compose down
docker compose up -d --waitdocker compose down сохраняет именованные тома. docker compose down -v удаляет кэш и загруженную модель ранжировщика и должен использоваться только для преднамеренного полного сброса.
Ограничения
Это может приблизиться к размещенным поисковым инструментам для документации, устранения неполадок, настроек продуктов, игр, текущей информации и общих исследований, но не может гарантировать такое же покрытие, как коммерческие провайдеры. Поисковые системы без ключей могут ограничивать скорость IP-адресов дата-центров, некоторые сайты блокируют все автоматизированные браузеры, и ни один отдельный VPS не имеет проприетарных поисковых индексов, используемых Google, Brave или платными поисковыми системами. Шлюз компенсирует это несколькими провайдерами обнаружения, параллельным извлечением, локальным ранжированием, ограниченными запасными вариантами браузера, кэшированием и честными частичными результатами, вместо того чтобы выдумывать ответ.
This server cannot be deployed
Maintenance
Related MCP Connectors
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
MCP tools for agents: web research, content extraction, email, DNS, and blockchain intelligence.
Scrape, crawl and search the web for AI agents via MCP.
Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.
Related MCP Servers
- AlicenseAqualityAmaintenanceProvides local-first web intelligence over MCP with tools for search, fetch, crawl, extract, cache, find-similar, research, and autonomous agent loops, requiring no API keys.10875 npm5,455AGPL 3.0
- AlicenseAqualityAmaintenanceEnables AI agents to run local deep-research workflows via a single MCP stdio server, combining web search, page extraction, query-aware distillation, and caching without cloud quotas. It exposes tools for deep research, search, and single or batch URL reading.679 PyPIMIT
- AlicenseAqualityCmaintenanceGives MCP-capable agents live web access: search the web, scrape pages into Markdown (including JavaScript-heavy and bot-protected sites), and extract named fields as JSON, with job polling, token-aware content offloading, and built-in research guidance. Ships as a self-hostable stdio or HTTP service with spend caps and per-request key support.7MIT
- FlicenseBqualityBmaintenanceExposes web research tools to MCP agents so they can search the web, open and read pages, grep fetched content, manage a local SQLite corpus, and generate citations. Includes a containerized fetcher for headless browsing and PDF extraction.7-