Remnic

Local, file-based long-term memory for coding agents and chat clients, served over HTTP MCP

By Joshua Warren (individual) TypeScript Local · Streamable HTTP Knowledge and memory

65 popularity score ★ 232 ↓ 6.6k/wk

Connect your client

Local (once it is running)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add --transport http remnic http://localhost:4318/mcp
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "remnic": {
      "url": "http://localhost:4318/mcp"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "remnic": {
      "type": "http",
      "url": "http://localhost:4318/mcp"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.remnic]
url = "http://localhost:4318/mcp"
Gemini CLITerminal
gemini mcp add --scope user --transport http remnic http://localhost:4318/mcp

Settings 6

REMNIC_AUTH_TOKEN Required: Bearer token clients must send; without it (or a token minted by `remnic token generate`) every request is refused.
OPENAI_API_KEY Optional: Key for extracting memories with OpenAI; not needed with a local LLM, the OpenClaw gateway, or retrieval-only use.
REMNIC_MEMORY_DIR Optional: Folder where the markdown memory files are kept.
REMNIC_CONFIG_PATH Optional: Path to remnic.config.json.
REMNIC_HOST Optional: Address to bind; 127.0.0.1 by default.
REMNIC_PORT Optional: Port to listen on; 4318 by default.

What it does

Remnic keeps an assistant's long-term memory on your own disk. Each memory is a markdown file with YAML frontmatter (facts, decisions, preferences, corrections, entities and a user profile) under a memory directory you choose, and a search index built from those files can be thrown away and rebuilt at any time. Recall ranks stored memories against the current context; a background step buffers conversation turns and uses a model of your choice to pull out durable facts and write them to disk.

The MCP side is a local HTTP service. You start it with `remnic-server` from @remnic/server or with `remnic daemon start` from @remnic/cli, and every MCP client (Claude Code, Codex CLI, Cursor, VS Code, Replit, Factory Droid and others) points at the same `/mcp` address with a bearer token, so one store is shared by all of them. Beyond store and recall it carries tools for correcting memories with an approval step, entity lookup, recall explanations, conversation-archive search, continuity and identity records, a small task and project board, and shared context between agents.

At v9.69.56 the source registers over 100 distinct tools, far more than the 44 listed in the connector guide, and several appear only when their feature is turned on in config (support passport, recall navigation, briefing, coding decisions, chat). The code advertises each tool as `remnic_<name>` (Anthropic tool names may not contain dots) and still accepts the `remnic.` and `engram.` forms the docs use (access-mcp-tool-names.ts).

What it needs

RuntimeNode.js 22+

Node.js 22.12 or newer. A running Remnic server: `npx --package @remnic/server remnic-server` (or `npm install -g @remnic/cli`, then `remnic init` and `remnic daemon start`), with a bearer token set in REMNIC_AUTH_TOKEN. Writing new memories from conversations needs a model provider: an OpenAI API key, the OpenClaw gateway model chain, or a local LLM; retrieval-only use needs none. QMD on PATH is optional for the best hybrid search.

Limits

The standalone server has no stdio launch: clients connect over HTTP to the running service. With no auth token set it starts but rejects every request (packages/remnic-server/src/index.ts). It binds to 127.0.0.1 on port 4318 unless --host/--port or REMNIC_HOST/REMNIC_PORT are given. Namespaces, at-rest encryption and lossless transcript archiving are off by default. The Relay judge verifier is supported on Linux only and fails closed elsewhere. Tool names are moving from `engram.*` to `remnic_*` during the v1.x compatibility window.

Who it suits

Suits a developer who uses several coding agents or MCP clients and wants one memory they can read, grep, edit and keep in git, stored on their own machine rather than with a hosted memory service. It fits people willing to run a background service and supply a model for extraction (or a local LLM to keep everything on-device). Someone who wants a single stdio command with no daemon, or only needs a scratchpad for one client, will find the setup heavy. It is a community project, not from any of the agent vendors it connects to.

Tools 50 of 118

engram.recall
Find stored memories relevant to a query and return them as context
engram.recall_explain
Show the last recall snapshot for a session
engram.recall_xray
Run a recall and show which tier and filters produced each result
engram.recall_tier_explain
Explain the tier decision behind the last direct-answer recall
engram.observe
Send conversation turns into the archive and extraction pipeline
engram.memory_store
Save a memory directly
engram.memory_get
Fetch one memory by id
engram.memory_timeline
Show the history of one memory
engram.memory_search
Search memory files directly
engram.memory_correct_plan
Propose a correction to a stored memory
engram.memory_correct_apply
Apply an approved memory correction
engram.memory_feedback
Mark a recalled memory as relevant or not
engram.memory_promote
Move a memory to another lifecycle state
engram.memory_profile
Read the accumulated user profile
engram.memory_entities_list
List tracked people, projects and other entities
engram.entity_get
Fetch one entity by name
engram.memory_questions
List open questions gathered from conversations
engram.suggestion_submit
Queue a proposed memory for review
engram.review_queue_list
Show the current review queue
engram.review_list
List pending review items
engram.review_resolve
Accept or reject a review item
engram.set_coding_context
Tie a session to a project or branch so recall uses that scope
engram.lcm_search
Full-text search over archived conversation transcripts
engram.lcm_compaction_flush
Flush pending archive work before a client compacts its context
engram.lcm_compaction_record
Log a context compaction with token counts before and after
engram.extraction_force_flush
Drain a session's extraction buffer now
engram.day_summary
Build an end-of-day summary from today's memories
engram.briefing
Produce a briefing of active entities and open commitments, when enabled
engram.context_checkpoint
Save a session context checkpoint to disk
engram.action_confidence
Advise whether to ask, draft, act or refuse; read-only
engram.contradiction_scan_run
Scan the store for memories that contradict each other
engram.memory_governance_run
Run a governance pass over the store
engram.dreams_run
Run background consolidation of memories
engram.dreams_status
Show the state of background consolidation
engram.identity_anchor_get
Read the identity continuity anchor document
engram.identity_anchor_update
Merge new sections into the identity anchor
engram.continuity_incident_open
Open a continuity incident record
engram.continuity_incident_close
Close a continuity incident
engram.continuity_incident_list
List continuity incidents by state
engram.continuity_audit_generate
Write a weekly or monthly continuity audit report
engram.work_task
Create, update, move or delete tasks on the work board
engram.work_project
Manage work-board projects and link tasks to them
engram.work_board
Export or import a work-board snapshot
engram.peer_list
List known peers
engram.peer_set
Create or update a peer record
engram.peer_delete
Delete a peer record
engram.shared_context_write_output
Write an agent's output into shared context for other agents
engram.graph_snapshot
Return a snapshot of the entity graph
engram.memory_chat
Answer questions from the memory store, when chat is enabled
engram.profiling_report
Report recall and extraction timings, when profiling is on

Similar servers