关于 Vaulted MCP Server — Encrypted Secret Sharing for AI Agents
Vaulted MCP Server 让 AI Agent 创建和获取加密且会过期的机密。环境变量、文件和 dotenv 键在本地解析,值不会进入 LLM 上下文。
主要功能
- 01创建阅后即焚的机密链接
- 02在本地解析环境变量、文件和 dotenv 输入
- 03使用 AES-256-GCM 加密
- 04通过浏览器、剪贴板或文件获取机密
- 05跟踪状态和本地历史记录
适用场景
- 01分享环境变量而不向 Agent 暴露其值
- 02在对话历史之外传递解密后的机密
- 03检查共享机密是否已被查看
MCP 相关
提供 create_secret、view_secret、check_status 和 list_secrets 四种 MCP 工具。通过 stdio 通信,可配置给兼容 MCP 的客户端使用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| content | string | 是 | 要加密并分享的密文内容。最多 1000 个字符。 |
| max_views | enum | 否 | 密文自毁前可查看的次数上限。默认值为 1。1 | 3 | 5 | 10 |
| expiry | enum | 否 | 密文过期前的时长。默认值为 24h。1h | 2h | 6h | 12h | 24h | 3d | 7d | 14d | 30d |
| passphrase | string | 否 | 用于额外保护的可选密码短语。收件人需要输入此密码短语才能查看密文。 |
详细介绍
@vaulted/mcp-server
直接通过 Claude Desktop、Cursor、Windsurf 和任何兼容 MCP 的 AI 工具分享加密的阅后即焚秘密。
- 🔒 零知识端到端加密(AES-256-GCM,密钥绝不会发送到服务端)
- 🙈 Agent 不可见的输入:分享环境变量、文件和 .env 密钥,而不将其暴露在上下文中
- 🛠️ 4 个工具:
create_secret、view_secret、check_status、list_secrets - 📋 本地历史记录,并实时跟踪状态
- 💻 适用于 Claude Desktop、Cursor、Windsurf、Claude Code、VS Code
Agent 不可见的秘密分享
核心功能:敏感值在本地解析,绝不会传递给大模型。当你让 Agent 分享环境变量或文件时,MCP 服务会直接从你的计算机读取值,Agent 看到的始终只有安全链接,而不是秘密本身。
"Share the value of my STRIPE_SECRET_KEY env var"
→ Agent passes: env:STRIPE_SECRET_KEY (never sees the value)
→ Server resolves it locally, encrypts, returns the link
这意味着敏感值绝不会出现在对话历史记录或大模型的上下文中。
安装
需要 Node.js ≥ 18。
通过 npx 即可使用,无需安装:
npx -y @vaulted/mcp-server
也可以全局安装:
npm install -g @vaulted/mcp-server
vaulted-mcp-server
快速开始
将配置添加到 MCP 宿主并重启应用。你的 Agent 将立即获得全部 4 个 Vaulted 工具的使用权限。
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
配置
Claude Desktop
文件:~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
Cursor
文件:~/.cursor/mcp.json
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
Windsurf
文件:~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
Claude Code
项目根目录中的文件 .mcp.json(或全局文件 ~/.claude/.mcp.json):
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
VS Code
文件:.vscode/mcp.json
{
"servers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
任何其他 MCP 客户端
运行 npx @vaulted/mcp-server,将其作为 stdio 传输。该服务使用标准 MCP stdio 协议。
可选标志
| 标志 | 默认值 | 描述 |
|---|---|---|
--base-url | https://vaulted.fyi | Vaulted API 基础 URL(用于可自托管实例) |
--allowed-dirs | (none) | 可访问的文件输入源目录,以逗号分隔(扩展 CWD) |
通过 args 数组传递标志:
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server", "--base-url", "https://your-instance.example.com"]
}
}
}
多个允许的目录:
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server", "--allowed-dirs", "/home/user/secrets,/tmp/creds"]
}
}
}
工具参考
create_secret
加密并存储机密,返回可分享的自毁链接。
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
content | string | 必填 | 要加密的机密(最多 1000 个字符)。支持Agent 盲传前缀。 |
max_views | "1" | "3" | "5" | "10" | "1" | 自毁前可查看的次数 |
expiry | "1h" | "2h" | "6h" | "12h" | "24h" | "3d" | "7d" | "14d" | "30d" | "24h" | 过期时间 |
passphrase | string | (无) | 可选的密码保护 |
label | string | (无) | 便于阅读的本地历史记录标签 |
返回: { success: true, data: { url, statusUrl, expiresIn, maxViews, passphraseProtected }, message }
view_secret
从 Vaulted URL 检索并解密机密。默认在浏览器中打开;使用 output_mode 可避免解密后的值进入对话。
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
url | string | (二选一必填) | 完整的 Vaulted URL,包括 # 片段 |
secret_id | string | (二选一必填) | 机密 ID(可替代 url) |
encryption_key | string | (使用 secret_id 时) | URL 片段中的加密密钥(使用 secret_id 时必填) |
output_mode | "browser" | "clipboard" | "file" | "direct" | "browser" | 解密后的值的发送位置 |
file_path | string | (无) | 当 output_mode 为 "file" 时必填 |
passphrase | string | (无) | 对受密码保护的机密为必填 |
输出模式:
browser— 在默认浏览器中打开机密 URL(在浏览器中解密,值不会进入 Agent 上下文)clipboard— 将解密后的值复制到剪贴板,不向 Agent 返回任何内容file— 将解密后的值写入file_path,不向 Agent 返回任何内容direct— 在响应中返回解密后的值(请谨慎使用——该值会进入 Agent 上下文)
返回: 取决于 output_mode。浏览器、剪贴板和文件模式会确认操作成功,但不会返回明文。
check_status
检查密钥被查看的次数,以及密钥是否仍处于有效状态。不会消耗查看次数。
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
url | string | (一个必需) | 状态 URL(例如,https://vaulted.fyi/s/<id>/status?token=...) |
secret_id | string | (一个必需) | 密钥 ID(可替代 url) |
status_token | string | (需与 ID 搭配) | 创建密钥时生成的状态令牌(与 secret_id 搭配时必需) |
previousViews | number | (无) | 传入上次已知的查看次数,以检测自上次检查后是否有新的查看。当次数增加时,响应会包含“检测到新的查看!” |
返回: { success: true, data: { views, maxViews, status, expiresAt }, message }
list_secrets
显示本地跟踪的所有密钥,以及从 API 获取的实时状态。
| 参数 | 类型 | 描述 |
|---|---|---|
| (无) | — | 无参数 |
返回: { success: true, data: { entries: [...], suggestedAction? }, message }
当存在尚未消耗且处于有效状态的密钥时,会包含 suggestedAction,提示你使用 check_status 进行监控。
响应格式
所有工具都使用一致的响应结构:
// Success
{ "success": true, "data": { /* tool-specific */ }, "message": "Human-readable summary" }
// Error
{ "success": false, "error": { "code": "SECRET_EXPIRED", "message": "...", "suggestion": "..." } }
错误代码: SECRET_EXPIRED、SECRET_CONSUMED、PASSPHRASE_REQUIRED、ENV_VAR_NOT_FOUND、FILE_NOT_FOUND、PATH_TRAVERSAL_BLOCKED、DOTENV_KEY_NOT_FOUND、API_UNREACHABLE、API_ERROR、ENCRYPTION_FAILED、FILE_WRITE_ERROR、INVALID_INPUT
示例
创建密钥
"Share this API key securely: sk-abc123"
→ 在聊天中返回一个一次性链接。通过 Slack、电子邮件或工单分享。
Agent 不可见:分享环境变量
"Share the value of my GITHUB_TOKEN env var securely"
→ Agent 将 env:GITHUB_TOKEN 传递给工具。服务在本地读取该值。Agent 永远不会看到令牌。
Agent 不可见:分享文件
"Share the contents of ~/.ssh/id_rsa.pub securely"
→ Agent 传递 file:~/.ssh/id_rsa.pub。文件在本地读取并加密后,才会返回链接。
Agent 不可见:分享 .env 文件中的密钥
"Share the DATABASE_URL from my .env.local"
→ Agent 传递 dotenv:.env.local:DATABASE_URL。系统会解析并加密指定的密钥。不会读取文件中的其他值。
在浏览器中查看密钥
"Open this secret: https://vaulted.fyi/s/abc123#key..."
→ 浏览器打开并显示解密后的内容。该值不会进入对话。
将密钥复制到剪贴板
"Retrieve this secret to my clipboard: https://vaulted.fyi/s/abc123#key..."
→ 解密后的值会复制到剪贴板。聊天中不会返回任何敏感信息。
将密钥保存到文件
"Save this secret to /tmp/creds.txt: https://vaulted.fyi/s/abc123#key..."
→ 解密后的值会写入 /tmp/creds.txt。聊天中不会返回任何敏感信息。
直接查看密钥(将值返回给 Agent)
"Retrieve this secret and return the value to me: https://vaulted.fyi/s/abc123#key..."
→ 解密后的值会在响应中返回。仅当你需要在对话中使用该值时才使用此方式——它会出现在聊天记录中。
检查密钥是否已被查看
"Has my secret been viewed yet?"
→ 返回查看次数、最大查看次数和过期时间。不会消耗查看次数。
轮询新的查看记录
"Let me know when someone views my secret — previous view count was 0"
→ 传入 previousViews: 0。当次数增加时,响应会包含“检测到新的查看!”
列出最近的密钥
"What secrets have I shared recently?"
→ 返回本地历史记录及从 API 获取的实时状态——每个密钥的查看次数、剩余查看次数和过期时间。
Agent 无法查看的输入源
create_secret 的 content 参数支持一些前缀,指示服务在加密前于本地解析值。解析后的值绝不会传回 Agent。
| 前缀 | 示例 | 解析结果 |
|---|---|---|
| (无) | the plain value | 字面字符串 |
env: | env:STRIPE_SECRET_KEY | process.env.STRIPE_SECRET_KEY |
file: | file:/home/user/.ssh/id_rsa | 该路径下文件的内容 |
dotenv: | dotenv:.env.local:DATABASE_URL | .env.local 中 DATABASE_URL 的值 |
路径安全: 文件和 dotenv 路径会根据 process.cwd() 以及你配置的任何 --allowed-dirs 进行验证。指向允许目录之外位置的符号链接会被拒绝,并返回 PATH_TRAVERSAL_BLOCKED。
让机密信息不进入上下文的输出模式: 对 view_secret 使用 browser、clipboard 或 file 输出模式——解密后的值会直接交付给你,不会进入 Agent 的回复或对话历史。
安全模型
- 端到端加密: 通过 @vaulted/crypto 在本地运行 AES-256-GCM 加密。服务永远看不到明文。
- 密钥位于 URL 片段中: 加密密钥仅存在于 URL 的
#片段中——绝不会发送到任何服务,也绝不会记录日志。 - 零知识服务: vaulted.fyi 仅存储密文,无法解密你的机密信息。
- 自动销毁: 达到最大查看次数或 TTL 到期时,机密信息就会被删除,以先发生者为准。
- 无需账户,无遥测: 匿名使用,无需 API 密钥。
- 设计上 Agent 无法查看: 输入源前缀(
env:、file:、dotenv:)确保敏感值不会经过大模型。
在 vaulted.fyi/security 了解详情。
贡献
git clone https://github.com/vaulted-fyi/vaulted-mcp-server
cd vaulted-mcp-server
npm install
npm test
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。