Dawnmere
This MCP server lets an AI app read, save, retire, and inspect access to Dawnmere's shared local memory.
recall: Search the user’s memory by meaning and keywords, optionally limiting results and selecting a memory section.remember: Save one self-contained fact, with optional kind and project; near-duplicates update older memories.forget: Retire a specific memory by the id shown in recall results; it can be restored later.access_status: Check what this app is allowed to see in the user’s memory and why something may be hidden.It works against Dawnmere’s local, app-shared memory store rather than a hosted account.
Click on "Deploy 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., "@Dawnmere remember that we chose Postgres for the billing service"
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.
curl -fsSL https://dawnmere.app/install | shNeeds: a Mac with Apple silicon, macOS 14 or later, 1 GB of free disk space, and Node.js 18 or later. Free, no account. Status: early beta (0.1.x). MIT client, source-available engine (FSL, becomes MIT after two years). Made by LF Labs.
What it does
You tell Claude Code or Codex something worth keeping ("remember that we deploy on Fridays"). Dawnmere saves it once, on your Mac. Ask the other one in similar words and it brings it up, and a new Cursor chat in that project shows it for the next day. Switch from Claude Code to Codex when you hit a limit, and Codex can recall that you deploy on Fridays and use pnpm.
flowchart LR
CC[Claude Code] <--> C
CX[Codex] <--> C
CU[Cursor] <--> C
C["dawnmere-connector<br/>(MCP, one per app)"] <--> D[("Dawnmere on your Mac<br/>one SQLite file, local search")]How each app saves and recalls:
App | Recalls | Saves |
Claude Code | into each prompt, and at the start of a session | on its own after a session goes quiet (if you chose a model), when you type "remember that ...", or when the model calls |
Codex | into each prompt | when you type "remember that ...", or when the model calls |
Cursor | at the start of each chat | when the model calls |
What you type ("remember that ...") reaches every app once the reply finishes (from Codex, at your next prompt there).
A note a model saves with remember on its own is found by searching, and reaches other apps' prompts only after you confirm it (lflabs-memory held).
Notes about your own health, family, money or legal matters stay personal.
Every app also gets four tools through MCP: recall, remember, forget and access_status.
Related MCP server: SharedMemory MCP Server
Why Dawnmere
One memory, not one per app. The apps share a single store, so a fact saved from Claude Code is the same fact Cursor recalls.
Stored only on your Mac. The memory is one SQLite file in your Library folder. Search runs on your Mac with small local models. There is no account, nothing is sent to LF Labs, and the tool collects no usage data.
Your own model does the reading. Automatic saving uses your Claude plan through Claude Code, or your own Anthropic API key. You can also run with no model at all.
Each app sees what you allow. Cursor starts with work notes only, and a new app sees work notes only. Claude Code's and Claude Desktop's memory tools, and any app that only names itself, see work notes only for now. Claude Code's automatic recall in your prompts still sees everything. Widening an app's access needs you at a Terminal: run
dawnmere access cursor everything, type the app's name back and click Allow in a macOS dialog. Asking for it in a chat only gets you that command.Saved text is screened. Text that looks like an API key or token is refused. An app's save that would run downloaded code, delete files, keep something from you or tries to override your assistant's instructions is refused. Notes an app saves on its own are kept for search, labelled, and reach other apps' prompts only after you confirm them (
lflabs-memory held). Recalled notes reach the app labelled "notes, not instructions".Setup can be undone. It asks before changing anything, backs up every file it touches, can show its plan with
--dry-run, anddawnmere uninstallputs the files back.
How it compares
Sharing one memory between coding agents is not new: claude-mem and Supermemory do it too, and both cover more agents than Dawnmere. The main difference is where the memory is kept. As each project's own docs describe it on 8 November 2026:
Where the memory is kept | Shared by Claude Code, Codex and Cursor | |
Dawnmere | one SQLite file on your Mac; search runs on your Mac | yes, by default; each app sees what you allow |
| supports all three and more; other agents' memories at session start are opt-in | |
hosted by default, or on your machine with | yes, plus OpenCode and others | |
hosted by Mem0, with a Mem0 account; nothing runs on your machine | yes, through that account | |
Built-in memory | CLAUDE.md and auto memory in your projects and home folder; AGENTS.md in your repos | CLAUDE.md and auto memory are Claude Code's own; AGENTS.md is read by Codex, Cursor and (when a repo has no CLAUDE.md) Claude Code, but holds instructions you write, not what the apps learn |
If you use only one agent, its built-in memory may be all you need. Dawnmere starts from it: setup can import the notes Claude Code already keeps.
Why not CLAUDE.md or AGENTS.md? Use them for rules you write on purpose; Dawnmere doesn't replace them. Dawnmere is for the things you say in passing and don't want to copy into three files. Recall is selective, so an app gets the memories that match the prompt, not the whole file every time.
Install
curl -fsSL https://dawnmere.app/install | shPrefer Homebrew?
brew install hadeva-dev/tap/dawnmere
dawnmere setupHomebrew brings Node.js with it. Update with brew upgrade hadeva-dev/tap/dawnmere, then run dawnmere setup
again. To remove it, run dawnmere uninstall before brew uninstall dawnmere.
That address serves install.sh from the latest
GitHub release. The script:
stops unless this is a Mac with Apple silicon and macOS 14 or later;
downloads uv 0.12.5 if you do not have a recent one, and the
dawnmereand engine packages from the release;checks those files against sha256 values written into the script, and installs nothing if one differs;
has uv install them with Python 3.12 and the engine's Python packages from PyPI, each pinned to an exact version and checked against its sha256;
adds one marked line to
~/.zprofileso new Terminal windows finddawnmere, unless they already do, and says so;starts
dawnmere setup, which asks before it changes anything.
Without a terminal to ask in (in a script, say), the installer installs the programs but does not run setup, so none
of your apps is changed. Afterwards run dawnmere setup in a Terminal window, or dawnmere setup --yes to take the
defaults.
Read the installer first
curl -fsSL https://dawnmere.app/install -o install.sh
less install.sh
sh install.shThe install.sh in this repo is the template: it refuses to run until a release fills in the version and checksums.
Your apps do not depend on your PATH: the hooks setup writes call Dawnmere by its full path. dawnmere uninstall
takes the installer's ~/.zprofile line out again.
Updating: dawnmere update, which checks each file against the release's SHA256SUMS. Running the install line
again also works.
What setup does
dawnmere setup first shows what it will do and asks you to continue. Then it asks what your AI apps should call
you, whether to use your Claude plan for background reading (or an Anthropic API key, kept in your Keychain), whether
Cursor may see your personal notes (no, unless you say yes), and whether to import the notes Claude Code already keeps
in ~/.claude/projects/*/memory (one macOS dialog asks whether to trust them as your own; if you don't, they are
kept for search until you confirm them).
Then it shows each step as it runs:
Step | What happens |
Claude Code | checks that |
Search models | downloads the search models (about 310 MB) and checks each file's size and sha256 |
Memory service | starts a background service (a LaunchAgent) that keeps search fast |
Your apps | connects Claude Code, Codex, Cursor and the other apps listed below, if they are installed |
Your notes | imports your Claude Code notes |
Self-check | saves a test memory, finds it the way Codex and Cursor would, then deletes it |
It ends with "Dawnmere is on." Every file setup changes is copied first, next to it
(<file>.lflabs-backup-<time>), and recorded so dawnmere uninstall can put it back. You can run setup again at any
time, for example to add a model later.
dawnmere setup --dry-runprints every change it would make and makes none.dawnmere setup --backend noneruns without a model: recall and remember work, automatic saving is off.
Your apps
Claude Code (2.1.301 or later): setup installs the
lflabs-memoryplugin from this repo, at the release you installed, which adds the tools and four hooks. If the plugin cannot be installed, it adds the same tools withclaude mcp addand the hooks to~/.claude/settings.json.Codex: adds
[mcp_servers.lflabs-memory]to~/.codex/config.tomland a prompt hook to~/.codex/hooks.json. Type/hooksonce in Codex to trust the hook.Cursor: adds
lflabs-memoryto~/.cursor/mcp.jsonand a session-start hook to~/.cursor/hooks.json, then restart Cursor. Cursor sees work notes only until you rundawnmere access cursor everything;dawnmere access cursor worktakes that back.Windsurf, Gemini CLI and VS Code (Copilot): when setup finds one, it adds
lflabs-memoryto its MCP file (~/.codeium/windsurf/mcp_config.json,~/.gemini/settings.json,~/Library/Application Support/Code/User/mcp.json); restart the app. They get the tools and no hook, so they recall when they call the tool, and they see work notes only.Claude Desktop and other MCP apps: setup does not connect them. For Claude Desktop, open
dawnmere-connector.mcpbfrom the latest release, or add this to~/Library/Application Support/Claude/claude_desktop_config.json:{ "mcpServers": { "lflabs-memory": { "command": "npx", "args": ["-y", "dawnmere-connector@0.1.1"] } } }The connector's README has the lines for Windsurf, Gemini CLI and others.
Commands
Command | What it does |
| connect your apps to one memory on this Mac |
| check that everything works, Node.js included, one line per check, with what to do about each problem |
| save your memory to |
| add the memories from an export file, skipping any already there; they count as app saves until you confirm them in one macOS dialog |
| show what an app may see, or change it: |
| install the newest release, checked against its checksums |
| remove everything setup added |
dawnmere doctor --report prints counts only (no memory text, names or paths), so it is safe to paste into an issue.
Forgetting
When you forget a memory yourself (type "forget memory 12" in Claude Code or Codex, or run lflabs-memory forget 12
in Terminal), its text, search entries, older versions and the facts drawn from it are deleted from the memory file
and its backups when the reply finishes (typed in Codex, at your next prompt there). It cannot be brought back. If background reading is on, the words are kept for up to 24 hours so the
background job can find other notes that mention them, then erased. When an app calls forget on its own, the memory
is hidden at once and deleted for good after 24 hours; until then lflabs-memory restore 12 brings it back. A
fingerprint with no words stays, so the same thing is not saved again from an old chat. dawnmere uninstall can also
delete the whole memory (it asks first).
Claude Code also keeps its own memory files (under ~/.claude/projects/); forgetting a note in Dawnmere doesn't
delete them. Remove the note there too, or ask Claude Code to forget it.
What leaves your Mac
Your memory is never uploaded to us, and nothing is sent to LF Labs. What leaves your Mac:
Background reading, if you chose a model, sends your own provider (your Claude plan through Claude Code, or the Anthropic API with your key) your Claude Code conversations, after every 6 of your messages and when a session goes quiet, with up to 8 related memories, which can include ones saved from Codex or Cursor. It also sends memories waiting to be filed, a prompt not in English typed in Claude Code or Codex (to search it in English), and for up to 24 hours the words of something you forgot. Once a week, and once soon after setup, it also sends memories that say nearly the same thing, memories that read as out of date and dated status notes, each with a few related memories, to merge, rewrite or retire them. At most 200 calls a day in all; with no model, none of this is sent.
GitHub: releases and updates, and, if GitHub's
ghis installed and logged in, the open pull requests of the repo you are working in.Downloads: uv, Python and the engine's Python packages (from GitHub and PyPI); the search models and the Claude Code plugin (from this repo's releases and repo); the connector (from npm: downloaded once, and npm is checked when an app starts it).
dawnmere updateasks GitHub for the newest release.Setup's check of your model: one short test call to Claude Code or the Anthropic API.
The install line: dawnmere.app counts each fetch of the install script (the tool that fetched it, the referring site and the country; no IP address is kept), then sends it on to GitHub. The site's own counting is on its privacy page.
Each app decides for itself what it sends to its own model, including what it recalls from memory.
Uninstall
dawnmere uninstallIt stops and removes the background service, takes memory out of Claude Code, Codex and Cursor (putting each file
back as it was, or removing only the Dawnmere entries if you changed the file since), removes the API key from your
Keychain, and removes the dawnmere and engine programs. It always asks before deleting your memory, which cannot be
brought back; say no, or use --keep-data, to keep it. It deletes the backups setup made. If a file could not be put
back as it was, its copy from before setup stays next to it and uninstall lists it. It also takes out the
~/.zprofile line the installer added. uv and the Python it downloaded stay on your Mac; uninstall prints how to
remove them.
Who makes it, and the LF Labs names
Dawnmere is made by LF Labs (the Hadeva-Dev organization on GitHub). Inside, the programs use the LF Labs name, so these are all Dawnmere:
What | Where |
your memory, settings and models |
|
the service's log |
|
the background service |
|
the MCP server id and Claude Code plugin |
|
the programs |
|
an Anthropic API key, if you gave one | your login Keychain, as "LF Labs Memory" |
Limits
Mac only, Apple silicon, macOS 14 or later. The engine's ONNX runtime has no Intel Mac build, and there is no Linux or Windows version.
One Mac. There is no sync between machines and no team memory.
Chinese and Japanese recall matches words. A note saved in Chinese or Japanese reaches your prompts when you ask with some of the same words. A question worded differently is often missed; your app can still search for it. With a model set up, a Chinese or Japanese question is also searched in English, one small model call each. A typed save needs "remember that ..." (in Chinese "记住:...", in Japanese "覚えておいて:..."). Other languages are found much less reliably for now.
Saving is strongest from Claude Code. In Codex, say "remember that ..."; in Cursor, the model has to call
remember. Codex's own session files are read only if you rundawnmere setup --codex-sessions.Screening is automatic and can miss things. Review what your apps save with
dawnmere export.Early beta. Releases are cut by hand and come often; read the release notes before updating.
License
The installer, the dawnmere command, the Claude Code plugin and the connector in this repo are MIT
(LICENSE). The engine is source-available under the
Functional Source License 1.1, MIT future license
(FSL-1.1-MIT): each version becomes MIT two years after its release. The search models keep their own licenses
(dawnmere doctor --licenses, and THIRD_PARTY.md).
Related
memory-bench is an open benchmark for assistant memory, built by the same people. It has a Dawnmere row measured on the released engine, with its leaks shown next to its recall; the maintainers' other row there is a related system, and the benchmark says so.
Found a bug? Open an issue with the output of
dawnmere doctor --report. Security problems go to SECURITY.md.
Available Tools
4 toolsaccess_statusWhat this app can seeARead-only
Use this when the user asks what this app can see in their memory, or why something is hidden from it.
Inputs: no named parameters.
forgetForget a memoryADestructiveIdempotent
Use this when a memory recall showed is wrong, out of date, or the user asks you to forget it. Retires that one memory; it can be restored later.
Inputs: id (required).
recallRecall from memoryARead-only
Use this when the answer may depend on something the user told you or another of their AI apps before: their preferences, projects, decisions or people. Searches the user's memory by meaning and keywords.
Inputs: query (required), k, section.
rememberSave to memoryA
Use this when the user tells you something worth knowing in future conversations, in any of their AI apps: who they are, a preference, a decision, a person, a pointer. One self-contained fact per call: a first line that sums it up, then the detail. A near-duplicate updates the older memory.
Inputs: content (required), kind, project.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 4 tools
Each tool maps to a clearly distinct operation in a memory lifecycle: search (recall), create/update (remember), retire (forget), and inspect visibility (access_status). There is no meaningful overlap; an agent can select the right tool from the user's intent alone.
recall, remember, and forget form a consistent single-verb pattern, but access_status breaks it as a verb_noun compound. Still readable and predictable enough that agents will not misroute based on naming.
Four tools is well-scoped for a focused memory service, with each tool earning its place in a compact read/write/delete/status surface. Nothing feels padded or missing at the count level.
Create, search, and delete are covered, and near-duplicate handling in remember effectively provides update. However, forget explicitly says memories can be restored later but no restore tool is exposed, and there is no explicit update operation outside near-duplicate detection—notable gaps for a memory lifecycle.
Maintenance
Related MCP Connectors
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Private persistent memory for Claude, ChatGPT & Gemini via MCP - semantic search, zero-code setup.
One memory for all your AI tools: Claude, ChatGPT, Cursor and any MCP client share the same notes.
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceGives Claude Desktop, Cursor, Cline, and other MCP-compatible AI tools persistent memory, enabling them to store and recall information seamlessly across sessions.9 npm1Apache 2.0- AlicenseAqualityDmaintenanceGives Claude Code, Claude Desktop, Cursor, VS Code Copilot, and other MCP-compatible tools persistent memory.1862 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI apps such as Claude, ChatGPT, Cursor, VS Code and Codex to share one searchable memory, so a fact told to one app can be recalled in another with the exact line, speaker and date it came from. Users sign in per app and can allow read-only or read-and-write access, saving, correcting or forgetting memories and disconnecting apps at any time.MIT
- AlicenseNot gradedqualityCmaintenanceGives every Claude surface (claude.ai, Desktop, mobile, Office add-ins, Claude Code) read and write access to the memories, transcripts and notes produced by Claude Code instances on all of your machines, with hybrid keyword and semantic search. Runs as a self-hosted remote MCP server with GitHub allowlist authentication, secret redaction and audit logging.MIT