Полтора года назад MCP‑серверов были десятки, сейчас десятки тысяч. Найти нужный стало отдельной задачей: официальный реестр хранит голые метаданные, awesome‑списки устаревают за неделю, а у большинства каталогов нет главного, установки и проверки безопасности.
Я строю Unyly, агрегатор MCP‑серверов. Сейчас в каталоге больше 80 тысяч записей из девяти источников. Расскажу, как это устроено технически: пайплайн агрегации, дедупликация, резолв установочных команд, security‑сканы, health‑чеки remote‑серверов и шлюз, который отдаёт весь каталог агенту через одно подключение.
Пайплайн агрегации
Каждую ночь запускается ingest из девяти источников: официальный реестр MCP, GitHub, npm, PyPI, crates.io, Docker MCP Catalog, Smithery, Glama и PulseMCP. У каждого источника свой характер.
GitHub Search API отдаёт максимум 1000 результатов на запрос, а по topic:mcp‑server репозиториев больше двадцати тысяч. Решение: нарезка запроса на диапазоны по звёздам, каждый слайс укладывается в свой лимит:
topic:mcp-server stars:>=30
topic:mcp-server stars:10..29
topic:mcp-server stars:4..9
topic:mcp-server stars:2..3
topic:mcp-server stars:1
topic:mcp-server stars:0
У PyPI поискового API нет вообще. Есть simple‑индекс: один JSON на 42 мегабайта со списком всех 900 тысяч пакетов. Качаем целиком, фильтруем по вхождению mcp (получается около 19 тысяч кандидатов), затем инкрементально забираем метаданные, по две тысячи новых пакетов за прогон.
PulseMCP оказался самым капризным: их API случайным образом отвечает 410 Gone примерно на половину запросов. Один и тот же URL: 200, 410, 200, 410. Лечится ретраями с бэкоффом.
Docker, наоборот, образцовый источник: курируемый неймспейс mcp/ на Docker Hub, и это единственное место, где установочной команде можно верить сразу.
Дедупликация и мусор
Один и тот же сервер живёт в npm, GitHub и трёх каталогах под разными именами. Поэтому сырые размеры каталогов сравнивать бессмысленно: краулер считает форки и мёртвые пакеты, куратор считает проверенное. Мы дедуплицируем по источнику и слагу, при конфликте приоритет у курируемых записей.
Второе открытие: примерно 30% пакетов со словом mcp в названии вообще не серверы. Это клиенты, SDK, обвязки и учебные демки. Отсеиваем эвристиками по описанию, наличию инструментов и структуре репозитория. То, что просочилось, не попадает в поиск и sitemap: за свалку тонких страниц поисковики наказывают весь домен.
Установочные команды нельзя угадывать
Частая ошибка каталогов: у записи из краула нет опубликованного пакета, но кнопка установки всё равно показывает npx. Получается команда, которая запускает ничего. Наше правило: не знаешь команду, не показывай команду. Отдельный процесс ходит по репозиториям и резолвит реальный способ установки (npm‑пакет, uvx, docker run, clone‑and‑build), до этого страница ведёт на репозиторий.
Когда команда известна, установка работает в один клик: кнопка определяет клиент и отдаёт deep‑link (cursor://, vscode://), готовый конфиг‑блок для Claude Desktop или команду claude mcp add. Для ChatGPT и claude.ai, где серверы подключаются как коннекторы, генерируется пошаговый мастер.
Security‑сканы
Ставить случайный сервер из интернета в свой Claude рискованно: он получает env‑переменные и доступ ко всему, что вы ему выдали. Каждый сервер в каталоге проходит статический скан: какие переменные окружения запрашивает, какие разрешения подразумевает, жив ли репозиторий, когда был последний релиз. Из этого собирается score, он виден на странице сервера до установки.
Health‑чеки remote‑серверов
Remote MCP подключается по URL, и мёртвых эндпоинтов в экосистеме больше, чем хотелось бы. Раз в час мы дёргаем каждый remote‑эндпоинт настоящим JSON‑RPC initialize (не пингом: сервер может отвечать на ping и не быть MCP). Ответ с кодом меньше 500 означает живой, включая 401, это сервер, который просто хочет OAuth. Статус и время проверки видны на странице.
Шлюз: весь каталог через одно подключение
Для тех, кому лень ставить серверы по одному, есть gateway.unyly.org/mcp: один remote‑сервер с OAuth 2.1, который отдаёт агенту три мета‑инструмента: search_mcps (поиск по каталогу), list_mcp_tools (посмотреть инструменты сервера), use_mcp_tool (вызвать). Агент сам находит нужный сервер и работает с ним, ничего не устанавливая. Подключается к Claude, ChatGPT и Cursor одной строкой.
Цифры и карта экосистемы
Живую статистику публикуем открыто: количество серверов по языкам и источникам, динамика по неделям, доля remote, покрытие сканами. Это на unyly.org/stats, можно ссылаться. Там же честная карта всех каталогов экосистемы, включая конкурентов, с реальными размерами: unyly.org/mcp‑directories.
Каталог бесплатный, платных размещений нет. Если у вас свой сервер, добавьте его через unyly.org/submit: попадёт в поиск, сравнения и к AI‑краулерам.
Про отдельное приключение, как заставить Google индексировать 80 тысяч программатик‑страниц (спойлер: fetch README с GitHub на каждый запрос убивает crawl budget), напишу отдельно, если интересно. На вопросы отвечу в комментариях.
Автор: fasad_salatov


