Коротко: я взял 30 публичных MCP-серверов, попытался прогнать их через детерминированный CI-сканер и довольно быстро понял, что проблема экосистемы - не только в рискованных тулзах, но и в банальной launchability: часть серверов не стартует в headless-режиме, часть требует скрытую конфигурацию, часть ломает протокол мусором в
stdout.
Сейчас MCP-серверы стали для LLM-агентов тем же, чем когда-то были обычные пакеты и API-интеграции для разработчиков: стандартный способ дать модели доступ к инструментам, данным и внешним действиям.
На практике это выглядит очень просто: мы видим сервер в реестре, подключаем его к Cline, Roo Code, Codex или другому клиенту - и ожидаем, что дальше всё заработает само.
Но довольно часто вместо этого происходит что-то из следующего:
агент зависает на инициализации;
инструмент стартует, но потом падает из-за кривой схемы;
сервер пишет в
stdoutлишний текст и ломает JSON-RPC;модель начинает галлюцинировать аргументами, потому что входная схема описана слишком слабо;
в процесс внезапно утекает высокий blast radius: файловая система, сетевые вызовы, команды оболочки.
В какой-то момент я понял, что у экосистемы не хватает очень базовой вещи: детерминированного слоя первичной проверки, который можно прогонять локально и в CI до того, как MCP-сервер попадёт в реальные агентные сценарии.
Так появился мой инструмент - MCP Scorecard: детерминированный CI-first сканер качества MCP-серверов. А чтобы проверить, не является ли он просто красивой демкой на одном тестовом fixture, я прогнал через него 30 публичных MCP-серверов.
Результат оказался интереснее, чем я ожидал.
О чём эта статья
В статье я хочу показать три вещи:
Что именно я проверял и почему решил не использовать LLM-as-a-judge.
Что получилось на batch из 30 публичных MCP-серверов.
Почему главный вывод оказался не только про security, но и про launchability.
А в конце покажу сам инструмент и объясню, где он реально полезен, а где пока нет.
Что такое MCP Scorecard
MCP Scorecard - это детерминированный сканер для MCP-серверов.
Он делает довольно простую, но важную работу:
запускает MCP-сервер локально через
stdio;проходит
initialize;получает
tools/list;прогоняет доступную инструментальную поверхность через набор проверок;
считает score;
сохраняет результат в:
terminal summary,
JSON report,
SARIF,
GitHub Actions summary.
Что именно оценивается
Сейчас у MCP Scorecard четыре метрики:
Соблюдение протокола: правильно ли написаны схемы и не ломается ли базовый контракт общения (без душной полной сертификации).
Безопасность: не дает ли сервер языковой модели гранату в руки (доступ к консоли, удалению файлов или сети).
Удобство для ИИ: насколько понятно описаны аргументы, чтобы модель не галлюцинировала и не пыталась угадывать параметры вслепую.
Заполнение метаданных: есть ли у функций названия и описания, пригодные для машинной обработки.
Почему не LLM-as-a-judge
Я сознательно отказался от популярного сейчас подхода LLM-as-a-judge. В нашем случае речь идет не о субъективных материях вроде того, «какой ответ выглядит красивее», а о грубых, математически проверяемых фактах, от которых зависит стабильность системы.
Инструменту нужно жестко отловить слабые схемы типизации и запретить передачу произвольных параметров, из-за которых модель начинает фантазировать. Он должен автоматически подсвечивать очевидные дыры: торчащий наружу доступ к записи файлов, возможность делать произвольные сетевые запросы или скрытые критически важные поля. Наконец, сканер банально проверяет, не вываливает ли сервер отладочный мусор в stdout, разрушая тем самым чистый контракт общения по протоколу. По своей архитектуре это классический строгий линтер, а не нейросеть-оценщик с её неизбежной предвзятостью и галлюцинациями.
Как я собирал тестовую выборку
Я взял 30 публичных MCP-серверов из разных категорий и разных разработчиков:
4 официальных reference server’а от
modelcontextprotocol;26 публичных серверов из реестра и смежных источников.
Ограничения выборки
Сразу важный дисклеймер: это не рейтинг всей MCP-экосистемы. У этого прогона были жёсткие условия:
только
stdio-серверы;только headless запуск;
без API-ключей;
без ручной настройки;
без интерактивной авторизации;
запуск best-effort на Windows через
npx.cmd.
Это значит, что я проверял не “абсолютное качество всех MCP-серверов на свете”, а более узкую вещь:
насколько публичный MCP-сервер готов к слепому reproducible запуску и первичному review в CI-подобном сценарии.
Как оценивался результат
Для каждого сервера сценарий был один и тот же:
mcp-scorecard scan --json-out <report.json> --cmd <server command>
Сервер считался успешно обработанным, если:
он стартовал;
прошёл
initialize;отдал список инструментов;
по нему был построен scorecard report.
Сервер считался неуспешным, если происходило что-то из следующего:
launch failure;
timeout на инициализации;
missing env/config;
сервер писал не-MCP текст в
stdout;сломан package entrypoint;
сервер требовал интерактивной подготовки.
Краткие итоги сканирования
Метрика | Значение |
|---|---|
Попыток | 30 |
Успешных сканов | 16 |
Fail на launch/init | 14 |
Success rate | 53.3% |
No-env серверов | 19 |
Успешных среди no-env | 12 |
Env-required серверов | 11 |
Успешных без секретов | 4 |
Средний score по успешным | 88.75 |
Распределение score по успешным
Score | Количество серверов |
|---|---|
100/100 | 7 |
90/100 | 7 |
50/100 | 1 |
40/100 | 1 |
Вывод
Самая частая детерминированная проблема среди успешно просканированных серверов:
weak_input_schema- 7 серверов
1. Success vs Failure

2. Score distribution

3. Failure reasons

Инсайт 1. У MCP сейчас есть проблема launchability
Самое неприятное открытие ждало меня еще до подсчета баллов. Из 30 серверов только 16 вообще дошли до стадии скоринга. Почти половина отвалилась на старте из-за банальных проблем: скрытых конфигураций, не задокументированных переменных окружения, тайм-аутов инициализации или просто кривой упаковки. Самая абсурдная и частая ошибка - когда сервер успешно стартует, но выводит приветственный текст прямо в stdout, намертво ломая JSON-RPC протокол.
Это критически важный момент. Когда мы видим в реестре "публичный MCP-сервер", это совершенно не гарантирует, что он готов к работе в CI-конвейере или способен запуститься в headless-режиме без "ручной магии" со стороны пользователя.
Именно поэтому я пришел к главному архитектурному выводу всего исследования: оценку серверов необходимо жестко разделять на два слоя. Первый - это Layer 0 (Preflight / Launchability), где мы проверяем базовую жизнеспособность: стартует ли сервер, проходит ли инициализацию, не мусорит ли в stdout и не требует ли скрытой настройки. И только те, кто выжил на нулевом слое, допускаются на Layer 1 (Scorecard / Reviewability), где мы уже оцениваем качество схем, эргономику, метаданные и риски безопасности. Без такого разделения любое массовое слепое сканирование теряет смысл.
Инсайт 2. Даже у “живых” серверов часто слабая инструментальная поверхность
Когда убрать тех, кто не стартует вообще, оказывается, что следующая массовая проблема - это качество схем.
Самый частая причина в успешной группе - weak_input_schema.
На практике это значит, что сервер формально работает, но его входная поверхность описана слишком слабо:
нет достаточной типизации;
разрешены слишком свободные поля;
не хватает
required;вход выглядит недоопределённым для надёжного агентного вызова.
Почему это бьёт именно по агентам
Человек ещё может догадаться, что хотел автор API. LLM в таком месте начинает достраивать аргументы по вероятности.
Результат знакомый:
неправильный вызов;
ошибка сервера;
ретрай;
ещё один ретрай;
токены и время улетают в пустоту.
То есть слабая схема - это не “косметический минус”. Для агентного стека это прямой удар по надёжности и стоимости.
Инсайт 3. Низкий score не всегда означает “плохой сервер”
Самый показательный кейс - официальный сервер:
@modelcontextprotocol/server-memory→ 100/100@modelcontextprotocol/server-filesystem→ 40/100
На первый взгляд хочется сказать: “ну вот, filesystem плохой”. Но это было бы неверно.
Что на самом деле означает 40/100 у filesystem server
Это не баг и не обвинение в том, что сервер написан плохо. Это сигнал о том, что его инструментальная поверхность по определению рискованна для автономного агентного исполнения.
Например, scorecard закономерно подсвечивает такие вещи, как:
create_directoryedit_filewrite_file
То есть вопрос не в том, “хороший” это сервер или “плохой”. Вопрос в том, какую ты даёшь свободу агенту, когда подключаешь этот сервер в реальный workflow.
И в этом смысле низкий score полезен: он заставляет не перепутать “легитимный use case” с “безопасной поверхностью по умолчанию”.
Это важный момент
MCP Scorecard не оценивает бизнес-логику. Он измеряет проверяемую поверхность риска. Это ровно то, что должен видеть инженер, когда подключает инструмент к агенту.
Вот как можно переписать этот блок, убрав лишний жаргон, но сохранив плотность и инженерную глубину текста:
Инсайт 4. Публичный реестр полезен для поиска, но не гарантирует воспроизводимый запуск
Официальный каталог отлично справляется с задачей обнаружения (discovery) новых серверов. Однако наше массовое сканирование быстро показало: найти проект и честно запустить его в автоматическом режиме - это две совершенно разные задачи.
Что выяснилось на практике:
некоторые проекты заявлялись как не требующие настройки, но по факту падали без скрытой конфигурации при запуске;
часть пакетов имела корректные исполняемые файлы, но всё равно выводила приветственный или отладочный текст в
stdout(намертво ломая тем самым JSON-RPC протокол);многие серверы успешно устанавливались, но оказались абсолютно не готовы к автоматическому запуску в CI-конвейере вслепую.
В этом нет вины конкретных авторов. Это естественный признак молодой и еще не устоявшейся экосистемы.
Самый полезный вывод из всего эксперимента
Главный итог прогона для меня звучит так:
MCP Scorecard доказал свою эффективность как строгий инструмент детерминированного аудита. Но он работает только для тех серверов, которые действительно способны чисто стартовать и корректно ответить на базовые запросы протокола (initialize и tools/list).
Стало очевидно, что массовое автоматическое сканирование публичных проектов - это не только задача оценки качества (скоринга). Это в первую очередь проблема «предполетной подготовки» и банальной готовности пакетов к автономному запуску.
И этот инсайт, на мой взгляд, куда честнее и полезнее для индустрии, чем публикация банального списка «топ-10 лучших и худших MCP-серверов».
Что такое MCP Scorecard на практике
Сейчас инструмент полезен в трёх сценариях:
1. Локальный pre-adoption review
Перед тем как подключать сервер к агенту, можно быстро посмотреть:
что он вообще открывает наружу;
насколько понятны схемы;
есть ли опасные capability surfaces.
2. CI gate
Если вы публикуете собственный MCP-сервер, можно добавить score threshold в CI:
steps: - name: Проверка MCP сервера uses: aak204/MCP-Scorecard@v1.0.0 with: cmd: python path/to/your/server.py min-score: "80" json-out: mcp-scorecard-report.json sarif-out: mcp-scorecard-report.sarif
3. Reproducible review artifact
На выходе остаются:
terminal summary;
JSON report;
SARIF;
GitHub Actions summary.
Это удобно не только для “прошёл / не прошёл”, но и для диффов между релизами.
Что я бы делал дальше
Следующий логичный шаг уже понятен.
1. Добавить preflight stage
Чтобы разделять:
launchablerequires_authinteractivebroken packagingnon-MCP stdoutinit_timeout
2. Не смешивать launch failures со score
Отчет должен чётко разделять:
кто вообще дошёл до scoring;
кто не дошёл и почему.
3. Публиковать результаты как reproducible dataset, а не как “чёрный список”
Это очень важно для доверия.
Заключение
Мне кажется, у MCP сейчас очень знакомая фаза взросления.
Стандарт уже появился. Инструменты уже появляются. Реестр уже появился. Интерес огромный.
Но вокруг этого ещё не сформировалась нормальная инженерная дисциплина:
как проверять server surface;
как оценивать schema hygiene;
как отделять легитимный риск от небрежной упаковки;
как reproducibly запускать чужие серверы без ручной магии.
И именно здесь deterministic tooling начинает быть полезным.
Не как “умная AI-платформа”, а как скучный, воспроизводимый, reviewable слой инфраструктуры.
Для меня сборка из 30 серверов была полезена ровно этим: она показала, что проблема реальна, а сам инструмент уже не выглядит игрушкой.
Ссылки
Репозиторий: MCP Scorecard
