enigmagent-mcp — Claude Code MCP server: a local vault for secrets
A local encrypted vault for API keys. Your agent reads entry names, not the values themselves.
claude mcp add --env VAULT_PASSWORD=<VAULT_PASSWORD> --env VAULT_PATH=<VAULT_PATH> --transport stdio enigmagent-mcp -- npx -y enigmagent-mcpWhat enigmagent-mcp does
enigmagent-mcp keeps secret values in a vault file encrypted with AES-256-GCM, using a key derived through Argon2id. The file stays encrypted on disk, so it will not leak through a repo or a log. Version 2.0.0 still reads version 1 vaults and writes new ones in format version 2.
MCP starts in metadata-only mode. The enigmagent_list tool returns names, domains and creation timestamps. The tool that hands back an actual value, enigmagent_resolve, stays off until the operator passes --allow-raw-resolve or sets ENIGMAGENT_ALLOW_RAW_RESOLVE=1. The author is blunt about this switch: leave it off for an untrusted client or a shared process, since a trusted client can still forward the plaintext it receives to its model.
A REST mode exists too. It binds to 127.0.0.1 only, wants a Bearer token of 32 to 256 characters, and turns away browser-origin requests. GET /health answers without auth; everything else needs the token. On a first run attached to a terminal the server asks for the vault credentials, and a headless process should carry ENIGMAGENT_USER and ENIGMAGENT_PASS in its own environment. Vault writes go through a temporary file with a recovery backup, so an interrupted write will not leave you with a broken vault.
What it helps with
- keep API keys out of the model context
- expose secret names to an agent without the values
- encrypt a vault on disk behind a password
- run a local token-protected REST endpoint over secrets
- carry a version 1 vault over to format version 2
Example prompts for the agent
- List my secrets with
enigmagent_list - Resolve the value bound to api.example.com via
enigmagent_resolve - Start the server in REST mode on port 3737 with the vault
./my.vault.json
How to install enigmagent-mcp
Platform CLI
claude mcp add --env VAULT_PASSWORD=<VAULT_PASSWORD> --env VAULT_PATH=<VAULT_PATH> --transport stdio enigmagent-mcp -- npx -y enigmagent-mcpReplace <…> with your own values
Platform CLI
codex mcp add enigmagent-mcp --env VAULT_PASSWORD=<VAULT_PASSWORD> --env VAULT_PATH=<VAULT_PATH> -- npx -y enigmagent-mcpReplace <…> with your own values
Config file
{
"mcpServers": {
"enigmagent-mcp": {
"command": "npx",
"args": [
"-y",
"enigmagent-mcp"
],
"env": {
"VAULT_PASSWORD": "<VAULT_PASSWORD>",
"VAULT_PATH": "<VAULT_PATH>"
}
}
}
}Replace <…> with your own values
Config file
{
"servers": {
"enigmagent-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"enigmagent-mcp"
],
"env": {
"VAULT_PASSWORD": "<VAULT_PASSWORD>",
"VAULT_PATH": "<VAULT_PATH>"
}
}
}
}Replace <…> with your own values
Platform CLI
gemini mcp add -e VAULT_PASSWORD=<VAULT_PASSWORD> -e VAULT_PATH=<VAULT_PATH> enigmagent-mcp npx -y enigmagent-mcpReplace <…> with your own values
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about enigmagent-mcp
How do I install enigmagent-mcp in Claude Code?
Add the server with claude mcp add enigmagent-mcp -e VAULT_PASSWORD=<VAULT_PASSWORD> -- npx -y enigmagent-mcp. Or point it at a vault path: claude mcp add --env VAULT_PASSWORD=<VAULT_PASSWORD> --env VAULT_PATH=<VAULT_PATH> --transport stdio enigmagent-mcp -- npx -y enigmagent-mcp.
What does enigmagent-mcp do?
It is a local MCP server holding secrets in an encrypted vault. Values sit under an AES-256-GCM key, and by default the agent only gets metadata about the entries.
Can the model ever see a real key?
Only when the operator turns on raw resolution with --allow-raw-resolve or ENIGMAGENT_ALLOW_RAW_RESOLVE=1. Then enigmagent_resolve returns a value if the requested origin matches the entry's domain binding.