Local-first MCP memory server. Indexes Claude Code/Cowork/Telegram chats; any MCP-compatible AI agent (Cursor, Cline, Continue) can search them.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
tools
-
memex_archive_conversation
Hide a chat from default listings (data preserved)
-
memex_export_markdown
Export one conversation as Markdown (for Obsidian round-trip)
-
memex_get_conversation
Full transcript by conversation_id
-
memex_help
Returns the full user guide with concrete use cases
-
memex_list_conversations
Conversations sorted by activity, filterable by source
-
memex_list_projects
Distinct project paths captured (for the project filter)
-
memex_list_sources
Per-source enabled/disabled + counts
-
memex_overview
Corpus snapshot — sources, counts, recent chats, daemon health
-
memex_recent
Most recent messages across all sources
-
memex_search
Full-text search with BM25 × recency boost
-
memex_sources_status
Which sources are captured + the exact CLI to opt out
-
memex_status
Daemon health: PID, last capture, watched files
-
memex_store_document
Save a web page, AI chat share, or pasted text. Agent fetches; memex stores verbatim. Teaches the Jina r.jina.ai trick for Cloudflare-blocked pages
-
memex_telegram_check
v0.10+: Detect Telegram Desktop, login age (24h block), pending count, suggested next step
-
memex_telegram_import
v0.10+: Import selected exports into memex.db (by index or title) — auto-allowlists
-
memex_telegram_mode
v0.10+: Get/set capture mode: pick (default) · auto · manual
-
memex_telegram_pending
v0.10+: List exports staged for review with chat name + msg count + dates
-
memex_telegram_skip
v0.10+: Mark chats as "never index" — applies to future re-exports too
analyzed commit d660639 · analyzer v18 · 1h ago
skills & prompt files 2
danger signals1
- suspicious endpointapi.telegram.orgparallelclaw-memex-mvp-d660639/bot/telegram.js:13
const API_BASE = 'https://api.telegram.org';
filesystem 32
- fs parallelclaw-memex-mvp-d660639/bot/config.js :11
import { existsSync, readFileSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/bot/inbox.js :27
import { mkdirSync, writeFileSync, renameSync, unlinkSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/bot/index.js :33
} from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/bot/poll.js :15
import { existsSync, readFileSync, writeFileSync, mkdirSync, renameSync, unlinkSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/bot/search.js :12
import { existsSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/ingest.js :39
} from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/cli/index.js :29
import { existsSync, readFileSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/config.js :25
import { readFileSync, writeFileSync, existsSync, mkdirSync, renameSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/db-init.js :24
import { mkdirSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/hook/install.js :33
} from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/import-telegram.js :21
import { readFileSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/ingest-file.js :22
import { existsSync, readFileSync, statSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/notify-click-action.js :24
import { existsSync, accessSync, constants } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/openclaw-channel.js :54
import { readFileSync, existsSync, openSync, readSync, closeSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/parse-cursor.js :29
import { existsSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/parse-obsidian.js :21
import { readFileSync, statSync, readdirSync, existsSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/parse-telegram-html.js :43
import { readFileSync, existsSync, readdirSync, statSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/sync/cert.js :22
import { readFileSync, writeFileSync, existsSync, chmodSync, mkdirSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/sync/server.js :22
import { existsSync, readFileSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/sync/service.js :24
import { writeFileSync, readFileSync, mkdirSync, existsSync, unlinkSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/telegram-decisions.js :16
import { existsSync, readFileSync, writeFileSync, renameSync, mkdirSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/telegram-discovery.js :14
import { existsSync, readdirSync, statSync, readFileSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/telegram-notify.js :37
} from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/telegram-pending.js :28
} from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/web/index.js :27
import { readFileSync, existsSync, statSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/web/routes/pending.js :11
import { readFileSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/lib/web/routes/settings.js :9
import { existsSync, statSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/plugins/memex-openclaw/bin/setup-impl.js :25
} from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/plugins/memex-openclaw/index.js :23
import { appendFileSync, readFileSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/plugins/memex-openclaw/lib/backfill.js :42
} from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/plugins/memex-openclaw/lib/store.js :18
import { mkdirSync, readFileSync } from 'node:fs'; - fs parallelclaw-memex-mvp-d660639/server.js :24
import { mkdirSync, readFileSync, renameSync, existsSync, statSync } from 'node:fs';
shell / exec 11
- shell parallelclaw-memex-mvp-d660639/bot/index.js :34
import { execSync, spawn } from 'node:child_process'; - shell parallelclaw-memex-mvp-d660639/ingest.js :41
import { execSync, spawn } from 'node:child_process'; - shell parallelclaw-memex-mvp-d660639/lib/hook/install.js :34
import { execSync } from 'node:child_process'; - shell parallelclaw-memex-mvp-d660639/lib/notify-click-action.js :27
import { spawn } from 'node:child_process'; - shell parallelclaw-memex-mvp-d660639/lib/sync/cli.js :581
const { spawnSync } = await import('node:child_process'); - shell parallelclaw-memex-mvp-d660639/lib/sync/service.js :25
import { execSync } from 'node:child_process'; - shell parallelclaw-memex-mvp-d660639/lib/telegram-notify.js :41
import { spawn } from 'node:child_process'; - shell parallelclaw-memex-mvp-d660639/lib/web/index.js :31
import { spawn, execSync } from 'node:child_process'; - shell parallelclaw-memex-mvp-d660639/plugins/memex-openclaw/bin/setup-impl.js :4
* install`. The scanner forbids `child_process` in lib/ — that's the - shell parallelclaw-memex-mvp-d660639/plugins/memex-openclaw/index.js :306
// NO child_process here — only pure lib/backfill.js, which - shell parallelclaw-memex-mvp-d660639/server.js :26
import { execSync } from 'node:child_process';
network 7
- net parallelclaw-memex-mvp-d660639/bot/nexara.js :40
const resp = await fetch(ENDPOINT, { - net parallelclaw-memex-mvp-d660639/bot/telegram.js :24
const resp = await fetch(`${this.api}/${method}`, { - net parallelclaw-memex-mvp-d660639/lib/sync/cli.js :879
const res = await fetch(url, { signal: ctrl.signal }); - net parallelclaw-memex-mvp-d660639/lib/sync/client.js :12
import { request as httpsRequest } from 'node:https'; - net parallelclaw-memex-mvp-d660639/lib/sync/server.js :21
import { createServer } from 'node:https'; - net parallelclaw-memex-mvp-d660639/lib/web/index.js :26
import { createServer } from 'node:http'; - net parallelclaw-memex-mvp-d660639/server.js :3151
'For URLs you can\'t fetch (Cloudflare-blocked), retry through https://r.jina.ai/<original-url>.',
database 11
- db parallelclaw-memex-mvp-d660639/bot/search.js :11
import Database from 'better-sqlite3'; - db parallelclaw-memex-mvp-d660639/ingest.js :33
import Database from 'better-sqlite3'; - db parallelclaw-memex-mvp-d660639/lib/cli/index.js :26
import Database from 'better-sqlite3'; - db parallelclaw-memex-mvp-d660639/lib/db-init.js :26
import Database from 'better-sqlite3'; - db parallelclaw-memex-mvp-d660639/lib/parse-cursor.js :26
import Database from 'better-sqlite3'; - db parallelclaw-memex-mvp-d660639/lib/sync/replicate.js :22
import Database from 'better-sqlite3'; - db parallelclaw-memex-mvp-d660639/lib/sync/server.js :25
import Database from 'better-sqlite3'; - db parallelclaw-memex-mvp-d660639/lib/tasks.js :28
import Database from 'better-sqlite3'; - db parallelclaw-memex-mvp-d660639/lib/web/index.js :32
import Database from 'better-sqlite3'; - db parallelclaw-memex-mvp-d660639/lib/web/routes/pending.js :14
import Database from 'better-sqlite3'; - db parallelclaw-memex-mvp-d660639/server.js :20
import Database from 'better-sqlite3';
tool registrations 1
- memex_search parallelclaw-memex-mvp-d660639/plugins/memex-openclaw/lib/tools.js :11
declared dependencies 4
- @modelcontextprotocol/sdk@^1.0.0
- better-sqlite3@^11.0.0
- chokidar@^3.6.0
- selfsigned@^5.5.0