Memex
Memex
Un motor de contexto personal local-first y centrado en la privacidad para LLMs.
TypeScript · Swift · MCP · OpenAPI 3.1.0 · Cloudflare Tunnel
La mayoría de los asistentes de IA no saben nada de ti. Cada nueva conversación empieza desde cero: no saben qué has estado leyendo, qué enlaces has guardado, qué notas has escrito ni qué archivos has descargado.
Memex lo soluciona. Es un demonio en segundo plano que se ejecuta en tu Mac e indexa pasivamente tu actividad digital en una base de datos local. Esa base de datos se pone a disposición de cualquier LLM — Claude en tu escritorio, ChatGPT en tu teléfono — a través de interfaces estándar. Sin almacenamiento en la nube. Sin servidores de terceros. Todo permanece en tu máquina.
Qué captura
Capturas de pantalla — procesadas con OCR localmente usando el framework Vision de Apple (Swift)
Portapapeles — monitorizado continuamente; las URLs de YouTube obtienen transcripciones automáticamente, los enlaces de Twitter extraen el contenido de las publicaciones
Descargas — PDFs, archivos markdown y CSVs analizados e indexados al llegar
Notas de Apple — sincronizadas periódicamente mediante AppleScript
Historial del navegador — visitas de Safari, Chrome, Arc, Brave y Edge (todos los perfiles), sincronizadas cada 30 minutos con el ruido de búsquedas, autenticación y localhost filtrado
Enlaces desde tu teléfono — compartidos directamente desde Android vía HTTP Shortcuts → POST a la API local
Los secretos nunca entran en la bóveda. Las copias de los gestores de contraseñas (1Password, Bitwarden, KeePass, …) se omiten mediante la detección de aplicaciones y el marcador org.nspasteboard.ConcealedType, y el contenido con forma de secreto — claves AWS, tokens de GitHub/Slack/Stripe, JWTs, bloques de claves privadas, asignaciones PASSWORD=, cadenas con forma de contraseña generada — se filtra antes del almacenamiento.
El ruido del portapapeles se autolimpia: los duplicados exactos se colapsan y las entradas de portapapeles sin procesar expiran después de 30 días (configurable mediante OMNICONTEXT_CLIPBOARD_MAX_AGE_DAYS / OMNICONTEXT_CLIPBOARD_MAX_COUNT). Los activos enriquecidos — notas, descargas, capturas, historial — nunca se depuran.
Related MCP server: memory-mcp
Cómo funciona
[Screenshots / Clipboard / Notes / Downloads]
↓
Memex Daemon (Node.js)
↓
SQLite + FTS5 (db.sqlite)
↙ ↘
MCP Server HTTP Server :4322
(stdio) (Bearer auth)
↓ ↓
Claude Desktop Cloudflare Tunnel
↓
ChatGPT Mobile /
Android Share SheetLa base de datos es SQLite (via el node:sqlite integrado de Node — sin dependencias nativas) con un índice de texto completo FTS5. La búsqueda es por ranking BM25 sobre contenido, título, resumen y URL de origen, con refuerzos multiplicativos por actualidad y tipo de documento: sin embeddings, sin llamadas a API, totalmente offline. El modo WAL hace seguro el acceso concurrente desde el demonio y los procesos MCP. Un db.json existente de versiones anteriores se migra automáticamente en el primer inicio.
Dos interfaces sirven la base de datos simultáneamente:
Un servidor MCP local (transporte stdio) para Claude Desktop y editores compatibles con MCP como Cursor
Un servidor HTTP expuesto a través de un túnel gratuito de Cloudflare para acciones personalizadas de ChatGPT e ingesta móvil
Configuración
Requisitos: macOS (la captura es nativa de macOS: Vision OCR, AppleScript, launchd) y Node.js ≥ 22.5 (Memex usa el node:sqlite integrado; en versiones antiguas de Node se cierra con un mensaje claro).
git clone https://github.com/arnavbee/memex
cd memex
npm install && npm run build
# Configure your API key
cp .env.example .env
# Edit .env and set OMNICONTEXT_API_KEY (only needed for the HTTP API/tunnel)
# Start the daemon once (foreground)
npm start
# ...or install it as a launchd agent: starts at login, restarts on crash
npm run install-daemon # logs land in ~/.omnicontext/daemon.log
npm run uninstall-daemon # stop + remove (database untouched)
# Expose to mobile (optional)
cloudflared tunnel --url localhost:4322Permisos (Configuración del Sistema → Privacidad y Seguridad): concede al binario node Acceso Total al Disco para el historial de Safari, y Automatización → Notas para la sincronización de Apple Notes. Los navegadores Chromium (Chrome, Brave, Arc, Edge) funcionan sin nada de esto.
Claude Desktop — añade a ~/Library/Application Support/Claude/claude_desktop_config.json, y luego reinicia Claude Desktop:
{
"mcpServers": {
"memex": {
"command": "node",
"args": ["/path/to/memex/dist/mcp-standalone.js"]
}
}
}Usa
mcp-standalone.js, noindex.js— Claude Desktop solo necesita la interfaz de consulta.index.jses el demonio de captura completo; ejecutarlo dos veces duplica la captura del portapapeles y pelea por el puerto 4322. La misma configuración funciona para Cursor y cualquier cliente MCP.
Acciones personalizadas de ChatGPT — importa openapi.json del repositorio en el esquema de acciones de tu GPT, apuntando la URL del servidor a tu túnel de Cloudflare, con Authorization: Bearer <tu OMNICONTEXT_API_KEY>.
Hoja de compartir de Android — en HTTP Shortcuts, crea un POST a https://<tu-túnel>/ingest con ese mismo encabezado bearer y el texto compartido como cuerpo, y añádelo al menú de compartir. Cualquier cosa que compartas desde tu teléfono llega a la bóveda.
Uso
No hay comandos que aprender. Una vez que el demonio está en ejecución, simplemente vive tu vida digital — copia enlaces, toma capturas de pantalla, descarga PDFs — y luego pregúntale a tu IA sobre ello más tarde, en lenguaje natural:
"¿Qué artículo sobre la atención leí la semana pasada?"
"Encuentra el PDF que descargué sobre entrevistas de Python"
"¿Qué copié hace poco?"
"¿Ese video de Karpathy cubría la atención?" (los enlaces de YouTube indexan sus transcripciones automáticamente)
"Elimina ese clip con mi dirección"
Claude descubre estas herramientas por sí mismo a través de MCP y las usa de forma autónoma: search_vault, get_recent_assets, get_asset_by_id, delete_asset, sync_browser_history, sync_notes_now, sync_recent_files. El único hábito que hace valiosa la bóveda: cuando veas algo que quieras recordar, cópialo — ese es todo el sistema de archivo.
Verifica que funciona: npm test ejecuta la suite de pruebas; tail -f ~/.omnicontext/daemon.log muestra las capturas mientras ocurren; y "¿qué acabo de copiar?" en Claude es la comprobación de extremo a extremo.
Cosas que fueron complicadas de resolver
El límite de resultados de herramientas de 1MB en ChatGPT. Devolver el contenido completo de un clip provocaba un ResponseTooLargeError. Solucionado limitando el contenido de los resultados a 2.000 caracteres por ítem.
La caída de la conexión MCP al iniciar. El servidor MCP se caía al arrancar porque el transporte aún no estaba listo. Solucionado con reintentos.
Páginas dinámicas que bloquean el scraping. Algunas páginas renderizan contenido solo con JavaScript, lo que provocaba extracciones vacías. Las URL de YouTube y Twitter se tratan con sus APIs respectivas, y el resto de páginas se extraen con fetch simple; si el contenido es demasiado escaso, la entrada se guarda igualmente con la URL.
Arquitectura
El demonio (un solo proceso Node) corre tres bucles:
Bucle de captura — cada 3 segundos: capturas de pantalla (Vision OCR), portapapeles (con detección de secretos), monitor de descargas, y una pasada de historial del navegador.
Bucle de sincronización — cada 30 minutos: Notas de Apple y creación de instantáneas del historial.
Servidor HTTP — en el puerto 4322, sirve la API local (endpoints
/api/), sirve el túnel de Cloudflare y expone el MCP.
Todos los datos se escriben en una única base de datos SQLite en ~/.omnicontext/memex.db junto a los blobs binarios en ~/.omnicontext/assets/. Los blobs se referencian a través de file:// URIs, no se copian a la base de datos. Se escribe un pequeño daemon.json con los metadatos de configuración.
La API
OpenAPI 3.1.0 en openapi.json — descárgalo para una referencia interactiva con Swagger UI. Todas las rutas exigen Authorization: Bearer <OMNICONTEXT_API_KEY> (una clave generada automáticamente en el primer arranque).
Endpoints principales:
GET /search?q=<query>— búsqueda con ranking BM25 (p. ej.?q=tailwind css), con soporte para rangos de fechasstartDate/endDate, filtroskindylimit.GET /assets?id=<id>— obtiene un único ítem con su contenido completo.DELETE /assets?id=<id>— elimina un ítem.GET /screenshot?after=<RFC3339>&before=<RFC3339>— devuelve PNGs de la pantalla y miniaturas.POST /ingest— acepta texto o URLs para su indexación manual (por ejemplo, para compartir desde el teléfono).GET /health— estado del servicio y versión del esquema.GET /stats— recuentos por tipo de activo y desglose de la eficiencia del filtro del portapapeles.
El demonio solo expone 127.0.0.1:4322; el túnel de Cloudflare lo proxya. Si API_ALLOW_REMOTE=1 y configuras una CLOUDFLARE_TUNNEL_TOKEN, el demonio abrirá un túnel cloudflared por ti.
Variables de entorno
Variable | Descripción | Por defecto |
| Directorio de datos (base de datos, blobs, config) |
|
| Clave de autenticación para la API HTTP | generada automáticamente y persistida |
| Ruta al archivo | auto-detectada |
| Ejecutar sin capturas de pantalla (para CI o servidores) |
|
| Desactivar el monitoreo del historial del navegador |
|
| Cuántos días conservar las entradas del portapapeles |
|
| Número máximo de entradas de portapapeles que se conservarán |
|
| Nivel de registro ( |
|
Todas son opcionales. Se pueden exportar en tu .bashrc, .zshrc, o establecerse en el plist de launchd.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceA universal, local-first MCP hub that indexes personal files (documents, code, etc.) and provides private semantic search via hybrid dense+BM25 retrieval, enabling agents like Claude Desktop to query your data without sending it to the cloud.176MIT
- AlicenseAqualityDmaintenanceA local-first MCP server that exposes personal notes and files as unified semantic context for AI agents via vector search and file monitoring.6MIT
- AlicenseNot gradedqualityDmaintenanceLocal-first MCP server that extracts structured knowledge from markdown notes into SQLite with full-text search, enabling AI coding tools to retrieve relevant context offline at zero cost.3MIT
- AlicenseAqualityAmaintenanceA local-first MCP server for shared memory across AI tools, enabling context capture and resume across sessions.26624Apache 2.0
Related MCP Connectors
Private-by-default, local-first memory/context/task orchestrator for MCP apps and agents.
Person-owned AI memory that learns, not just stores — portable context for any MCP client.
Hosted MCP memory: save sessions/decisions once, search from Claude, Cursor, ChatGPT. EU-hosted FTS.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/arnavbee/memex'
If you have feedback or need assistance with the MCP directory API, please join our Discord server