MCP токенът е паролата на акаунта ви с прикачен API. Дайте го на агент и получавате потребител, който никога не се уморява, чете всяка страница, към която го насочите, и прави точно това, което е казала последната инструкция в контекста му. През повечето време точно това искате. Тази страница е за останалото време.
Всичко по-долу е проверено срещу работещия сървър на датата в началото: списъкът с инструменти идва от tools/list на https://mcp.eqvps.com/mcp, ограниченията от самия API. Ако тепърва започвате, първо вижте свързване на MCP клиент и API токени, после се върнете.
Модел на заплахите: какво наистина се обърква
Три неща, в реда, в който ги виждаме:
- Агентът разбира погрешно. „Почисти тестовата машина“ се превръща в преинсталиране на грешния сървър. Без злонамереност, просто модел, който запълва празнина в инструкцията.
- Prompt injection. Агентът чете текст, който не сте писали вие (README, отговор от поддръжката, страница от мрежата), и този текст му казва да направи нещо. Ако агентът държи токен с пълни права, вмъкнатата инструкция също ги има.
- Токенът изтича. Озовава се в история на shell, в публично хранилище, в споделена MCP конфигурация или в ред от лог.
MCP сървърът проверява дали токенът е валиден и дали сървърът принадлежи на този акаунт (или е делегиран на него). Какво сте имали предвид, не знае. Всеки предпазител по-долу отговаря на един въпрос: колко щета е възможна, ако инструкцията е грешна?
Всички MCP инструменти по нива на риск
Клиентският токен вижда 45 инструмента (MCP сървър 1.6.0). Реселърският токен (rk_…) вижда отделен набор от 30 реселърски инструмента и нито един от тези, така че endpoint-ът има общо 75. Вашият клиент получава от tools/list само своя набор.
Тази страница подрежда инструментите по риск. Параметрите и примерните извиквания на всеки са в справочника с параметри; всички инструменти на един ред, включително 30-те за реселъри, са в пълния списък.
Все още не изпращаме анотации на MCP инструментите (readOnlyHint, destructiveHint), така че клиентът не може сам да ги подреди. Настройте одобренията ръчно по нивата по-долу.
Ниво 0 — публични, без токен (5)
| Инструмент | Какво прави |
|---|---|
get_started | Целият сценарий в един отговор: кои инструменти и в какъв ред |
list_plans | Планове, цени, образи на ОС |
sandbox_pricing | Цени на sandbox средите |
register_account | Създава нов акаунт и връща токена му |
login | Имейл + парола → токен |
Ниво 1 — четене на акаунта, без странични ефекти (15)
| Инструмент | Какво прави | Внимание |
|---|---|---|
whoami | Id, име, имейл на акаунта | |
get_balance | Предплатен баланс | |
list_vps | Активни, създаващи се и спрени сървъри | |
get_vps_status | Статус, параметри, данни за достъп | С reveal: true връща root паролата |
get_vps_metrics | CPU, памет, мрежа, диск във времето | |
get_upgrade_options | Планове, към които сървърът може да мине без преинсталиране | |
list_delegations | На кого сте дали достъп | |
list_delegated_to_me | Сървъри, делегирани на вас | |
list_tickets | Вашите тикети към поддръжката | |
get_ticket | Един тикет с цялата кореспонденция | Текстът на тикета е недоверен вход за агента |
list_sandboxes | Вашите sandbox среди | |
get_sandbox | Една sandbox среда и разходът ѝ | |
get_task | Изход от фонова задача | |
download_file | Чете малък файл от sandbox среда | |
get_download_url | Краткотраен линк към един файл от sandbox | Всеки с линка може да изтегли, докато не изтече |
Ниво 2 — променят състоянието, не харчат нищо (17)
| Инструмент | Какво прави | Внимание |
|---|---|---|
power_vps | start / stop / reboot | Stop си е 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 | Изпълнява код в sandbox | Само в sandbox, не на вашия VPS |
kill_task | Спира фонова задача в sandbox | |
upload_file / get_upload_url | Качва файл в sandbox |
Ниво 3 — харчат пари, унищожават данни или дават достъп (8)
| Инструмент | Какво прави | Проверка на сървъра |
|---|---|---|
order_vps | Поръчва сървър, плащане от баланса | Не стига баланс → неплатена фактура, нищо не е изтеглено |
change_plan | Смяна на плана без преинсталиране, разликата се тегли от баланса | confirm: true; не стига баланс → 402 |
create_sandbox | Стартира платена sandbox среда | Празен баланс → 402 |
reinstall_vps | Изтрива диска и инсталира нова ОС | confirm = точният hostname или DELETE; 4 извиквания/мин |
reset_password | Нова root парола, старата спира да работи | confirm = hostname или DELETE; 6 извиквания/мин |
cancel_service | end_of_period (по подразбиране, обратимо) или immediate (унищожава сървъра веднага) | immediate изисква confirm = hostname |
kill_sandbox | Изтрива sandbox средата заедно с файловете | няма |
delegate_service | Дава на друг човек операторски достъп до сървър | Само собственикът; другият трябва да приеме |
Дневник на промените в набора инструменти
| Дата | Версия на сървъра | Промяна | Ефект върху риска |
|---|---|---|---|
| 2026-10-03 | 1.6.0 | Добавен refresh_token; токените по подразбиране важат 1 година | Ниво 2 |
| 2026-10-03 | 1.5.0 | undo_cancel, get_upgrade_options, change_plan | change_plan харчи баланс → ниво 3 |
| 2026-10-03 | 1.1.0 | 13 инструмента за sandbox | create_sandbox харчи, kill_sandbox унищожава → ниво 3 |
Текущата версия е публична: curl -s https://mcp.eqvps.com/healthz. Когато се смени, ще се смени и тази таблица.
Балансът е таванът на разходите
EQVPS работи с предплата. Няма запазена карта, кредитна линия или овърдрафт: най-много, което агентът изобщо може да похарчи, е това, което стои на баланса. Харчат три инструмента: order_vps, change_plan и create_sandbox. Подновяванията на текущите ви сървъри също се теглят от същия баланс.
Агентът може да създава заявки за пари, но не и да ги плаща. topup_balance и pay_invoice връщат линк за криптоплащане, а линк без портфейл зад него не прави нищо. Няма и endpoint за теглене: парите от баланса могат да купуват услуги в акаунта ви, но не и да излязат навън. Възстановените суми при незабавно прекратяване също се връщат на баланса.
Една уговорка, и тя е сериозна. Ако държите баланса много нисък, за да ограничите агента, започват да се провалят подновяванията на собствените ви сървъри и те влизат в гратисен период. Нашето правило: един цикъл подновяване на това, което вече работи, плюс бюджета на текущата задача на агента. Ръководството за бюджет на агент показва сметката. А ако дадете на агента собствен портфейл с пари, този портфейл става втори таван, който също трябва да следите.
Минимални права: токен само за четене (все още) няма
Направо: всеки клиентски токен има същите права като акаунта в таблото. Името и срокът на токена се настройват, обхватите (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}'
Поканата трябва да се приеме, докато сте влезли с този имейл (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. Непознат токен или такъв, използван след като сте спрели агента, е вашият сигнал.
Ако токен изтече
В този ред:
- Отменете го. Табло → Настройки → API токени за агенти → Отмяна, или
curl -s -X DELETE -H "Authorization: Bearer $EQVPS_TOKEN" https://api.eqvps.com/api/v1/eqvps/auth/tokens/<id>. Спира да работи от следващата заявка. - Потърсете нови токени, които не сте създали вие, и ги отменете също.
- Проверете какво може да е засегнато: историята на услугата за всеки сървър, фактурите и баланса, и
list_delegationsза достъп, който не сте давали. - Сменете root паролите на всички сървъри, които този токен е виждал.
get_vps_statusсreveal: trueдава root паролата, така че изтекъл токен означава изтекла root парола. Проверете и~/.ssh/authorized_keys, докато сте там. - Затворете вратата с паролата. Ако акаунтът ви никога не е имал парола, който е държал токена, е могъл да зададе такава със
set_password. Влезте с код по имейл и я сменете.
Превенцията за стъпка 5 не струва нищо: задайте сами парола на акаунта още сега и 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: кой има достъп, до какво и до кога.
Тази празнина в историята на услугата е честната граница на сървърния одит днес. Ако трябва да знаете кой агент какво е направил, логвайте всяко извикване на инструмент с аргументите (без тайните) от страна на агента.
Настройката, която бихме избрали
За агент, който поддържа един продукционен сървър:
- Отделен акаунт за агента, нулев баланс, сървърът е делегиран с
expires_days: 90. - Вашият собственически токен остава при вас и не стои в никаква конфигурация на агента.
- Резервни копия на този сървър, защото делегатът може да го преинсталира.
- Инструментите от ниво 3 в клиента на „ask“ или „deny“.
- Токенът на агента във файл с права
600, подновяван преди изтичане.
За агент, който трябва да поръчва сървъри или да пуска sandbox среди, делегирането не стига, защото му трябва баланс. Тогава таванът е балансът: зареждайте го за конкретната задача, дайте име на токена и веднъж седмично поглеждайте last_used_at. Ако токен само за четене би променил начина, по който пускате агенти, пишете ни в поддръжката: точно такава обратна връзка решава какво правим по-нататък.
Коментари
Още няма коментари. Бъди първият.