mcp-v8 — MCP-сервер для Claude Code: запуск JS в песочнице
Даёт агенту единственный инструмент run_js: он пишет JavaScript или TypeScript, а сервер исполняет код в изолированном V8. Полезно, когда цепочки вызовов инструментов разрастаются.
claude mcp add mcp-v8 -- docker run -i --rm docker.io/wholelottahoopla/mcp-js:0.22.0Что делает mcp-v8
mcp-v8 написан на Rust и работает через deno_core. Вместо десятков узких инструментов агент получает run_js и сам пишет программу: циклы, ветвления, преобразование данных, вызовы других инструментов. В режиме по умолчанию состояние сохраняется: куча V8 уходит в снапшот с адресацией по содержимому, поэтому переменные переживают несколько ходов. Есть и режим без состояния.
Сеть, файловая система, подпроцессы, WebAssembly и импорты модулей по умолчанию закрыты. Каждую возможность открывает отдельная политика OPA/Rego, проверка идёт на уровне операции. TypeScript не проверяется по типам: SWC просто срезает аннотации. Для доступа к файлам на сервере нужен флаг --allow-run-js-file или политика run_js_file, а без неё параметр file у run_js не сработает.
Конфигурацию можно собрать в одном TOML или JSON и передать через --config. Приоритет такой: флаг командной строки, затем переменная MCP_V8_*, потом файл, потом значение по умолчанию. Транспорты — stdio, Streamable HTTP и SSE.
Какие задачи решает
- прогнать преобразование данных одним скриптом вместо цепочки вызовов инструментов
- сохранить переменные между ходами агента через снапшот кучи
- выдать агенту сеть или файлы только по явной политике Rego
- посчитать что-то на стороне сервера и забрать вывод по частям
- вызвать другой MCP-сервер из JavaScript через
mcp.callTool()
Примеры запросов агенту
- Выполни этот код:
console.log([1,2,3].map(x => x*2)) - Запусти скрипт в
mcp-v8и покажи последние строки вывода - Посчитай статистику по массиву в
run_jsи верни результат
Как установить mcp-v8
Командой платформы
claude mcp add mcp-v8 -- docker run -i --rm docker.io/wholelottahoopla/mcp-js:0.22.0Командой платформы
codex mcp add mcp-v8 -- docker run -i --rm docker.io/wholelottahoopla/mcp-js:0.22.0Файл настроек
{
"mcpServers": {
"mcp-v8": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/wholelottahoopla/mcp-js:0.22.0"
]
}
}
}Файл настроек
{
"servers": {
"mcp-v8": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/wholelottahoopla/mcp-js:0.22.0"
]
}
}
}Командой платформы
gemini mcp add mcp-v8 docker run -i --rm docker.io/wholelottahoopla/mcp-js:0.22.0По шагам, с командами для каждой платформы: Как подключить MCP-сервер: Claude Code, Codex, Cursor, VS Code, Gemini CLI и другие
Вопросы о mcp-v8
Как установить mcp-v8 в Claude Code?
Одна команда: claude mcp add mcp-v8 -- docker run -i --rm docker.io/wholelottahoopla/mcp-js:0.22.0. Сервер поднимается в контейнере через stdio.
Что делает mcp-v8?
Исполняет JavaScript и TypeScript от имени агента в изолированном V8 и отдаёт результат выполнения. Состояние кучи можно сохранять между вызовами.
Какие возможности закрыты по умолчанию?
Сеть, файловая система, подпроцессы и импорты модулей. Их открывают политиками OPA/Rego, проверка идёт при каждой операции.