- Python 90.9%
- Makefile 6.8%
- Dockerfile 2.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| mcp_searxng | ||
| tests | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| Makefile | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
MCP-сервер для поиска в интернете через SearxNG
Использование
Переменные окружения
Скопируйте .env.example в .env и заполните нужные значения.
Обязательные:
| Переменная | Описание |
|---|---|
SEARXNG_URL |
URL JSON-эндпоинта SearxNG (например https://search.dimhost.ru/search) |
MCP_AUTH_TOKEN |
Секретный токен для Bearer-авторизации, минимум 32 символа |
Опциональные:
| Переменная | По умолчанию | Описание |
|---|---|---|
SEARXNG_TIMEOUT |
10 |
Таймаут запроса к SearxNG (секунды) |
MAX_RESULTS_CAP |
20 |
Максимальное число результатов поиска |
HOST |
0.0.0.0 |
Адрес, на котором слушает сервер |
PORT |
8000 |
Порт сервера |
LOG_LEVEL |
INFO |
Уровень логирования |
Локальный запуск
uv sync
uv run python -m mcp_searxng
Запуск через Docker
cp .env.example .env
# Установите MCP_AUTH_TOKEN в .env (случайная строка >= 32 символов)
docker compose up -d --build
Сборка и публикация образа
Образ публикуется в Forgejo-реестр git.dev.lab/dmitry/mcp-searxng. Сборка управляется через Makefile:
make build # локальная сборка linux/amd64 (для docker run / compose up)
docker login git.dev.lab
make push # мультиарч (amd64+arm64) сборка и публикация в реестр
make push TAG=v1.2.3 # с конкретным тегом (по умолчанию latest)
make all эквивалентно make push. Переменные REGISTRY и TAG можно переопределять: make push REGISTRY=... TAG=....
Для мультиарч-публикации нужен docker buildx (входит в Docker Desktop) — цель push сама создаёт билдер mcp-searxng-builder с драйвером docker-container, если его ещё нет. image: в docker-compose.yml указывает на тот же образ реестра.
MCP-эндпоинт
Сервер использует транспорт Streamable HTTP. URL эндпоинта:
http://<host>:8000/mcp
Клиенты должны передавать заголовок авторизации:
Authorization: Bearer <MCP_AUTH_TOKEN>
Подключение MCP-клиентов
Сервер удалённый, транспорт Streamable HTTP, авторизация статичным Bearer-токеном. В примерах ниже подставь публичный URL сервера (за reverse-proxy с TLS — https://<домен>/mcp; для локальной проверки — http://localhost:8000/mcp) и значение MCP_AUTH_TOKEN.
BoltAI
BoltAI запускает MCP-серверы как локальные stdio-процессы, поэтому удалённый сервер подключается через мост mcp-remote (этот способ рекомендует и документация BoltAI). Settings → Plugins → MCP Servers → Edit Config, добавь в mcp.json:
{
"mcpServers": {
"searxng": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://<домен>/mcp", "--header", "Authorization:${AUTH_HEADER}"],
"env": { "AUTH_HEADER": "Bearer <MCP_AUTH_TOKEN>" }
}
}
}
Заголовок вынесен в переменную AUTH_HEADER, потому что mcp-remote режет значение --header по пробелу — так пробел остаётся внутри значения переменной. Нужен установленный Node.js (npx).
Claude Desktop
В свежих версиях удалённые серверы добавляются нативно: Settings → Connectors → Add custom connector → транспорт Streamable HTTP, URL https://<домен>/mcp, а в разделе Authentication/Advanced впиши Bearer-токен (<MCP_AUTH_TOKEN>).
Если версия без нативной поддержки удалённых серверов — используй тот же мост mcp-remote, что и для BoltAI, в claude_desktop_config.json (Settings → Developer → Edit Config).
Cursor
Cursor поддерживает удалённые HTTP-серверы нативно. В ~/.cursor/mcp.json (глобально) или .cursor/mcp.json (в проекте):
{
"mcpServers": {
"searxng": {
"url": "https://<домен>/mcp",
"headers": { "Authorization": "Bearer ${env:MCP_AUTH_TOKEN}" }
}
}
}
Cursor подставляет переменные окружения через ${env:VAR} в полях url и headers, так что токен не хранится в файле в открытом виде.
Healthcheck
GET http://<host>:8000/health
Ответ (без авторизации):
{"status": "ok"}
Инструмент search
Единственный MCP-инструмент — search. Принимает параметры:
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
query |
string |
обязательный | Поисковый запрос |
max_results |
int |
10 |
Количество результатов (не более MAX_RESULTS_CAP) |
Каждый результат содержит поля: title, url, content, engine, score.
Пример curl-запроса к серверу
curl -s -G "https://search.dimhost.ru/search" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
--data-urlencode "q=MCP protocol" \
--data "format=json"
Пример ответа
{
"query": "MCP protocol",
"results": [
{
"url": "https://modelcontextprotocol.io/docs/getting-started/intro",
"title": "What is the Model Context Protocol (MCP)? - Model Context Protocol",
"content": "MCP (Model Context Protocol) is an open-source standard for connecting AI applications to external systems. Using MCP, AI applications like Claude or ChatGPT ...",
"thumbnail": null,
"engine": "google",
"template": "default.html",
"parsed_url": [
"https",
"modelcontextprotocol.io",
"/docs/getting-started/intro",
"",
"",
""
],
"img_src": "",
"priority": "",
"engines": [
"startpage",
"google"
],
"positions": [
1,
1
],
"score": 4.0,
"category": "general",
"publishedDate": null
},
{
"url": "https://habr.com/ru/articles/879970/",
"title": "Model Context Protocol (MCP): Стандартизация взаимодействия ...",
"content": "6 февр. 2025 г. · Model Context Protocol – это протокол, который стандартизирует интерфейс между клиентом и MCP сервером. Архитектура MCP. На данный момент ...",
"thumbnail": null,
"engine": "google",
"template": "default.html",
"parsed_url": [
"https",
"habr.com",
"/ru/articles/879970/",
"",
"",
""
],
"img_src": "",
"priority": "",
"engines": [
"startpage",
"google"
],
"positions": [
2,
7
],
"score": 1.2857142857142856,
"category": "general",
"publishedDate": null
},
{
"url": "https://en.wikipedia.org/wiki/Model_Context_Protocol",
"title": "Model Context Protocol - Wikipedia",
"content": "MCP provides a standardized interface for reading files, executing functions, and handling contextual prompts. Following its announcement, the protocol was ...",
"thumbnail": null,
"engine": "google",
"template": "default.html",
"parsed_url": [
"https",
"en.wikipedia.org",
"/wiki/Model_Context_Protocol",
"",
"",
""
],
"img_src": "",
"priority": "",
"engines": [
"startpage",
"google"
],
"positions": [
3,
4
],
"score": 1.1666666666666665,
"category": "general",
"publishedDate": null
},
{
"url": "https://habr.com/ru/articles/893482/",
"title": "MCP (Model Context Protocol) - Habr",
"content": "Mar 23, 2025 ... Основная цель MCP — создание унифицированного протокола связи между большими языковыми моделями (LLM) и внешними источниками данных и ...",
"publishedDate": null,
"engine": "startpage",
"template": "default.html",
"parsed_url": [
"https",
"habr.com",
"/ru/articles/893482/",
"",
"",
""
],
"img_src": "",
"thumbnail": "",
"priority": "",
"engines": [
"startpage"
],
"positions": [
2
],
"score": 0.5,
"category": "general"
},
{
"url": "https://github.com/modelcontextprotocol",
"title": "Model Context Protocol - GitHub",
"content": "The Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools.",
"publishedDate": null,
"engine": "startpage",
"template": "default.html",
"parsed_url": [
"https",
"github.com",
"/modelcontextprotocol",
"",
"",
""
],
"img_src": "",
"thumbnail": "",
"priority": "",
"engines": [
"startpage"
],
"positions": [
3
],
"score": 0.3333333333333333,
"category": "general"
},
{
"url": "https://blog.albato.ru/obzor-na-model-context-protocol-mcp-ot-anthropic/",
"title": "Обзор на Model Context Protocol (MCP) от Anthropic - Блог Albato.ru",
"content": "19 мая 2025 г. · MCP — это протокол, который позволяет ИИ-агентам не только отвечать на запросы пользователей, но и выполнять реальные действия во внешних ...",
"thumbnail": null,
"engine": "google",
"template": "default.html",
"parsed_url": [
"https",
"blog.albato.ru",
"/obzor-na-model-context-protocol-mcp-ot-anthropic/",
"",
"",
""
],
"img_src": "",
"priority": "",
"engines": [
"google"
],
"positions": [
4
],
"score": 0.25,
"category": "general",
"publishedDate": null
},
{
"url": "https://bigdataschool.ru/blog/news/machine-learning/what-is-mcp-for-llm/",
"title": "Что MCP-протокол, как он устроен и почему важен для LLM",
"content": "Оценка 4,9(96)7 апр. 2025 г. · Model Context Protocol (MCP) предоставляет стандартизированный способ подключения LLM к необходимому им контексту. Он позволяет разработчикам ...",
"thumbnail": null,
"engine": "google",
"template": "default.html",
"parsed_url": [
"https",
"bigdataschool.ru",
"/blog/news/machine-learning/what-is-mcp-for-llm/",
"",
"",
""
],
"img_src": "",
"priority": "",
"engines": [
"google"
],
"positions": [
5
],
"score": 0.2,
"category": "general",
"publishedDate": null
},
{
"url": "https://www.anthropic.com/news/model-context-protocol",
"title": "Introducing the Model Context Protocol - Anthropic",
"content": "Nov 25, 2024 ... The Model Context Protocol (MCP) is an open standard for connecting AI assistants to the systems where data lives, including content ...",
"publishedDate": null,
"engine": "startpage",
"template": "default.html",
"parsed_url": [
"https",
"www.anthropic.com",
"/news/model-context-protocol",
"",
"",
""
],
"img_src": "",
"thumbnail": "",
"priority": "",
"engines": [
"startpage"
],
"positions": [
5
],
"score": 0.2,
"category": "general"
},
{
"url": "https://habr.com/ru/companies/mws/articles/1042792/",
"title": "Как создавать умных ИИ-агентов: работа с MCP - Habr",
"content": "4 июн. 2026 г. · Для решения этих проблем был создан протокол Model Context Protocol (MCP), призванный стандартизировать взаимодействие между LLM и внешними ...",
"thumbnail": null,
"engine": "google",
"template": "default.html",
"parsed_url": [
"https",
"habr.com",
"/ru/companies/mws/articles/1042792/",
"",
"",
""
],
"img_src": "",
"priority": "",
"engines": [
"google"
],
"positions": [
6
],
"score": 0.16666666666666666,
"category": "general",
"publishedDate": null
},
{
"url": "https://anthropic.skilljar.com/introduction-to-model-context-protocol",
"title": "Introduction to Model Context Protocol - Anthropic Courses",
"content": "This course covers MCP, a protocol for connecting Claude to external services and data sources without manually writing tool schemas.",
"publishedDate": null,
"engine": "startpage",
"template": "default.html",
"parsed_url": [
"https",
"anthropic.skilljar.com",
"/introduction-to-model-context-protocol",
"",
"",
""
],
"img_src": "",
"thumbnail": "",
"priority": "",
"engines": [
"startpage"
],
"positions": [
6
],
"score": 0.16666666666666666,
"category": "general"
},
{
"url": "https://blog.logto.io/ru/what-is-mcp",
"title": "Что такое MCP (Протокол Контекста Модели) и как он работает",
"content": "3 мар. 2025 г. · MCP (Протокол Контекста Модели) — это открытый универсальный протокол, который стандартизирует, как приложения предоставляют информацию о ...",
"thumbnail": null,
"engine": "google",
"template": "default.html",
"parsed_url": [
"https",
"blog.logto.io",
"/ru/what-is-mcp",
"",
"",
""
],
"img_src": "",
"priority": "",
"engines": [
"google"
],
"positions": [
7
],
"score": 0.14285714285714285,
"category": "general",
"publishedDate": null
},
{
"url": "https://www.youtube.com/watch?v=kOhLoixrJXo&vl=ru",
"title": "MCP In 26 Minutes (Model Context Protocol) - YouTube",
"content": "15 окт. 2025 г. · ... Protocol (MCP), how it works, how to use MCP servers, and how to build your own MCP servers with both code & no code. Want to get ahead ...",
"thumbnail": null,
"engine": "google",
"template": "default.html",
"parsed_url": [
"https",
"www.youtube.com",
"/watch",
"",
"v=kOhLoixrJXo&vl=ru",
""
],
"img_src": "",
"priority": "",
"engines": [
"google"
],
"positions": [
8
],
"score": 0.125,
"category": "general",
"publishedDate": null
},
{
"url": "https://cloud.google.com/discover/what-is-model-context-protocol",
"title": "What is Model Context Protocol (MCP)? A guide | Google Cloud",
"content": "Learn how the Model Context Protocol (MCP) standard allows LLMs to safely access external data and use tools, making AI more powerful and reliable.",
"publishedDate": null,
"engine": "startpage",
"template": "default.html",
"parsed_url": [
"https",
"cloud.google.com",
"/discover/what-is-model-context-protocol",
"",
"",
""
],
"img_src": "",
"thumbnail": "",
"priority": "",
"engines": [
"startpage"
],
"positions": [
8
],
"score": 0.125,
"category": "general"
},
{
"url": "https://ru.wikipedia.org/wiki/Model_Context_Protocol",
"title": "Model Context Protocol - Википедия",
"content": "Model Context Protocol (сокр. MCP, «Протокол контекста модели») — открытый протокол прикладного уровня для взаимодействия языковых моделей (LLM) с внешними ...",
"thumbnail": null,
"engine": "google",
"template": "default.html",
"parsed_url": [
"https",
"ru.wikipedia.org",
"/wiki/Model_Context_Protocol",
"",
"",
""
],
"img_src": "",
"priority": "",
"engines": [
"google"
],
"positions": [
9
],
"score": 0.1111111111111111,
"category": "general",
"publishedDate": null
},
{
"url": "https://modelcontextprotocol.io/specification/2025-11-25",
"title": "Specification - Model Context Protocol",
"content": "Nov 25, 2025 ... Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools.",
"publishedDate": null,
"engine": "startpage",
"template": "default.html",
"parsed_url": [
"https",
"modelcontextprotocol.io",
"/specification/2025-11-25",
"",
"",
""
],
"img_src": "",
"thumbnail": "",
"priority": "",
"engines": [
"startpage"
],
"positions": [
9
],
"score": 0.1111111111111111,
"category": "general"
},
{
"url": "https://www.databricks.com/blog/what-is-model-context-protocol",
"title": "What is the Model Context Protocol (MCP)? - Databricks",
"content": "The Model Context Protocol (MCP) is an open standard that enables AI applications to connect seamlessly with external data sources, tools, and systems. Think of ...",
"publishedDate": null,
"engine": "startpage",
"template": "default.html",
"parsed_url": [
"https",
"www.databricks.com",
"/blog/what-is-model-context-protocol",
"",
"",
""
],
"img_src": "",
"thumbnail": "",
"priority": "",
"engines": [
"startpage"
],
"positions": [
10
],
"score": 0.1,
"category": "general"
}
],
"answers": [],
"corrections": [],
"infoboxes": [],
"suggestions": [],
"unresponsive_engines": [
[
"brave",
"Приостановлено: слишком много запросов"
],
[
"duckduckgo",
"КАПЧА"
],
[
"wikidata",
"истекло время ожидания"
]
]
}