Skip to main content
Glama

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 Sheet

La 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:4322

Permisos (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, no index.js — Claude Desktop solo necesita la interfaz de consulta. index.js es 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 fechas startDate / endDate, filtros kind y limit.

  • 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

OMNICONTEXT_HOME

Directorio de datos (base de datos, blobs, config)

~/.omnicontext

OMNICONTEXT_API_KEY

Clave de autenticación para la API HTTP

generada automáticamente y persistida

OMNICONTEXT_CLAUDE_DESKTOP_CONFIG

Ruta al archivo claude_desktop_config.json si no está en la ubicación por defecto

auto-detectada

OMNICONTEXT_HEADLESS

Ejecutar sin capturas de pantalla (para CI o servidores)

false

OMNICONTEXT_NO_BROWSER_WATCH

Desactivar el monitoreo del historial del navegador

false

OMNICONTEXT_CLIPBOARD_MAX_AGE_DAYS

Cuántos días conservar las entradas del portapapeles

30

OMNICONTEXT_CLIPBOARD_MAX_COUNT

Número máximo de entradas de portapapeles que se conservarán

5000

OMNICONTEXT_LOG_LEVEL

Nivel de registro (debug | info | warn | error)

info

Todas son opcionales. Se pueden exportar en tu .bashrc, .zshrc, o establecerse en el plist de launchd.

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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