enhx-memory
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@enhx-memoryRecall memories about the authentication module"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
enhx-memory
A persistent, project-scoped memory layer for AI coding agents. Exposes a Model Context Protocol (MCP) server with 45 tools for capturing, searching, deduplicating, relating, and maintaining memory records across long-running coding sessions.
Enterprise-grade by default. The server is 100% automatic โ
๐ Auto-session: opens a session against the cwd (or
INITIAL_PROJECT_PATH) at boot. You never need to callstart_session.๐ Cwd watcher: polls
process.cwd()and auto-rebinds to a new project when the agent changes directories (worktree, monorepo, etc).๐งน Auto-curate on session boot: scans the project roots listed in
AUTO_CURATE_ROOTS(README, CHANGELOG, plan files, decisions, agents, package.json) and runs the extractors to persist typed memories (command,error,decision,reference). Idempotent; only re-runs when an mtime changes.๐ฅ Auto-ingest: user prompts that flow through the MCP transport are persisted as memories with the
auto_ingesttag, debounced per project. Three independent ingest paths (transport frame, per-tool args wrapper, POSIXSIGUSR1debug signal) share a single debounce map, so a payload that arrives twice lands once.๐ Auto-recall: every project-scoped tool call returns an
auto_recalledarray of the most relevant pinned / type-weighted / recency-decayed memories โ the agent never has to remember to callrecall_memories.๐ง Memory Manager enforces dedup, near-duplicate merging, project conventions, and importance scoring.
This is the TypeScript rewrite of the original Python/FastMCP
enhx-memory v0.1.0. The two servers share the same SQLite schema
(migrations/0001_initial.sql is byte-identical), so existing databases
work without modification.
Install
A. npx (recommended โ zero install)
npx enhx-memoryB. Global npm
npm install -g enhx-memory
enhx-memoryC. Single binary
Download a binary for your platform from the GitHub release page. The binary bundles Node + the server + the migrations.
Related MCP server: Archivist MCP
What's new in 1.1.0
Six phases of content-aware work landed between 1.0.0 and 1.1.0. If you already have a 1.0.x database, the schema is unchanged โ just upgrade.
Phase 3 โ Content ingest. Four new tools (
ingest_file,ingest_files,extract_commands,extract_errors) and aFileIngesterthat respectsFILE_INGEST_MAX_BYTESand a binary sniff gate.Phase 4 โ Auto-curate on session boot. When a session opens,
AutoSessionManagerrunscurate_sessionagainst the configured roots. The synthesized session brief is pinned as a memory, so the nextopen_session_briefreturns it instantly.Phase 5 โ Robust transport ingest hook. Every
server.tool(...)call is wrapped so free-text args are inspected for ingestible content. Also wired a POSIXSIGUSR1handler that reads stdin and ingests it โ a power-user escape hatch for dumping debug payloads into memory without going through the MCP client.Phase 6 โ Recaller v2.
recall_memoriesnow applies type weights (RECALL_TYPE_WEIGHTS) and a per-day recency decay (RECALL_RECENCY_DECAY) on top of the FTS5 score. Pinned memories always come first.Phase 7 โ
open_session_brief+export_project_doc. Two new tools that surface the pinned session brief + top-5 recall, and that compose a single Markdown document summarising the active project (capped toFILE_INGEST_MAX_BYTES).
The full test count went from 208 โ 323.
MCP client configuration
Claude Desktop / Cursor / Cline
Common โ the three knobs most people tweak: log verbosity, how many memories get auto-attached per tool call (the recall cap), and whether the auto-cleanup scheduler runs. Everything else falls back to its default.
{
"mcpServers": {
"enhx-memory": {
"command": "npx",
"args": ["-y", "enhx-memory"],
"env": {
"DATA_DIR": "/path/to/your/data",
"LOG_LEVEL": "INFO",
"AUTO_RECALL_LIMIT": "5",
"ENABLE_AUTO_CLEANUP": "true"
}
}
}
}Note: there is no
MAX_MEMORY_ITEMSโ the closest knob isAUTO_RECALL_LIMIT, which caps how many memories are auto-attached to every tool result. To bound total storage, useENABLE_AUTO_CLEANUPwithCLEANUP_INTERVAL_HOURSandSOFT_DELETE_GRACE_DAYS(below).
Fully-configured โ every variable the server reads from env, with
defaults inline. Drop or change the ones you want to override; everything
else is optional.
{
"mcpServers": {
"enhx-memory": {
"command": "npx",
"args": ["-y", "enhx-memory"],
"env": {
"DATA_DIR": "/path/to/your/data",
"DB_FILENAME": "enhx_memory.db",
"LOG_LEVEL": "INFO",
"DEDUP_POLICY": "reject",
"DEDUP_THRESHOLD": "0.8",
"ENABLE_AUTO_CLEANUP": "true",
"CLEANUP_INTERVAL_HOURS": "24",
"SOFT_DELETE_GRACE_DAYS": "7",
"ENABLE_AUTO_SESSION": "true",
"INITIAL_PROJECT_NAME": "",
"INITIAL_PROJECT_PATH": "",
"INITIAL_CLIENT": "auto",
"ENABLE_AUTO_INGEST": "true",
"AUTO_INGEST_DEBOUNCE_SECONDS": "30",
"AUTO_INGEST_MIN_LENGTH": "20",
"ENABLE_AUTO_RECALL": "true",
"AUTO_RECALL_LIMIT": "5",
"AUTO_RECALL_MIN_SCORE": "0",
"AUTO_DETECT_CONVENTIONS": "true",
"ENABLE_CWD_WATCHER": "true",
"CWD_CHECK_INTERVAL_SECONDS": "5",
"ENABLE_FILE_INGEST": "true",
"FILE_INGEST_MAX_BYTES": "262144",
"FILE_INGEST_BINARY_SNIFF": "true",
"AUTO_CURATE_SESSION": "true",
"AUTO_CURATE_ROOTS": "README.md,CHANGELOG.md,plan*.md,plan/*.md,decisions.md,agents.md,package.json,.github/agents.md",
"CURATE_PIN_BRIEF": "true",
"RECALL_TYPE_WEIGHTS": "error:.5,decision:.3,pattern:.25,code:.1,reference:.05,note:0,conversation:0",
"RECALL_RECENCY_DECAY": "0.95"
}
}
}
}Globally-installed npm (the env block is optional โ only override what you
need):
{
"mcpServers": {
"enhx-memory": {
"command": "enhx-memory",
"env": {
"LOG_LEVEL": "INFO",
"AUTO_RECALL_LIMIT": "5",
"ENABLE_AUTO_CLEANUP": "true"
}
}
}
}Single binary (same โ env block optional):
{
"mcpServers": {
"enhx-memory": {
"command": "/usr/local/bin/enhx-memory",
"env": {
"LOG_LEVEL": "INFO",
"AUTO_RECALL_LIMIT": "5",
"ENABLE_AUTO_CLEANUP": "true"
}
}
}
}CLI flags
Flag | Behavior |
| Print the data directory path and exit |
| Print the install path |
| Wipe the database and logs (refuses without marker file) |
| Remove the install + data dir |
| Print the |
| Print version |
| Print help |
Without flags, the server starts on stdio.
Environment variables
Variable | Default | Description |
|
| Where the DB and logs live |
|
| Database filename |
|
|
|
|
|
|
|
| Jaccard similarity cutoff for near-duplicates |
|
| Run the cleanup scheduler |
|
| Cleanup cycle period |
|
| Days to keep soft-deleted rows before purging |
|
| Open a session at boot against cwd / |
| (none) | Force a specific project name when auto-sessions boot |
| (cwd) | Force a specific project root path when auto-sessions boot |
|
| Client name recorded on the auto-opened session |
|
| Persist user prompts as memories (auto-debounced) |
|
| Debounce window per content hash |
|
| Minimum text length to ingest |
|
| Attach |
|
| Max memories attached per tool call |
|
| Minimum score for non-pinned recall hits |
|
| Detect project conventions on |
|
| Auto-rebind to a new project when |
|
| Polling interval for the cwd watcher |
|
| Enable the |
|
| Hard size cap (bytes) for an ingested file |
|
| Reject binary files before they hit the ingester |
|
| Run |
| 8 glob patterns | Comma-separated glob list of files to curate automatically |
|
| Pin the synthesized session brief as a memory |
| see below |
|
|
| Per-day retention factor in the recency-decay formula |
Note:
ENABLE_AUTO_INGEST,ENABLE_AUTO_RECALL, andENABLE_AUTO_SESSIONall default totrueso the server runs as a fully automatic memory layer out of the box. Set any of them tofalseto opt out of that specific behavior.
The 45 tools
Lifecycle (5)
start_sessionโ open a session against a project (auto-creates if needed). When called with no arguments, delegates toAutoSessionManagerand returns anauto_recalledarray of relevant memories. Sessions opened via the auto-curate hook also attach a freshly-pinned session brief (seeopen_session_brief).get_project_summaryโ counts + recent memories for the active project, plusauto_recalled.list_projectsโ all known projects.notify_project_changeโ explicit signal that the agent has switched projects (e.g. into a git worktree, multi-repo monorepo, or any case the cwd watcher can't see). Takes{cwd?, project_name?, root_path?, reason?}; rebinds the active project, opens a fresh session, and returns the new active project + anauto_recalledarray.get_active_projectโ return the currently active project and session (auto-recovers a session if none is active).
Conventions (4)
detect_project_typeโ sniff files at a root pathdetect_and_save_project_conventionsโ persist conventions on the project rowremember_project_patternโ save a project-specific pattern as a memoryget_project_conventionsโ return saved conventions
Auto-ingest (2)
set_auto_ingestโ toggle + configure the auto-ingest middlewareget_auto_ingest_statusโ current config + counters
Recall & ingest (2)
recall_memoriesโ free-text recall. Type-weighted + recency-decayed (Recall v2): pinned memories always come first, then FTS hits scored byRECALL_TYPE_WEIGHTSandRECALL_RECENCY_DECAY. ReturnsRecalledMemory[]with score and reason.add_user_messageโ convenience tool for the agent to persist every user prompt as aconversation-type memory taggeduser_prompt. Auto-recall is also attached.
Memories (8)
Every project-scoped tool here returns an auto_recalled array of relevant
memories, so the agent never needs to issue a separate recall_memories
call.
add_memoryโ insert with optional type/tags/importance/file pathsget_memoryโ fetch a single row (bumps access count)list_memoriesโ paginated list with filterssearch_memoriesโ FTS5 + LIKE searchupdate_memoryโ patch fields on an existing memorydelete_memoryโ soft-delete (preserved until cleanup)count_memoriesโ fast count with filtersbulk_add_memoriesโ insert many in one call
Dedup (3)
find_duplicatesโ scan project for near-duplicatesmerge_memoriesโ combine two memories (rewires relations, hard-deletes source)set_dedup_policyโreject/merge/warn/off+ threshold
Relations (5)
add_relationโ directed edge between two memoriesremove_relationโ drop edges (optionally filtered by type)get_relationsโ incoming + outgoing edges for a memoryget_related_memoriesโ BFS up to N hopslist_relation_typesโ distinct types currently used
Tasks (4)
create_taskโ new task in the active projectlist_tasksโ paginated with status/priority filtersupdate_task_statusโpending/in_progress/done/cancelleddelete_taskโ remove by id
Cleanup (3)
cleanup_old_dataโ purge soft-deleted rows + VACUUM/ANALYZEoptimize_memoriesโ drop orphans + canonicalize JSONset_cleanup_policyโ adjust interval / grace / enable
System (3)
health_checkโ DB, FTS, active project, scheduler, auto-ingest statusget_database_statsโ table row counts + sizeget_performance_statsโ per-tool call counts, latencies, error rates
Content ingest (4)
Tools for slurping project files into typed memories. Designed to be called by an agent that wants to "remember" what a plan, an error log, or a decisions file says without re-reading it on every turn.
ingest_fileโ read a single file (binary sniff + size cap), run the extractors, persist typed memories. Idempotent via content-hash.ingest_filesโ batch over a list of paths in one call.extract_commandsโ pull shell-command lines out of free text and return them as typedcommandmemories (no DB write).extract_errorsโ pull error / stack-trace blocks out of free text and return them as typederrormemories (no DB write).
Session & export (2)
open_session_briefโ return the pinned session brief for the active project plus recent memory sections and the top 5 v2-recall hits. Cheap to call; meant to be the first thing the agent reads when it wakes up in a new session.export_project_docโ compose a single Markdown document summarising the active project (header, brief, conventions, recent memories, pending tasks, recent errors, frequent commands, recent decisions). Capped toFILE_INGEST_MAX_BYTES. Useful as anAGENTS.mdsource.
Development
git clone https://github.com/enhx/enhx-memory.git
cd enhx-memory
npm install
npm run typecheck # tsc --noEmit
npm run lint # eslint
npm test # vitest run (323 tests)
npm run build # tsc โ dist/
npm start # node bin/enhx-memory.mjs (uses dist/)
npm run dev # tsx src/index.ts (no build needed)Test coverage is configured to fail under 80 % line coverage (vitest --coverage).
Architecture
src/
index.ts # entry โ boots DB, AppContext, McpServer, transport
config.ts # ServerConfig (zod-validated, env-driven)
logging.ts # pino + rotating file
context.ts # AppContext (DI bag)
perf/tracker.ts # per-tool latency tracking
errors.ts # ToolError / DatabaseError / ValidationError
version.ts # reads version from package.json at runtime
util/ # csv, json, signals, time
db/ # DatabaseManager + per-table CRUD (better-sqlite3)
dedup/ # normalize + MinHash + Jaccard
domain/ # MemoryManager, RelationsManager, TasksManager,
# ProjectConventionLearner, AutoSessionManager,
# AutoIngestMiddleware, CleanupScheduler,
# FileIngester, MemoryCurator, Recall v2,
# extractors (commands/errors/decisions/refs)
tools/ # 45 MCP tools across 13 register files
# (lifecycle, conventions, auto-ingest, recall,
# memories, dedup, relations, tasks, cleanup,
# system, ingest, session-brief, export-project)
# + transport wrapper + helpers
migrations/ # 0001_initial.sql (verbatim from Python v0.1.0)
bin/enhx-memory.mjs # CLI launcher
tests/ # vitest suite (323 tests across helpers, db,
# domain, dedup, unit, integration, tools)The full rewrite plan is in TS_REWRITE_PLAN.md.
License
MIT
This server cannot be installed
Maintenance
Related MCP Servers
- Alicense-qualityCmaintenanceProvides AI coding assistants with persistent project memory to retain architectural decisions, code patterns, and domain knowledge across sessions. It stores data locally in a SQLite database, allowing agents to remember, recall, and manage project-specific context using full-text search.Last updated19Apache 2.0
- Alicense-qualityDmaintenanceA local-first memory layer for coding agents to persist and retrieve project decisions, architecture context, and rules across multiple development sessions. It utilizes a three-tier memory model and hybrid retrieval to provide agents with durable, searchable context and a WebUI for human review.Last updated4MIT
- Flicense-qualityAmaintenanceProvides persistent, local-first memory with knowledge graph and hybrid search for AI coding agents, reducing token usage by storing decisions, patterns, and codebase context.Last updated10
- Alicense-qualityDmaintenanceProvides long-term memory for AI coding agents, enabling them to remember, search, and organize information across sessions and platforms like Claude Code, ChatGPT, and Cursor.Last updated187MIT
Related MCP Connectors
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Universal memory for AI agents and tools. Save, organize and search context anywhere.
Persistent memory for AI agents. Search, store, and recall across sessions.
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/cbuntingde/enhx-memory'
If you have feedback or need assistance with the MCP directory API, please join our Discord server