EnigmAgent MCP
Bóveda local cifrada con AES-256-GCM + Argon2id que resuelve secretos {{PLACEHOLDER}} para credenciales de agentes de IA.
Documentación
EnigmAgent
Integraciones: ·
·
·
· 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ón | Qué sucede |
|---|---|
| Pegar el secreto en el chat | Termina 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ón | El agente puede actuar con permisos completos, en cualquier sesión futura |
| No usar agentes para tareas sensibles | Pierdes 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
- Descarga el ZIP de la última versión y descomprímelo.
- Ve a
chrome://extensionsy activa Modo desarrollador (interruptor en la esquina superior derecha). - Haz clic en Cargar descomprimida y selecciona la carpeta
extension/.
Firefox
- Ve a
about:debugging#/runtime/this-firefox. - Haz clic en Cargar complemento temporal…
- 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
| Sintaxis | Resuelve 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
| Capa | Implementación |
|---|---|
| Derivación de contraseña a clave | Argon2id (m=64 MiB, t=3, p=1) — @noble/hashes@1.4.0, incluido, reproducible |
| Cifrado de secretos | AES-256-GCM, nonce de 96 bits por entrada |
| Material de clave | Vive solo en la memoria del proceso — nunca se escribe en disco |
| Vinculación de usuario | El nombre de usuario se mezcla en el contexto de Argon2id: misma contraseña + usuario diferente = clave diferente |
| Aplicación de dominio | Cada secreto está fijado a un dominio; el resolvedor rechaza orígenes no coincidentes |
| Entrega al sitio | Setter nativo de value + eventos input/change — nunca portapapeles, nunca consola |
| Almacenamiento del vault | Archivo 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 / Bitwarden | Archivos .env | EnigmAgent | |
|---|---|---|---|
| Usuario objetivo | Humanos iniciando sesión | Desarrolladores que evitan secretos codificados | Agentes de IA que actúan en nombre de humanos |
| Problema central | Rellenar inicios de sesión para humanos | Mantener secretos fuera del control de versiones | Mantener secretos fuera de las ventanas de contexto y registros de IA |
| En reposo | Cifrado (nube) | Texto plano | Cifrado (archivo local) |
| Visible para el contexto del LLM | Sí (cuando el humano pega) | Sí (cuando el agente hace cat de .env) | Nunca |
| Vinculación de dominio | Sugerencia de URL por elemento | Ninguna | Aplicada |
| Sincronización en la nube | Sí | N/A | No — 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í |
| EnigmAgent | ✅ No | ✅ No | ✅ Por 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.
| Componente | Rol | Enlace |
|---|---|---|
| OpenCLAW-P2P | Protocolo central · Pruebas Lean 4 · Artículos | github.com/Agnuxo1/OpenCLAW-P2P |
| BenchClaw | Benchmarking de agentes con 17 jueces | github.com/Agnuxo1/benchclaw |
| EnigmAgent | Vault cifrado local para credenciales | github.com/Agnuxo1/EnigmAgent |
| AgentBoot | Instalador de SO para metal desnudo | github.com/Agnuxo1/AgentBoot |
| CAJAL | LLM de investigación de 4B para artículos | huggingface.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.