Local AES-256-GCM vault for AI agents. Secrets stay local, LLMs never see real API keys.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Local encrypted vault MCP server. Your LLM types
{{OPENAI_KEY}}. The real value never reaches the model β not in prompts, not in logs, not in conversation history.
That's the entire install. Works with Claude Desktop, Cursor, Continue.dev, Cline, Open WebUI, AnythingLLM, LM Studio, Zed, and anything else that speaks MCP.
β Star this repo if you've ever pasted a token you regretted.
You ask Claude to call your GitHub API. Claude needs GITHUB_TOKEN. Three options that all suck:
.env while debuggingOption 4: type {{GITHUB_TOKEN}} in the prompt. EnigmAgent intercepts at the MCP boundary, decrypts locally with AES-256-GCM, and returns the real token only when the requesting origin matches the secret's bound domain. The model literally never has the value.
~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
Restart Claude. Two new tools appear: enigmagent_resolve and enigmagent_list.
~/.cursor/mcp.json:
~/.continue/config.yaml:
cline_mcp_settings.json:
Then POST /resolve with {"placeholder": "OPENAI_KEY", "origin": "https://api.openai.com"} returns the decrypted value (only when the origin matches the secret's bound domain).
Skip the interactive password prompt with env vars (only do this in trusted environments):
Without these, the server starts in locked mode if there's no TTY β useful behind mcp-proxy and similar wrappers.
| Tool | Description |
|---|---|
enigmagent_resolve | Resolve a placeholder to its vault value. Domain binding enforced β the requesting origin must match the secret's bound domain |
enigmagent_list | List secret names + their bound domains. Never returns values |
The plaintext value exists in process memory for one event-loop tick. Never logged, never in stdout, never visible to the model.
| Layer | Implementation |
|---|---|
| KDF | Argon2id (m=64 MiB, t=3, p=1) β @noble/hashes@1.4.0, bundled |
| Encryption | AES-256-GCM, 96-bit nonce per entry |
| Domain binding | Every secret pinned to a domain; resolver rejects mismatched origins |
| Master key | Lives in process memory only β never written to disk |
| Vault file | Encrypted JSON, plaintext never persisted |
What it does not protect against: a compromised process reading session memory, a malicious MCP server you've connected to with permission to call enigmagent_resolve, side-channels (timing, swap, core dumps). Full threat model: docs/THREAT_MODEL.md.
This repo is the MCP server alone. The full EnigmAgent project includes:
{{DOC:filename}})Main repository: https://github.com/Agnuxo1/EnigmAgent
EnigmAgent is part of the OpenCLAW / P2PCLAW ecosystem of privacy-preserving local AI tooling β a multi-agent scientific research network where dozens of LLM agents need credentials and none of them should have them.
MIT β see LICENSE.
Pull requests welcome. Security disclosures: see SECURITY.md in the main repo.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/enigmagent-mcp)<a href="https://allmcps.com/mcp/enigmagent-mcp"><img src="https://allmcps.com/api/badge/enigmagent-mcp?style=directory" alt="Enigmagent Mcp on AllMCPs" /></a>