EnigmAgent MCP

Bóveda local cifrada con AES-256-GCM + Argon2id que resuelve secretos {{PLACEHOLDER}} para credenciales de agentes de IA.

Documentación

EnigmAgent

npm version npm downloads License: MIT Crypto Glama MCP GitHub stars OpenCLAW-P2P

Integraciones: n8n-nodes-enigmagent · langchain-enigmagent · llama-index-tools-enigmagent · crewai-tools-enigmagent · Claude Desktop · Cursor · Continue.dev · Cline · Open WebUI · más →

La semana pasada le pedí a Claude que enviara una corrección a un repositorio privado de GitHub. Para hacerlo, Claude necesitaba mi token de acceso personal. Tenía tres opciones, y las tres eran terribles: pegar el token en el chat (y en los registros del proveedor para siempre), darle al agente un token de larga duración que pudiera reutilizar por su cuenta a las 3 a. m., o rendirme y hacerlo a mano.

EnigmAgent es la cuarta opción.

Tu agente de IA escribe {{GITHUB_TOKEN}}. El marcador de posición sale del modelo y viaja a través de la conversación, los registros y la ventana de contexto — y solo en el momento en que tu herramienta realmente necesita la credencial, EnigmAgent intercepta la llamada, descifra el token real localmente con AES-256-GCM y lo inyecta. El texto plano existe durante un solo ciclo del bucle de eventos. El modelo nunca lo ve. El proveedor nunca lo ve. El historial de tu terminal nunca lo ve.

npx enigmagent-mcp --vault ./my.vault.json

Esa es la instalación completa para Claude Desktop, Cursor, Continue.dev, Cline, Open WebUI, AnythingLLM y LM Studio. Una extensión de navegador independiente cubre todo lo que vive en una pestaña.

Haz una estrella a este repositorio si alguna vez pegaste un token que lamentaste.


Configuración de Claude Desktop en 30 segundos

Añade esto a ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "enigmagent": {
      "command": "npx",
      "args": ["-y", "enigmagent-mcp", "--vault", "/absolute/path/to/my.vault.json"]
    }
  }
}

Reinicia Claude Desktop. Aparecen dos nuevas herramientas: enigmagent_resolve y enigmagent_list. Ahora pídele a Claude:

"Lista mis entradas del vault y luego llama a mi API de GitHub con {{GITHUB_TOKEN}} en el encabezado Authorization."

El token real nunca entra en la conversación. El mismo patrón funciona para Cursor y Continue.dev más abajo.


El problema (en detalle)

Cuando usas un agente de IA — Claude, ChatGPT, Cursor, una herramienta de automatización de navegador — para hacer algo que requiere credenciales, te enfrentas a una elección imposible:

OpciónQué sucede
Pegar el secreto en el chatTermina en los registros del proveedor de IA, en la ventana de contexto, posiblemente en los datos de entrenamiento
Darle al agente un token de larga duraciónEl agente puede actuar con permisos completos, en cualquier sesión futura
No usar agentes para tareas sensiblesPierdes la mayor parte del valor

EnigmAgent es la opción D. El agente solo escribe {{GITHUB_TOKEN}}. El valor real nunca aparece en la conversación, en los registros ni en la memoria del agente.


Cómo funciona

┌─────────────────┐   types {{GITHUB_TOKEN}}   ┌────────────────────┐
│   LLM / Agent   │ ──────────────────────────▶ │  Tool call / Form  │
│  (any provider) │                             │  (github.com / …)  │
└─────────────────┘                             └─────────┬──────────┘
                                                          │ submit / call (intercepted)
                                                          ▼
                                              ┌───────────────────────┐
                                              │      EnigmAgent       │
                                              │  detects placeholder, │
                                              │  checks domain match, │
                                              │  decrypts → ghp_xxx   │
                                              └───────────┬───────────┘
                                                          │ real value
                                                          ▼
                                              ┌───────────────────────┐
                                              │  Request reissued     │
                                              │  with real credential │
                                              └───────────────────────┘

El valor en texto plano existe en memoria durante aproximadamente un ciclo del bucle de eventos. Nunca se escribe en el portapapeles, nunca se registra y nunca es visible para ninguna otra pestaña, script ni contexto de LLM.


Rutas de instalación

Servidor MCP (recomendado para agentes de IA)

npx enigmagent-mcp --vault ./my.vault.json     # MCP stdio for Claude/Cursor/etc.
npx enigmagent-mcp --mode rest --port 3737     # local REST API for custom integrations

Configura las variables de entorno ENIGMAGENT_USER + ENIGMAGENT_PASS para omitir el mensaje de desbloqueo interactivo (modo CI/headless).

Extensión de navegador (para credenciales en formularios web)

Chrome / Edge / Brave

  1. Descarga el ZIP de la última versión y descomprímelo.
  2. Ve a chrome://extensions y activa Modo desarrollador (interruptor en la esquina superior derecha).
  3. Haz clic en Cargar descomprimida y selecciona la carpeta extension/.

Firefox

  1. Ve a about:debugging#/runtime/this-firefox.
  2. Haz clic en Cargar complemento temporal…
  3. Selecciona extension/manifest.json.

Los lanzamientos firmados para Chrome Web Store, Firefox AMO, Edge Add-ons y Opera están en progreso.


Configuración por cliente

Claude Desktop

Consulta la configuración de 30 segundos arriba.

Cursor

Añade a ~/.cursor/mcp.json:

{
  "mcpServers": {
    "enigmagent": {
      "command": "npx",
      "args": ["-y", "enigmagent-mcp", "--vault", "/abs/path/my.vault.json"]
    }
  }
}

Continue.dev

En ~/.continue/config.yaml:

mcpServers:
  - name: enigmagent
    command: npx
    args: ["-y", "enigmagent-mcp", "--vault", "/abs/path/my.vault.json"]

Cline (VS Code)

Edita cline_mcp_settings.json:

{
  "mcpServers": {
    "enigmagent": {
      "command": "npx",
      "args": ["-y", "enigmagent-mcp", "--vault", "/abs/path/my.vault.json"]
    }
  }
}

Open WebUI

Usa mcpo como puente:

mcpo --port 8000 -- npx enigmagent-mcp --vault /abs/path/my.vault.json

Casos de uso reales

Agentes basados en navegador

Dile a tu agente: "Cuando necesites autenticarte en GitHub, escribe {{GITHUB_TOKEN}} y envía. No me preguntes por el valor real."

El agente escribe el marcador de posición. EnigmAgent intercepta, resuelve en el dominio vinculado, inyecta y vuelve a enviar. Una pequeña insignia muestra: ✓ enviado con valores reales.

Inyección de documentos ({{DOC:filename}})

Sube un archivo Markdown como secreto de documento. Refiérelo como {{DOC:system-prompt.md}} en cualquier campo de texto en su dominio vinculado. Tu agente puede incrustar tu prompt de sistema completo sin que aparezca en el chat.

Marcadores de posición de datos personales

add NIF @agenciatributaria.gob.es 12345678A
add IBAN @banca.example.com ES9121000418450200051332

Cualquier nombre personalizado funciona. La vinculación de dominio se aplica en todas partes.


Referencia de sintaxis de marcadores de posición

SintaxisResuelve a
{{GITHUB_TOKEN}}Secreto llamado GITHUB_TOKEN, solo en su dominio vinculado
{{LOGIN:github.com}}Primer secreto vinculado a github.com
{{DOC:report.md}}Contenido del documento almacenado DOC_report.md
{{NIF}}Marcador de posición de datos personales — cualquier nombre personalizado funciona

Gramática de nombres: [A-Za-z0-9_:\-.@]+ — no distingue entre mayúsculas y minúsculas.


Modelo de seguridad

CapaImplementación
Derivación de contraseña a claveArgon2id (m=64 MiB, t=3, p=1) — @noble/hashes@1.4.0, incluido, reproducible
Cifrado de secretosAES-256-GCM, nonce de 96 bits por entrada
Material de claveVive solo en la memoria del proceso — nunca se escribe en disco
Vinculación de usuarioEl nombre de usuario se mezcla en el contexto de Argon2id: misma contraseña + usuario diferente = clave diferente
Aplicación de dominioCada secreto está fijado a un dominio; el resolvedor rechaza orígenes no coincidentes
Entrega al sitioSetter nativo de value + eventos input/change — nunca portapapeles, nunca consola
Almacenamiento del vaultArchivo cifrado en disco, el texto plano nunca se persiste

Modelo de amenazas completo: docs/THREAT_MODEL.md. Lo que NO protege:

  • Un proceso comprometido en tu máquina que lea la memoria de sesión desbloqueada
  • Un servidor MCP malicioso al que te hayas conectado con permiso para llamar a enigmagent_resolve
  • Canales laterales (tiempo, swap, volcados de núcleo) — fuera del alcance para v0.x

EnigmAgent vs. 1Password / Bitwarden / .env

1Password / BitwardenArchivos .envEnigmAgent
Usuario objetivoHumanos iniciando sesiónDesarrolladores que evitan secretos codificadosAgentes de IA que actúan en nombre de humanos
Problema centralRellenar inicios de sesión para humanosMantener secretos fuera del control de versionesMantener secretos fuera de las ventanas de contexto y registros de IA
En reposoCifrado (nube)Texto planoCifrado (archivo local)
Visible para el contexto del LLMSí (cuando el humano pega)Sí (cuando el agente hace cat de .env)Nunca
Vinculación de dominioSugerencia de URL por elementoNingunaAplicada
Sincronización en la nubeN/ANo — solo local por diseño

Usa 1Password o Bitwarden para tus propios inicios de sesión. Usa .env para tu atajo de desarrollo local. Usa EnigmAgent para las credenciales que tus agentes de IA necesitan para actuar en tu nombre.


Por qué construí esto

EnigmAgent es parte del ecosistema OpenCLAW / P2PCLAW de herramientas locales de IA que preservan la privacidad — una red de investigación científica multiagente donde docenas de agentes LLM se coordinan, se evalúan entre sí y publican artículos. Cada uno de esos agentes necesita credenciales. Ninguno de ellos debería tenerlas.

Ese es el planteamiento completo del problema. El vault es solo la solución más pequeña viable.

Francisco Angulo de Lafuente


Estructura del repositorio

EnigmAgent/
├── extension/              Chrome/Firefox extension (MV3)
├── platforms/firefox-ext/  Firefox manifest variant
├── build-tool/             Reproducible build (esbuild + icon generator)
├── docs/                   ARCHITECTURE.md, THREAT_MODEL.md
│   └── papers/             Background research papers (PDF)
├── examples/               Placeholder schemas
├── tests/                  Smoke tests + crypto round-trip
├── glama.json              Glama MCP server manifest
├── smithery.yaml           Smithery server descriptor
├── PRIVACY.md
├── SECURITY.md             Responsible disclosure
└── README.md

El código fuente del servidor Node/MCP está en el repositorio hermano: Agnuxo1/enigmagent-mcp.


Reproducción de la compilación de la extensión

cd build-tool
npm ci
npx esbuild argon2-entry.js \
  --bundle --minify --format=iife --target=es2020 \
  --outfile=../extension/lib/argon2id.js
python make-icons.py

package.json y package-lock.json fijan @noble/hashes@1.4.0. La salida es reproducible byte a byte — verifica con sha256sum extension/lib/argon2id.js.


¿Por qué no usar simplemente archivos .env? (Comparación)

Enfoque¿Secreto en el prompt?¿Secreto en registros?¿Vinculación por dominio?¿Funciona en CI?
.env / variables de entorno✅ No (pero el agente puede leerlos)✅ No❌ Global✅ Sí
Pegar en el chat❌ Sí — permanente❌ Sí — permanente
CLI de 1Password✅ No✅ No❌ Todo el vault✅ Sí
Doppler / HashiCorp Vault✅ No✅ No❌ Espacio de nombres global✅ Sí
EnigmAgentNoNoPor secreto✅ Sí

EnigmAgent es la única opción que combina cifrado local primero, vinculación de dominio por secreto y cero texto plano en contexto. El archivo del vault nunca sale de tu máquina.


Licencia

MIT — consulta LICENSE.

Creado por

Francisco Angulo de Lafuente — investigador y desarrollador independiente. Más de 35 años en software. También construye P2PCLAW (red de ciencia descentralizada), BenchClaw (evaluación de agentes) y PaperClaw (publicación de investigación autónoma).

Si esta herramienta te resulta útil:

  • Haz una estrella al repositorio — así es como el ecosistema de IA descubre herramientas
  • 🐛 Abre un issue — cada caso de uso real afina el modelo de amenazas
  • 📣 Cuéntale a una persona que todavía pega claves de API en Claude

🧩 Ecosistema P2PCLAW

Este proyecto es parte de P2PCLAW — una red de investigación de IA distribuida con benchmarking de nivel de producción, herramientas para agentes y distribución de modelos.

ComponenteRolEnlace
OpenCLAW-P2PProtocolo central · Pruebas Lean 4 · Artículosgithub.com/Agnuxo1/OpenCLAW-P2P
BenchClawBenchmarking de agentes con 17 juecesgithub.com/Agnuxo1/benchclaw
EnigmAgentVault cifrado local para credencialesgithub.com/Agnuxo1/EnigmAgent
AgentBootInstalador de SO para metal desnudogithub.com/Agnuxo1/AgentBoot
CAJALLLM de investigación de 4B para artículoshuggingface.co/Agnuxo/CAJAL-4B-P2PCLAW

🌐 Sitio web principal: https://www.p2pclaw.com/ 📄 Artículo: arXiv:2604.19792


💝 Apoyo

Si esta herramienta te resulta útil:

  • Haz una estrella al repositorio — así es como el ecosistema descubre herramientas
  • 🐛 Abre un issue — cada caso de uso real afina el proyecto
  • 💰 Patrocina: github.com/sponsors/Agnuxo1

Creado por Francisco Angulo de Lafuente — investigador independiente con más de 35 años en software.