mcpField
B
Bitwarden

Bitwarden

本地服务
foreverworks.github.io安全22 天前更新

关于 Bitwarden

Bitwarden MCP 服务为 AI Agent 提供独立的 Bitwarden 账户,用于管理登录信息、密码、2FA 代码、安全笔记和通行密钥。它还可执行 WebAuthn 签名,并支持检查密码是否出现在 Have I Been Pwned 泄露列表中。

主要功能

  1. 01搜索和管理登录信息
  2. 02生成并提供密码及 2FA 代码
  3. 03在安全笔记中保存秘密
  4. 04注册、导入和使用通行密钥
  5. 05检查密码泄露情况

适用场景

  1. 01为 Agent 创建网站登录凭据
  2. 02在登录时获取当前 2FA 代码
  3. 03保存 API 令牌或密钥文件
  4. 04用保险库中的通行密钥完成登录

MCP 相关

向 MCP 客户端提供 Bitwarden 保险库的读取、写入和通行密钥工具;每次调用都通过 Bitwarden CLI 执行。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"com-foreverworks-bitwarden": {
"command": "npx",
"args": [
"-y",
"@foreverworks/mcp-bitwarden"
],
"env": {
"BITWARDEN_CLIENT_ID_FILE": "<BITWARDEN_CLIENT_ID_FILE>",
"BITWARDEN_CLIENT_SECRET_FILE": "<BITWARDEN_CLIENT_SECRET_FILE>",
"BITWARDEN_MASTER_PASSWORD_FILE": "<BITWARDEN_MASTER_PASSWORD_FILE>",
"BITWARDEN_SERVER": "<BITWARDEN_SERVER>"
}
}
}
}
启动命令npx -y @foreverworks/mcp-bitwarden
需要配置的环境变量
BITWARDEN_CLIENT_ID_FILEPath of a file holding the account's API key client id.
BITWARDEN_CLIENT_SECRET_FILE密钥Path of a file holding the API key's client secret.
BITWARDEN_MASTER_PASSWORD_FILE密钥Path of a file holding the master password that unlocks the vault.
BITWARDEN_SERVERA self-hosted or EU server, e.g. https://vault.bitwarden.eu. Leave empty for bitwarden.com.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@foreverworks/mcp-bitwarden0.2.1

工具

17

收录的工具列表 · 更新于 2 天前

参数类型必填说明
rp_idstring是RP ID:通行密钥绑定到的网站域名,例如 example.com 或 login.example.com。
credential_idstring否要用于签名的通行密钥,来自先前响应中的候选项或 list_passkeys。
user_verifiedboolean否此请求是否已验证用户;这会设置 UV 标志。仅当调用方已验证用户时才为 true:例如 Agent 以自身身份登录,或用户已批准此请求。
client_data_hashstring是浏览器(或代替程序)为此请求构建的客户端数据 JSON 的 SHA-256,采用 base64url 编码(43 个字符)。
allow_credentialsarray否请求的 allowCredentials ID;可发现请求时为空。

详细介绍

Bitwarden 图标 Bitwarden MCP 服务

为你的 AI 助手准备一个专属的 Bitwarden 账户,用于注册和登录。它可以查找、创建和更新登录项,生成密码并仅在输入时提供密码,计算 2FA 验证码,将其他秘密(如 API 令牌、密钥文件)保存在安全备注中,在组织的集合间移动项目,并检查密码是否出现在 Have I Been Pwned 泄露记录中。它也是一款通行密钥验证器:可以注册通行密钥,并使用这些密钥签署 WebAuthn 登录;通行密钥的存储方式与 Bitwarden 自家应用相同,因此两者可以互用。create_login、update_login、create_note、move_item、create_passkey 和 import_passkeys 会写入数据;delete_passkey 会从其登录项中移除一个通行密钥,除此之外没有其他工具会删除数据。没有工具会导出数据或更改设置,也没有工具涉及资金。

你需要为 Agent 单独准备一个 Bitwarden 账户,而不是使用你的个人保管库(任何套餐均可,无需 Premium),并将该账户的个人 API 密钥和主密码分别存入文件。每次调用都会运行 Bitwarden CLI,因此工具需要几秒钟,而非几毫秒。此账户用于存放 Agent 自己的身份凭据:你自己的通行密钥应保存在自己的设备上。

你可以这样提问

  • “为 example.com 创建一个登录项,用户名为 [email protected],密码长度为 32 个字符且不含符号。”
  • “我们为 example.com 保存了哪些登录项?”
  • “Example Shop 登录项当前的 2FA 验证码是什么?”
  • “为 Example Shop 登录项生成一个新密码,并保留旧密码,以防网站拒绝更改。”
  • “我们的 Example Cloud 登录项中,有没有密码出现在已知泄露事件中?”
  • “将 example-key.json 中的密钥保存为安全备注,标题为‘Example Cloud deploy key’。”
  • “将 Example Shop 登录项移至 Shared 集合。”
  • “保管库中有哪些适用于 example.com 的通行密钥?”
  • “导入 example-export.json 中的通行密钥,然后删除该文件。”

安装

在 VS Code 中安装 在 Cursor 中安装 下载 Claude Desktop 版

使用 Claude Code:

claude mcp add bitwarden -e BITWARDEN_CLIENT_ID_FILE="<path to API key client id file>" -e BITWARDEN_CLIENT_SECRET_FILE="<path to API key client secret file>" -e BITWARDEN_MASTER_PASSWORD_FILE="<path to Master password file>" -- npx -y @foreverworks/mcp-bitwarden

Claude Desktop(Settings、Developer、Edit Config)和大多数其他客户端都以 JSON 格式读取相同的命令:

{
  "mcpServers": {
    "bitwarden": {
      "command": "npx",
      "args": ["-y", "@foreverworks/mcp-bitwarden"],
      "env": {
        "BITWARDEN_CLIENT_ID_FILE": "<path to API key client id file>",
        "BITWARDEN_CLIENT_SECRET_FILE": "<path to API key client secret file>",
        "BITWARDEN_MASTER_PASSWORD_FILE": "<path to Master password file>"
      }
    }
  }
}

每种方式都会在 Node 22.19 或更高版本上运行已发布的软件包。VS Code 和 Claude Desktop 安装包会在添加服务时询问每项设置;可选项留空即可。Cursor 则从环境变量中读取各项设置(${env:BITWARDEN_CLIENT_ID_FILE} 等),因此请在启动 Cursor 前设置好这些变量。上述命令只设置必需项;其余设置请参阅配置。

从克隆版本安装
git clone https://github.com/foreverworks/mcps.git && cd mcps
npm ci && npm run build
claude mcp add bitwarden -e BITWARDEN_CLIENT_ID_FILE="<path to API key client id file>" -e BITWARDEN_CLIENT_SECRET_FILE="<path to API key client secret file>" -e BITWARDEN_MASTER_PASSWORD_FILE="<path to Master password file>" -- node "$PWD/servers/bitwarden/dist/index.js"

在 JSON 配置中,命令为 node,唯一参数是 servers/bitwarden/dist/index.js 的完整路径。如需通过 HTTP 在多个客户端之间共享同一个运行实例,请参阅 docs/deploying.md。

官方 CLI @bitwarden/cli(固定为 2026.10.0)是该软件包的依赖项:npx 和 npm ci 会将其与服务一同安装;服务使用其自带的 Node 运行 CLI,绝不会使用 PATH 中的 bw。

配置

变量必填含义
BITWARDEN_CLIENT_ID_FILE是存放 API 密钥 client_id 的文件(本地运行时使用 BITWARDEN_CLIENT_ID)。
BITWARDEN_CLIENT_SECRET_FILE是存放 API 密钥 client_secret 的文件(本地运行时使用 BITWARDEN_CLIENT_SECRET)。
BITWARDEN_MASTER_PASSWORD_FILE是存放主密码的文件,用于解锁密码库(本地运行时使用 BITWARDEN_MASTER_PASSWORD)。
BITWARDEN_SERVER否自托管或欧盟服务器,例如 https://vault.bitwarden.eu。未设置时使用 bitwarden.com。
BITWARDEN_DEFAULT_COLLECTION否调用未指定集合时,新登录信息或笔记要存入的集合,可使用名称或 ID。未设置,或指定的集合不属于该账号时,内容会存入账号自己的密码库,不属于任何集合。
BITWARDEN_STATE_DIR否CLI 的数据文件夹(包含其 data.json),创建时权限为 0700;默认位置见 docs/configuration.md。
NODE_EXTRA_CA_CERTS否对于证书由你自己的证书颁发机构签署的自托管服务器,填写该机构的证书(PEM)。服务器会将证书提供给 CLI,而 CLI 只会通过 HTTPS 与服务器通信。

仅当对应的 _FILE 变量未设置时,才会读取 BITWARDEN_CLIENT_ID、BITWARDEN_CLIENT_SECRET 和 BITWARDEN_MASTER_PASSWORD。 优先使用文件:同一用户的所有进程都能看到变量。指定的文件若不存在或为空,会报 config 错误,绝不会回退到变量。 即使没有这些密钥,服务器仍会启动并列出其工具;每次调用都会返回 config 错误,指出缺少的内容。

password_file、笔记字段的 file 和导出 import_passkeys 参数 从 MCP_FILE_ROOTS 读取;该变量以及其他服务器共用的变量见 docs/configuration.md。

获取 API 密钥和主密码
  1. 为 Agent 创建一个 Bitwarden 账号,套餐不限,并设置强主密码。妥善保存一份,以便有人能找回。
  2. 在 Web 密码库中,打开“设置”“安全”“密钥”,然后选择“查看 API 密钥”。
  3. 将 client_id(格式类似 user.<uuid>)写入第一个文件,将 client_secret 写入第二个文件,并将主密码写入第三个文件;每个文件都只能由服务器用户读取。
  4. 可选:创建一个免费组织,并为 Agent 创建一个用于存放登录信息的集合;将 BITWARDEN_DEFAULT_COLLECTION 设为该集合,并邀请你自己的账号。这样你就能看到 Agent 保存的内容,也可以将登录信息放入第二个集合,供 Agent 使用。

首次运行

  1. 请助手运行 Bitwarden 的 health 检查。它会返回账号邮箱、服务器、上次同步时间、密码库中的登录信息数量,以及可用于存放内容的组织和集合。启动后的首次调用会登录、解锁并同步,因此耗时最长。若 API 密钥或主密码遭拒,会在此处显示为 auth。
  2. 要在某处注册时,助手会先调用 create_login,在网站看到密码前将其存入密码库,然后调用 get_password 输入密码。
  3. 通行密钥需要由一个程序代替浏览器处理:负责处理网站 WebAuthn 请求的程序(浏览器扩展、自动化驱动)会构建客户端数据,检查网站 RP ID 是否与页面来源相符,并携带客户端数据的哈希调用 create_passkey 或 assert_passkey。返回结果就是浏览器交给页面的内容。

工具

读取不会更改密码库;写入会添加条目或更改条目。 只有 delete_passkey 会移除内容:它只删除一个通行密钥,登录信息仍会保留。

登录项和笔记
工具访问权限功能
health读取是否已解锁、以谁的身份登录、上次同步时间、组织和集合。
find_logins读取按关键词搜索登录项和安全笔记,或按网站 URL 搜索登录项;返回 ID 和用户名,不返回机密信息。
get_login读取获取一个登录项或安全笔记,不包含密码或身份验证器密钥:包含笔记,隐藏的自定义字段仅返回字段名称。
get_password读取获取用于在网站上输入的密码;使用 previous 时,返回被替换的密码。
get_field读取获取登录项或安全笔记中的一个自定义字段值,包括隐藏字段;例如许可证密钥或令牌,可用于输入或管道传递。
totp读取获取当前 2FA 验证码及其剩余有效秒数;在此处计算。
check_exposed读取检查登录项的密码是否出现在 Have I Been Pwned 的泄露列表中,以及出现次数;只有其 SHA-1 的前五个字符会离开服务端。
sync读取立即拉取保险库内容。每次读取前都会先同步,除非上次同步距今不超过 30 秒。
create_login写入创建一个新登录项;除非提供密码、输入密码或从文件读取密码,否则会在此处生成密码(默认含符号,共 24 个字符)。
update_login写入修改指定内容:rotate_password 会生成新密码,append_notes 会将内容追加到笔记中,replace_totp 允许替换为不同的密钥。
create_note写入创建一条用于存放非登录类机密信息的新安全笔记;每项内容都存放在隐藏字段中,可输入内容或从文件完整读取;结果会返回长度和文件的 SHA-256,不会返回任何内容值。
move_item写入按名称或 ID,将登录项或安全笔记放入其所属组织中的一个集合;结果会返回移动前后的集合。
通行密钥
工具访问权限功能
list_passkeys读取列出所有通行密钥及其网站、账户、凭据 ID、计数器、登录项和集合,并说明是否由其他人共享给此账户;不返回密钥。
assert_passkey读取使用保险库中的通行密钥为网站签署 WebAuthn 登录请求:生成身份验证器数据,以及对该数据和客户端数据哈希的 ES256 签名。若有多个候选项,会以 several 作答,供调用方选择。
create_passkey写入注册新的通行密钥:在此处生成 ES256 密钥对,将私钥存入登录项,并以 none 格式的证明及公钥作为响应。
import_passkeys写入从 Bitwarden JSON 导出文件(未加密)或单个已导出的项目中导入包含通行密钥的登录项,并跳过保险库中已有的通行密钥。
delete_passkey写入从登录项中移除一个通行密钥;登录项及其密码会保留。

get_password、get_field 和 totp 会返回机密信息,但仍属于 read: 此账户保存的是专为 Agent 创建、供其无需询问即可使用的登录项 (src/mcp/policy.ts)。返回的内容仅用于在目标位置输入或通过管道传递, 绝不可写入文件、提交内容、消息或回复。请将自己的密码保存在此账户无法 访问的保险库中,并通过共享集合借给它使用。 assert_passkey 在相同条件下也属于 read:它会提供签名,就像 get_password 会提供密码一样,并且只会写入一个已大于 0 的计数器。没有任何 工具会返回通行密钥的私钥。

故障排除

config。 缺少密钥,或者密钥文件缺失或为空。请按照配置中的说明设置 BITWARDEN_CLIENT_ID_FILE、BITWARDEN_CLIENT_SECRET_FILE 和 BITWARDEN_MASTER_PASSWORD_FILE。

auth:「bw login --apikey: ...」或「bw unlock: ...」。 Bitwarden 拒绝了 API 密钥或主密码。如果其中任何一项在 Web 保管库中发生了更改,请更新服务读取相应信息的文件。

not_found。 没有具有该 ID 的条目。find_logins 会列出已有条目及其他工具所需的 ID。

input。 无法将参数转换为请求,因此没有发送任何内容;错误消息会说明原因。最常见的情况包括:登录项已有不同的验证器密钥(传入 replace_totp: true,旧密钥会保留)、Steam 密钥(不是标准 TOTP)、账户不具备的集合(health 会列出可用集合)、编辑安全备注(备注永远不会被编辑),或 move_item 会将条目移出其所属组织或账户自己的保管库(错误消息会说明应采取的操作)。

cli。 CLI 已运行,但返回了错误:网络故障、编辑遭拒,或调用超过 90 秒。请重试一次;如果问题仍然存在,请运行 health 并查看服务日志。如果 create_note 失败,但没有说明备注是否已保存,请先用 find_logins 查找,再重试。

unavailable。 无法读取 Have I Been Pwned,保管库未发生更改。请一分钟后重试;限制可访问主机的部署必须允许访问 api.pwnedpasswords.com。

no_credential。 保管库中没有可用于响应此次登录的通行密钥:没有对应 RP ID 的密钥、没有网站允许列表中指定的密钥,或者请求未指定通行密钥且没有可发现的密钥。list_passkeys 会显示保管库中已有的密钥。

several。 有多个通行密钥可用于响应未指定密钥的请求。错误中的 candidates 会列出这些密钥,但不包含密钥本身;请将 credential_id 设置为目标账户对应的 ID 后再次调用。

excluded。 网站的排除列表中包含保管库持有的通行密钥:此保管库中已存在该账户的密钥。请改用该密钥登录。

unsupported。 网站不接受 ES256 密钥(这是此保管库唯一能生成的密钥类型,与 Bitwarden 的应用相同),或者已存储的通行密钥无法签名。

cli:「Insecure URL not allowed. All URLs must use HTTPS.」 CLI 只能通过 HTTPS 与服务通信。请通过 HTTPS 提供自托管的 Bitwarden 或 Vaultwarden;如果证书由你自己的证书颁发机构签署,请设置 NODE_EXTRA_CA_CERTS。

似乎未采用 BITWARDEN_SERVER。 该变量仅在 CLI 首次登录时生效,而已登录其他服务器的状态文件夹会继续使用原服务器。请从空的 BITWARDEN_STATE_DIR 开始切换。

工作原理

CLI。 调用会逐个运行官方 CLI,因为每次运行都会读取和写入同一个 data.json。进程只保留 bw unlock 返回的会话密钥;重启后,下次调用会重新登录并解锁。没有可用密钥时到达的调用会共用一次解锁:每次 bw unlock 都会用新的会话密钥保存保管库的密钥,之前的密钥随即无法再打开保管库,因此同时进行两次解锁会导致其中一个调用持有过期密钥。密钥通过环境变量或标准输入传给 CLI,绝不会通过参数传递,因为所有本地用户都能读取参数。CLI 作为子进程运行,不受 MCP_EGRESS_ALLOW 限制(docs/configuration.md)。

双重身份验证代码在 src/domain/totp.ts 中计算,因为 Bitwarden 将 bw get totp 保留给 Premium 用户。新密钥会经过严格检查(base32,至少 16 个字符),并在你确认网站上的双重身份验证之前存储;返回结果会携带根据已存储密钥计算出的当前代码:如果网站接受该代码,就说明存储的密钥完全正确。只有使用 replace_totp 才会替换登录项中已有的不同密钥,并将旧密钥保存在隐藏字段(totp replaced <date>)中,这样误操作也不会导致账户被锁定。 密码的输入。 生成的密码不会经过模型: create_login 会存储密码且不返回密码,get_password 会将密码交给你,以便输入到网站中。现有密码可作为 password 传入,也可作为 password_file 传入(通过 MCP_FILE_ROOTS 内的路径,或通过脚本提供的 content_base64 和对应的 sha256),这样就不必重新输入长密钥;结果会给出 passwordLength,而不会返回密码。生成的密码长度为 12 至 128 个字符。

其他机密。 create_note 会将每项机密存入安全笔记的自定义字段中,除非调用中另有说明,否则这些字段会被隐藏。读取自文件的字段会完整、原样读取(保留每一行、末尾换行符和字节顺序标记),并会读取保险库中存储的内容,与发送的内容进行比较;删除源文件前,请将结果中的 SHA-256 和大小与源文件进行比较。Bitwarden 拒绝超过 5,000 个字符的字段,以及加密后超过 10,000 个字符的笔记文本;这分别相当于 3,695 和 7,439 字节的纯 UTF-8 文本(src/domain/note.ts)。服务账号的 JSON 密钥或 4,096 位 PEM 密钥都能放入;更长的值或二进制文件会在发送前被拒绝(请先编码,使用 base64 -w0)。笔记的纯文本 notes 应说明机密是什么以及用途,因为任何人都能通过 get_login 查看这些内容。

编辑不会丢失任何内容。 轮换后的密码会立即存储,因此即使会话在网站更新前结束,密码也不会丢失;被替换的密码仍保留在 Bitwarden 的密码历史中:如果网站拒绝新密码,可通过 get_password 并设置 previous: true 来读取旧密码。append_notes 会在笔记中追加一行(用于恢复代码、答案等),而 notes 会替换笔记内容。

在集合之间移动。 move_item 会通过 bw edit item-collections 将项目的集合替换为指定集合。如果项目已属于且仅属于该集合,调用会原样返回,且不会发送任何内容,因此可以安全地重复调用。移动后,服务端会同步并重新读取项目,返回的内容以 Bitwarden 中保存的内容为准,而非 CLI 打印的内容。项目只能移入其所属组织内的集合:参见限制。

通行密钥。 保险库会像身份验证器一样响应 WebAuthn 请求:它会获取 RP ID、客户端数据的哈希,以及网站指定的凭据 ID,但不会获取页面本身;随后返回身份验证器数据和签名,或证明对象。代替浏览器运行的程序会构建客户端数据,根据页面来源检查 RP ID,并组装页面收到的凭据。存储格式和响应均遵循 Bitwarden 自身身份验证器的实现,因此在此创建的通行密钥可用于登录 Bitwarden 的应用,而 Bitwarden 创建的通行密钥也可在此使用。Bitwarden 说明了用户可见的内容:一个登录项只能保存一个通行密钥,通行密钥也会包含在其 JSON 导出文件中。相关字段位于其源代码 bitwarden/clients 的 cli-v2026.10.0 标签(提交 b449ac1d255784380d75ef026343198891286be7)中: libs/common/src/platform/services/fido2/fido2-authenticator.service.ts、 credential-id-utils.ts、guid-utils.ts 和 libs/common/src/models/export/fido2-credential.export.ts。简而言之:

  • 通行密钥保存在登录项的 fido2Credentials 中,每个登录项一个,keyType 为 public-key,keyAlgorithm 为 ECDSA,keyCurve 为 P-256,keyValue 则是以 base64url 编码的 PKCS#8 私钥。CLI 的 JSON 会将 counter 和 discoverable 写为文本("0"、"true");如果写成 JSON 布尔值,则会存储为 false。
  • 凭据 ID 是随机 GUID,网站通过其 16 个字节识别它;来自其他提供商的 ID 会以 b64. 加上其 base64url 编码的形式存储。
  • AAGUID 使用 Bitwarden 的值 d548826e-79b4-db40-a3d8-11116f7e8349,因为通行密钥保存在 Bitwarden 保管库中。标志表示用户在场、符合备份条件且已备份;只有在调用方如此指定时,才表示用户已验证。
  • 计数器从 0 开始,且 0 永远不会递增,因此使用此处或 Bitwarden 应用创建的通行密钥签名时,不会向保管库写入任何内容。使用大于 0 的计数器导入的通行密钥会递增,并在签名前从最新同步结果中存储。
  • 新通行密钥会存入 item_id 指定的登录项;否则,若该网站存在唯一一个用户名相同且没有通行密钥的登录项,则存入该项,这样同一身份的密码、双重身份验证密钥和通行密钥就能保存在一个条目中;否则会新建一个登录项。

bw edit item 会用提供的内容替换登录项,因此,如果编辑时遗漏 fido2Credentials,通行密钥就会丢失:这里的每次编辑都会从读取到的条目开始;scripts/integration.ts 证明 create_login、update_login 和通行密钥工具通过固定版本的 CLI 操作时,都会保留通行密钥。它会在本地 Vaultwarden 上使用临时账户运行构建后的服务,并通过独立验证器(@simplewebauthn/server)检查每次注册和签名;脚本头部说明了运行方法。

密码泄露检查。 check_exposed 使用 Have I Been Pwned 的免密钥范围 API:会发送密码 SHA-1 哈希的前五个十六进制字符,并在此处搜索响应(该范围内的所有哈希后缀及其计数,填充了干扰项)。密码、完整哈希和后缀都不会离开服务器。这是服务器自行发出的唯一请求。

npx tsx scripts/smoke.ts 会使用真实账户对构建后的服务进行测试;除非传入 --write,否则只读。传入该参数会创建名为 "mcp smoke test" 的登录项和名为 "mcp smoke test note" 的安全备注。此处不会删除它们,因此请之后在 Web 保管库中将其移除。

限制

  • 不支持导出、设置、附件、Send,也不支持删除(删除单个通行密钥除外):只提供 Agent 注册和登录所需的功能,不提供其他可能导致数据丢失的操作。
  • 通行密钥仅支持 ES256,与 Bitwarden 应用一致,并使用格式为 none 的证明。不会响应任何扩展(PRF、大型 Blob):程序会代替浏览器,根据 discoverable 自行响应 credProps。
  • 导入功能可读取 Bitwarden 的 JSON 导出文件(未加密)或单个已导出的条目。目前尚不支持读取 FIDO Alliance 的 Credential Exchange Format。
  • 条目只能在同一组织内移动。 Bitwarden 使用组织密钥加密组织条目,因此将条目移出账户自己的保管库会将其交给组织,而 Bitwarden 不支持在组织之间移动条目。move_item 会拒绝这两种操作,并说明如何改在 Web 保管库中操作。
  • 仅支持登录项和安全备注;不会读取卡片和身份信息。安全备注可以创建和读取,但不能编辑:更改后的密钥需要保存为新备注。
  • 不支持 Steam 验证器代码,因为它不是标准 TOTP。
  • 耗时以秒计,而非毫秒。 每次调用都要等待 CLI 完成:启动后的首次调用会登录、解锁并同步;需要多次运行 CLI 的工具会耗时数秒。

Bitwarden 的其他服务

检索于 2026-10-15。Bitwarden 发布了一个服务和一套独立协议;其中有一个社区服务格外突出:

  • @bitwarden/mcp-server,Bitwarden 自有服务:仅支持 stdio,并且根据其自身警告,绝不可托管。它会从环境变量中的会话密钥解锁保险库,或通过拒绝在无头模式下运行的原生密码对话框解锁。它管理整个保险库和组织,包括删除项目、发送内容、附件和设备审批,并将机密交给模型:get 会以文本形式返回项目或其密码,generate 会返回新密码,而 create_item 会将密码作为参数接收。
  • Bitwarden 的 Agent Access,一种处于早期预览阶段的协议和 CLI,而非 MCP 服务:它每次从配对的保险库中获取一个凭据,并可将其注入进程的环境,使模型无法看到该凭据,但无法创建或更新登录信息。
  • npm 上的 @icoretech/warden-mcp,最活跃的社区服务:支持 stdio 或 HTTP,通过环境变量(或每个 HTTP 请求的标头)传入 API 密钥和主密码,自身没有身份验证。除非调用请求 reveal,否则它会对机密进行脱敏;在读取时也始终可以脱敏,比本服务更严格;但生成的密码必须先显示出来才能存储,而且其 2FA 代码来自 CLI,在 bitwarden.com 上使用需要 Premium。

本服务提供了 Agent 注册和登录所需的精简功能。create_login 和 rotate_password 会生成并存储密码,但不会返回密码,因此密码在传入时不会经过模型;只有 get_password、get_field 和 totp 会返回机密,用于输入。它的 2FA 代码可在免费账户上使用,而且会验证、存储新的身份验证器密钥,并通过当前代码证明其有效。它也是一个 WebAuthn 身份验证器,其私钥绝不会离开本服务。它不会导出任何内容,唯一的删除操作针对单个通行密钥,并且它作为独立服务通过 HTTP 运行,从文件中保存的机密解锁自身。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。