内容
# @vaulted/mcp-server
[](https://www.npmjs.com/package/@vaulted/mcp-server)
[](LICENSE)
直接从 Claude Desktop、Cursor、Windsurf 和任何与 MCP 兼容的 AI 工具分享加密的、自我销毁的机密信息。
- 🔒 端到端加密(AES-256-GCM,密钥从未发送到服务器)
- 🙈 代理盲输入:分享环境变量、文件和 `.env` 密钥,而不在上下文中暴露它们
- 🛠️ 4 种工具:`create_secret`、`view_secret`、`check_status`、`list_secrets`
- 📋 具有实时状态跟踪的本地历史记录
- 💻 与 Claude Desktop、Cursor、Windsurf、Claude Code、VS Code 兼容
## 代理盲机密分享
主要功能:敏感值**在本地解析,从未通过 LLM**。当您要求代理分享环境变量或文件时,MCP 服务器直接从您的机器读取值 — 代理只看到安全链接,而看不到机密本身。
```
"分享我的 STRIPE_SECRET_KEY 环境变量的值"
→ 代理传递:env:STRIPE_SECRET_KEY (从未看到值)
→ 服务器在本地解析,加密,返回链接
```
这意味着敏感值从不会出现在您的对话历史记录或 LLM 的上下文中。
## 安装
**需要 Node.js ≥ 18.**
通过 npx 零安装:
```bash
npx -y @vaulted/mcp-server
```
或全局安装:
```bash
npm install -g @vaulted/mcp-server
vaulted-mcp-server
```
## 快速入门
将其添加到您的 MCP 主机配置中,然后重启应用程序。您的代理将立即访问所有 4 个 Vaulted 工具。
```json
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
```
## 配置
### Claude Desktop
文件:`~/Library/Application Support/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
```
### Cursor
文件:`~/.cursor/mcp.json`
```json
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
```
### Windsurf
文件:`~/.codeium/windsurf/mcp_config.json`
```json
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
```
### Claude Code
文件:`.mcp.json` 在您的项目根目录(或全局 `~/.claude/.mcp.json`):
```json
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
```
### VS Code
文件:`.vscode/mcp.json`
```json
{
"servers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
```
### 任何其他 MCP 客户端
以 stdio 传输运行 `npx @vaulted/mcp-server`。服务器使用标准的 MCP stdio 协议。
### 可选标志
| 标志 | 默认值 | 描述 |
| ---------------- | --------------------- | --------------------------------------------------------------------------------- |
| `--base-url` | `https://vaulted.fyi` | Vaulted API 基本 URL(用于自托管实例) |
| `--allowed-dirs` | _(none)_ | 以逗号分隔的目录列表,可用于基于文件的输入源(扩展 CWD) |
通过 `args` 数组传递标志:
```json
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server", "--base-url", "https://your-instance.example.com"]
}
}
}
```
多个允许的目录:
```json
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server", "--allowed-dirs", "/home/user/secrets,/tmp/creds"]
}
}
}
```
## 工具参考
### `create_secret`
加密并存储机密,返回可分享的自我销毁链接。
| 参数 | 类型 | 默认值 | 描述 |
| ------------ | ------------------------------------------------------------------------------------------ | -------- | ---------------------------------------------------------------------------------------------------- |
| `content` | string | 必需 | 要加密的机密(最大 1000 个字符)。支持[代理盲前缀](#agent-blind-input-sources)。 |
| `max_views` | `"1"` \| `"3"` \| `"5"` \| `"10"` | `"1"` | 自我销毁前的查看次数 |
| `expiry` | `"1h"` \| `"2h"` \| `"6h"` \| `"12h"` \| `"24h"` \| `"3d"` \| `"7d"` \| `"14d"` \| `"30d"` | `"24h"` | 到期时间 |
| `passphrase` | string | _(none)_ | 可选的密码保护 |
| `label` | string | _(none)_ | 用于本地历史记录的人类可读标签 |
**返回:** `{ 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 | _(none)_ | `output_mode` 为 `"file"` 时必填 |
| `passphrase` | string | _(none)_ | 受密码保护的机密必填 |
**输出模式:**
- `browser` — 在默认浏览器中打开机密 URL(在浏览器中解密,值不进入代理上下文)
- `clipboard` — 将解密值复制到剪贴板,不返回给代理
- `file` — 将解密值写入 `file_path`,不返回给代理
- `direct` — 在响应中返回解密值(谨慎使用 — 值进入代理上下文)
**返回:** 取决于 `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 | _(none)_ | 传递上一次已知的查看次数,以检测自上次检查以来的新查看次数。当计数增加时,响应中包含“检测到新查看次数!” |
**返回:** `{ success: true, data: { views, maxViews, status, expiresAt }, message }`
---
### `list_secrets`
显示所有本地跟踪的机密,并从 API 获取其实时状态。
| 参数 | 类型 | 描述 |
| --------- | ---- | ------------- |
| _(none)_ | — | 无参数 |
**返回:** `{ success: true, data: { entries: [...], suggestedAction? }, message }`
当存在未使用的活动机密时,将包含 `suggestedAction`,提示您使用 `check_status` 进行监视。
---
### 响应格式
所有工具都使用一致的响应格式:
```json
// 成功
{ "success": true, "data": { /* 工具特定 */ }, "message": "人类可读的摘要" }
// 错误
{ "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`
## 示例
### 创建机密
```
"安全分享此 API 密钥:sk-abc123"
```
→ 在聊天中返回一次性链接。可以通过 Slack、电子邮件或工单分享。
### 代理盲:分享环境变量
```
"安全分享我的 GITHUB_TOKEN 环境变量的值"
```
→ 代理传递 `env:GITHUB_TOKEN` 给工具。服务器在本地读取值。代理永远不会看到令牌。
### 代理盲:分享文件
```
"安全分享 ~/.ssh/id_rsa.pub 的内容"
```
→ 代理传递 `file:~/.ssh/id_rsa.pub`。文件在本地读取并加密,然后返回链接。
### 代理盲:分享 .env 文件中的密钥
```
"分享我的 .env.local 中的 DATABASE_URL"
```
→ 代理传递 `dotenv:.env.local:DATABASE_URL`。解析并加密特定密钥。文件中的其他值永远不会被读取。
### 在浏览器中查看机密
```
"打开此机密:https://vaulted.fyi/s/abc123#key..."
```
→ 浏览器打开并显示解密的内容。值永远不会进入对话。
### 将机密查看到剪贴板
```
"将此机密检索到我的剪贴板:https://vaulted.fyi/s/abc123#key..."
```
→ 解密值复制到剪贴板。聊天中不返回敏感信息。
### 将机密保存到文件
```
"将此机密保存到 /tmp/creds.txt:https://vaulted.fyi/s/abc123#key..."
```
→ 解密值写入 `/tmp/creds.txt`。聊天中不返回敏感信息。
### 直接查看机密(返回值给代理)
```
"检索此机密并将值返回给我:https://vaulted.fyi/s/abc123#key..."
```
→ 解密值在响应中返回。仅在需要将值放入对话时使用 — 它将出现在您的聊天历史记录中。
### 检查机密是否被查看
```
"我的机密是否已被查看?"
```
→ 返回查看次数、最大查看次数和到期时间。不会消耗查看次数。
### 轮询新查看次数
```
"请告诉我有人查看我的机密 — 上次查看次数为 0"
```
→ 传递 `previousViews: 0`。当计数增加时,响应中包含“检测到新查看次数!”
### 列出最近的机密
```
"我最近分享了哪些机密?”
```
→ 返回您的本地历史记录,以及来自 API 的实时状态 — 每个机密的查看次数、剩余查看次数和到期时间。
## 代理盲输入源
`create_secret` 的 `content` 参数支持前缀,指示服务器在加密前在本地解析值。**解析的值永远不会返回给代理。**
| 前缀 | 示例 | 解析为 |
| --------- | -------------------------------- | --------------------------------------- |
| _(none)_ | `普通值` | 字面字符串 |
| `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` 输出模式 — 解密值直接传递给您,而不会进入代理的响应或对话历史记录。
## 安全模型
- **端到端加密:** AES-256-GCM 加密在本地通过 [@vaulted/crypto](https://www.npmjs.com/package/@vaulted/crypto) 运行。服务器永远不会看到明文。
- **URL 片段中的密钥:** 加密密钥仅存在于 URL 的 `#` 片段中 — 永远不会发送到任何服务器,永远不会被记录。
- **零知识服务器:** vaulted.fyi 仅存储密文。它无法解密您的机密。
- **自我销毁:** 机密会在达到最大查看次数或 TTL 过期时被删除 — 以先到为准。
- **无帐户,无遥测:** 匿名使用。无需 API 密钥。
- **设计为代理盲:** 输入源前缀(`env:`、`file:`、`dotenv:`)确保敏感值永远不会通过 LLM。
在 [vaulted.fyi/security](https://vaulted.fyi/security) 上了解更多。
## 贡献
```bash
git clone https://github.com/vaulted-fyi/vaulted-mcp-server
cd vaulted-mcp-server
npm install
npm test
```
## 许可证
MIT
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器