npm enigmagent-mcpstdioMITupdated 4mo ago
Local encrypted vault MCP server. Your LLM types {{OPENAIKEY}}. The real value never reaches the model ā not in prompts, not in logs, not in conversation history.
What can you do with enigmagent mcp?
enigmagent-mcp
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.
npx enigmagent-mcp --vault ./my.vault.json
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.
The 30-second pitch
You ask Claude to call your GitHub API. Claude needs GITHUB_TOKEN. Three options that all suck:
- Paste it in the chat ā it lives in the provider's logs forever
- Put it in env vars ā it leaks the moment Claude reads
.envwhile debugging - Skip the agent ā you lose the whole point
Option 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.
Setup per client
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"enigmagent": {
"command": "npx",
"args": ["-y", "enigmagent-mcp", "--vault", "/absolute/path/to/my.vault.json"]
}
}
}
Restart Claude. Two new tools appear: enigmagent_resolve and enigmagent_list.
Cursor
~/.cursor/mcp.json:
{
"mcpServers": {
"enigmagent": {
"command": "npx",
"args": ["-y", "enigmagent-mcp", "--vault", "/abs/path/my.vault.json"]
}
}
}
Continue.dev
~/.continue/config.yaml:
mcpServers:
- name: enigmagent
command: npx
args: ["-y", "enigmagent-mcp", "--vault", "/abs/path/my.vault.json"]
Cline (VS Code)
cline_mcp_settings.json:
{
"mcpServers": {
"enigmagent": {
"command": "npx",
"args": ["-y", "enigmagent-mcp", "--vault", "/abs/path/my.vault.json"]
}
}
}
Open WebUI
# uses mcpo (https://github.com/open-webui/mcpo) as bridge
mcpo --port 8000 -- npx enigmagent-mcp --vault /abs/path/my.vault.json
Custom REST integration
npx enigmagent-mcp --mode rest --port 3737 --vault /abs/path/my.vault.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).
CI / headless mode
Skip the interactive password prompt with env vars (only do this in trusted environments):
ENIGMAGENT_USER=alice ENIGMAGENT_PASS=⦠npx enigmagent-mcp --vault ./my.vault.json
Without these, the server starts in locked mode if there's no TTY ā useful behind mcp-proxy and similar wrappers.
MCP tools exposed
| 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 |
// example tool call
{
"name": "enigmagent_resolve",
"arguments": {
"placeholder": "GITHUB_TOKEN",
"origin": "https://api.github.com"
}
}
// ā returns the decrypted token string
How it works
LLM emits tool call: fetch({headers: {Authorization: "Bearer {{OPENAI_KEY}}"}})
ā
āāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāā
ā enigmagent-mcp (this server) ā
ā ⢠match placeholder name ā
ā ⢠check origin == bound dom. ā
ā ⢠decrypt with AES-256-GCM ā
āāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāā
ā real token
ā¼
HTTPS to api.openai.com
The plaintext value exists in process memory for one event-loop tick. Never logged, never in stdout, never visible to the model.
Security 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.
Full ecosystem
This repo is the MCP server alone. The full EnigmAgent project includes:
- Browser extension (Chrome/Firefox/Edge) for credentials inside web forms
- Python SDK for LangChain / LlamaIndex / CrewAI
- REST + stdio dual-mode API
- Domain-bound document injection (
{{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.
License
MIT ā see LICENSE.
Contributing
Pull requests welcome. Security disclosures: see SECURITY.md in the main repo.
Install
Add enigmagent mcp to your client. Pick the one you use.
claude mcp add enigmagent-mcp -- npx -y enigmagent-mcpcodex mcp add enigmagent-mcp -- npx -y enigmagent-mcpamp mcp add enigmagent-mcp -- npx -y enigmagent-mcp{
"mcpServers": {
"enigmagent-mcp": {
"command": "npx",
"args": [
"-y",
"enigmagent-mcp"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"enigmagent-mcp": {
"command": "npx",
"args": [
"-y",
"enigmagent-mcp"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
code --add-mcp '{"name":"enigmagent-mcp","command":"npx","args":["-y","enigmagent-mcp"]}'Or add the block manually to `.vscode/mcp.json` under `servers`.
{
"mcpServers": {
"enigmagent-mcp": {
"command": "npx",
"args": [
"-y",
"enigmagent-mcp"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"enigmagent-mcp": {
"command": "npx",
"args": [
"-y",
"enigmagent-mcp"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"enigmagent-mcp": {
"command": "npx",
"args": [
"-y",
"enigmagent-mcp"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"enigmagent-mcp": {
"type": "local",
"command": "npx",
"args": [
"-y",
"enigmagent-mcp"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"enigmagent-mcp": {
"command": {
"path": "npx",
"args": [
"-y",
"enigmagent-mcp"
]
}
}
}
}Add to your Zed `settings.json`.
npx -y enigmagent-mcpRun `goose configure`, choose **Add Extension ā Command-line Extension**, and paste this command.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance13/25
- Trust13/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 127 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 12 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint ā no local install
Version history
| Versions | Published |
|---|---|
| 1.0.2Latest | Apr 25, 2026 |