nyxilum-mcp
MCP-сервер, що дозволяє AI-асистенту (Claude, Cursor тощо) напрямукомпілювати/запускати/лінтити/форматувати NyxilumLang (.nx) код черезNyxilumNode — без ручногоdotnet run/copy-paste в термінал.
Навіщо окремий репозиторій, а не частина NyxilumLang
node_modules цього проєкту не мав би потрапляти в dotnet-збірку чиpublish/ NyxilumLang. Живе поруч, як сестринський проєкт.
Встановлення
git clone https://github.com/Faneraiy14/NyxilumMcp.git
cd NyxilumMcp
npm install
Потрібен зібраний NyxilumNode поруч (../NyxilumLang за замовчуванням,dotnet build src/NyxilumLang там) — або задай шлях явно:
# Linux/Mac
export NX_NODE_PATH=/шлях/до/NyxilumLang # .exe на Windows, .dll — тоді запускається через `dotnet`
# або
export NX_ECOSYSTEM_ROOT=/шлях/до/NyxilumLang
# Windows
$env:NX_NODE_PATH = "C:\шлях\до\NyxilumLang.exe"
# або
$env:NX_ECOSYSTEM_ROOT = "C:\шлях\до\NyxilumLang"
Підключення (Claude Desktop / Claude Code)
{
"mcpServers": {
"nyxilum": {
"command": "node",
"args": ["/шлях/до/NyxilumMcp/src/server.js"]
}
}
}
Інструменти
| Інструмент | Що робить |
|---|---|
nyxilum_run |
Компілює й виконує код у пісочниці (окремий процес, timeout, ліміт GC-виділень) |
nyxilum_lint |
Стильові попередження (довжина рядка, порожні блоки) — не перевірка синтаксису, завжди exitCode=0 |
nyxilum_format |
Форматує код |
nyxilum_version |
Версія знайденого NyxilumNode — заодно health check |
nyxilum_docs |
GUIDE.md цілком або конкретна секція (### -заголовок) за назвою |
Безпека виконання (nyxilum_run)
- Код НІКОЛИ не потрапляє в shell/argv як текст — завжди пишеться увласний тимчасовий файл, шлях до якого передається як звичайнийаргумент процесу (
execFile, безshell: true). - Процесний
timeout(типово 10с, максимум 60с) — єдиний реальнийзахист відwhile (true) {}без виділень пам'яті:NX_GC_MAX_OBJECTSрахує лише NyxilumLang-виділення (масиви/структури/мапи), а не ітераціїциклу самі по собі. env— allowlist (PATH,SystemRoot,TEMP,DOTNET_ROOTтощо),не весьprocess.envцього серверного процесу.NX_SANDBOX=1(фіксовано, не залежить від вхідних аргументівінструмента) — файловий I/O обмежується тимчасовою текою запуску,мережа (httpGet/httpServer/wsConnectтощо) й читання зміннихсередовища (osEnv) повністю заборонені. Потребує NyxilumNode зпідтримкоюNX_SANDBOX(див. NyxilumLang README);зі старішим бінарником прапорець просто ігнорується.- Вивід (
stdout/stderr) обрізається до 32 КБ на потік — цикл, щодрукує мільйони рядків, не заповнить контекст відповіді. - Тимчасова тека видаляється в
finallyзавжди, навіть при таймауті.
RunFile в Nx.cs пише Runtime Error:/Parse Error: у stdout(не stderr) і завершується з exitCode=1 — це поведінка самогоNyxilumNode, не цього сервера; кожен інструмент явно зазначає це в описі.
Тести
npm test
14 перевірок: smoke.mjs викликає обробники напряму (успішний запуск,необроблений throw, таймаут нескінченного циклу, gc_max_objects,обрізання великого виводу, стійкість до shell-метасимволів у коді,відсутність витоку тимчасових директорій), transport.mjs — те самечерез РЕАЛЬНИЙ MCP-протокол (StdioClientTransport + Client), нелише прямі виклики функцій.
Ліцензія
MIT — Faneraiy14.