
Security News
GPT-6 Astra Attempts Supply Chain Attacks Against Open Source Maintainers in Testing
GPT-6 Astra hits 100% on ExploitBench and finds zero-days autonomously, while independent tests reveal scope violations and monitoring gaps.
Your identity documents, on your machine, shared only when you say so.
Safehold is a local MCP server that stores passports, visas, driving licences, and other identity documents. When an AI agent needs your passport number to book a flight, it asks Safehold. You see what's being requested and why, then approve or deny. Nothing leaves your device.
Your identity data is scattered across dozens of services you don't control: banks, airlines, government portals, SaaS products. Each one holds a copy and decides for itself how to store it, whether to sell it, and how long it'll stick around. AI agents make this worse. Anything an agent can access, every API it touches can reach too.
Safehold is the alternative. The agent gets a field value. You get a consent prompt instead of a privacy policy. Your files stay where they are.
Open source, so none of this requires trust.
Safehold runs as a stdio MCP server. Documents go into ~/.safehold/vault/ as individual encrypted files. Every retrieval is logged to ~/.safehold/access-log.enc.
Encryption is XChaCha20-Poly1305 via @noble/ciphers, audited by Cure53, no external dependencies. On first run a 32-byte key is written to ~/.safehold/master.key (mode 0600).
Other MCP clients can request specific fields from your documents. You control what gets shared, every time.
| Tool | Description |
|---|---|
add_document | Add a document to the vault |
list_documents | List stored documents (metadata only) |
update_document | Update fields on an existing document |
delete_document | Permanently delete a document |
get_passport | Retrieve specific fields from a passport |
get_national_id | Retrieve specific fields from a national ID |
get_driving_license | Retrieve specific fields from a driving licence |
get_visa | Retrieve specific fields from a visa |
get_photo | Retrieve a stored photo (passport style, selfie, or signature) |
get_document | Retrieve fields from any document type |
get_access_log | View what was accessed, by which client, and when |
Every retrieval tool accepts a purpose parameter. That purpose is shown to you at consent time so you always know why a field is being requested.
Requires Node.js >=20. No build step.
Most clients use the same JSON config — just the file path differs:
{
"mcpServers": {
"safehold": {
"command": "npx",
"args": ["-y", "safehold@latest"]
}
}
}
| Client | Config file |
|---|---|
| Claude Desktop (macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Claude Desktop (Windows) | %APPDATA%\Claude\claude_desktop_config.json |
| Cursor (project) | .cursor/mcp.json |
| Cursor (global) | ~/.cursor/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Amazon Q Developer (global) | ~/.aws/amazonq/mcp.json |
| Amazon Q Developer (project) | .amazonq/mcp.json |
Clients with slightly different config formats:
Claude Code (CLI)
claude mcp add safehold npx -- -y safehold@latest
VS Code (GitHub Copilot) — uses "servers" key, enable Agent mode in Copilot Chat. Edit .vscode/mcp.json (project) or ~/Library/Application Support/Code/User/mcp.json (global, macOS):
{
"servers": {
"safehold": {
"command": "npx",
"args": ["-y", "safehold@latest"]
}
}
}
Zed — uses "context_servers" key in ~/.config/zed/settings.json:
{
"context_servers": {
"safehold": {
"command": "npx",
"args": ["-y", "safehold@latest"]
}
}
}
OpenAI Codex CLI — TOML format in ~/.codex/config.toml:
[mcp_servers.safehold]
command = "npx"
args = ["-y", "safehold@latest"]
Continue.dev — create .continue/mcpServers/safehold.json (enable Agent mode):
{
"command": "npx",
"args": ["-y", "safehold@latest"]
}
Hermes (Nous Research) — YAML format in ~/.hermes/config.yaml:
mcp_servers:
safehold:
command: npx
args: ["-y", "safehold@latest"]
OpenClaw — uses "servers" key in ~/.openclaw/mcp.json:
{
"servers": {
"safehold": {
"command": "npx",
"args": ["-y", "safehold@latest"]
}
}
}
get_travel_authorization - ESTA, eTA, UK ETA, and similarget_vaccination_certificate - international vaccination recordsget_residency_permit - BRP, Green Card, and equivalentsget_birth_certificateget_tax_id - NI number, SSN, TFN, and equivalentsget_proof_of_address - utility bills, bank lettersget_travel_insurancenpm 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)
Checks that you're on a clean, up-to-date main branch, bumps the version, commits, tags, and pushes. CI publishes to npm.
FAQs
Self-custody KYC document storage via MCP
The npm package safehold receives a total of 16 weekly downloads. As such, safehold popularity was classified as not popular.
We found that safehold demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
GPT-6 Astra hits 100% on ExploitBench and finds zero-days autonomously, while independent tests reveal scope violations and monitoring gaps.

Product
Socket can now send alerts and supply chain attack notifications to Microsoft Teams, with filters that route the right updates to each channel.

Security News
pnpm 12 rewrites the package manager in Rust, cutting install times by up to 90% while preserving pnpm 11 workflows and lockfiles.