Skip to main content
Glama

Memex

Локальный, приватный по своей сути персональный движок контекста для LLM.

TypeScript · Swift · MCP · OpenAPI 3.1.0 · Cloudflare Tunnel


Большинство ИИ-ассистентов ничего о вас не знают. Каждый новый разговор начинается с нуля — они не знают, что вы читали, какие ссылки сохранили, какие заметки написали или какие файлы скачали.

Memex это исправляет. Это фоновый демон, который работает на вашем Mac и пассивно индексирует вашу цифровую активность в локальную базу данных. Затем эта база становится доступна любой LLM — Claude на вашем рабочем столе, ChatGPT на вашем телефоне — через стандартные интерфейсы. Никакого облачного хранилища. Никаких сторонних серверов. Всё остаётся на вашей машине.


Что он собирает

  • Скриншоты — распознаются локально с помощью Apple Vision framework (Swift)

  • Буфер обмена — отслеживается непрерывно; для YouTube-ссылок автоматически подтягиваются транскрипты, Twitter-ссылки извлекают содержимое постов

  • Загрузки — PDF, markdown-файлы, CSV парсятся и индексируются при появлении

  • Apple Notes — синхронизируются периодически через AppleScript

  • История браузера — посещения в Safari, Chrome, Arc, Brave и Edge (все профили), синхронизируется каждые 30 минут с отфильтрованным шумом поиска, авторизации и localhost

  • Ссылки с телефона — отправляются напрямую с Android через HTTP Shortcuts → POST на локальный API

Секреты никогда не попадают в хранилище. Копии из менеджеров паролей (1Password, Bitwarden, KeePass, …) пропускаются через определение приложения и маркер org.nspasteboard.ConcealedType, а содержимое, похожее на секреты — AWS-ключи, токены GitHub/Slack/Stripe, JWT, блоки приватных ключей, присваивания PASSWORD=, строки в форме сгенерированных паролей — отфильтровывается до сохранения.

Шум буфера обмена самоочищается: точные дубликаты схлопываются, а сырые записи буфера обмена истекают через 30 дней (настраивается через OMNICONTEXT_CLIPBOARD_MAX_AGE_DAYS / OMNICONTEXT_CLIPBOARD_MAX_COUNT). Богатые ресурсы — заметки, загрузки, скриншоты, история — никогда не удаляются.


Related MCP server: memory-mcp

Как это работает

[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

База данных — SQLite (через встроенный node:sqlite в Node — без нативных зависимостей) с полнотекстовым индексом FTS5. Поиск — ранжирование BM25 по содержимому, заголовку, сводке и URL источника, с мультипликативными повышениями за свежесть и тип документа — никаких эмбеддингов, никаких API-вызовов, полностью офлайн. Режим WAL обеспечивает безопасный параллельный доступ из демона и MCP-процессов. Существующий db.json из старых версий мигрируется автоматически при первом запуске.

Два интерфейса обслуживают базу данных одновременно:

  • Локальный MCP-сервер (транспорт stdio) для Claude Desktop и MCP-совместимых редакторов вроде Cursor

  • HTTP-сервер, доступный через бесплатный Cloudflare-туннель для ChatGPT Custom Actions и мобильного приёма данных


Установка

Требования: macOS (сбор данных нативно для macOS: Vision OCR, AppleScript, launchd) и Node.js ≥ 22.5 (Memex использует встроенный node:sqlite; на старых версиях Node он завершается с понятным сообщением).

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

Разрешения (Системные настройки → Конфиденциальность и безопасность): предоставьте бинарнику node полный доступ к диску для истории Safari и Автоматизация → Заметки для синхронизации Apple Notes. Браузеры на Chromium (Chrome, Brave, Arc, Edge) работают без всего этого.

Claude Desktop — добавьте в ~/Library/Application Support/Claude/claude_desktop_config.json, затем перезапустите Claude Desktop:

{
  "mcpServers": {
    "memex": {
      "command": "node",
      "args": ["/path/to/memex/dist/mcp-standalone.js"]
    }
  }
}

Используйте mcp-standalone.js, а не index.js — Claude Desktop нужен только интерфейс запросов. index.js — это полный демон сбора данных; запуск его дважды приведёт к двойному захвату буфера обмена и конфликту за порт 4322. Та же конфигурация работает для Cursor и любого MCP-клиента.

ChatGPT Custom Actions — импортируйте openapi.json из репозитория в схему действий вашего GPT, указав URL сервера на ваш Cloudflare-туннель, с заголовком Authorization: Bearer <ваш OMNICONTEXT_API_KEY>.

Меню «Поделиться» на Android — в HTTP Shortcuts создайте POST на https://<ваш-туннель>/ingest с тем же bearer-заголовком и переданным текстом в теле запроса, и добавьте его в меню «Поделиться». Всё, чем вы поделитесь с телефона, попадёт в хранилище.


Использование

Никаких команд учить не нужно. Как только демон запущен, просто живите своей цифровой жизнью — копируйте ссылки, делайте скриншоты, скачивайте PDF — а потом спрашивайте своего ИИ об этом позже, обычным языком:

  • «Что это была за статья про внимание, которую я читал на прошлой неделе?»

  • «Найди PDF, который я скачал про собеседования по Python»

  • «Что я копировал сегодня утром?»

  • «То видео Карпати про тонкую настройку было?» (YouTube-ссылки автоматически индексируют свои транскрипты)

  • «Удали ту запись из буфера обмена с моим адресом»

Claude обнаруживает эти инструменты через MCP и вызывает их сам: search_vault, get_recent_assets, get_asset_by_id, delete_asset, sync_browser_history, sync_notes_now, sync_recent_files. Единственная привычка, которая делает хранилище ценным: когда видите что-то, что понадобится позже, скопируйте это — это и есть вся система архивирования.

Проверьте, что всё работает: npm test запускает тесты; tail -f ~/.omnicontext/daemon.log показывает захваты в реальном времени; а вопрос Клоду «что я только что скопировал?» сразу после копирования — это сквозная проверка.


Что было сложно выяснить

Лимит результата инструмента в ChatGPT — 1 МБ. Возврат полного текста PDF приводил к сбою действия с ошибкой ResponseTooLargeError. Исправлено усечением всего возвращаемого содержимого до 2 000 символов на стороне сервера.

Разрыв MCP-соединения Claude Desktop при запуске. Происходило потому, что HTTP-сервер инициализировался до готовности MCP-транспорта. Исправлено упорядочиванием порядка загрузки и добавлением журналирования повторных попыток.

Динамические страницы, блокирующие скрапинг. cosmos.so, Instagram, порталы за логином — @mozilla/readability извлекает из них ничего. Вместо тихого сбоя система теперь записывает заглушку URL с меткой времени и исходным URL, чтобы LLM всё равно могла подтвердить, что ссылка сохранена.

На Android нет Universal Clipboard. Синхронизация буфера обмена через iCloud работает только на устройствах Apple. Решено маршрутизацией отправок с телефона через HTTP Shortcuts → Cloudflare-туннель → локальный ingest API.


Почему некоторые вещи сделаны именно так

SQLite вместо плоского JSON — в v1 использовался атомарно заменяемый db.json, что работало нормально, пока два процесса (демон + MCP-сервер) не начали гонку на чтение-изменение-запись, и каждый поиск заново парсил весь файл. Встроенный node:sqlite в Node поставляется с FTS5 и WAL, так что исправление добавило ноль зависимостей. Старые файлы db.json мигрируются автоматически.

BM25 вместо эмбеддингов — эмбеддингам нужен либо локальный GPU, либо круговая поездка к API. И то, и другое нарушает ограничение «сначала офлайн». BM25 из FTS5 работает за миллисекунды и хорошо подходит для поиска по личному контексту, где запросы, как правило, конкретны.

Cloudflare Tunnel вместо ngrok — без регистрации, без аккаунта, без лимитов пропускной способности, и URL сохраняется на время сессии. Бесплатный ngrok меняет URL при перезапуске и ограничивает соединения.

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