MCP 令牌就是接上了 API 的账户密码。把它交给智能体,你就多了一个永不疲倦的用户:你让它读哪个页面它就读,它的上下文里最后一条指令说什么,它就做什么。大多数时候这正是你想要的。这一页讲的是剩下的那些时候。
下面的内容都在页面顶部的日期对线上服务器核实过:工具列表来自 https://mcp.eqvps.com/mcp 的 tools/list,限制来自 API 本身。如果你刚开始接触,先看连接 MCP 客户端和 API 令牌,再回来读。
威胁模型:实际会出什么问题
按我们遇到的频率排序,有三种情况:
- 智能体理解错了。 "把测试机清理一下"变成了重装另一台服务器。没有恶意,只是模型把指令里没说清的地方自己补上了。
- 提示注入。 智能体读到一段不是你写的文字(README、客服回复、抓取来的网页),这段文字让它去做某件事。如果智能体拿着全权限令牌,被注入的指令也就拥有全部权限。
- 令牌泄露。 它出现在 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 | 创建新账户并返回其令牌 |
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 | 你的沙箱 | |
get_sandbox | 一个沙箱及其用量 | |
get_task | 后台任务的输出 | |
download_file | 从沙箱读取一个小文件 | |
get_download_url | 指向沙箱中某个文件的短期链接 | 链接过期前,任何拿到链接的人都能下载 |
第 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 | 在沙箱里运行代码 | 只在沙箱里,不在你的 VPS 上 |
kill_task | 停止沙箱中的后台任务 | |
upload_file / get_upload_url | 把文件放进沙箱 |
第 3 级 — 花钱、销毁数据或授予访问权限(8)
| 工具 | 作用 | 服务器端检查 |
|---|---|---|
order_vps | 下单购买服务器,从余额付款 | 余额不足 → 生成未付账单,不扣款 |
change_plan | 不重装更换套餐,差价从余额扣除 | confirm: true;余额不足 → 402 |
create_sandbox | 启动计费沙箱 | 余额为零 → 402 |
reinstall_vps | 清空磁盘并安装新系统 | confirm = 准确主机名或 DELETE;每分钟 4 次 |
reset_password | 新 root 密码,旧密码失效 | confirm = 主机名或 DELETE;每分钟 6 次 |
cancel_service | end_of_period(默认,可撤销)或 immediate(立即销毁服务器) | immediate 需要 confirm = 主机名 |
kill_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 个沙箱工具 | create_sandbox 花钱、kill_sandbox 销毁数据 → 第 3 级 |
当前运行的版本是公开的:curl -s https://mcp.eqvps.com/healthz。版本一变,这张表也会跟着更新。
余额就是花费上限
EQVPS 采用预付费。没有绑定的银行卡、没有信用额度、不能透支:智能体最多只能花掉余额里现有的钱。会花钱的工具有三个:order_vps、change_plan 和 create_sandbox。你现有服务器的续费也从同一笔余额里扣。
智能体可以发起付款请求,但付不了款。topup_balance 和 pay_invoice 返回的是加密货币付款链接,背后没有钱包,链接什么也做不了。也没有提现接口:余额里的钱只能在你的账户里购买服务,转不出去。立即取消产生的退款同样退回余额。
有一个提醒,而且很重要。如果为了限制智能体把余额压得很低,你自己服务器的续费就会开始失败,服务器会进入宽限期。我们的经验法则是:保留一个续费周期所需的金额,再加上智能体当前任务的预算。智能体预算指南详细讲了怎么算。另外,如果你给智能体配了一个有钱的独立钱包,那个钱包就成了第二个上限,同样需要盯着。
最小权限:(目前)没有只读令牌
直说:每个客户令牌的权限都和控制台里的账户一样。令牌的名称和有效期可以设置,权限范围(scope)不能。
目前能做到的最窄权限是委派。给智能体开一个余额为零的独立账户,再把一台服务器委派给它:
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。带截图的分步说明:委派访问权限和文档中的访问权限。
| 被委派账户可以 | 被委派账户不能 |
|---|---|
| 查看这一台服务器的状态、指标和历史 | 查看你的其他服务器、余额或账单 |
| 开机、关机、重启 | 取消、续费或更换套餐 |
| 设置主机名和反向 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 密码,凡是这个令牌能看到的服务器都要换。带
reveal: true的get_vps_status会交出 root 密码,所以令牌泄露就等于 root 密码泄露。顺便检查一下~/.ssh/authorized_keys。 - 关上密码这扇门。 如果你的账户从来没设过密码,持有令牌的人可能已经用
set_password设了一个。用邮件验证码登录,然后修改密码。
第 5 步的预防不花一分钱:现在就自己设置账户密码,之后任何人再调用 set_password 都只会得到 409。
人工确认
服务器端强制执行的内容:
reinstall_vps、reset_password和type: immediate的cancel_service要求confirm等于准确的主机名(重装和重置密码也可以用DELETE)。change_plan要求confirm: true。- 默认取消方式是
end_of_period:服务器运行到已付周期结束,undo_cancel可以撤销。 - 每个账户的频率限制:重装每分钟 4 次,重置密码每分钟 6 次,电源操作每分钟 20 次,下单每分钟 20 次。足以防止陷入循环的智能体把同一件事做五十遍,但挡不住一次错误调用。
要清楚 confirm 是什么。它能防止智能体凭一句"清理一下"就动手。它挡不住攻击者,因为主机名只需一次 get_vps_status 调用就能拿到。真正的审批在你的 MCP 客户端里。多数客户端都能在每次调用工具前询问:第 0、1 级放行,第 3 级一律询问。在支持按工具设置权限的客户端里,例如 Claude Code 的 settings.json(服务器以 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的文件里,到期前刷新。
如果智能体需要下单买服务器或运行沙箱,委派就不够了,因为它需要余额。这时余额就是你的上限:按任务充值,给令牌起名,每周看一次 last_used_at。如果只读令牌会改变你部署智能体的方式,请通过支持告诉我们:正是这类反馈决定了我们接下来做什么。
评论
暂无评论。来做第一个吧。