−25%

на годовую оплату Windows, до 31.10. К тарифам

EQVPS
Начать

Защита MCP: безопасные права для AI-агентов

Прежде чем отдать AI-агенту токен от своих серверов, разберитесь, до чего он дотянется. Все 45 MCP-инструментов EQVPS по уровням риска, ограничения на стороне сервера и схема, которую мы бы выбрали сами.

Проверено: 2026-10-04 · MCP-сервер 1.6.0 · 45 инструментов (клиентский токен)

MCP-токен — это пароль от аккаунта, к которому приделали API. Отдали его агенту — и у вас появился пользователь, который не устаёт, читает любую страницу, на которую его направили, и делает ровно то, что сказала последняя инструкция в его контексте. Чаще всего это именно то, что нужно. Эта страница — про остальные случаи.

Всё ниже сверено с живым сервером на дату вверху страницы: список инструментов взят из tools/list на https://mcp.eqvps.com/mcp, лимиты — из самого API. Если вы только начинаете, сначала посмотрите подключение MCP-клиента и API-токены, потом возвращайтесь.

Модель угроз: что реально идёт не так

Три сценария — в том порядке, в каком мы их встречаем:

  1. Агент неправильно понял. «Почисти тестовый сервер» превращается в переустановку не того сервера. Злого умысла нет, модель просто достроила недосказанное.
  2. Prompt injection. Агент читает текст, который писали не вы (README, ответ в тикете, страницу из интернета), и этот текст говорит ему что-то сделать. Если у агента токен с полными правами, они есть и у внедрённой инструкции.
  3. Токен утёк. В историю shell, в публичный репозиторий, в общий конфиг MCP или в строку лога.

MCP-сервер проверяет, что токен действителен и что сервер принадлежит этому аккаунту (или делегирован ему). Чего вы хотели на самом деле, он не знает. Все защиты ниже отвечают на один вопрос: сколько можно наломать, если инструкция неверная?

Все MCP-инструменты по уровням риска

Клиентский токен видит 45 инструментов (MCP-сервер 1.6.0). Реселлерский токен (rk_…) видит отдельный набор из 30 реселлерских инструментов и ни одного из этих, так что всего на эндпоинте 75. tools/list отдаёт клиенту только его набор.

Здесь инструменты разложены по уровню риска. Параметры и примеры вызовов каждого — в справочнике параметров; все инструменты одной строкой, включая 30 реселлерских, — в полном списке.

Аннотаций MCP-инструментов (readOnlyHint, destructiveHint) у нас пока нет, поэтому клиент сам их не рассортирует. Настройте подтверждения вручную по уровням ниже.

Уровень 0 — публичные, без токена (5)

ИнструментЧто делает
get_startedВесь сценарий в одном ответе: какие инструменты вызывать и в каком порядке
list_plansТарифы, цены, образы ОС
sandbox_pricingТарифы песочниц
register_accountСоздаёт новый аккаунт и возвращает его токен
loginEmail + пароль → токен

Уровень 1 — чтение аккаунта, без побочных эффектов (15)

ИнструментЧто делаетНа что смотреть
whoamiid, имя, email аккаунта
get_balanceПредоплаченный баланс
list_vpsАктивные, создающиеся и приостановленные серверы
get_vps_statusСтатус, характеристики, данные доступаС reveal: true возвращает root-пароль
get_vps_metricsCPU, память, сеть, диск за период
get_upgrade_optionsНа какие тарифы сервер можно перевести без переустановки
list_delegationsКому вы выдали доступ
list_delegated_to_meСерверы, делегированные вам
list_ticketsВаши тикеты в поддержку
get_ticketОдин тикет с перепискойТекст тикета для агента — недоверенный ввод
list_sandboxesВаши песочницы
get_sandboxОдна песочница и её расход
get_taskВывод фоновой задачи
download_fileЧитает небольшой файл из песочницы
get_download_urlВременная ссылка на один файл песочницыСкачать может любой, у кого ссылка, пока она не истекла

Уровень 2 — меняют состояние, ничего не тратят (17)

ИнструментЧто делаетНа что смотреть
power_vpsstart / stop / rebootstop — это stop: сервисы лягут
set_hostnameМеняет имя сервераМеняет то самое значение, которое сверяет confirm
undo_cancelСнимает запланированную отмену в конце периода
refresh_tokenНовый токен, старый отзывается сразуОбновите статичный конфиг после этого
set_passwordЗадаёт пароль аккаунта, если его ещё нетТот, у кого токен, может успеть первым
topup_balanceСчёт на пополнение + ссылка на криптооплатуДля оплаты нужен кошелёк
pay_invoiceСсылка на оплату неоплаченного счётаТо же
accept_delegationПринимает приглашение
revoke_delegationЗавершает делегирование
create_ticket / reply_ticket / close_ticketТикеты в поддержкуАгент пишет в поддержку от вашего имени
run_code / exec_commandЗапускает код в песочницеТолько в песочнице, не на вашем VPS
kill_taskОстанавливает фоновую задачу песочницы
upload_file / get_upload_urlКладёт файл в песочницу

Уровень 3 — тратят деньги, уничтожают данные или выдают доступ (8)

ИнструментЧто делаетПроверка на сервере
order_vpsЗаказывает сервер, оплата с балансаНе хватает баланса → неоплаченный счёт, ничего не списано
change_planСмена тарифа без переустановки, разница списывается с балансаconfirm: true; не хватает баланса → 402
create_sandboxЗапускает платную песочницуПустой баланс → 402
reinstall_vpsСтирает диск и ставит новую ОСconfirm = точный hostname или DELETE; 4 вызова/мин
reset_passwordНовый root-пароль, старый перестаёт работатьconfirm = hostname или DELETE; 6 вызовов/мин
cancel_serviceend_of_period (по умолчанию, отменяемо) или immediate (удаляет сервер сразу)для immediate нужен confirm = hostname
kill_sandboxУдаляет песочницу вместе с файламинет
delegate_serviceДаёт другому человеку операторский доступ к серверуТолько владелец; приглашённый должен принять

Журнал изменений набора инструментов

ДатаВерсия сервераИзменениеВлияние на риск
2026-10-031.6.0Добавлен refresh_token; токены по умолчанию живут 1 годУровень 2
2026-10-031.5.0undo_cancel, get_upgrade_options, change_planchange_plan тратит баланс → уровень 3
2026-10-031.1.013 инструментов песочницcreate_sandbox тратит, kill_sandbox уничтожает → уровень 3

Текущая версия публична: curl -s https://mcp.eqvps.com/healthz. Сменится она — обновится и эта таблица.

Баланс — это потолок трат

EQVPS работает по предоплате. Привязанной карты, кредитной линии и ухода в минус нет, так что больше, чем лежит на балансе, агент не потратит никогда. Тратят три инструмента: order_vps, change_plan и create_sandbox. Продления ваших текущих серверов списываются с того же баланса.

Создавать запросы на деньги агент может, оплачивать — нет. topup_balance и pay_invoice возвращают ссылку на криптооплату, а без кошелька ссылка ничего не делает. Эндпоинта для вывода средств тоже нет: деньги с баланса можно потратить на услуги в вашем аккаунте, вывести их наружу нельзя. Возврат при немедленной отмене тоже приходит на баланс.

Одна оговорка, и она серьёзная. Если держать баланс совсем маленьким, чтобы ограничить агента, начнут срываться продления ваших же серверов, и они уйдут в grace-период. Наше правило: один цикл продления того, что у вас уже работает, плюс бюджет текущей задачи агента. Как это посчитать, разобрано в гайде по бюджету агента. А если дать агенту собственный кошелёк с деньгами, он станет вторым потолком, за которым тоже придётся следить.

Минимальные права: токена только на чтение (пока) нет

Если прямо: любой клиентский токен имеет те же права, что аккаунт в кабинете. Имя и срок жизни токена настраиваются, области доступа (scopes) — нет.

Самое узкое, что есть сегодня, — делегирование. Заводите агенту собственный аккаунт с нулевым балансом и делегируете ему один сервер:

delegate_service  { "service_id": "EQ-XXXX", "email": "agent@yourdomain.com", "expires_days": 30 }

То же через REST:

curl -s -X POST "https://api.eqvps.com/api/v1/eqvps/services/EQ-XXXX/delegations" \
  -H "Authorization: Bearer $EQVPS_TOKEN" -H "Content-Type: application/json" \
  -d '{"email":"agent@yourdomain.com","expires_days":30}'

Приглашение нужно принять, войдя под этим email (accept_delegation), а expires_days — от 1 до 365. Пошагово со скриншотами: делегирование доступа и раздел «Доступ» в документации.

Делегированный аккаунт можетДелегированный аккаунт не может
Видеть статус, метрики и историю этого одного сервераВидеть другие ваши серверы, баланс и счета
Включать, выключать, перезагружатьОтменять, продлевать, менять тариф
Менять hostname и обратный DNSПокупать дополнения и IP
Сбрасывать root-парольОткрывать веб-консоль
Переустанавливать ОСПередавать сервер кому-то ещё

Обратите внимание на две последние строки слева. Потратить ваши деньги делегат не может, а вот стереть сервер — может. Включите бэкапы на любом сервере, который агент способен переустановить.

Гигиена токенов

Один токен на агента, с именем. Создайте его в Кабинет → Настройки → API-токены для агентов или так:

curl -s -X POST "https://api.eqvps.com/api/v1/eqvps/auth/tokens" \
  -H "Authorization: Bearer $EQVPS_TOKEN" -H "Content-Type: application/json" \
  -d '{"name":"backup-agent","expires_in_days":90}'

Токен показывается один раз. Срок жизни — от 1 до 1825 дней, по умолчанию 365. Для агентов мы бы ставили 90.

Храните его в файле, который читаете только вы — не в репозитории, не в промпте и не в переменной shell, которую копируете туда-сюда:

mkdir -p ~/.config/eqvps && chmod 700 ~/.config/eqvps
( umask 077; read -rsp 'EQVPS token: ' T; echo; printf 'EQVPS_TOKEN=%s\n' "$T" > ~/.config/eqvps/agent.env )
ls -l ~/.config/eqvps/agent.env   # ожидаем -rw-------

Дальше подключите его в сервисе агента через EnvironmentFile= (systemd) или set -a; . ~/.config/eqvps/agent.env; set +a.

Ротируйте до истечения срока. Инструмент refresh_token или POST /auth/tokens/{id}/refresh выдаёт новый токен с тем же именем и сразу отзывает старый. Если токен вписан в конфиг MCP-клиента, обновите его сразу после этого, иначе следующая сессия получит 401.

Проверяйте, кто чем пользуется: GET /auth/tokens показывает все токены с именем, сроком и last_used_at. Незнакомый токен или токен, которым пользовались после отключения агента, — это сигнал.

Если токен утёк

По порядку:

  1. Отзовите его. Кабинет → Настройки → API-токены для агентов → отозвать, или curl -s -X DELETE -H "Authorization: Bearer $EQVPS_TOKEN" https://api.eqvps.com/api/v1/eqvps/auth/tokens/<id>. Он перестаёт работать со следующего запроса.
  2. Поищите новые токены, которые создавали не вы, и отзовите их тоже.
  3. Оцените, что могли задеть: «История услуги» каждого сервера, счета и баланс, list_delegations — нет ли доступа, который вы не выдавали.
  4. Смените root-пароли на всех серверах, которые видел этот токен. get_vps_status с reveal: true отдаёт root-пароль, так что утёкший токен — это утёкший root-пароль. Заодно проверьте ~/.ssh/authorized_keys.
  5. Закройте дверь с паролем. Если у аккаунта никогда не было пароля, владелец токена мог задать его через set_password. Войдите по коду из письма и смените пароль.

Профилактика для пятого пункта ничего не стоит: задайте пароль аккаунта сами прямо сейчас, и set_password для всех остальных будет возвращать 409.

Подтверждение человеком

Что сервер проверяет сам:

  • reinstall_vps, reset_password и cancel_service с type: immediate требуют confirm, равный точному hostname (для переустановки и сброса пароля подходит и DELETE).
  • change_plan требует confirm: true.
  • По умолчанию отмена — end_of_period: сервер работает до конца оплаченного периода, а undo_cancel всё возвращает.
  • Лимиты на аккаунт: переустановка 4/мин, сброс пароля 6/мин, питание 20/мин, заказы 20/мин. Этого хватит, чтобы зациклившийся агент не сделал одно и то же пятьдесят раз, но одну неверную команду лимит не остановит.

Важно понимать, что такое confirm. Он не даёт агенту выполнить расплывчатое «почисти там». Злоумышленника он не остановит: hostname добывается одним вызовом get_vps_status. Настоящее подтверждение живёт в вашем MCP-клиенте. Большинство клиентов умеют спрашивать перед каждым вызовом: уровни 0 и 1 пускайте свободно, уровень 3 — только с вопросом. В клиентах с правами на отдельные инструменты, например в settings.json у Claude Code (сервер зарегистрирован как eqvps):

{
  "permissions": {
    "ask": ["mcp__eqvps__order_vps", "mcp__eqvps__change_plan", "mcp__eqvps__create_sandbox", "mcp__eqvps__reset_password", "mcp__eqvps__delegate_service"],
    "deny": ["mcp__eqvps__reinstall_vps", "mcp__eqvps__cancel_service", "mcp__eqvps__kill_sandbox"]
  }
}

И добавьте строку в инструкции агента. Сама по себе это не защита, но случаев «не так понял» станет меньше (оставьте её на английском — модели понимают её одинаково):

Never call reinstall_vps, reset_password, cancel_service (type=immediate), change_plan,
order_vps, create_sandbox, kill_sandbox or delegate_service unless the human has typed
the target server's hostname in this conversation for that specific action.

Если агент входит по коду из письма, а не держит долгоживущий токен, смотрите вход агента через MCP.

Аудит: что видно потом

  • Список токенов (GET /auth/tokens или Настройки → API-токены для агентов): имя, дата создания, срок, last_used_at. Вот зачем давать токенам имена по агентам.
  • «История услуги» (кабинет, страница сервера): включения и выключения, переустановки, сбросы пароля, смены тарифа, платежи — с временем и источником: вы, поддержка или автоматически. Какой именно токен или делегат это сделал, она не покажет — только что действие пришло с вашей стороны.
  • Счета и баланс: каждое списание и возврат.
  • list_delegations: у кого есть доступ, к чему и до какого числа.

Этот пробел в «Истории услуги» — честный предел серверного аудита на сегодня. Если нужно знать, какой агент что сделал, логируйте каждый вызов инструмента с аргументами (без секретов) на стороне агента.

Какую схему выбрали бы мы

Для агента, который обслуживает один боевой сервер:

  1. Отдельный аккаунт для агента с нулевым балансом, сервер делегирован с expires_days: 90.
  2. Ваш токен владельца остаётся у вас и не лежит ни в одном конфиге агента.
  3. Бэкапы на этом сервере — делегат может его переустановить.
  4. Инструменты уровня 3 в клиенте — на «ask» или «deny».
  5. Токен агента в файле с правами 600, обновляется до истечения срока.

Агенту, которому нужно заказывать серверы или запускать песочницы, делегирования мало — ему нужен баланс. Тогда потолок — баланс: пополняйте его под задачу, давайте токену имя и раз в неделю смотрите last_used_at. Если токен только на чтение изменил бы то, как вы запускаете агентов, напишите нам в поддержку: именно такие отзывы решают, что мы делаем дальше.

Частые вопросы

Можно ли дать AI-агенту доступ только на чтение?

Токеном — пока нет: любой клиентский токен имеет те же права, что и ваш аккаунт в кабинете. Ближайший вариант — делегирование: заведите агенту отдельный аккаунт без баланса и делегируйте ему один сервер. Он будет видеть этот сервер и управлять им, но не сможет тратить деньги, отменять услугу, открывать консоль и передавать доступ дальше. Перезагрузка, сброс root-пароля и переустановка ему доступны, поэтому включите на этом сервере бэкапы.

Как ограничить, сколько тратит агент?

Предоплаченным балансом. Деньги тратят только три инструмента (order_vps, change_plan, create_sandbox), и списывают они с баланса; если его не хватает, возвращается 402 или неоплаченный счёт. Агент может создать ссылку на пополнение или оплату, но оплатить её можно только из криптокошелька — это делает человек. Привязанной карты и ухода в минус нет.

Что мешает агенту удалить мой сервер?

reinstall_vps, reset_password и немедленный cancel_service требуют confirm с точным hostname (для переустановки и сброса пароля подходит и DELETE). По умолчанию отмена идёт как end_of_period: сервер работает до конца оплаченного периода, а undo_cancel её отменяет. Делегированные аккаунты отменять услугу не могут вообще. Поле confirm защищает от агента, понявшего задачу слишком широко, но не от злоумышленника с вашим токеном, поэтому в MCP-клиенте поставьте для этих инструментов обязательное подтверждение.

Что делать, если Bearer-токен утёк?

Сразу отзовите его (Кабинет → Настройки → API-токены для агентов или DELETE /auth/tokens/{id}). Потом проверьте список токенов на незнакомые, посмотрите «Историю услуги» каждого сервера, счета и list_delegations, и смените root-пароли на серверах, которые видел этот токен: get_vps_status с reveal отдаёт root-пароль.

Сколько инструментов у MCP-сервера EQVPS?

45 для клиентского токена на версии MCP-сервера 1.6.0 (проверено 2026-10-04): 5 публичных, 15 только на чтение, 17 меняют состояние без трат и 8 тратят деньги, уничтожают данные или выдают доступ. Реселлерский токен вместо них видит отдельный набор из 30 реселлерских инструментов — всего на одном эндпоинте 75.

Комментарии

Пока нет комментариев. Будьте первым.

Оставить комментарий

Комментарии проходят модерацию перед публикацией.