Неправильный путь: вставить пароль от панели в агента
Локальные ИИ-агенты хороши ровно в рутинной части публикации софта: прогнать проверки, исправить найденное, задеплоить, прочитать логи, повторить. Соблазнительный короткий путь — отдать агенту логин от панели, чтобы он «мог всё». Но ваш аккаунт в панели может менять способы оплаты, удалять приложения и трогать каждый ваш CDN-аккаунт — ничего из этого агенту для публикации кода не нужно. Правильный инструмент — учётные данные, которые могут деплоить и больше ничего.
Deploy-токен: показывается один раз, жёстко ограничен
Его создаёт одна команда. Токен в открытом виде появляется ровно один раз — cdn.com.tr хранит только хеш, так что никто (включая поддержку) не сможет прочитать его позже. Он привязан к одному CDN-аккаунту и только к поверхности деплоя: загрузка исходников, build, создание и обновление приложений, деплой, чтение статуса и логов.
$ cdnctl deploy-token create --name "claude-code"
Deploy token (shown ONCE — save it now):
cdnctl_T1bz••••••••••••••••••••••••
To hand it to an agent: cdnctl configure --token cdnctl_T1bz••••…
Scope: deploy only (source upload/build + app lifecycle).
Что токен может и чего не может — мы проверили каждую грань
Это не проектные намерения; каждая строка — реальный запрос, который мы выполнили к живому API со свежесозданным токеном:
- Поверхность деплоя на своём аккаунте — работает (200). - Те же эндпоинты для UUID чужого аккаунта — 404. API даже не подтверждает, что другой аккаунт существует. - Эндпоинты вне поверхности деплоя (оплата, DNS, профиль пользователя) — 401. - DELETE на приложении — 405. Маршрут просто не зарегистрирован на поверхности токена, так что агент не может уничтожить то, что задеплоил. - Любой запрос после отзыва — 401, немедленно.
Подключение к Claude Code или Cursor через MCP
cdnctl поставляется с MCP-сервером: `cdnctl mcp` говорит на JSON-RPC через stdio и предоставляет шесть инструментов — project_info, check, entitlement, deploy, apps_list и app_show. После регистрации агент вызывает deploy так же, как любой другой инструмент, — со структурированными результатами вместо соскобленного текста терминала.
$ claude mcp add cdntr -- cdnctl mcp
# .cursor/mcp.json
{
"mcpServers": {
"cdntr": {
"command": "cdnctl",
"args": ["mcp"],
"env": { "CDN_ACCESS_TOKEN": "cdnctl_T1bz••••…" }
}
}
}
Цикл самопочинки на практике
С токеном на месте агент выполняет тот же цикл, что и внимательный человек: `check` проекта, исправить найденное, `deploy`, прочитать результат. В нашем живом тесте агент столкнулся с настоящей поломкой — Dockerfile копировал node_modules с хоста в образ и ронял контейнер — сам исправил .dockerignore, передеплоил и убедился, что приложение здорово. Без панели, без человека в цикле — и ничего за пределами поверхности деплоя не тронуто.
Ротация и отзыв
Токены выводятся списком с префиксом, временем последнего использования и IP — достаточно для аудита, не раскрывая секрет. Отзыв — одна команда, вступает в силу со следующего запроса. Если токен когда-нибудь окажется в логе или транскрипте — сначала отзовите, потом разбирайтесь; выпуск замены занимает секунды.
$ cdnctl deploy-token list
name: claude-code prefix: cdnctl_T1bz last_used: 2026-08-25 15:46 (185.70.97.9)
$ cdnctl deploy-token revoke --id 11
status: success
Частые вопросы
Может ли агент удалить моё приложение?
Нет. Маршруты DELETE не зарегистрированы на поверхности токена — запрос отвечает 405, что бы агент ни отправил. Разрушительные действия остаются в панели, за вашим логином.
Может ли агент потратить деньги с этим токеном?
Нет. Покупка тарифов, оплата и биллинг живут только в панели. Токен до них не дотягивается (401), а cdnctl намеренно отправляет людей платить в браузер.
Что если токен утечёт?
Отзовите его — одна команда, действует немедленно. Радиус поражения — поверхность деплоя одного аккаунта: ни оплаты, ни удаления, ни других аккаунтов. Затем выпустите новый.
Требует ли MCP deploy-токен?
Нет — на вашей собственной машине cdnctl mcp может использовать ваш обычный вход через cdnctl login. Токен важен, когда агент работает там, куда вы не положили бы свой логин: CI, общая машина, долгоживущая сессия агента.