Keyblind

Encrypted secrets vault for AI agents stores API keys in AES-256-GCM and resolves them at MCP runtime so plaintext never touches the LLM transcript.

Keyblind — Blind AI to Your Keys

Encrypted secrets vault with MCP for AI agents. Secrets resolved at runtime, never leaked to LLM conversations.

npm version License: MIT

Why

Developers regularly leak API keys, passwords, and tokens to AI coding tools. 100,000+ LLM conversations with exposed secrets were found indexed by search engines in 2025.

AI agents read your .env files. They copy-paste secrets into conversations. They commit them accidentally. Keyblind stops this by keeping secrets encrypted at rest and resolving them at runtime — the plaintext value never touches the LLM transcript.

How It Works

┌──────────┐     ┌────────────────┐     ┌─────────────────┐
│ AI Agent │ ──→ │  Keyblind MCP  │ ──→ │  Encrypted      │
│ (Claude) │     │  Server        │     │  SQLite Vault   │
│          │ ←── │  (6 tools)     │ ←── │  (AES-256-GCM)  │
└──────────┘     └────────────────┘     └─────────────────┘
      ↑                                        │
      │ secret value never appears             │ secrets never
      │ in conversation transcript             │ stored in plaintext

Quick Start

# Install
npm i -g keyblind

# Initialize your vault
keyblind init

# Store secrets
echo "sk-proj-abc123" | keyblind set OPENAI_API_KEY
keyblind set DATABASE_URL -    # prompts securely

# Sandbox your .env (AI agents see fakes)
keyblind sandbox

# Resolve a secret
keyblind get OPENAI_API_KEY

# Run commands with secrets injected as env vars
keyblind run -- npm start

# List all secrets (names only)
keyblind list

MCP Server

Keyblind is MCP-first — it works with every AI tool that speaks the Model Context Protocol:

Claude Code, Cursor, Copilot, Windsurf, Cline, Zed — add a .mcp.json to your project root:

{
  "mcpServers": {
    "keyblind": {
      "command": "npx",
      "args": ["keyblind", "start"]
    }
  }
}

With biometric gate (Touch ID required before secrets are resolved):

{
  "mcpServers": {
    "keyblind": {
      "command": "npx",
      "args": ["keyblind", "start", "--biometric"]
    }
  }
}

Note: --biometric requires running keyblind unlock first to authenticate. Session expires after 15 minutes.

Full editor-specific configs →

MCP Tools

ToolDescription
resolve_secretResolve a secret at runtime (value hidden from transcript)
store_secretEncrypt and store a secret
list_secretsList secret names (values never revealed)
sandbox_envReplace .env values with deterministic fakes
unsandbox_envRestore real .env values from vault
delete_secretDelete a secret

Backends

Keyblind supports multiple secret backends:

keyblind backends                          # List available backends
keyblind backend 1password                 # Switch to 1Password
keyblind backend bitwarden                 # Switch to Bitwarden
BackendReadWriteRequires
local (default)Nothing
1passwordop CLI
bitwardenbw CLI
envNothing
awsaws CLI
gcpgcloud CLI
azureaz CLI

Keyblind vs Cloak

KeyblindCloak
ProtocolMCP (all editors)VS Code extension only
StorageAES-256-GCM SQLiteAES-256-GCM file
BackendsLocal, 1Password, Bitwarden, EnvLocal only
SandboxDeterministic HMAC fakesAES-256-GCM encrypted
Touch ID✓ (macOS biometric gate)
CI/CDkeyblind run for env injection
NetworkZero (fully local)Zero
LicenseMITProprietary

Security

  • AES-256-GCM encryption with PBKDF2 key derivation (600K iterations)
  • Machine-identity-bound key — encryption key XOR-wrapped with machine fingerprint
  • Zero network, zero telemetry — no cloud, no accounts, no analytics
  • Vault stored at ~/.keyblind/ with 0700 permissions
  • Deterministic sandbox fakes using HMAC-SHA256 per project + key name

CLI Reference

keyblind init                 Initialize the encrypted vault
keyblind set <name>           Store a secret (value from stdin)
keyblind set <name> -         Store a secret (prompts securely)
keyblind get <name>           Resolve and print a secret
keyblind list                 List all stored secrets
keyblind delete <name>        Delete a secret
keyblind sandbox [.env]       Replace .env with deterministic fakes
keyblind unsandbox [.env]     Restore real .env values
keyblind run <command...>     Run command with secrets as env vars
keyblind start                Start MCP server (for AI agents)
keyblind backends             List available backends
keyblind backend <name>       Switch backend

Development

git clone https://github.com/aarifmms/keyblind.git
cd keyblind
npm install
npm run build       # Compile TypeScript
npm test            # Run tests
npm run dev         # Watch mode

License

MIT

Related Servers