lazaretto-mcp
Узнайте, что делает пакет, прежде чем устанавливать его.
MCP-сервер для Lazaretto: детерминированная проверка npm-пакетов, навыков AI-агентов и инструментов MCP перед установкой.
Бесплатная проверка lockfile сверяет каждую зависимость с точно зафиксированной версией с базами OSV и OpenSSF, содержащими сведения о вредоносных пакетах. Аккаунт не требуется. Платное сканирование дополнительно анализирует поведение и приводит доказательства с указанием файлов и строк.
Этот пакет — тонкий интерфейс к API Lazaretto. Он не содержит логики обнаружения и только отправляет HTTPS-запросы, поэтому его можно быстро прочитать целиком.
Если вы настраиваете сервер как агент и у вас нет другого контекста, прочитайте llms-install.md. Там приведена та же информация в виде последовательной инструкции.
Два способа запуска
| Размещённый сервер (рекомендуется) | Пакет stdio | |
|---|---|---|
| Endpoint | https://lazaretto.dev/mcp | npx -y lazaretto-mcp |
| Установка | не требуется | Node 20 или новее |
| Где указывается ключ | в заголовке X-API-Key | в переменной окружения LAZARETTO_API_KEY |
| Получить бесплатный ключ во время сеанса | да, с помощью инструмента get_free_key | нет, отправьте запрос к trial endpoint через curl |
| Найти сервер для задачи | да, с помощью инструмента find_mcp_servers | нет |
| Читает lockfile с диска | нет, текст нужно передать самостоятельно | да, из рабочей директории |
| Нужен клиент с поддержкой Streamable HTTP | да | нет |
В обоих вариантах доступны одни и те же восемь инструментов. Размещённый сервер предоставляет ещё два бесплатных инструмента: find_mcp_servers для поиска серверов по задаче в официальном реестре MCP и get_free_key для получения бесплатного ключа разработчика во время сеанса.
Выбирайте размещённый сервер, если только ваш клиент не поддерживает удалённые серверы или вам не нужно, чтобы check_lockfile читал lockfile с диска. В последнем случае большое дерево зависимостей не придётся передавать в контекст модели.
Настройка
Claude Code
Размещённый сервер, одна команда:
claude mcp add --transport http lazaretto https://lazaretto.dev/mcp
Чтобы использовать инструменты с оплатой по мере использования, укажите ключ:
claude mcp add --transport http lazaretto https://lazaretto.dev/mcp \
--header "X-API-Key: YOUR_KEY"
Вариант stdio:
claude mcp add lazaretto --env LAZARETTO_API_KEY=YOUR_KEY -- npx -y lazaretto-mcp
Уберите --env LAZARETTO_API_KEY=YOUR_KEY, если вам нужны только бесплатные инструменты.
Чтобы подключить сервер для всей команды, добавьте этот блок в .mcp.json в корне репозитория вместо выполнения команды:
{
"mcpServers": {
"lazaretto": {
"type": "http",
"url": "https://lazaretto.dev/mcp"
}
}
}
Обратите внимание: для использования сервера, указанного в .mcp.json на уровне проекта, пользователь должен один раз его подтвердить. До подтверждения команда claude mcp list показывает Pending approval (run claude to approve), а инструменты недоступны. Команды claude mcp add, приведённые выше, начинают работать сразу и не требуют подтверждения. Используйте их, если хотите подключить сервер в текущем сеансе.
Проверьте подключение командой claude mcp list. Статус сервера должен быть Connected.
Cursor
Подключение в один клик с бесплатными инструментами: Добавить в Cursor. Чтобы добавить ключ или настроить сервер вручную, отредактируйте ~/.cursor/mcp.json, чтобы подключить его для всех проектов, или .cursor/mcp.json, чтобы подключить только для одного:
{
"mcpServers": {
"lazaretto": {
"url": "https://lazaretto.dev/mcp",
"headers": {
"X-API-Key": "YOUR_KEY"
}
}
}
}
Уберите блок headers, если вам нужны только бесплатные инструменты. Для варианта stdio замените url и headers на:
{
"mcpServers": {
"lazaretto": {
"command": "npx",
"args": ["-y", "lazaretto-mcp"],
"env": { "LAZARETTO_API_KEY": "YOUR_KEY" }
}
}
}
Cursor перечитывает файл после сохранения. В разделе Settings, MCP сервер lazaretto должен отображаться вместе со своими инструментами.
Gemini CLI
Установите сервер как расширение. Оно подключает размещённый сервер с бесплатными инструментами и добавляет короткий файл GEMINI.md с указаниями для агента, когда запускать проверку:
gemini extensions install https://github.com/jamesdfinance-dev/lazaretto-mcp
Для инструментов с оплатой по мере использования нужен ключ, но расширение его не передаёт. Чтобы использовать эти инструменты, добавьте сервер напрямую:
gemini mcp add -s user --transport http --header "X-API-Key: YOUR_KEY" lazaretto https://lazaretto.dev/mcp
Укажите сам ключ, а не $LAZARETTO_API_KEY: Gemini CLI удаляет переменные окружения, в именах которых есть KEY или TOKEN, прежде чем подставлять значения в заголовки.
Cline
Откройте панель MCP Servers, затем выберите Configure MCP Servers — откроется файл cline_mcp_settings.json. Добавьте приведённый ниже блок и не удаляйте "type": "streamableHttp": без этого параметра Cline переключится на устаревший транспорт SSE, который этот сервер не поддерживает.
{
"mcpServers": {
"lazaretto": {
"type": "streamableHttp",
"url": "https://lazaretto.dev/mcp",
"headers": { "X-API-Key": "YOUR_KEY" },
"disabled": false,
"autoApprove": ["check_lockfile", "known_bad_lookup", "find_attestation", "verify_attestation"]
}
}
}
В autoApprove намеренно перечислены только бесплатные инструменты, чтобы платные инструменты не запускались без вашего ведома. На размещённом сервере есть ещё один бесплатный инструмент — get_free_key. Он не включён в список, поскольку получение ключа стоит контролировать. Уберите блок headers, если вам нужны только бесплатные инструменты. Для варианта stdio замените url и headers на command, args и env, как в примере для Cursor выше.
Любой другой клиент MCP
Удалённое подключение (Streamable HTTP):
{
"mcpServers": {
"lazaretto": {
"url": "https://lazaretto.dev/mcp",
"headers": { "X-API-Key": "YOUR_KEY" }
}
}
}
stdio:
{
"mcpServers": {
"lazaretto": {
"command": "npx",
"args": ["-y", "lazaretto-mcp"],
"env": { "LAZARETTO_API_KEY": "YOUR_KEY" }
}
}
}
Оба поля с ключом можно не указывать. Без ключа бесплатные инструменты будут доступны: четыре в пакете stdio и шесть на размещённом сервере, который дополнительно предоставляет get_free_key и find_mcp_servers. Четыре платных инструмента в этом случае сообщат, как получить кредиты.
С чего начать
В проекте с lockfile попросите агента:
Используй инструмент lazaretto
check_lockfile, чтобы проверить зависимости этого проекта.
На сервере stdio вызовите инструмент без аргументов: он самостоятельно найдёт в рабочей директории package-lock.json, npm-shrinkwrap.json, yarn.lock или pnpm-lock.yaml. Размещённый сервер не имеет доступа к вашему диску, поэтому передайте ему текст lockfile в параметре lockfile или список строк "name@version" в параметре packages, если всё дерево не помещается в контекст. Укажите только один из этих параметров.
Ниже приведён пример результата, если в дереве найдена одна версия известного вредоносного пакета. Сервер stdio добавляет поле source с именем прочитанного файла; на размещённом сервере этого поля нет, поскольку он не обращался к вашему диску.
{
"source": "package-lock.json",
"checked": 2,
"format": "package-lock",
"malicious": [
{ "name": "debug", "version": "4.4.2", "ids": ["MAL-2025-46974"], "advisory_url": "https://osv.dev/vulnerability/MAL-2025-46974" }
],
"unverified": [],
"truncated": false,
"skipped": { "count": 0, "reason": "..." },
"note": "1 pinned package version is listed as malware. Remove or upgrade before installing.",
"disclaimer": "..."
}
Пустой список malicious означает, что всё чисто, только если список unverified тоже пуст, а значение truncated равно false. Пакеты в unverified не проверялись, поэтому считать их безопасными нельзя.
Значение truncated: true означает, что список прочитан не полностью. Если lockfile превышает лимит пакетов на запрос, его содержимое обрезается. Пакеты сверх лимита не попадают ни в malicious, ни в unverified: проверка их не затронула, а checked учитывает только проверенные пакеты. Выполните проверку один раз для каждой рабочей области или передайте оставшуюся часть дерева, прежде чем считать зависимости безопасными.
skipped — это объект, а не список: в нём указано количество записей без опубликованного в реестре идентификатора пакета и причина его отсутствия.
Нет lockfile под рукой? Для known_bad_lookup нужен только хеш:
known_bad_lookup with sha256 = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Это хеш пустого файла, поэтому ожидаемый результат — отсутствие совпадений. Так можно проверить, что подключение работает.
Проверить сервис можно и без клиента MCP:
curl -s https://lazaretto.dev/check --data-binary @package-lock.json
Мы не сохраняем копии вашего lockfile.
Бесплатные инструменты и инструменты с оплатой
Бесплатно, без ключа и учётной записи:
-
check_lockfile -
known_bad_lookup -
find_attestation -
verify_attestation
Бесплатно, только на hosted-сервере:
-
find_mcp_serversнаходит удалённые серверы в официальном реестре MCP по задаче («postgres», «отправка сообщений в Slack»). Для каждого сервера указываются его endpoint, инструменты, команда для добавления и наша еженедельная оценка. Серверы, которые мы пометили или до которых не удалось достучаться, не отображаются. -
get_free_keyвыпускает ключ разработчика с небольшим дневным лимитом, который обновляется каждый день. Оплата, учётная запись и банковская карта не нужны. Ключ показывается только один раз — сохраните его. На один источник можно получить не более одного ключа за период.
Платные инструменты: для работы нужны кредиты на ключе:
-
scan_artifact(один кредит за артефакт) -
scan_lockfile_deep(один кредит за каждый пакет, для которого получен вердикт) -
scan_mcp_server(один кредит) -
check_mcp_tools(один кредит)
За каждый вердикт списывается один кредит. При ошибке кредиты не расходуются. Получить кредиты можно тремя способами:
-
Бесплатный ключ разработчика: вызовите
get_free_keyна hosted-сервере или выполнитеcurl -sX POST https://lazaretto.dev/v1/trialдля stdio-пакета. -
Купите пакет кредитов на https://lazaretto.dev/buy.
-
Агент с кошельком может самостоятельно купить кредиты через x402, отправив запрос на
POST https://lazaretto.dev/v1/credits/topup.
Без кредитов платный инструмент ничего не изменит и ничего не спишет. Он вернёт сообщение с инструкцией, как получить ключ.
Как именно работает оплата
stdio-пакет принимает оплату только одним способом: предоплаченными кредитами на LAZARETTO_API_KEY. В нём нет встроенного x402-клиента. Поэтому результат, для получения которого нужны кредиты, не содержит платёжного запроса x402, на который агент мог бы ответить. Оплата за каждый вызов через этот пакет невозможна. Если вам нужна оплата через x402 за каждый вызов, отправляйте запрос напрямую к https://lazaretto.dev/v1/scan с помощью собственного HTTP-клиента, а не через этот пакет.
Hosted endpoint работает так же: кредиты списываются с предоплаченного баланса при передаче заголовка X-API-Key.
Инструменты
check_lockfile (бесплатно)
Проверяет все зависимости с точно зафиксированными версиями в lockfile на наличие опубликованных рекомендаций о вредоносных пакетах. Одного вызова достаточно для всего дерева зависимостей. Проверить можно только точные версии: для диапазона, например ^5.0.0, нельзя дать однозначный ответ, поскольку скомпрометированный выпуск обычно находится между безопасными версиями. Записи без идентификатора в опубликованном реестре (file:, link:, workspace:, git) не отбрасываются, а учитываются в skipped.
Пустой список malicious означает, что проблем не обнаружено, только если список unverified тоже пуст, а значение truncated равно false. Если truncated равно true, все пакеты сверх лимита на запрос не попали ни в один из списков. Такие пакеты не проверены, а не признаны безопасными: разделите дерево и проверьте оставшуюся часть.
known_bad_lookup (бесплатно)
Известен ли sha256-хеш содержимого как хеш вредоносного артефакта? Инструмент ищет точное совпадение в хранилище индикаторов, которое обновляется ежедневно.
find_attestation (бесплатно)
Есть ли уже аттестация для этого артефакта? Укажите идентификатор пакета, например chalk@5.6.1, URL MCP-сервера или sha256-хеш содержимого. Если аттестация найдётся, инструмент вернёт подписанный вердикт, его возраст, сведения о том, был ли он вынесен по предыдущей версии правил, а также contradicted, если объект теперь известен как вредоносный. Если совпадений нет, значит, аттестация для этого объекта не зарегистрирована. Это не вердикт ни в пользу безопасности, ни в пользу вредоносности.
Если для идентификатора npm-пакета нет аттестации, инструмент вместо неё выполняет бесплатную проверку идентификатора по опубликованным рекомендациям: возвращает answer: "identity_check" и объект identity_check. При этом значение found остаётся false, поскольку проверка идентификатора не подписана, анализирует идентификатор, а не код, и отсутствие в базе не является вердиктом. Оба варианта подключения считают identity_check.listed_as_malware: true результатом с ошибкой, чтобы известная вредоносная версия не отображалась как «ничего не найдено».
verify_attestation (бесплатно)
К результату сканирования прилагается подписанная аттестация (компактный JWS). Передайте этому инструменту аттестацию, полученную от другого агента, из README или lockfile. Он подтвердит, что подпись принадлежит Lazaretto, вернёт утверждения аттестации и установит contradicted, если объект, ранее признанный безопасным (clear), теперь известен как вредоносный. Так вердикт можно использовать без повторного сканирования и повторной оплаты. При этом убедитесь, что запускаемый артефакт соответствует claims.sub.
get_free_key (бесплатно, только на hosted-сервере)
Выпускает ключ разработчика для платных инструментов прямо во время сессии. Оплата, учётная запись и банковская карта не нужны. Ключ предоставляет небольшой дневной лимит, который обновляется каждый день. Передайте его в заголовке X-API-Key при подключении или тому, кто настраивает клиент. Ключ показывается только один раз, и восстановить его нельзя, поэтому сохраните его заранее. Повторный вызов вскоре после первого будет отклонён: второй ключ выдан не будет. В stdio-пакете такого инструмента нет. Вместо него выполните curl -sX POST https://lazaretto.dev/v1/trial.
scan_artifact (платно)
Загружает целевой объект (пакет npm или PyPI, репозиторий GitHub, навык ClawHub, URL или текст, переданный непосредственно инструменту), не запуская его. Возвращает детерминированный вердикт (malicious, flagged, clear, error) и указывает файл, строку и подтверждающие данные для каждого обнаруженного признака.
scan_lockfile_deep (платно)
Поведенческий аналог check_lockfile: читает код каждой зависимости с точно зафиксированной версией — не более 25 пакетов за вызов — вместо проверки только имён и версий. Ориентируйтесь на значение complete_coverage. Если оно равно false, значит, часть данных была ограничена лимитом, вызвала ошибку или прочитана не полностью. Такой результат не подтверждает безопасность всего дерева.
Повторный вызов с тем же lockfile запускает сканирование заново и повторно списывает кредиты за те же первые пакеты. В результат включён список пропущенных пакетов not_scanned.packages в формате строк name@version. Чтобы продолжить проверку, передайте их в packages вместо lockfile:
-
Hosted-сервер: передайте весь список
not_scanned.packagesвpackages. Инструмент проверит первые 25 пакетов, а остальные снова укажет вnot_scanned.packages. -
stdio-пакет: за один вызов в
packagesможно передать не более 25 пакетов. Обрабатывайте элементы изnot_scanned.packagesпартиями по 25. Инструмент добавит в результатnext_call, а вnext_call.packagesпоместит первые 25 пакетов из этого списка.
check_mcp_tools (платно)
Большинство серверов работает через stdio, поэтому к ним нельзя подключиться извне и проверить endpoint. Однако при запуске клиент уже получил список инструментов сервера. Вставьте этот JSON, и мы проанализируем тот же текст по тем же правилам, не обращаясь к серверу.
scan_mcp_server (платно)
Перед подключением укажите endpoint MCP-сервера. Инструмент запрашивает сведения о сервере и список его инструментов, а затем анализирует текст, который сервер передаёт агенту: названия и описания инструментов, схемы параметров и инструкции. Эта информация служит документацией, которой следует модель, поэтому сервер контролирует этот канал инструкций. Инструмент выявляет отравление описаний инструментов — например, скрытые указания прочитать ~/.ssh/id_rsa или файл конфигурации агента, параметры, предназначенные для передачи секретов или истории переписки, а также постоянные инструкции по работе с инструментами другого сервера. В результатах указывается конкретный инструмент, в котором найдено подтверждение. Инструмент вызывает только initialize и tools/list, но не сами инструменты сервера.
Как интерпретировать результат
Отчёты — это сигналы с подтверждающими данными, а не гарантия безопасности. Значение clear означает, что совпадений с известными вредоносными объектами не найдено и ни одно правило не сработало. Это не заключение об уровне риска.
Переменные окружения (только для stdio)
| Переменная | Обязательна | Назначение |
|---|---|---|
LAZARETTO_API_KEY | нет | Ключ с предоплаченными кредитами, передаваемый в заголовке X-API-Key. Используется только платными инструментами. |
LAZARETTO_BASE_URL | нет | Переопределяет адрес API. По умолчанию — https://lazaretto.dev. |
Если что-то не работает
-
Клиент не показывает инструменты. Для stdio запустите
npx -y lazaretto-mcpв терминале. Процесс должен запуститься и ждать ввода из stdin, не выводя сообщений. Если npx не может найти пакет, проверьте, что версияnode --version— 20 или новее. -
Все платные инструменты сообщают, что нужны кредиты. Ключ отсутствует или не принят. Убедитесь, что имя переменной окружения в точности
LAZARETTO_API_KEY, а имя заголовка —X-API-Key. -
check_lockfileсообщает, что не удалось прочитать lockfile. Инструмент читает толькоpackage-lock.json,npm-shrinkwrap.json,yarn.lockиpnpm-lock.yamlотносительно текущей рабочей директории. В монорепозитории укажитеpathявно, напримерapps/web/pnpm-lock.yaml. -
Появилось сообщение о превышении лимита запросов. Бесплатная проверка допускает небольшое число запросов в минуту с одного IP-адреса. Подождите и повторите вызов. Не считайте ошибку подтверждением безопасности.
Запуск из клона (необязательно)
git clone https://github.com/jamesdfinance-dev/lazaretto-mcp
cd lazaretto-mcp && npm ci
read -rs LAZARETTO_API_KEY && export LAZARETTO_API_KEY
node index.mjs
Лицензия
MIT. Сервис Lazaretto и его механизм обнаружения — отдельные проприетарные продукты.