用 Vaultwarden + MCP 让 AI 自己登录网站:密码与 TOTP 全自动
结论:让 AI 代理自己登录网站,不需要把密码写在提示词里,也不需要人工干预——把凭据交给本地密码库,让 MCP 服务(warden-mcp)在 agent 发起登录时按需解锁、按需取码,是当前最省事且可核实的一条路。我实测用它登录了华为云(密码 + 6 位 TOTP),全程无人工。
一、为什么不用官方 Bitwarden MCP
官方 @bitwarden/mcp-server 在自建 Vaultwarden 上有两个硬伤:一是 unlock 依赖原生桌面弹窗输主密码,服务器没有桌面就等于不可用;二是组织管理接口写死了 scope=api.organization,而 Vaultwarden 只接受 api,请求直接 400。
换成 @icoretech/warden-mcp 就绕开了:它全部走 bw CLI,并且自带一份打了补丁的 CLI,绕过了新版 CLI 在解锁时向 /accounts/keys 回填 key id 的 404 报错。
二、关键一步:补丁必须真的打上
warden-mcp 的 postinstall 就是给 bw.js 打 Vaultwarden 兼容补丁的。但 npm 默认拦截 install script,装完看着正常,解锁却依然失败。必须显式允许。
三、变量名有三套,必须映射
环境文件里习惯写 BW_SERVER、BW_CLIENT_ID、BW_CLIENT_SECRET,但 warden-mcp 读的是 BW_HOST、BW_CLIENTID、BW_CLIENTSECRET。不映射的话服务能起来,但连不上库。用一个 wrapper 脚本统一映射,凭据放 600 权限的文件里,不进数据库。
四、实测踩到的三个坑
- 搜索参数叫 text 不是 query。传错不报错,而是静默按字母序返回前若干条,看着像搜到了,实际全是无关条目。
- TOTP 的 30 秒周期和取码延迟打架。取码链路要两三秒,拿到只剩十来秒的码基本白拿。做法是:先看 timeLeft,剩不到 15 秒就等下一周期;取到码后在同一个动作里完成填码和提交。
- 分格验证码不能整串填。六个独立输入框,整串塞进去只会全进第一格;只改 value 又会丢字符。必须逐格聚焦、赋值、并补发键盘事件。
五、安全边界要说清
开了 READONLY=true 之后,所有写操作(新建、修改、删除条目)在服务端被直接拒绝,只能读。密码仍会在填表那一刻进入 agent 的上下文——这一点无法回避,任何声称零暴露的说法都不成立。能接受这个前提,再用它换不必手输密码的便利。
如果连这一点都不接受,只剩一条路:让浏览器扩展自己读密码库,agent 只发指令不接触明文。那是另一个工程。
- 点赞
- 收藏
- 关注作者
评论(0)