Mnemosyne OS
This MCP server lets an AI agent use local Mnemosyne OS memory and productivity surfaces: semantic vault search, RAG answers, permanent memory writes, project/resonance tracking, git and dream context, cross-agent awareness, cockpit status, Pheme radar, To-dos, and calendar management.
Read governance and memory model: re-read server instructions covering vault protection, spine types, and rules for working with someone else’s memory.
Search vault memories: run semantic/BM25 hybrid queries with vault, spine-type, limit, and snippet-size controls.
Ask grounded questions: get RAG-style prose answers plus source memories from the vault.
Discover vaults: list available vault tokens, names, memory counts, and reachability.
Save memories permanently: ingest decisions, architecture notes, debug findings, sessions, features, and other spine-typed memories.
Track project resonances: list resonances, read where one left off, and update phase/position notes.
Read git context: fetch recent commits from the configured repository.
Inspect dream bridges: view idle-time connections the Dream State engine found between memories.
Audit spine classification: list memory-to-spine assignments, counts, and taxonomy.
See other coding agents: list local agent sessions, detect same-worktree/branch collisions, and see recently written files using metadata only.
Update the cockpit: publish a status card as working/waiting/done/blocked/closed, add details, route to a desktop, and receive user messages left on the card.
Manage Pheme radar: add/remove watched subreddits, Hacker News queries, or topics; read scanned threads and tiers.
Manage To-do backlog: add tasks, list tasks/lists, edit/complete/move/remove tasks, and create/rename/recolor/remove lists.
Manage calendar: add, list, update, and remove appointments, including recurrence, reminders, all-day events, and time windows.
Allows agents to view fresh threads from the subreddits a person watches via Mnemosyne's Pheme radar, including topic scores and tiers, and to maintain the watch list (add or remove subreddits, Hacker News queries, and expertise topics).
@mnemosyne_os/mcp: MCP server for Mnemosyne OS. Gives AI agents access to vault memory, resonances, git context, and to what the other coding agents on this machine are doing.
Product mnemosyne-os.io · Company, press and labs mnemosyne-os.com · Documentation docs.mnemosyne-os.io
@mnemosyne_os/mcp
Give Claude, Cursor, Hermes Agent, Copilot, and any MCP-compatible agent access to your local Mnemosyne OS memory vault. Code, decisions, architecture notes, git history, semantically queryable. The vaults stay on your machine, and this server opens exactly one socket:
127.0.0.1:7799.
🍳 In a hurry? RECIPES.md gives your coding agent a persistent memory in one copy-paste block, for Claude Code, Cursor, Claude Desktop and the TypeScript SDK.
What this is
@mnemosyne_os/mcp is a Model Context Protocol server that
turns your local Mnemosyne OS install into a
queryable memory layer for any AI agent that speaks MCP.
Once configured, your agent can:
Query code, architecture, decisions and git history with real semantic ranking (Vertex, e5-base or nomic).
Persist new decisions, sessions or insights, so future agents can recover them.
Resume a project exactly where you left off, through Resonance positions.
Filter results by spineType:
ARCHITECTURE,GIT,SOURCE_CODE,BUGFIXand the rest.
The MCP itself opens exactly one socket: 127.0.0.1:7799. It sends nothing anywhere else and keeps no state. Your claude.ai conversation sees only the chronicles you allow. What Mnemosyne OS does behind that socket follows the route you configured.
mnemosyne_memory_ask runs whichever model you picked, local or cloud.
Related MCP server: auxly-memory-cli
Requirements
Node.js ≥ 18 is the only hard requirement.
The memory tools additionally need Mnemosyne OS Infinity Edition running. It owns your vaults and exposes the WebSocket gateway on
ws://127.0.0.1:7799. It is a desktop application, and it is where your content lives.
The three agent-awareness tools need neither: mnemosyne_agent_list,
mnemosyne_agent_collisions and mnemosyne_agent_files. They read transcript
files your coding-agent harness already writes to disk, so they answer with the
app closed, with no vault, and without spending a token. They read every
harness they find, so a Claude Code session can see an Antigravity session
running in the same repository.
The MCP is a thin bridge. It does not store anything itself. All data lives in Mnemosyne OS Infinity (
%APPDATA%\@mnemosyne-workspace\infinity-edition\vaults\*.dbon Windows,~/Library/Application Support/...on macOS).
Getting your code, commits and docs in
Three different routes, and only one of them ingests anything. Knowing which is which saves you looking for a feature that is not where you expect it.
Your files: source, architecture notes, decision records. You declare a folder, the app watches it, and what lands there is ingested into the vault you chose. Nothing is uploaded and nothing is scanned that you did not name. This is the step people miss: installing the app gives you empty vaults, and declaring the folder is what fills them. See Getting started and DocWatch. The full walkthrough, including why there is an application behind this server at all, is Get your repository into memory.
Your commits. mnemosyne_git_log reads the repository the app is
configured to read, at the moment you call it. Nothing is ingested and nothing
is stored, so history is never stale and never doubled.
What your agents did. mnemosyne_agent_list, mnemosyne_agent_collisions
and mnemosyne_agent_files read the transcript files your harness already
writes. No app, no vault, no token. Those three work the minute this server is
installed, which is why they are the ones to try first.
⚠️ Without the app running, everything else refuses and says so. The refusal
names what it checked: whether ~/.mnemosyne exists tells it whether the app
has ever run on this machine, and it says "install it" and "start it" as two
different sentences, because they are two different problems.
Install, in 30 seconds
Claude Desktop, one click
Download Mnemosyne-OS-MCP-2.1.3.mcpb (4.1 MB), then open Claude Desktop → Settings → Extensions and drop the file into that panel. That is the whole install. The 25 tools appear straight away, and the same panel offers the three optional settings: default vault, other vaults, and the port the desktop application listens on.
The bundle rides on the application's current release,
v1.5.1-infinity,
because this package has no release of its own. The file is named after this
package version, not after the application one in the tag. Earlier bundles stay attached
to v1.4.5-infinity, so a link someone saved keeps working.
Two things worth knowing before you do it:
Claude Desktop shows a red "unverified developer" notice first. Every unsigned bundle does. This one is built from the repository linked at the top of this file, by
packages/mcp/scripts/build-mcpb.mjs.Double-clicking the file does nothing if your Claude Desktop came from the Microsoft Store: a Store app does not register the
.mcpbextension with Windows. Drop it into the Extensions panel instead.
Claude Desktop, config file
If you would rather not install an extension, or you are on a build that has no Extensions panel:
Open Claude Desktop → Settings → Developer → Edit config (or edit claude_desktop_config.json directly):
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Add:
{
"mcpServers": {
"mnemosyne": {
"command": "npx",
"args": ["-y", "@mnemosyne_os/mcp"],
"env": {
"MNEMO_DEFAULT_VAULT": "DEV",
"MNEMO_VAULTS": "DEV,PERSONAL,SOCIAL"
}
}
}
}Fully quit and relaunch Claude Desktop (close from the tray icon, not just the window). The mnemosyne server should show up under Settings → Developer → Local MCP Servers with the running badge.
Claude Code
Add to .mcp.json at the root of your project:
{
"mcpServers": {
"mnemosyne": {
"command": "npx",
"args": ["-y", "@mnemosyne_os/mcp"],
"env": {
"MNEMO_DEFAULT_VAULT": "DEV",
"MNEMO_VAULTS": "DEV,PERSONAL,SOCIAL"
}
}
}
}Reload the Claude Code session.
Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"mnemosyne": {
"command": "npx",
"args": ["-y", "@mnemosyne_os/mcp"],
"env": {
"MNEMO_DEFAULT_VAULT": "DEV",
"MNEMO_VAULTS": "DEV,PERSONAL,SOCIAL"
}
}
}
}Hermes Agent
Hermes Agent from Nous Research ships with MCP support, so there is no extra install step.
Add to ~/.hermes/config.yaml:
mcp_servers:
mnemosyne:
command: "npx"
args: ["-y", "@mnemosyne_os/mcp"]
env:
MNEMO_DEFAULT_VAULT: "DEV"
MNEMO_VAULTS: "DEV,NOTES"Restart Hermes. Your agent now has a sovereign long-term memory it can query semantically, and everything stays on your machine, which is exactly the deal Hermes promises you.
Recommended for autonomous agents: grant read scopes narrowly, to the
vaults the task needs and no others. Point MNEMO_DEFAULT_VAULT at a vault
dedicated to agent work rather than at your personal notes.
The mnemosyne-memory skill is a
portable agentskills.io-standard skill that teaches
any agent the governance rules: discover vaults first, respect protection
levels, ingest with provenance, read before you write.
Any other MCP client
npx -y @mnemosyne_os/mcpThe MCP speaks standard JSON-RPC over stdio.
Configure your vaults
In Mnemosyne OS Infinity you create vaults, and watched folders feed them.
Each vault is stored in a folder of its own, and its token is that folder's name
in uppercase. The app also routes three reserved names: DEV, PERSONAL and
SOCIAL. DEV reaches whichever vault mounted first. Two env vars tell
the MCP which vaults your agent may reach:
Env var | Purpose | When unset |
| Vault used when the agent does not name one. It is always reachable. | The first vault of |
| Comma-separated list of the vaults your agent may reach. |
|
Once you set MNEMO_VAULTS, it is the whole list. Your agent reaches those
vaults and the default vault, and nothing else. Add DEV, PERSONAL or
SOCIAL to the list if your agent needs them. Up to 2.1.2, these three names
stayed reachable whatever the list said.
Examples
A developer whose Infinity tracks ~/Documents/INFINITY/code-projects/:
"env": {
"MNEMO_DEFAULT_VAULT": "CODE_PROJECTS",
"MNEMO_VAULTS": "CODE_PROJECTS,NOTES,RESEARCH"
}A researcher who keeps everything in ~/Documents/INFINITY/papers/:
"env": {
"MNEMO_DEFAULT_VAULT": "PAPERS",
"MNEMO_VAULTS": "PAPERS,REFS,IDEAS"
}If your agent asks for a vault outside the list, the server refuses it with
UNREACHABLE_VAULTand names the vaults it can reach. Add the vault name to the list and restart your MCP client.
Optional: let your agent render a voice
Mnemosyne OS ships local, offline text-to-speech engines that can clone a voice from a short reference clip. With one env var, your agent gets three extra tools that turn a written script into a WAV file on disk. They are made for voice-overs: TikTok, YouTube, podcast, narration.
"env": {
"MNEMO_VOICE": "1"
}Tool | What it does |
| List the local engines, installed or not, and the reference voices available for cloning. Call it first. |
| Render a script to a WAV. Long scripts are split at sentence boundaries and re-assembled into one file, with nothing truncated. It returns a job: the tool waits, then hands back a job id if the render is still going. |
| Poll or cancel a render. It returns the file path once the render is done. |
Off by default, on purpose. Turning it on makes Mnemosyne OS ask you to
authorize voice:speak. That permission is never auto-granted, not even to
first-party apps like this one, because its subject is your identity rather than
your data. You approve it once, in a dialog that says what it means.
Two limits. The agent never creates or records a voice; you do that in the app, under Settings → Voice. A clone name that does not exist is refused rather than quietly replaced, because a voice-over in the wrong voice sounds perfect and is worthless.
Requirements: the Mnemosyne OS app must be running, since the engines are Python sidecars inside it and the headless daemon cannot speak. A local voice must be installed, and local neural TTS is a licensed feature.
Verify it works
Open a new conversation with your agent and ask, for example:
Use mnemosyne_memory_query to search my vault for "authentication flow", spine_type_filter ARCHITECTURE only.
You should see a structured response with 5–10 chronicles, each tagged with its spineType, score, source, and a content snippet. If the agent says it cannot connect, see Troubleshooting.
The 29 tools your agent gets
Twenty-six of the 29 are in the table below. The table also lists
mnemosyne_memory_forget, the erasure tool, which is not one of the 29: it
appears only when you set MNEMO_FORGET=1. The three that read the other agents
on this machine have their own section further down. Setting MNEMO_VOICE=1
adds the three voice tools documented further up, and MNEMO_FORGET=1 adds the
erasure tool, for 33 in all.
Eight of them read or write the To-do backlog and the calendar. All eight carry the same requirement:
Works with the app closed on a dev install (the headless daemon reads the file); an npm install has no daemon and needs the app running.
Tool | What it does |
| Re-read the briefing the agent was handed on connect: the governance tenet, the vault protection model, the spine model, and the rules for an agent working on someone else's memory. Call it if your client did not surface the server instructions. |
| Semantic search. It returns raw chronicles, ranked by vector similarity fused with a local BM25 channel and weighted by spineType. Supports |
| Ask a question, get a synthesized prose answer grounded in the vault, plus its source chronicles. Use it for why, who and how questions that span many memories. It runs the full RAG pipeline, which also makes it the better retriever, and it is slower than |
| List the vaults Mnemosyne OS exposes, with each one's token, name, chronicle count and the description written in its panel in the app. Call it to discover valid |
| Erase one chronicle for good, by the id |
| Persist a memory. Pick a |
| Put tasks into the user's To-do backlog, in order and optionally under named steps. Name the |
| Your own status card on the user's canvas: |
| Add a subreddit, a Hacker News query or a topic to the user's Pheme radar, or take one off. The lists are theirs. An operation that would empty one is refused, each one reports its own outcome, and the user gets a receipt in Pheme naming the agent and what changed. It posts nowhere. Needs the app running, though Pheme itself can be closed. Scope |
| Read what the Pheme radar last found: fresh threads in the watched subreddits and Hacker News queries, with a topic score and, after the user's Mnemosyne OS pass, a tier. The answer leads with when the scan ran, because it is only as fresh as the last scan the user ran. "No radar yet" is said in words rather than returned as an empty list. Draft the reply; the user posts it. Needs the app running. Scope |
| Ask the user to review a video or image you made. It shows in the review panel of Mnemosyne OS and, once they paired the review bot, on their phone (Telegram) with Approve / Change / Reject buttons. The file must be inside |
| Wait for the user's answers to that review, from the app or the phone: approve, changes, reject or a plain comment (frame notes can come alone), with the text (a voice note arrives transcribed) and the second of the video it points at. Returns every answer since |
| Read a review as it stands: state, every answer, publishing state. Does not wait. Needs the app running. Scope |
| Send one local file (video, photo, audio, pdf) to the user's Telegram home chat — the Hermes bot channel they already configured. Absolute path required; optional caption. Recipient is never chosen by the agent. Caps: 48 MB, allow-listed types. Needs the app running. Scope |
| Put appointments or deadlines into the user's calendar. |
| Read the backlog back: the lists, and every task with the id you need to change it. Call it before |
| Change tasks: |
| Manage the lists themselves: |
| Read the calendar back: appointments in a time window, each with the id the two tools below require. A repeating event appears once, with its cadence and its next occurrence. An event with nothing left to happen says so rather than showing its original start as a future date. Scope |
| Change an appointment: move it, rename it, add or drop a reminder, start or stop it repeating. A field left out is left alone, and |
| Remove appointments, by id only. The calendar has no archive: unlike a To-do task, a removed appointment is gone, so the answer names each one by title and start time for the user to check. A repeating appointment goes as a whole series, since the calendar cannot cancel one occurrence. Scope |
| List the resonances recorded in the default vault. A resonance is a workspace that tracks one ongoing project. |
| Read where one resonance was left: its phase, and the note written when the work stopped. |
| Record where you left off. It is stored as a |
| Recent commits from the git repository Mnemosyne OS is configured to read (requires |
| How the memories were actually classified: chronicle-to-spine assignments for a vault, newest first, with whole-vault counts per spine and, on request, the taxonomy tree. It is also where the taxon ids come from, so read it instead of guessing a |
| The links the Dream State engine found on its own while the machine sat idle, each with its score and an excerpt of both sides, sometimes across two vaults. An empty list is the normal answer and means it has produced none yet, never that the query failed. |
Seeing the other agents on this machine
These three read the transcripts coding-agent harnesses already write to disk. No app, no vault, no tokens. That is what makes "check before you commit" cheap enough to actually do.
Tool | What it does |
| Are two agent sessions live on the same project and branch right now? Call it before |
| The sessions on this machine: conversation name, project, branch, model, last tool, file count, and when a line was last written. |
| Which files other sessions recently wrote, newest first, with the session each came from. Paths and timestamps only. |
No configuration needed. Every shipped connector whose folder exists on this machine is read, and each answer names the folders it actually opened. Override only if your agent writes somewhere unusual:
"env": {
// Per harness. Absent means "where that agent writes by default".
"MNEMO_AGENT_SESSIONS": "C:/Users/you/.claude/projects",
"MNEMO_AGENT_SESSIONS_ANTIGRAVITY": "…",
"MNEMO_AGENT_SESSIONS_ANTIGRAVITY_IDE": "…",
// OpenClaw has no usual folder: read only when you name the folder holding
// your `openclaw sessions export-trajectory` exports.
"MNEMO_AGENT_SESSIONS_OPENCLAW": "…",
// Restrict to a subset. Absent means all of them.
"MNEMO_AGENT_SOURCES": "claude-code,antigravity"
}One line you do want, though: ← you. A stdio MCP server is launched with the
env its config declares, so the caller's own session id does not arrive on its
own. Without it the report cannot mark which line is yours, and it counts one
session too many, which is the exact miscount these tools exist to prevent.
Pass it through:
"env": {
"CLAUDE_CODE_SESSION_ID": "${CLAUDE_CODE_SESSION_ID}"
}If you skip it, or if the variable is not set where Claude Code runs (it then
arrives as the literal ${CLAUDE_CODE_SESSION_ID}), the answer says so in one
sentence and tells you which of the two happened. It never guesses: an id it
cannot place stays neutral rather than becoming "none of these is you", because
that would add a phantom session to every warning.
Four limits these tools hold to. A tool that overstates its evidence is worse than no tool.
They never say an agent is "working". A crashed agent and an idle one fall equally silent. They report when a line was last seen, and you conclude.
They never return content. No message text, no file contents, no tool output. A transcript holds everything that passed in front of an agent for a month. What crosses is metadata.
A clean answer is not proof the machine is quiet. It covers the folders it names, and it says which known harnesses were not present. A session whose transcripts live elsewhere does not appear at all.
A session it cannot place is reported rather than dropped. Some harnesses record no working directory at all, Antigravity among them, and 91 of 288 sessions measured on one machine carry neither a project nor a branch. Grouping those together would announce collisions that nothing supports, so they are listed separately with the reason.
A file is marked recorded when the harness logged a file-writing tool call, and from a command when a redirection was read out of a shell command that may never have completed. Those are different kinds of fact and are never merged.
Keep the status card honest, without the model remembering
mnemosyne_cockpit_update puts your session on the user's canvas, but only
when the model decides to call it. A session that forgets leaves a card saying
"working" long after it stopped, and a message the human typed on that card
waits for a call that may never come.
The package ships a Claude Code hook that closes both gaps. Install the package so the binary is on your path, then wire it in your own settings. The package never touches them.
npm install -g @mnemosyne_os/mcp// .claude/settings.json, or ~/.claude/settings.json for every project
{
"hooks": {
"SessionStart": [{ "hooks": [{ "type": "command", "command": "mnemosyne-cockpit-hook" }] }],
"UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "mnemosyne-cockpit-hook" }] }],
"Notification": [{ "hooks": [{ "type": "command", "command": "mnemosyne-cockpit-hook" }] }],
"Stop": [{ "hooks": [{ "type": "command", "command": "mnemosyne-cockpit-hook" }] }],
"SessionEnd": [{ "hooks": [{ "type": "command", "command": "mnemosyne-cockpit-hook" }] }]
}
}The event name arrives on stdin, so one command serves all five. What each does:
Event | The card | Your mail |
| appears, working | delivered as context |
| working, status is your prompt's first line | delivered as context |
| waiting, and the question the harness is putting to you | — |
| done, status is the answer's first line | if mail is waiting, the stop is refused and the mail is the reason, so the session reads it instead of ending |
| goes away | — |
Nothing clears waiting on its own, because answering a question is not a prompt. The card holds it until the turn ends or you type something. The host says how long it has been unconfirmed rather than quietly moving on.
Do not reach for npx here, even though the server line above uses it.
npx --package=@mnemosyne_os/mcp mnemosyne-cockpit-hook does work, and it cost
2.1 to 3.7 seconds a run on the machine where the installed binary cost 0.4 to
0.7. UserPromptSubmit fires on every message you send, so that difference is
the whole feature.
It cannot cost you a session. Every failure path writes one line to stderr and exits 0. Measured on Windows through the installed binary: 0.40 to 0.58 s with Mnemosyne OS running, 0.47 to 0.66 s with it closed. Most of that is Node starting and the shim npm writes on Windows, since a closed local port refuses at once. A refused stop cannot loop either: the mail is marked delivered when it is handed over, so the next stop finds none and ends normally.
Claude Code only. The event names and the refusal format are Claude Code's hook contract. Cursor and Antigravity have their own and will not fire this one. The three agent-awareness tools above work with every harness; this hook does not.
mnemosyne_memory_query, full parameter reference
{
query: string; // required; be specific, longer is fine
limit?: number; // default 10, capped at 50 server-side
vault?: string; // default: $MNEMO_DEFAULT_VAULT
spine_type_filter?: string[]; // e.g. ["ARCHITECTURE"], ["GIT","BUGFIX"]
max_content_chars?: number; // default 600; trims each result snippet
}The MCP automatically opts into the semantic ranking branch (Vertex 768D / e5-base) and applies an exact-term boost for identifier-like tokens in your query (codenames, hyphenated tokens, version numbers). The result is a list of chronicles ranked by true semantic relevance, not recency.
The cognitive loop, a recommended pattern
At session start
agent → mnemosyne_position_get("my-project")
← phase, last position, what was being worked on
During the session
agent → mnemosyne_memory_query("auth refactor decisions",
spine_type_filter=["ARCHITECTURE","DECISION"])
← top 10 chronicles, ranked by relevance
When making a decision worth keeping
agent → mnemosyne_memory_ingest(
content="Chose JWT over session cookies because we need stateless
workers; trade-off: token revocation needs a denylist.",
spine_type="DECISION")
At session end
agent → mnemosyne_position_update("my-project",
position="JWT migration shipped, next:
denylist via Redis",
phase="Phase 12")
Next session
agent → mnemosyne_position_get("my-project")
← Resumes from Phase 12 with full contextTroubleshooting
"Cannot connect to ws://127.0.0.1:7799"
Mnemosyne OS Infinity is not running. Launch it. The MCP retries on every tool call, so once Infinity is up, the next query will succeed.
Agent gets UNREACHABLE_VAULT or SCOPE_DENIED on a vault
The vault is not in MNEMO_VAULTS. Edit your MCP client config, add the name
(uppercased), restart the client. The list is the whole grant, so keep every
vault the agent already uses.
Which vaults can my agent see?
Ask the agent to run mnemosyne_vault_list. It lists every vault
Mnemosyne OS exposes, with its id, name and chronicle count, and it flags the
ones outside your MNEMO_VAULTS config. Those are refused until you
add them.
Tool result is too large for my context window
Use max_content_chars to shrink each snippet. The default is 600. Drop it to
200 for browsing, or raise it to 4000 to read a full file. You can also filter
with spine_type_filter to drop noisy types.
My new chronicles do not appear
DocWatch ingests on file save with a small delay. Check the spine: if you wrote a markdown with spine: IDEATIONAL frontmatter, it lands as IDEATIONAL. Query with spine_type_filter=["IDEATIONAL"] to
surface it.
Privacy Policy
This server is a bridge, not a service. It has no backend of its own, no account and no
hosted endpoint: it opens a WebSocket to 127.0.0.1:7799 on your own machine and relays to
the Mnemosyne OS desktop application running there.
What it collects. Nothing. No telemetry, no usage tracking, no analytics, no crash reporting. It holds no identifier for you and never asks for one.
What it stores. Nothing of its own, since it is stateless between calls. Your chronicles live in vaults on your disk, written and managed by the desktop application. The agent-awareness tools read your coding agents' transcript files locally and return metadata only (paths, counts, timestamps), never the text of a message or the contents of a file, and they open no network connection at all.
Who else sees it. Two parties, both of them your choice, and nobody beyond them:
Your MCP client. Whatever a tool returns goes to the AI client you connected, Claude or Cursor or another, and travels wherever that client sends it. That is what the server is for. It also means a chronicle you let an agent read leaves your machine when your client is a cloud model. Narrow
MNEMO_VAULTSto the domains a given agent should reach. A vault left out is refused, including vaults that exist on the machine.The desktop application, for whatever you configured there yourself: a cloud model, a cloud embedder. Those calls are the application's, made with your own keys. This server neither makes them nor sees them.
The server itself shares with no one, sells nothing and rents nothing.
How long it is kept. By this server, not at all. In the application, for as long as you
keep it: memory is deleted where it is made, in the app and by you. Note that
mnemosyne_memory_ingest writes a permanent chronicle. It is the one call
here the agent cannot undo afterwards.
Contact. Privacy questions go to dev@mnemosyne-os.com, XPACEGEMS LLC, 2932 NW 72 Ave, Miami, FL 33122, USA. Full policy: https://mnemosyne-os.io/confidentialite. Bugs and security reports: https://github.com/Mnemosyne-OS/Mnemosyne-Neural-OS/issues.
The second server: what the app does for your agent
This package is the memory. The desktop app ships a second MCP server, Mnemosyne OS actions, for what the OS can do. It is not on npm: the app carries it and keeps it at its own version.
Tool | What it does |
| Looks up an action the OS can perform, from the person's request in their own words. The answer gives each matching action with its exact arguments, or says that none exists. |
| Runs one action found with |
| Draws a picture, billed per picture on the person's Mnemosyne credits. |
| Makes a short video clip from a first and a last picture, billed per second on the same credits. |
| Makes a video of the person's particle avatar saying the lines given, with a voice of Mnemosyne OS, on their computer. No credits. |
Connect it. In the app, open Settings › Agents › Connect my coding agent.
For Cursor and Antigravity, one click writes both servers into the agent's
config. For Claude Code, the panel prints the two claude mcp add lines to
copy. The same panel is on the first screen of the setup wizard.
What the person keeps. The first os_run opens a dialog inside the app,
and the person allows the catalog there. Pictures ask once, and videos ask once
more on their own, because both spend the person's credits. Every action needs the app running.
The @mnemosyne_os packages
All of them live under one npm organization: npmjs.com/org/mnemosyne_os
Package | What it is |
Build a Layer 2 app: a Node or browser process talking to the local WebSocket surface | |
| |
Build an in-app cartridge: a sandboxed iframe widget rendered on the canvas | |
| MCP server: plug Claude, Cursor or any MCP agent into the vaults |
Skin the OS with JSON alone, no TypeScript | |
The shared types and Zod schemas. No business logic | |
Read what coding agents already write on disk: the connector format and the interpreter | |
Read a local AFFiNE workspace and render its documents to Markdown | |
CLI: scaffold, list chronicles, import and export | |
The name of the P2P layer to come. A placeholder today, not the library |
Where Mnemosyne OS lives
Published by XPACEGEMS LLC. Its official addresses:
Product site: https://mnemosyne-os.io
Organizations: https://mnemosyne-os.com
Documentation: https://docs.mnemosyne-os.io
Packages: https://www.npmjs.com/org/mnemosyne_os
MCP registry:
io.github.Mnemosyne-OS/mcpon https://registry.modelcontextprotocol.io
License
MIT © Tony Trochet / XPACEGEMS LLC
The OS your code talks to
Mnemosyne OS Infinity Edition · download · mnemosyne-os.io · mnemosyne-os.com
Available Tools
25 toolsmnemosyne_aboutARead-only
Re-read the server instructions: the governance tenet, the vault protection model (NORMAL and MAXIMUM, mixableWith, isolated sandbox vaults), the spine model, and the rules for an agent working on someone else's memory. Most clients show this text on connect. Call it if yours did not, or to read it again.
Inputs: no named parameters.
mnemosyne_agenda_addA
Put appointments or deadlines into the user's calendar, the Agenda widget on their canvas. Use it when a conversation names a date and time to remember: a meeting, a deadline, "add this to my calendar". The app routes the write through the widget's own store, so what you file is what the user sees. Works with the app closed on a dev install (the headless daemon reads the file); an npm install has no daemon and needs the app running. To read the calendar back, change or remove an appointment, see mnemosyne_agenda_list, mnemosyne_agenda_update and mnemosyne_agenda_remove.
Inputs: events (required).
mnemosyne_agenda_listARead-only
Read the user's calendar back: the appointments in a time window, each with the id you need to change or remove it. Call this before mnemosyne_agenda_update and mnemosyne_agenda_remove, which both name appointments by id. The calendar has no archive and a removal cannot be undone. A repeating event appears once, with its cadence and the date of its next occurrence. Times in the answer are the user's machine local time. Works with the app closed on a dev install (the headless daemon reads the file); an npm install has no daemon and needs the app running. Scope agenda:read.
Inputs: to, from, limit, include_past.
mnemosyne_agenda_removeADestructive
Remove appointments from the user's calendar. Read them with mnemosyne_agenda_list first and pass the ids. This tool matches by id only, because "remove my meetings on Thursday" is how an agent removes the wrong Thursday. There is no archive: unlike a To-do task, a removed appointment is gone, so the answer names each one it removed by title and start time for the user to check. A repeating appointment is removed as a whole series, since the calendar cannot cancel a single occurrence. Works with the app closed on a dev install (the headless daemon reads the file); an npm install has no daemon and needs the app running. Scope agenda:write.
Inputs: event_ids (required).
mnemosyne_agenda_updateADestructive
Change an appointment already in the user's calendar: move it, rename it, add or drop a reminder, start or stop it repeating. It names appointments by the id from mnemosyne_agenda_list, so call that first. A field you leave out is left alone, and passing null clears it. A start or end time that cannot be read refuses the change rather than leaving the old one quietly in place. A cadence outside daily, weekly, monthly and yearly is refused rather than turned into a one-off. Works with the app closed on a dev install (the headless daemon reads the file); an npm install has no daemon and needs the app running. Scope agenda:write.
Inputs: changes (required).
mnemosyne_agent_collisionsARead-only
Check whether two agent sessions are live in the same git working tree and branch right now, across every installed harness. Call it before git add -A, before a commit, and before a rebase: one working tree shares one git index, so a commit from one session picks up whatever the other has staged. It answers from transcript files on disk and needs neither Mnemosyne OS nor a token. Each recorded directory is resolved to its working tree first, because one cd into a subfolder would make two sessions in one repository look like two projects. A clean answer covers what is readable: a session whose transcripts live elsewhere does not appear at all, and sessions whose harness records no directory are listed separately as unplaceable.
Inputs: project.
mnemosyne_agent_filesARead-only
List the files other agent sessions wrote or edited recently, newest first, with the session each one came from. Paths and timestamps only. Each entry says how it is known. recorded means the harness logged a file-writing tool call. from a command means a redirection was read out of a shell command the session ran, which may never have completed. It spans every installed harness and names the agent each line came from. Use it to see what another session has already touched before you edit the same area.
Inputs: limit, project, contains.
mnemosyne_agent_listARead-only
List the other coding-agent sessions on this machine, read from the transcript files their harnesses already write to disk. Metadata only: conversation name, project, git branch, model, last tool, how many files were touched, and when a line was last written. It reads every harness installed here, not just your own, so you can see a session from a different agent working in your repository. Use it before you touch shared state. It reports when a line was last seen and you draw the conclusion: a crashed session and an idle one fall equally silent, so nothing here can tell you an agent is working. Works with the Mnemosyne OS app closed.
Inputs: limit, project, live_only.
mnemosyne_cockpit_updateA
Update your own status card on the user's canvas, the cockpit. Call it when you start a task ("working", with a short title and status), when you need the user ("waiting"), when you are stuck ("blocked"), and when you finish ("done"). "waiting" and "blocked" make the card pulse and the taskbar flash. Send "waiting" IN THE SAME TURN as the question you ask the user, right before you stop: the harness only knows to say "waiting" for a permission prompt, and a question asked in the chat is otherwise just the end of a turn — the user never sees that you are waiting for them. Your "waiting" survives the harness saying the turn ended. You declare the state; the app prints it next to the time since your last call, so keep calling at real milestones or the card goes quiet. The answer carries any message the user left on your card. Read it and act on it. Needs the app window open. This is a card, so nothing is stored in memory.
Inputs: state (required), title, detail, status, +3 more.
mnemosyne_dream_bridgesARead-only
List the connections the Dream State engine found between memories while the machine was idle. Each bridge links two memories, sometimes from different vaults, with a Dream Bridge Score, a raw cosine similarity, and a short excerpt of both sides. Use it to surface associations the memory made on its own, to audit whether they are insightful or noise, or to seed creative exploration. An empty list is normal and means the engine has not produced bridges yet. It runs on idle time, when the user enables it in Settings.
Inputs: limit, min_dbs, session_id, chronicle_id.
mnemosyne_git_logARead-only
Read recent commits from the git repository this Mnemosyne OS is configured to read. Read-only. Each commit carries an 8-character hash, the subject line, the author and the date, newest first. The path is set on the app side, so this cannot be pointed at another checkout, and it needs the monorepo:read scope. When either is missing the answer names what is missing, rather than returning an empty list that would read as "no commits". Use mnemosyne_memory_query for the reasoning behind a change.
Inputs: limit, since.
mnemosyne_memory_askARead-only
Ask a question and get a prose answer grounded in the vault, plus the memories it drew on. It runs the full local RAG pipeline: deeper retrieval, lexical fusion and a re-rank. That also makes it the better retriever, so reach for it whenever you need to find something, and read the Sources list even if you ignore the prose. It is at its best on why, who and how questions that span many memories. It takes up to about 30 seconds. The prose is a model rewording of the sources, so quote the sources instead, or fetch them with mnemosyne_memory_query. Check them before you trust the answer.
Inputs: question (required), vault.
mnemosyne_memory_ingestA
Write a memory into a vault: a decision, an architecture note, a debug finding, a session summary. It is stored permanently and indexed for every future agent to retrieve. Use it at the end of a meaningful work session, or whenever a decision is reached that someone will want to recall later.
Inputs: content (required), vault, spine_type.
mnemosyne_memory_queryARead-only
Search a vault and get the matching memories back word for word: notes, code, decisions, session summaries, commit history. Nothing is rewritten, so use this when you need the source text itself, to quote it or to write documentation from it. Ranking is vector similarity fused with a local BM25 channel, weighted by spine type. To FIND something rather than quote it, prefer mnemosyne_memory_ask, even when you only want its sources. It retrieves deeper and re-ranks, so it catches rare literal terms this tool misses: proper nouns, identifiers, product names. The score is not a confidence value. A hit and a miss come back with similar numbers, so judge the text, not the number beside it.
Inputs: query (required), limit, vault, max_content_chars, +1 more.
mnemosyne_pheme_radarARead-only
Read what the user's Pheme radar last found: fresh threads in the subreddits and Hacker News queries they watch. Each thread carries a topic score, and a tier once they have run the Mnemosyne pass. The tier says how much substance they can bring to that thread. The answer leads with when the scan ran, because it is only as fresh as the last time they opened Pheme and pressed Scan. Use it to find threads to draft a reply for; the user posts it. "No radar" means no scan has been projected yet, so ask them to open Pheme and scan. Needs the app running, though Pheme itself can be closed.
Inputs: tier, limit.
mnemosyne_pheme_watchA
Add a subreddit, a Hacker News search query or a topic to the user's Pheme radar, or take one off. Pheme is their reputation cartridge: it finds fresh threads worth a genuine reply. The lists belong to them. An operation that would empty one is refused. Every operation reports its own outcome: done, already there, not there, refused. The user gets a receipt in Pheme naming this agent and what changed. Use it when a conversation finds a community worth watching. It scans nothing and posts nothing; the user posts. Needs the app running, though Pheme itself can be closed.
Inputs: ops (required).
mnemosyne_position_getARead-only
Read where one resonance was left: the phase, and the free-text note an agent or the cockpit wrote when it stopped. Read-only. It returns the resonance id, when it was saved, the spine type of the memory, and the whole note. An id nothing was ever saved under answers in plain words and points at mnemosyne_position_update, so a blank history and a failed call do not look alike. Call mnemosyne_resonance_list when you do not know the id.
Inputs: resonance_id (required).
mnemosyne_position_updateA
Record where you left off on a resonance: phase, current state, next steps. Call it at the end of a session. It is stored as a DECISION memory in the vault.
Inputs: phase (required), position (required), resonance_id (required).
mnemosyne_resonance_listARead-only
List the resonances recorded in the default vault. A resonance is a workspace that tracks one ongoing project. Each entry carries its id, its last phase, how many minutes ago it moved, and the id of the memory behind it. Read-only. There is no status filter, so you get every resonance the scan matched in one vault, from at most 30 candidates. An empty result is written in words and means no resonance has been recorded yet. Read one in full with mnemosyne_position_get, or write a new one with mnemosyne_position_update.
Inputs: no named parameters.
mnemosyne_spine_assignmentsARead-only
See how Mnemosyne classified its memories. It returns the memory-to-spine assignments for one vault, newest first, and the per-spine counts for the whole vault. Use it to check whether memories landed in the right spines, to read a vault's composition at a glance, or to find the taxon ids to pass as spine_type_filter in mnemosyne_memory_query. Set include_taxonomy to also get the global spine tree.
Inputs: limit, vault, offset, spine_type, +1 more.
mnemosyne_todo_addA
Put tasks into the user's To-do backlog, the To-do widget on their canvas, in order and optionally under named steps. Use it when a conversation has settled what to do. Name the destination list in "list": call once without it to get the existing lists back on a LIST_NOT_FOUND answer, or pass create_list: true to make a new one. Always name a list, and file one plan into ONE list, its steps as "group". Write each text as a short title a person can say aloud (about 80 characters); the detail goes in "description". A rule, a trap or a decision is not something to do: file it with kind "note", so it stays as context and counts in no total. On a recent app your tasks wait in « To triage » until the human keeps them, and each gets a number (#42) shown by mnemosyne_todo_list. The app routes the write through the widget's own store, so what you file is what the user sees. Works with the app closed on a dev install (the headless daemon reads the file); an npm install has no daemon and needs the app running. To read the backlog back or change what is in it, see mnemosyne_todo_list, mnemosyne_todo_update and mnemosyne_todo_categories.
Inputs: tasks (required), list, color, create_list.
mnemosyne_todo_categoriesARead-only
Manage the lists of the user's To-do backlog: create one, rename or recolour one, remove an empty one. It is separate from mnemosyne_todo_update because these change the shape of a workspace rather than the work in it. Two refusals are worth knowing before you call. A list that still holds tasks is never removed, and you are told how many are in the way: move them first, since the app will not pick a destination on someone's behalf. The three original lists can be renamed, never removed, because their contents are what make the file readable. Works with the app closed on a dev install (the headless daemon reads the file); an npm install has no daemon and needs the app running. Scope todo:write.
Inputs: ops (required).
mnemosyne_todo_listARead-only
Read the user's To-do backlog back: the lists that exist and the tasks in them, each with the id (and the short number, #42) you need to change it, its status, priority, whether it is a note or waits in triage, and the names of its attached files. Call this before mnemosyne_todo_update, which names tasks by id or number. A phrase like "delete the task about the invoice" reads perfectly and can still match the wrong task. This is also the way to answer "what is on my plate", or to check whether something is already filed before you add a duplicate. Works with the app closed on a dev install (the headless daemon reads the file); an npm install has no daemon and needs the app running. Scope todo:read.
Inputs: list, limit, include_done, include_paths.
mnemosyne_todo_updateADestructive
Change the user's To-do backlog: edit a task, tick it off, move it to another list, or take it out. Every operation names a task by the id from mnemosyne_todo_list, so call that first. Removing a task archives it by default, and it can be restored. Pass permanent: true only when the user asked for it to be deleted outright. The whole batch is applied in order as one save, and each operation reports its own outcome, so a stale id does not sink the ones around it. Works with the app closed on a dev install (the headless daemon reads the file); an npm install has no daemon and needs the app running. Scope todo:write.
Inputs: ops (required).
mnemosyne_vault_listARead-only
List the memory vaults this Mnemosyne OS exposes, each with its token, display name, memory count and, when the owner wrote one, a line on what it holds. Call it first when you are unsure which vault to work against, or when the user names a store you have not seen. Pass the bold token as the vault argument of the other tools. The id line is a local path and the other tools do not take it. Vaults this server was not configured for are flagged here and refused until the user adds them.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 25 tools
Most tools target a clearly distinct resource and action, and the descriptions actively steer between the tricky pairs (memory_query vs memory_ask for quote-vs-find, resonance_list/position_get/position_update, agent_list vs agent_collisions vs agent_files). The residual overlap — memory_ask being recommended as the better retriever than memory_query, and three agent-inspection tools sharing transcript sources — means an agent still has to read carefully before choosing.
Nearly every tool follows a uniform mnemosyne_<domain>_<action> snake_case pattern (todo_add/todo_update/todo_list, agenda_add/agenda_update/agenda_remove, memory_query/ask/ingest). The few deviations are noun-only read tools (mnemosyne_about, mnemosyne_dream_bridges, mnemosyne_spine_assignments, mnemosyne_agent_collisions), which is readable but breaks the action suffix convention.
25 tools is at the heavy end for a single server, even though the surface spans roughly seven sub-domains (vault, memory, resonance, todo, agenda, agents, cockpit/pheme). Each cluster is internally tight, but the overall set is large enough that an agent must hold a lot of context to pick correctly.
Agenda has full CRUD, todo has list/add/update/category management, and memory has query/ask/ingest plus backbone inspection (spine, dream bridges, resonance tracking). The main gap is memory lifecycle: there is no update or delete for an ingested memory, and vaults can only be listed, not created or configured through tools — likely intentional given the append-only protection model, but still a dead end.
Maintenance
Related MCP Connectors
Shared memory for coding agents. Stop re-explaining your codebase every session.
Memory, reflection and safety for AI agents. Hosted or local, no vector database.
Persistent memory for AI agents. Hosted cloud connector or local Windows install.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceDescription: Persistent local memory for Claude, Cursor and Codex. 13 MCP tools, SQLite + FTS5 + Knowledge Graph. No cloud, no API keys. One command: npx @studiomeyer/local-memory-mcp.188 npm15MIT
- AlicenseNot gradedqualityBmaintenanceLocal-first, file-based memory layer for AI agents — one shared Markdown vault across Claude, Codex, Gemini, Cursor and any MCP client. Provides read/write memory tools with an audit trail, per-agent trust levels, and Git sync; no cloud and no lock-in.2MIT
- AlicenseNot gradedqualityBmaintenanceLocal-first, source-grounded memory for AI agents, with citations, bitemporal history, review-gated corrections, and MCP tools for search and recall.4Apache 2.0
- AlicenseNot gradedqualityBmaintenanceProvides a local-first, source-cited memory layer for AI agents, with MCP tools to search, read, explain sources, and propose/apply memory updates.84 npm13Apache 2.0