关于 Wundervault MCP
Wundervault MCP 向 AI Agent 提供密钥库操作,同时避免凭据明文进入 Agent 上下文。本地守护进程将解密后的密钥注入子进程,并在返回结果前清理输出,而不向 Agent 返回密钥值。
主要功能
- 01列出密钥条目但不显示值
- 02将密钥注入命令环境
- 03将密钥写入允许的配置文件
- 04使用密钥库凭据执行 SSH 命令和 rsync
- 05分级访问与人工审批
适用场景
- 01使用密钥库凭据执行部署
- 02将凭据写入项目配置
- 03通过 SSH 在远程主机执行命令
- 04使用密钥库中的 SSH 密钥同步目录
MCP 相关
stdio MCP 服务向 MCP 客户端提供密钥条目查询、获取、注入、执行和传输工具。本地守护进程负责解密并交付密钥,不会将明文返回给 Agent。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @wundervault/mcp-serverWUNDERVAULT_AGENT_NAMEThe agent's name, as added in your vault and enrolled on this computer with wundervault-agent --enrol.WUNDERVAULT_AGENT_TOKEN密钥Optional. Overrides the token that wundervault-agent --enrol saved for this agent.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
1收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
@wundervault/mcp-server
面向 AI Agent 的零知识机密库。 你粘贴到 Agent 聊天或 .env 文件中的每个 API 密钥,最终都会进入上下文窗口、对话记录和提供商日志。Wundervault 的解决方案是:Agent 根本不会收到机密。它只需请求执行工作——“注入密钥并运行此部署”——本地守护进程便会解密机密,将其注入子进程环境,清零缓冲区,并在 Agent 看到任何输出之前清理输出。
此仓库是 MCP 服务,可将该工作流提供给任何 Model Context Protocol 客户端使用,包括 Claude Code、Cursor、Cline 等。
不要轻信这项声明——亲自验证: 你可以在自己的网络边界独立验证零知识属性,整个过程约需 5 分钟(使用浏览器开发者工具或 mitmproxy 金丝雀测试)。指南和我们的测试记录:wundervault.com/verify。
工作原理
┌──────────────┐ MCP (stdio) ┌───────────────────┐ ciphertext only ┌───────────────────┐
│ AI agent │──────────────▶│ wundervault-mcp │◀─────────────────▶│ wundervault.com │
│ (Claude, …) │◀──────────────│ + local daemon │ │ stores encrypted │
└──────────────┘ "burned" ack │ decrypts HERE │ │ blobs, no keys │
└─────────┬─────────┘ └───────────────────┘
│ secret → subprocess env
│ (buffer zeroed after spawn)
▼
┌───────────────────┐
│ your command │ stdout/stderr scrubbed
│ (deploy, API, …) │ before the agent sees it
└───────────────────┘
机密会在上传前于客户端加密(通过 Web Crypto 使用 AES-256-GCM)。托管服务只存储密文,无法推导出密钥、口令或明文。
安装
npm install -g @wundervault/mcp-server
快速开始
{
"mcpServers": {
"wundervault": {
"command": "wundervault-mcp",
"env": {
"WUNDERVAULT_AGENT_NAME": "<agent-name>"
}
}
}
}
密钥绝不会写入 MCP 配置。服务会为自己命名 Agent,然后通过 Unix 套接字向本地 wundervault-agent 守护进程请求该 Agent 的凭据。
onboard.py 会注册 Agent 并启动守护进程。
新账户?wundervault.com 提供 90 秒的 Agent 上手流程,可为你生成此配置。
支持的平台
Linux 是经过验证的平台。 macOS 可用于交付机密;Windows 不支持。
从设计上看,交付仅支持 POSIX:sudo 配方通过管道调用 /bin/sh,而
git / ssh-passphrase 配方需要 mkfifo 和 setsid。在 Windows 上,这些
机制会返回明确的“不支持”错误,而不会在深层执行过程中才失败。
单实例锁有两种实现:Linux 上使用由内核持有的抽象套接字,其他平台则使用回环端口。只有 Linux 版本经过测试——有关 macOS 上未经验证的内容及其原因,请参阅
HANDOFF-lock-on-non-linux.md。CI 会在两个平台上运行;锁测试套件则在 Linux 上运行。
安全模型
- 零知识: 加密密钥仅存在于 MCP 服务进程中。Wundervault 服务永远无法看到密钥。
- 阅后即焚: 绝不会向调用它的 Agent 返回明文机密。解密后,Agent 只会收到
"Secret retrieved and burned."。 - 执行清理: 返回命令的标准输出/标准错误前,会先清理其中的明文;shell 转义模式(
$()、反引号、sh -c、eval)以及重定向机密到文件的操作会在解密前被拒绝。 - 指令完整性: 在释放任何机密前,会验证服务端指令签名(PBKDF2-HMAC-SHA256,600k 次迭代)。
- 时序安全: HMAC 比较使用
crypto.timingSafeEqual。 - 分级访问: 服务端会强制执行每条记录的访问级别;Agent 使用高级别机密前需要获得人工批准。
明确的局限
- 该平台采用开放核心模式:此 MCP 服务和 browser crypto 采用 AGPL-3.0 许可,因此你可以审查所有接触机密信息的部分,但托管服务本身并非开源。
- 必须在 Agent 旁边运行本地守护进程;完全隔离网络的环境不适用。
- 按设计,Agent 永远无法读取机密信息的值——如果你的工作流需要模型对机密信息本身进行推理,这种方案并不适合。
工具
vault_entries_list
列出此 Agent 可用的所有保险库条目。返回条目 ID 和机密名称,不包含值。
Input: {}
Output: "Vault entries (N):\n [entry_id] secret_name (tier: read)"
vault_entry_get
检索并解密保险库机密信息。也可以使用该信息执行命令。
Input:
entry_id: string # from vault_entries_list
purpose: string # audit log reason
exec?: string # optional shell command
Output: "Secret retrieved and burned." (plaintext NEVER returned)
安全执行模式(sudo 示例):
sudo -S systemctl restart nginx <<< "$WUNDERVault_SECRET"
请勿使用 echo $WUNDERVault_SECRET | sudo -S——这会导致机密信息暴露在进程日志中。
vault_exec
使用注入环境变量的保险库机密信息执行 shell 命令,可在本地执行,也可通过 SSH 在远程主机上执行。机密信息会注入子进程,并在启动后立即将缓冲区清零;解密前会拒绝转义模式。
Input:
purpose: string # audit log reason
command: string # full shell command (no escape patterns)
entry_id?: string # secret to inject (omit for SSH-key-only remote exec)
working_dir?: string
inject_as?: { env_key, pre_command?, post_command? } # override entry's exec_config
remote_host?: { host, user, ssh_key_entry_id? | ssh_key? }
使用 remote_host.ssh_key_entry_id 时,会从保险库获取 SSH 密钥并使用,过程中绝不会将其写入磁盘。
vault_entry_inject_env
将保险库机密信息直接写入配置文件(~/.npmrc、~/.netrc、~/.docker/config.json 或项目的 .env),明文不会经过 Agent。
Input:
entry_id: string
purpose: string
file_path: string # allowed config file paths only
env_key: string # variable name to set
vault_rsync
通过 SSH 使用 rsync 将本地目录同步到远程主机,SSH 密钥从保险库获取(传输完成后立即删除临时密钥文件)。
vault_entry_forget
丢弃本地引用。在服务器上不执行任何操作。
Input: { entry_id: string }
Output: "Reference [id] discarded from local context."
凭据
MCP 服务不持有自己的密钥,也不会通过命令行接收密钥。首次调用工具时,它会按以下方式获取凭据:
WUNDERVAULT_AGENT_NAME(必填)用于指定此进程对应的已注册 Agent。- Agent 令牌从
WUNDERVAULT_AGENT_TOKEN读取,或从~/.wundervault/agents/<name>.token读取。 - 该令牌会通过
~/.wundervault/agents/<name>.sock发送给本地守护进程,由其返回 API 密钥、加密密钥和保险库 URL。
如果守护进程未运行,工具调用会失败并给出相关说明,不会回退到安全性较低的信息源。运行 onboard.py 以注册 Agent 并启动守护进程。
CLI 选项
wundervault-mcp [options]
--url <url> API base URL override (default: supplied by the daemon)
--help Show help
没有 --api-key、--enc-key 或 --credentials 选项。未知选项会被拒绝。
Agent 钱包(x402)
x402 支付本质上只是一个签名,钱包密钥也和其他保险库机密信息一样。将密钥存储在第 2 层,让 Agent 通过 vault_exec 对支付载荷签名,密钥会注入本地签名子进程——绝不会进入模型上下文,并且每次使用前都需要所有者批准(Agent 被拒绝的调用会携带请求 ID;批准范围限定为该 Agent 和该机密信息,可批准一次,也可在 15/60 分钟时段内批准)。我们已在 Base Sepolia 上完成端到端测试——经验证的测试记录已发布在
wundervault.com/agent-wallets。
针对支付的策略(消费上限、收款方允许列表)尚未实现:目前兼容,但还没有产品化。
沙盒 / 演示模式
设置 WUNDERVAULT_MOCK=1,即可在不运行 wundervault-agent
守护进程、也不提供任何凭据的情况下运行服务。在此模式下,每次工具调用都会返回明确标记为 [DEMO MODE] 的示例响应,而不是联系保险库——不会涉及任何真实机密信息。此模式方便你在没有账户的情况下试用工具接口,也方便 MCP 目录扫描器和 CI
(例如 Glama)启动服务、调用每个工具并在没有连接真实保险库的情况下验证构建。此模式默认关闭,生产环境中绝不会启用。
"env": { "WUNDERVAULT_MOCK": "1" } // demo/CI only — returns fake, labelled output
从源代码构建
git clone https://github.com/wundervault/wundervault-mcp.git
cd wundervault-mcp
npm install
npm run build # compiles TypeScript to dist/
npm test # run the test suite
获取最新动态
版本发布、安全公告和产品文章会发布在 X 上,账号为 @wundervault1。完整的版本发布历史:wundervault.com/changelog。
许可证
本项目采用 GNU Affero 通用公共许可证 v3.0 或更高版本(AGPL-3.0-or-later)授权。请参阅 LICENSE。
Wundervault 采用开放核心模式:此 MCP 服务和客户端均为开源;wundervault.com 上的托管服务则为商业产品。如有商业合作或托管服务方面的咨询,请通过 wundervault.com/contact 联系我们。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。