~/guides/mcp-servers-npm-v12-breakage

AI Agents

Почему MCP-сервер вдруг перестал запускаться после обновления npm до v12

Как блокировка install-скриптов в npm v12 незаметно ломает MCP-серверы, запускаемые через npx, и что с этим делать.

MCP-сервер, который вчера прекрасно стартовал через npx, сегодня после обновления npm вдруг падает на установке или не находит нужный нативный модуль. Диагностировать это неприятнее, чем обычную поломку зависимости в собственном проекте — сбой происходит не в вашем package.json, а где-то внутри временной установки стороннего пакета.

Механика поломки

npm v12 блокирует install и postinstall скрипты зависимостей по умолчанию, если они явно не разрешены через allowScripts в package.json. Но npx по умолчанию устанавливает пакет заново во временную директорию при каждом запуске, если подходящая версия ещё не закэширована локально — и эта временная установка происходит вне контекста вашего проекта, а значит ваш собственный allowScripts её не защищает.

{
  "mcpServers": {
    "sentry": {
      "command": "npx",
      "args": ["-y", "mcp-remote@latest", "https://mcp.sentry.dev/mcp"]
    }
  }
}

Если mcp-remote или любая его транзитивная зависимость использует install-скрипт для нативной сборки, временная установка через npx под npm v12 просто не выполнит этот скрипт — и сервер либо не запустится, либо запустится с недостающим функционалом.

Как понять, что проблема именно в этом

Признаки характерны: сервер работал до обновления npm, ошибка возникает на этапе установки или сразу при первом обращении к нативному модулю, а не в логике самого сервера, и в выводе npx можно заметить упоминание пропущенного или заблокированного скрипта.

Симптом Вероятная причина
Сервер падал и раньше, ошибка не изменилась Проблема не связана с npm v12
Сервер работал стабильно, начал падать после npm update Стоит проверить версию npm и наличие install-скриптов в зависимостях сервера
Ошибка про отсутствующий нативный биндинг Классический признак заблокированного install-скрипта

Практическое решение

Самый надёжный обходной путь — не полагаться на автоматическую установку через npx при каждом запуске, а предустановить сервер глобально заранее, явно одобрив нужные install-скрипты через npm approve-scripts, и уже потом указать в mcp.json прямой путь к установленному бинарнику вместо команды npx с автоматической установкой.

Как проверить конфиг заранее, не дожидаясь поломки

MCP Server npm v12 Compatibility Checker разбирает mcp.json и явно помечает серверы, запускаемые через npx, как потенциально рискованные ещё до того, как что-то реально сломается после следующего обновления npm.

Итоговый чеклист

npx устанавливает пакет заново во временную директорию при каждом запуске без закэшированной версии, и эта установка не защищена вашим локальным allowScripts.

Признак проблемы — сервер стабильно работал, начал падать именно после обновления npm, с ошибкой на этапе установки или про отсутствующий нативный модуль.

Предустановка сервера глобально с явным ревью install-скриптов надёжнее, чем полагаться на автоматическую установку через npx при каждом запуске.