🐢🚀 Node.js Sandbox MCP-сервер
Сервер Node.js, реализующий протокол контекста модели (MCP) для запуска произвольного JavaScript в эфемерных контейнерах Docker с установкой зависимостей npm «на лету».

👉 Посмотрите на официальном сайте
Функции
Запуск и управление изолированными контейнерами-песочницами Node.js
Выполнять произвольные команды оболочки внутри контейнеров
Установить указанные зависимости npm для каждого задания
Запуск фрагментов JavaScript модуля ES и захват stdout
Аккуратно разбирайте контейнеры.
Режим Detached: сохранение контейнера активным после выполнения скрипта (например, для долго работающих серверов)
Примечание: контейнеры работают с контролируемыми ограничениями ЦП/памяти.
Related MCP server: Docker MCP Server
Изучите интересные варианты использования
Если вам нужны идеи для интересных и эффективных способов использования этой библиотеки, ознакомьтесь с разделом вариантов использования на веб-сайте. Он содержит тщательно подобранный список подсказок, примеров и творческих экспериментов, которые вы можете попробовать с сервером Node.js Sandbox MCP.
⚠️ Предварительные условия
Для использования этого сервера MCP на вашем компьютере должен быть установлен и запущен Docker.
Совет: заранее извлеките все необходимые образы Docker, чтобы избежать задержек при первом запуске.
Примеры рекомендуемых изображений:
узел:lts-slim
mcr.microsoft.com/playwright:v1.52.0-noble
alfonsograziano/node-chartjs-canvas:последняя версия
Начиная
Чтобы начать работу с этим MCP-сервером, прежде всего вам необходимо подключить его к клиенту (например, Claude Desktop).
После запуска вы можете проверить его полную работоспособность с помощью нескольких тестовых команд:
Убедитесь, что инструмент может работать:
Create and run a JS script with a console.log("Hello World")Это должно запустить console.log, и в ответе инструмента вы должны увидеть Hello World.
Убедитесь, что вы можете устанавливать зависимости и сохранять файлы.
Create and run a JS script that generates a QR code for the URL `https://nodejs.org/en`, and save it as `qrcode.png` **Tip:** Use the `qrcode` package.Это должно создать файл в смонтированном каталоге (например, на рабочем столе) с именем «qrcode.png».
Использование с Claude Desktop
Добавьте это в ваш claude_desktop_config.json : Вы можете следовать официальному руководству по установке этого сервера MCP
{
"mcpServers": {
"js-sandbox": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/var/run/docker.sock:/var/run/docker.sock",
"-v",
"$HOME/Desktop/sandbox-output:/root",
"-e",
"FILES_DIR=$HOME/Desktop/sandbox-output",
"-e",
"SANDBOX_MEMORY_LIMIT=512m", // optional
"-e",
"SANDBOX_CPU_LIMIT=0.75", // optional
"alfonsograziano/node-code-sandbox-mcp"
]
}
}
}или с NPX:
{
"mcpServers": {
"node-code-sandbox-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "node-code-sandbox-mcp"],
"env": {
"FILES_DIR": "/Users/alfonsograziano/Desktop/node-sandbox",
"SANDBOX_MEMORY_LIMIT": "512m", // optional
"SANDBOX_CPU_LIMIT": "0.75" // optional
}
}
}
}Примечание: убедитесь, что ваш рабочий каталог указывает на созданный сервер, а Docker установлен/запущен.
Докер
Запустите сервер в контейнере (при необходимости смонтируйте сокет Docker) и передайте нужный вам выходной каталог хоста как переменную окружения:
# Build locally if necessary
# docker build -t alfonsograziano/node-code-sandbox-mcp .
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$HOME/Desktop/sandbox-output":"/root" \
-e FILES_DIR="$HOME/Desktop/sandbox-output" \
-e SANDBOX_MEMORY_LIMIT="512m" \
-e SANDBOX_CPU_LIMIT="0.5" \
alfonsograziano/node-code-sandbox-mcp stdioЭта привязка монтирует вашу папку хоста в контейнер по тому же абсолютному пути и делает FILES_DIR доступным внутри сервера MCP.
Использование с VS Code
Кнопки быстрой установки (VS Code и Insiders):
Установить js-sandbox-mcp (NPX) Установить js-sandbox-mcp (Docker)
Ручная настройка : добавьте в settings.json или .vscode/mcp.json вашего VS Code:
"mcp": {
"servers": {
"js-sandbox": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v", "/var/run/docker.sock:/var/run/docker.sock",
"-v", "$HOME/Desktop/sandbox-output:/root",
"-e", "FILES_DIR=$HOME/Desktop/sandbox-output",
"-e", "SANDBOX_MEMORY_LIMIT=512m",
"-e", "SANDBOX_CPU_LIMIT=1",
"alfonsograziano/node-code-sandbox-mcp"
]
}
}
}API
Инструменты
run_js_эфемерный
Запустите одноразовый JS-скрипт в совершенно новом одноразовом контейнере.
Входные данные:
image(строка, необязательно): образ Docker для использования (по умолчанию:node:lts-slim).code(строка, обязательно): исходный код JavaScript для выполнения.dependencies(массив{ name, version }, необязательно): пакеты NPM и версии для установки (по умолчанию:[]).
Поведение:
Создает новый контейнер.
Записывает ваш
index.jsи минимальныйpackage.json.Устанавливает указанные зависимости.
Выполняет скрипт.
Разбирает (снимает) контейнер.
Возвращает захваченный stdout.
Если ваш код сохраняет какие-либо файлы в текущем каталоге, эти файлы будут возвращены автоматически.
Изображения (например, PNG, JPEG) возвращаются как содержимое
image.Другие файлы (например,
.txt,.json) возвращаются как содержимоеresource.Примечание: функция сохранения файлов в настоящее время доступна только в эфемерном инструменте.
Совет: чтобы вернуть файлы, просто сохраните их во время выполнения скрипта.
Пример вызова:
{
"name": "run_js_ephemeral",
"arguments": {
"image": "node:lts-slim",
"code": "console.log('One-shot run!');",
"dependencies": [{ "name": "lodash", "version": "^4.17.21" }],
},
}Пример сохранения файла:
import fs from 'fs/promises';
await fs.writeFile('hello.txt', 'Hello world!');
console.log('Saved hello.txt');Это вернет вывод консоли и файл hello.txt .
sandbox_initialize
Запустите новый контейнер-песочницу.
Вход :
image( string , необязательно, по умолчанию:node:lts-slim): образ Docker для песочницыport( число , необязательно): если задано, сопоставляет этот порт контейнера с хостом
Вывод : строка идентификатора контейнера
sandbox_exec
Запуск команд оболочки внутри запущенной песочницы.
Вход :
container_id( string ): идентификатор изsandbox_initializecommands( string[] ): Массив команд оболочки для выполнения
Вывод : объединенный stdout каждой команды
запустить_js
Установите зависимости npm и выполните код JavaScript.
Вход :
container_id( string ): идентификатор изsandbox_initializecode( string ): исходный код JS для запуска (поддерживаются модули ES)dependencies( массив из , необязательно, по умолчанию:[]): имена пакетов npm → версии semverlistenOnPort( число , необязательно): если установлено, процесс остается запущенным и хосту предоставляется доступ к этому порту ( режим Detached Mode ).
Поведение:
Создает временное рабочее пространство внутри контейнера.
Записывает
index.jsи минимальныйpackage.jsonЗапускает
npm install --omit=dev --ignore-scripts --no-audit --loglevel=errorВыполняет
node index.jsи захватывает stdout или оставляет процесс работающим в фоновом режиме, если установленlistenOnPortОчищает рабочее пространство, если не запущен в отсоединенном режиме
Вывод : stdout скрипта или уведомление о фоновом выполнении
песочница_стоп
Завершите работу и удалите контейнер-песочницу.
Вход :
container_id( string ): идентификатор изsandbox_initialize
Вывод : Подтверждающее сообщение
Советы по использованию
Инструменты на основе сеансов (
sandbox_initialize➔run_js➔sandbox_stop) идеально подходят, когда вы хотите:Держите контейнер-песочницу с длительным сроком службы открытым.
Выполнение нескольких команд или скриптов в одной среде.
Поэтапная установка и повторное использование зависимостей.
Однократное выполнение с помощью
run_js_ephemeralидеально подходит для:Быстрые эксперименты или простые сценарии.
Случаи, когда вам не нужно поддерживать зависимости состояния или кэша.
Чистые, атомарные запуски без необходимости ручной разборки.
Режим «Отдельно» полезен, когда вы хотите:
Разворачивайте серверы или долгосрочные сервисы «на лету»
Выставляйте и тестируйте конечные точки из запущенных контейнеров
Выберите рабочий процесс, который лучше всего подходит для вашего варианта использования!
Строить
Компиляция и объединение:
npm install
npm run buildЛицензия
Лицензия Массачусетского технологического института
Настоящим предоставляется разрешение любому лицу, получившему копию этого программного обеспечения и связанных с ним файлов документации («Программное обеспечение»), безвозмездно использовать Программное обеспечение без ограничений, включая, помимо прочего, права на использование, копирование, изменение, объединение, публикацию, распространение, сублицензирование и/или продажу копий Программного обеспечения, а также разрешать лицам, которым предоставляется Программное обеспечение, делать это при соблюдении следующих условий:
Вышеуказанное уведомление об авторских правах и настоящее уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. АВТОРЫ ИЛИ ОБЛАДАТЕЛИ АВТОРСКИХ ПРАВ НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ, УБЫТКИ ИЛИ ДРУГУЮ ОТВЕТСТВЕННОСТЬ, БУДЬ ТО В ДЕЙСТВИИ ПО КОНТРАКТУ, ДЕЛИКТЕ ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКАЮЩИЕ ИЗ, ИЗ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ ДЕЛАМИ В ПРОГРАММНОМ ОБЕСПЕЧЕНИИ.