关于 safehold
safehold 是面向 AI Agent 使用场景的本地加密身份文件库。每次请求都需按字段授权后才会释放数据;文件保留在设备上,访问记录也会加密保存。
主要功能
- 01本地加密存储文件
- 02按字段及用途请求授权
- 03护照、证件、驾照和签证读取
- 04加密访问日志
- 05文件录入与到期提示词
适用场景
- 01为航班预订提供护照字段
- 02仅向服务分享所需信息
- 03查看客户端访问文件数据的记录
- 04检查即将到期的证件
MCP 相关
以 stdio MCP 服务运行,向 MCP 客户端提供文件管理和字段读取工具。读取请求须说明用途,并经过用户授权。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
11收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| fields | array | 是 | 要获取的护照字段 |
| purpose | string | 是 | 调用 Agent 需要此数据的原因——将向用户显示以征求同意 |
| document_id | string | 否 | 特定护照 ID(存储了多个护照时为必填) |
详细介绍
Safehold
你的身份文件存储在自己的设备上,只有你同意时才会共享。
它是什么
Safehold 是一个本地 MCP 服务,用于存储护照、签证、驾驶证和其他身份文件。当 AI Agent 需要你的护照号码来预订航班时,它会向 Safehold 请求。你可以查看请求内容和原因,然后批准或拒绝。任何信息都不会离开你的设备。
它为何存在
你的身份数据散落在数十个你无法控制的服务中:银行、航空公司、政府门户网站、SaaS 产品。每个服务都保存一份副本,并自行决定如何存储、是否出售以及保留多久。AI Agent 让情况变得更糟。Agent 能访问的任何信息,它接触到的每个 API 也都能获取。
Safehold 提供了另一种选择。Agent 获取字段值,你看到的则是同意提示词,而不是隐私政策。你的文件仍保留在原处。
它是开源的,因此这一切都不需要依赖信任。
它不是什么
以下几种工具常被与 safehold 混淆,但它们解决的是不同的问题。
1Password、Bitwarden、op CLI
你可以把护照存进 1Password。op CLI 可以读取特定字段。现在甚至还有官方的 1Password MCP 服务。因此,两者确实有部分重叠。
区别在于信任模型。1Password 保险库一旦解锁,任何拥有该会话的程序都能读取其中的所有内容。它没有针对每个字段的同意步骤,也没有“你为什么要请求这个?”的提示词。保险库是为人们输入密码而设计的,而不是为 Agent 根据明确说明的理由提取结构化字段而设计的。
Safehold 会为每个字段单独设置访问关卡,每次请求都要通过,并附带用途说明。
浏览器自动填充、Apple Passwords、iCloud Keychain
如果你的 Agent 是在浏览器中填写表单,这些工具就能派上用场。但 Agent 并非总是在浏览器中工作。通过 API、命令行工具或其他 MCP 服务工作的 Agent 根本看不到自动填充层,因此你最终还是得从密码应用中复制粘贴到聊天里。Safehold 让非浏览器 Agent 也能请求护照号码,无需绕这一圈。
Apple Wallet、Google Wallet、政府数字 ID 应用
这些工具受平台限制。Apple Wallet 不会把登机牌交给第三方 Agent。mDL 试点项目和欧盟 eIDAS 钱包由发行方控制,适用范围有限。它们都不支持 MCP,也都无法让你笔记本电脑上的 Agent 请求驾驶证中的字段。
把信息粘贴到聊天里
有人会这么做。他们把护照号码放进系统提示词,或直接在消息中输入,并相信 Agent 会妥善处理。随后,这个号码就会留在聊天记录中,被发送给模型提供商,并一直保留在其日志里。你也无法知道哪个 Agent 出于什么目的使用了它。
Safehold 会将文件加密后保存在磁盘上,只释放 Agent 请求的那个字段。对话中不会出现任何多余信息。
一个普通 JSON 文件加上 filesystem MCP
如果你是开发者,这种方式很诱人。~/identity.json 加上 filesystem MCP,只需三行配置就能搞定。但这也意味着这台设备上的所有其他 Agent 都拥有同样的访问权限,而且没有静态加密、没有日志记录,也没有同意步骤。只要这个文件出现在备份中或屏幕共享里,你就会遇到麻烦。
Persona、Stripe Identity、Onfido、Plaid
这些都是 KYC 服务商。你把文件发送给他们,由他们保存,并代表你让合作服务查询。其模式假设你不会自己保管密钥。Safehold 则采取相反的方式:文件留在你的设备上,每次释放都由你批准。
HashiCorp Vault、AWS Secrets Manager、Doppler、Infisical
这些工具专为服务密钥打造,而非个人身份信息。它们没有面向用户的同意流程,没有文档架构;对于只想让 Agent 在笔记本电脑上读取护照的人来说,运维负担也过重。
工作原理
Safehold 以 stdio MCP 服务的形式运行。文档以单独的加密文件形式存放在 ~/.safehold/vault/ 中。每次检索都会记录到 ~/.safehold/access-log.enc。
加密采用 @noble/ciphers 提供的 XChaCha20-Poly1305,该库经 Cure53 审计且没有外部依赖。首次运行时,系统会将一个 32 字节密钥写入 ~/.safehold/master.key(模式为 0600)。
其他 MCP 客户端可以请求文档中的特定字段。每次共享哪些内容,都由你掌控。
工具(v1)
| 工具 | 描述 |
|---|---|
add_document | 向保险库添加文档 |
list_documents | 列出已存储的文档(仅元数据) |
update_document | 更新现有文档中的字段 |
delete_document | 永久删除文档 |
get_passport | 检索护照中的特定字段 |
get_national_id | 检索国民身份证中的特定字段 |
get_driving_license | 检索驾驶执照中的特定字段 |
get_visa | 检索签证中的特定字段 |
get_photo | 检索已存储的照片(护照照、自拍照或签名) |
get_document | 检索任意文档类型中的字段 |
get_access_log | 查看访问了哪些内容、由哪个客户端访问,以及访问时间 |
每个检索工具都接受一个 purpose 参数。在征求同意时,你会看到该用途,因此始终清楚请求字段的原因。
提示词(v1)
Safehold 还附带开箱即用的工作流提示词。这些提示词会在 MCP 客户端(Claude Desktop、Cursor、Claude Code、Zed)中显示为斜杠命令,因此常见任务无需从头重新编写提示词。
| 提示词 | 描述 |
|---|---|
onboard_document | 引导添加或更新护照、国民身份证、驾驶执照或签证 |
travel_preflight | 检查即将出行所需的护照和签证有效性 |
selective_share | 仅共享服务实际需要的最少信息,并明确说明同意用途 |
expiry_audit | 显示即将到期的项目(仅元数据,不会提示征求同意) |
提示词本身不会访问你的数据。它们会告知调用它们的 Agent 应调用哪些 Safehold 工具、按什么顺序调用,以及使用什么 purpose。每次检索仍会经过正常的同意流程。
技能
safehold-skills 是一个配套的 Claude Code 技能包,可将 Safehold 从保险库扩展为完整的工作流:航空公司值机、ESTA 申请、KYC 表单等。每项技能都会将 Safehold 与浏览器 MCP 配合使用,并通过准确的用途字符串逐项请求字段。
npx safehold-skills install
快速安装
需要 Node.js >=20。无需构建。
大多数客户端使用相同的 JSON 配置——只有文件路径不同:
{
"mcpServers": {
"safehold": {
"command": "npx",
"args": ["-y", "safehold@latest"]
}
}
}
| 客户端 | 配置文件 |
|---|---|
| Claude Desktop(macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Claude Desktop(Windows) | %APPDATA%\Claude\claude_desktop_config.json |
| Cursor(项目) | .cursor/mcp.json |
| Cursor(全局) | ~/.cursor/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Amazon Q Developer(全局) | ~/.aws/amazonq/mcp.json |
| Amazon Q Developer(项目) | .amazonq/mcp.json |
配置格式略有不同的客户端:
Claude Code(CLI)
claude mcp add safehold npx -- -y safehold@latest
VS Code(GitHub Copilot) — 使用 "servers" 键,并在 Copilot Chat 中启用 Agent 模式。编辑 .vscode/mcp.json(项目)或 ~/Library/Application Support/Code/User/mcp.json(全局,macOS):
{
"servers": {
"safehold": {
"command": "npx",
"args": ["-y", "safehold@latest"]
}
}
}
Zed — 在 ~/.config/zed/settings.json 中使用 "context_servers" 键:
{
"context_servers": {
"safehold": {
"command": "npx",
"args": ["-y", "safehold@latest"]
}
}
}
OpenAI Codex CLI — 在 ~/.codex/config.toml 中使用 TOML 格式:
[mcp_servers.safehold]
command = "npx"
args = ["-y", "safehold@latest"]
Continue.dev — 创建 .continue/mcpServers/safehold.json(启用 Agent 模式):
{
"command": "npx",
"args": ["-y", "safehold@latest"]
}
Hermes(Nous Research) — 在 ~/.hermes/config.yaml 中使用 YAML 格式:
mcp_servers:
safehold:
command: npx
args: ["-y", "safehold@latest"]
OpenClaw — 在 ~/.openclaw/mcp.json 中使用 "servers" 键:
{
"servers": {
"safehold": {
"command": "npx",
"args": ["-y", "safehold@latest"]
}
}
}
路线图
get_travel_authorization- ESTA、eTA、UK ETA 等get_vaccination_certificate- 国际疫苗接种记录get_residency_permit- BRP、Green Card 及同类证件get_birth_certificateget_tax_id- NI 号码、SSN、TFN 及同类证件get_proof_of_address- 公用事业账单、银行信函get_travel_insurance
开发
npm install
npm test # run tests
npm run typecheck # type check
npm run build # compile to dist/
npm run dev # run directly with tsx (no build step)
发布
npm version patch # bug fix (0.1.0 → 0.1.1)
npm version minor # feature (0.1.0 → 0.2.0)
npm version major # breaking (0.1.0 → 1.0.0)
检查当前是否处于干净且与最新版本同步的 main 分支,然后更新版本、提交、更改标签并推送。CI 会发布到 npm。
构建者
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。