Mnemosyne OS
This MCP server gives AI agents a semantic memory layer over Mnemosyne OS vaults plus awareness of other coding agents on the machine, along with personal productivity (to-do, calendar, cockpit) and optional voice/erasure tools.
Query and retrieve memories — semantic search over code, decisions, architecture, git history (
mnemosyne_memory_query,mnemosyne_memory_ask), with filters by spine type, vault, and snippet length.Persist new memories — ingest decisions, architecture notes, bugfixes, sessions, etc., permanently indexed for future retrieval (
mnemosyne_memory_ingest).Manage resonances / positions — list ongoing project workspaces, read where you left off, and record progress (
mnemosyne_resonance_list,mnemosyne_position_get,mnemosyne_position_update).Inspect memory organization — list vaults with counts, audit how memories were classified into spines, and get the taxonomy (
mnemosyne_vault_list,mnemosyne_spine_assignments).Read git context — recent commits from the configured repository (
mnemosyne_git_log).See other agents on the machine — list active coding sessions, detect collisions in the same working tree/branch, and see which files they touched (
mnemosyne_agent_list,mnemosyne_agent_collisions,mnemosyne_agent_files).Update a status card on the human’s canvas — declare working/waiting/done/blocked states, with optional attention request (
mnemosyne_cockpit_update).Manage the To-do backlog — add, list, update, and reorganize tasks and lists (
mnemosyne_todo_add,mnemosyne_todo_list,mnemosyne_todo_update,mnemosyne_todo_categories).Manage the calendar — add, list, update, and remove appointments, with reminders and recurrence (
mnemosyne_agenda_add,mnemosyne_agenda_list,mnemosyne_agenda_update,mnemosyne_agenda_remove).Pheme radar — watch subreddits/HN queries/topics and read fresh threads with scores and tiers (
mnemosyne_pheme_watch,mnemosyne_pheme_radar).Dream State bridges — see associations the engine found between memories (
mnemosyne_dream_bridges).Optional voice tools — list engines, render a script to WAV, and poll/cancel renders (
mnemosyne_voice_list,mnemosyne_voice_speak,mnemosyne_voice_status), whenMNEMO_VOICE=1.Optional erasure — permanently delete a chronicle by id (
mnemosyne_memory_forget), whenMNEMO_FORGET=1.Re‑read governance briefing — get the rules for working on a human’s memory (
mnemosyne_about).Agent‑awareness tools work without the app and without tokens; memory tools require the Mnemosyne OS desktop app running.
Privacy‑conscious — opens only a local socket, sends nothing elsewhere, stores nothing itself.
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.0.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
Mnemosyne OS Infinity exposes one vault per tracked folder (the folder name uppercased), plus three reserved names: DEV, PERSONAL, SOCIAL. Tell the MCP which ones you want your agent to reach via two env vars:
Env var | Purpose | Default |
| Vault used when the agent does not specify one. |
|
| Comma-separated list of vaults the MCP declares scopes for. |
|
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 queries a vault that is not in
MNEMO_VAULTS, the server returnsSCOPE_DENIED. 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 25 tools your agent gets
Twenty-two are in the table below. 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 29 in all.
Six of them read or write the To-do backlog and the calendar. All six 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 and chronicle count. 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 |
| 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": "…",
// 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 SCOPE_DENIED on a vault
The vault is not in MNEMO_VAULTS. Edit your MCP client config, add the name (uppercased), restart the client.
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 return SCOPE_DENIED 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 @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_aboutA
Read who Mnemosyne OS is and the rules you must honor when using it: its governance tenet, the vault protection model (NORMAL/MAXIMUM, mixableWith, isolated sandbox vaults), the spine model, and the do/don't behavior for an agent operating on a human's memory. The same briefing is delivered as the server instructions on connect. Call this to re-read it, or if your client did not surface those instructions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden. The verb 'Read' makes clear it is non-mutating, and it transparently states the content is identical to the server instructions. It does not explicitly mention idempotence or the absence of side effects, but for a read-only informational tool this is sufficient and adds useful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence front-loads the purpose and enumerates the key content areas; the second provides the usage context. Every clause earns its place, and it remains compact despite listing multiple topics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description is complete: it says what the tool returns (the briefing), what that briefing contains, and exactly when to call it. No prerequisites or additional context are needed for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100% (trivially). The baseline for no parameters is 4; the description adds no parameter-specific detail because none is needed. It correctly focuses on the output and usage instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and resource ('who Mnemosyne OS is and the rules you must honor'), then enumerates concrete content items (governance tenet, vault protection model, spine model, do/don't behavior). This clearly differentiates it from the sibling tools, which are all operational (memory, agenda, vault, etc.).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly gives when to use the tool: 'Call this to re-read it, or if your client did not surface those instructions.' It also notes the same briefing is delivered on connect, making the tool's redundancy clear and giving the agent a reason to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_agenda_addA
Put appointments or deadlines into the human's calendar (the Agenda widget on their canvas). Use it when a conversation names a specific date/time to remember: "add this to my calendar", a deadline, a meeting. The host routes the write through the widget's own store, so what you file is exactly what the human 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.
| Name | Required | Description | Default |
|---|---|---|---|
| events | Yes | One or more appointments to add. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does it well: it discloses that this is a write routed through the widget's store, that what is filed is exactly what the human sees, and that installation mode affects whether the app must be running. It does not cover duplicate handling, failure behavior, or the exact return payload, but the core behavioral traits are clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then gives trigger examples, behavior, environment caveats, and sibling routing in a compact sequence. Every sentence earns its place, and no information is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter create tool with a rich schema and no output schema, the description covers what it does, when to use it, the write path, environment requirements, and where to look for the result. It does not explicitly state the function's return value or error behavior, but the visible outcome statement ('what you file is exactly what the human sees') and the detailed schema largely compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the nested parameter descriptions already explain start, end, all_day, recurrence, location, description, and alarm_minutes_before in detail. The tool-level description adds no parameter-level meaning beyond 'appointments or deadlines', so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Put appointments or deadlines into the human's calendar (the Agenda widget on their canvas)'. It also names the sibling tools for list, update, and remove, making it unmistakable which operation this tool performs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger condition ('Use it when a conversation names a specific date/time to remember') and specific example phrasings. It also routes the agent to the correct alternatives for reading, changing, or removing calendar entries, and adds environment-specific prerequisites about the daemon and app state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_agenda_listA
Read the human's calendar back: the appointments in a time window, each with the ID you must use to change or remove it. Call this BEFORE mnemosyne_agenda_update or mnemosyne_agenda_remove - both name appointments by id and never by title or date, because 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 human'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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ISO 8601 date-time (or epoch ms). Only appointments with an occurrence at or before this. Omitted = no upper bound, which for a repeating event means it always counts. | |
| from | No | ISO 8601 date-time (or epoch ms). Only appointments with an occurrence at or after this. Omitted = now. | |
| limit | No | Maximum appointments returned (default and ceiling: 200). | |
| include_past | No | Include appointments with no occurrence left. Default false. Those ones come back with no "next" date rather than with their original start dressed up as a future one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility and does so thoroughly. It discloses that there is no archive, removal cannot be undone, repeating events are collapsed to one occurrence with cadence and next date, times are machine-local, and headless operation depends on dev install vs npm install. This goes far beyond basic read-vs-write labeling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, ID requirement, mutation caveats, repeating-event behavior, timezone, environment constraint, and scope. The most important operational guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must convey what the caller gets back. It does: appointments with IDs, one entry for repeating events with cadence and next occurrence, and local times. Combined with full parameter coverage the tool is effectively self-contained for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 4 parameters with full descriptions, so the baseline is 3. The tool description does not add parameter-level detail, though it does clarify the semantics of repeating events, which helps interpret from/to and include_past results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Read the human's calendar back' with a time-window scope. It also names the essential output (appointment IDs) and differentiates itself from the mutation siblings by explaining that update/remove require these IDs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call this BEFORE mnemosyne_agenda_update or mnemosyne_agenda_remove, explains that those tools identify appointments by ID only, and warns about irreversible removal. It also gives environment-specific guidance for dev installs vs npm installs, leaving no ambiguity about when the tool works.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_agenda_removeA
REMOVE appointments from the human's calendar. Read them with mnemosyne_agenda_list first and pass the ids: this tool never matches by title or by date, 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 human to check. A repeating appointment is removed as the whole SERIES; the calendar has no way to 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.
| Name | Required | Description | Default |
|---|---|---|---|
| event_ids | Yes | The appointment ids to remove, exactly as mnemosyne_agenda_list printed them in brackets. Up to 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure and does so thoroughly: removal is permanent with no archive, repeating appointments are removed as a whole series, and the tool names each removed appointment by title and start time in its response. The headless-daemon requirement is also disclosed, making side effects visible before invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence contributes a distinct operational fact. The core instruction to read first and pass ids is front-loaded, and the remaining caveats are ordered by practical importance with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive action with no output schema, the description covers the input source, matching rules, deletion permanence, recurrence behavior, runtime prerequisites, and what the response will report. Nothing critical is missing for an agent to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the ids parameter well, but the description adds important semantic constraints: ids must come from mnemosyne_agenda_list, matching is strictly by id rather than by title or date, and there is a concrete warning against natural-language date matching. This adds real meaning beyond the schema's type and count.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific verb and resource: REMOVE appointments from the human's calendar. It also distinguishes this tool from alternatives by explicitly saying it never matches by title or date, which makes the purpose unmistakable even among agenda siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent to read appointments with mnemosyne_agenda_list first and pass the returned ids, and warns against title- or date-based matching with a concrete failure example. It also addresses repeating appointments and the dev-install versus npm environment differences, which leaves no ambiguity about how and when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_agenda_updateA
CHANGE an appointment already in the human's calendar: move it, rename it, add or drop a reminder, start or stop it repeating. Names appointments by the id from mnemosyne_agenda_list - call that first. A field you leave out is left alone; passing null CLEARS it. A start or end time that cannot be read REFUSES the change rather than leaving the old one silently in place, and a cadence that is not one of daily/weekly/monthly/yearly is refused rather than quietly 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.
| Name | Required | Description | Default |
|---|---|---|---|
| changes | Yes | One entry per appointment. Up to 50 per call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses partial-update behavior (omitted fields untouched, null clears), strict refusal of unreadable start/end times, refusal of unsupported cadences, environment-dependent execution (headless daemon vs app running), and the required scope: agenda:write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the primary purpose and then packs prerequisites, error behavior, and environment notes into a compact paragraph. Every sentence adds operational value, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with a nested changes array, no output schema, and no annotations, the description covers the essential decision points: how to identify the appointment, how omitted/null fields behave, what inputs are refused, and whether the daemon is required. The only minor gap is atomicity across the array, but that is not essential for correctly invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents every field (100% coverage), so the baseline is 3. The description adds a global update rule 'a field you leave out is left alone; passing null CLEARS it' and instructs the agent to source event_id from mnemosyne_agenda_list, which goes beyond the schema by clarifying omission vs null semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the verb 'CHANGE' and names the exact resource: an appointment already in the human's calendar. It enumerates the supported mutations (move, rename, add/drop reminders, start/stop repeating) and explicitly says appointments are identified by the id from mnemosyne_agenda_list, making it clearly distinct from add/remove/list siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit prerequisite: call mnemosyne_agenda_list first to obtain the appointment id. It also provides operational context such as null-clears-field semantics and the daemon/running-app requirement on dev installs vs npm installs, but it never explicitly names when-not alternatives like agenda_add or agenda_remove.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_agent_collisionsA
Are two agent sessions live in the SAME git working tree and branch right now, from ANY installed harness? This is the one to call before git add -A, before a commit, and before a rebase: the git index is shared by every process in one working tree, so a commit from one session picks up whatever the other has staged. Answers from transcript files on disk; needs neither Mnemosyne OS nor a token. Each recorded directory is resolved to its working tree first, because one cd into a subfolder would otherwise make two sessions in one repository look like two projects. A clean answer says only that nothing was found IN WHAT IS READABLE. An agent whose transcripts live elsewhere does not appear at all, and sessions whose harness records no directory are listed separately as unplaceable rather than guessed at.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Restrict to one working tree, matched exactly (separators and case are normalised). Pass the output of `git rev-parse --show-toplevel`. Omit to check every project on the machine. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does so exceptionally: it reveals the data source (transcript files on disk), independence from Mnemosyne OS and tokens, working-tree resolution behavior, and the critical limitation that a clean answer only means nothing was found in readable transcripts. It also discloses how unreadable and unplaceable sessions are handled rather than guessed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than typical but front-loads the core question and call-time guidance before the caveats. Each sentence contributes a distinct fact, though the readability and transcript-location limitations could have been compressed into fewer sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, this description is unusually complete: it explains prerequisites, source of truth, limitations, and the shape of results, including clean answers, missing transcripts, and unplaceable sessions. An agent has enough contextual detail to invoke it correctly and to interpret its results appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the only parameter, `project`, including exact matching, normalization, and omission semantics, giving 100% schema description coverage. The prose description adds useful context about working-tree resolution, but it does not substantially add parameter-level meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the precise question the tool answers: whether two agent sessions are live in the same git working tree and branch, from any installed harness. It also names the concrete operational niche, before git add, commit, and rebase, which clearly separates it from sibling tools such as mnemosyne_git_log. The resource and purpose are unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly prescribes when to call the tool: before `git add -A`, before a commit, and before a rebase, with a rationale about the shared git index. It does not explicitly name when-not-to-use it or point to an alternative sibling, but the timing guidance is strong enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_agent_filesA
Which FILES other agent sessions have written or edited recently, newest first, with the session each came from. Paths and timestamps only, never file contents. 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 and may never have completed. Spans every installed harness, and each line names the session and the agent it came from. Use it to see what another session has already touched before you edit the same area.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max files to return (default 40, max 200). | |
| project | No | Keep only files from sessions whose project path contains this string. | |
| contains | No | Keep only paths containing this string. A folder name works as well as a file name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: newest-first ordering, paths/timestamps only, reliability caveat for 'from a command' entries that may never have completed, and provenance labeling ('recorded' vs command). This goes well beyond a basic 'list files' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Waste-free and front-loaded: the key result appears in the first sentence, followed by caveats and a usage directive. All five sentences earn their place, and code spans keep technical terms readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Everything needed to call and interpret the result is present: output fields, ordering, provenance, scope, and a concrete use case. The absence of an output schema is compensated because the description names exactly what each line contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents limit, project, and contains; baseline of 3 applies. The description adds no extra meaning for these parameters, but none is needed given the schema's clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States exactly what the tool returns: file paths that other agent sessions wrote or edited, newest-first, with the originating session. It also fences scope ('other agent sessions', 'spans every installed harness') and explicitly excludes file contents, which sets it apart from memory/agenda siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Ends with a direct usage cue: use it before editing an area another session has already touched. It gives clear context but does not enumerate exclusions or contrast with a named sibling such as mnemosyne_git_log.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_agent_listA
What OTHER coding-agent sessions exist on this machine, read from the transcripts their harnesses already write to disk. Returns metadata only: conversation name, project, git branch, model, last tool, how many files were touched, and when a line was last written. Reads EVERY coding-agent harness installed on this machine, 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. NEVER reports that an agent is "working": a crashed agent and an idle one fall equally silent, so it reports when a line was last SEEN and you conclude. Works with Mnemosyne OS closed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many transcripts to open PER HARNESS, newest first (default 40, max 200). Capping the merged total instead would let a chatty agent push a quiet one off the end, and the quiet one is the session you did not know about. | |
| project | No | Keep only sessions whose project path contains this string. Pass the repository folder name to scope the answer to the repo you are working in. | |
| live_only | No | Only sessions that wrote a line recently (see the window printed in the answer). Default false, which lists the most recent sessions whether or not they moved lately. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers exceptionally: it discloses the read-only nature (reads transcripts, returns metadata only), the cross-harness scope, the critical caveat that crashed and idle agents are indistinguishable so it reports 'last SEEN' and the agent must conclude, and the OS-closed compatibility. The crash-vs-idle warning is exactly the behavioral nuance that prevents an agent from drawing false conclusions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries unique value: purpose, scope, return content, usage timing, and a critical semantic caveat. It is front-loaded with the core purpose and the behavioral warning earns its place; only minor tightening would be possible without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema and no annotations, the description fully compensates: it enumerates the returned metadata fields, explains the scope, provides the interpretation caveat, and gives usage context. For a moderate-complexity read-only list tool, nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies; the schema already documents all three parameters thoroughly. The description adds no parameter-level detail beyond the schema, which is acceptable since the schema descriptions themselves are excellent (e.g., explaining why limit is per-harness rather than merged).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise action (list coding-agent sessions), a specific source (transcripts on disk), and a scope (ALL harnesses, not just its own). It enumerates the exact metadata returned, making it unmistakable what this tool does and how it differs from related agent tools like mnemosyne_agent_collisions and mnemosyne_agent_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance ('Use it before you touch shared state') and explains how to interpret results. It doesn't name sibling alternatives or state when NOT to use it, but for a list/read tool with 23 siblings of clearly different purposes, the contextual instruction is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_cockpit_updateA
Your own status card on the human's canvas (the cockpit). Call it when you START a task ("working" + a short title and status), when you NEED the human ("waiting": the card pulses and the taskbar flashes), when you are stuck ("blocked"), and when you are DONE ("done"). The state is what you declare; the host 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 human left on your card. Read it and act on it. Needs the app window open. Nothing is stored in memory; this is a card, not a note.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | "working" = on it; "waiting" = you asked the human something and stopped; "done" = the task is finished; "blocked" = you cannot continue without them; "closed" = this conversation is over (removes the card). | |
| title | No | What this conversation is about, in a few words (the card's title). Give it at least once; later calls may omit it. | |
| detail | No | Up to 4 short lines under the status (files, a branch, a count). Optional. | |
| status | No | One line: what you are doing right now, or what you need. 160 characters max. | |
| session | No | Only when the harness publishes no CLAUDE_CODE_SESSION_ID: a stable id for this conversation, reused on every call. | |
| attention | No | Ask for the human's eye even in "working"/"done" (the card pulses, the taskbar flashes). "waiting" and "blocked" ask on their own. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It reveals that the state is user-declared, the host prints time since last call, the card goes quiet if not updated, the answer contains any human message, the app window must be open, and nothing is stored in memory. This is thorough and goes beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loaded with the purpose and followed by concise usage and behavioral notes. Every sentence adds value, and there is no redundancy or fluff. It is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain return values; it does ('The answer carries any message the human left on your card'). It also covers requirements (app window open), memory behavior, and the meaning of states. It does not mention the 'closed' state, but that is in the schema, so the description is complete enough for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions, so the baseline is 3. The description adds usage context (e.g., 'working' + a short title and status) but does not introduce new semantics for any parameter beyond what the schema already provides. It reinforces but does not enhance the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: updating your own status card on the human's canvas (the cockpit). It explicitly lists the trigger events (start, need, stuck, done) and distinguishes itself from sibling tools like mnemosyne_position_update by focusing on the cockpit card status. The verb-resource pairing is implicit but unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use instructions: call it when starting a task, when needing the human, when blocked, and when done. It also advises calling at real milestones to avoid the card going quiet. It does not mention alternatives or exclusions, but the context is clear and specific.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_dream_bridgesA
List the connections Mnemosyne's Dream State engine discovered between memories during its offline (idle-time) scans ("what did you dream about?"). Each bridge links two chronicles (possibly across vaults) with a composite Dream Bridge Score (dbs, prime-aware) and a raw cosine similarity, plus a short excerpt of both sides. Use it to surface non-obvious associations the memory found on its own, to audit whether dreamed connections are insightful or noise, or to seed creative exploration. An empty list is normal: it means the dream engine has not produced bridges yet (it runs while the machine is idle, if enabled in Settings).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max bridges to return, strongest (highest dbs) first (default: 50, server cap: 200). | |
| min_dbs | No | Only bridges with a Dream Bridge Score at or above this value (0-1). | |
| session_id | No | Restrict to one dream scan session. | |
| chronicle_id | No | Only bridges touching this chronicle id (either endpoint). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that bridges are produced during idle-time scans, that an empty list is normal, and that the engine runs only if enabled in Settings. It also explains the scoring components (dbs and raw cosine). It does not mention auth or rate limits, but the read-only 'List' intent is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, with the core purpose front-loaded and supporting use cases and edge-case behavior following in order. It is slightly dense but each sentence earns its place; nothing is redundant or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and four optional parameters, the description supplies the needed behavioral and interpretive context: what a bridge is, how scores work, what empty results mean, and why one would call this tool. It could go deeper on session/chronicle filtering semantics, but the schema already covers those.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds general context (dbs is composite/prime-aware, ordering by strength) but does not add meaning beyond the schema's own parameter descriptions. This is acceptable given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), a clear resource ('connections... between memories'), and a distinctive source ('Dream State engine's offline scans'). It is easily distinguished from siblings like mnemosyne_resonance_list or mnemosyne_memory_query by its focus on dreamed/idle-time associations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases: surfacing non-obvious associations, auditing whether dreams are insightful or noise, and seeding creative exploration. It also explains the empty-list case. However, it does not explicitly name alternatives or state when not to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_git_logA
Read recent commits from the Mnemosyne OS monorepo. Read-only: it reads the repository and writes nothing. Each commit carries an 8-character hash, the subject line, the author and the date, newest first. The repository path is fixed on the OS side, so this cannot be pointed at another checkout, and it needs the monorepo:read scope; when either is missing it answers with a message naming what is missing instead of an empty list that would read as "no commits". Use it for what changed and when, and mnemosyne_memory_query for the reasoning behind a change.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of commits to return (default: 20) | |
| since | No | Time range (e.g. "7 days ago", "2024-01-01") | 30 days ago |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers: it declares read-only behavior, discloses the fixed repository path and its consequence, states the required scope, and explains failure behavior (naming what is missing rather than returning an empty list that could mislead). This is rich behavioral context well beyond a simple verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose, safety, return format, constraints, error behavior, and routing to the sibling tool. The most important scoping and behavioral facts are front-loaded, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity read tool with no annotations and no output schema, the description is complete: it explains what is returned, the ordering, the fixed repository limitation, required permissions, error semantics, and the closest alternative. An agent has everything needed to invoke and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are already fully described by the schema (100% coverage), so the baseline of 3 applies. The description adds contextual value by noting the newest-first ordering, but it does not need to restate parameter details since the schema already documents limit and since.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read recent commits from the Mnemosyne OS monorepo.' It further specifies return content (hash, subject, author, date) and order (newest first), and distinguishes itself from mnemosyne_memory_query, making its purpose unambiguous even among many siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use it for what changed and when,' and names the alternative for related but different needs: 'mnemosyne_memory_query for the reasoning behind a change.' This gives an agent clear selection criteria without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_memory_askA
Ask Mnemosyne a question and get a SYNTHESIZED prose answer grounded in the vault, PLUS the chronicles it drew on. It runs the full local RAG pipeline (deeper retrieval, lexical fusion and a re-rank), so it is both the reasoning tool AND, measured on 2026-08-31, the better RETRIEVER: reach for it whenever you need to find something, and read the Sources list even if you ignore the prose. Best on "why / who / how" questions spanning many memories ("why was SQLite chosen over Postgres?", "who is and what do they own?"). Slower than mnemosyne_memory_query (up to ~30s). ⚠️ The prose is a model rewording of the sources: never quote it as the words the memory holds. Quote the sources, or fetch them with mnemosyne_memory_query. Always check the sources before trusting the answer.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Vault to reason over (case-insensitive). Default for this deployment: "DEV". A vault not declared to this MCP is refused with SCOPE_DENIED. | DEV |
| question | Yes | A natural-language question, as you would ask a knowledgeable colleague. Be specific. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does so thoroughly. It discloses the RAG pipeline behavior, latency up to ~30s, the fact that output is a model reworded synthesis rather than verbatim memory, the presence of a Sources list, and a strong hallucination-safety warning. This is far beyond a simple 'ask a question' summary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but information-dense and front-loaded with the core function, followed by usage guidance, latency, and safety warnings. Nearly every sentence earns its place; the dated benchmark 'measured on 2026-08-31' and the detailed pipeline parenthetical add credibility but are slightly expendable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is surprisingly complete: it covers what the tool returns (synthesized prose plus sources), how long it takes, which sibling to compare against, how to phrase questions, and critical trust caveats. An agent has everything needed to invoke it correctly and interpret its output safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful invocation guidance beyond the schema: concrete example questions ('why was SQLite chosen over Postgres?', 'who is <name> and what do they own?') and the type of questions it is best for. It does not add detail about the vault parameter, but the schema already documents the default and scope-denial behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Ask Mnemosyne a question and get a SYNTHESIZED prose answer grounded in the vault, PLUS the chronicles it drew on.' It clearly differentiates from the sibling mnemosyne_memory_query by explicitly positioning this tool as both the reasoning tool and the better retriever, and by naming the slower latency tradeoff.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit and actionable: 'reach for it whenever you need to find something', 'Best on "why / who / how" questions spanning many memories', and 'Slower than mnemosyne_memory_query (up to ~30s)'. It also tells the agent when to switch to the alternative ('fetch them with mnemosyne_memory_query'), covering both when-to-use and when-not-to-quote-prose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_memory_ingestA
Persist a memory into the Mnemosyne OS vault: a decision, an architecture note, a debug finding, or a session summary. Stored permanently and indexed for future semantic retrieval by any agent. Use this at the END of a meaningful work session, or whenever you reach a decision that future you (or other agents) would want to recall.
| Name | Required | Description | Default |
|---|---|---|---|
| vault | No | Target vault TOKEN: the folder name uppercased, spaces and hyphens as underscores (e.g. MNEMOSYNE_OS). The path-shaped `id` from mnemosyne_vault_list is also accepted and normalized. Default for this deployment: "DEV". Tokens this MCP is SCOPED for: a config list, not a census, DEV, PERSONAL, SOCIAL. Ingest is PERMANENT, so confirm the vault EXISTS with mnemosyne_vault_list before writing anywhere you have not written before. | DEV |
| content | Yes | Content to persist (markdown supported). Be self-contained: include WHY the decision was made, not just WHAT. | |
| spine_type | No | Semantic type of the content. ARCHITECTURE is heavily boosted (×1.40) in SOURCE_CODE scope queries. Use it for design docs, big-picture decisions, structural choices. DECISION for narrower trade-offs. BUGFIX/DEBUG for incident learnings. SESSION for "here is where I left off". FEATURE for new capabilities. NOTE for everything else. | NOTE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description and schema must carry the behavioral burden. The description states persistence is permanent, that content is indexed for semantic retrieval, and that any agent may later retrieve it. The vault parameter additionally warns that ingest is permanent and to confirm the vault exists before writing somewhere new. This meaningfully discloses consequences beyond what structured fields alone would convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two focused sentences: the first states the action and scope, the second gives direct usage guidance. Every sentence earns its place, and important behavioral qualifiers like 'permanently' and 'indexed' are front-loaded rather than buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema descriptions, no annotations, and no output schema, the description is largely complete. It covers what the tool does, why to use it, and key consequences (permanence, indexing). It does not describe the return value or explicit success confirmation, which is a minor gap since no output schema is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The main description does not add parameter-level details beyond what the schema already provides; however, the schema's own parameter descriptions are rich, covering vault tokens, permanence, content self-containment, and spine_type semantics. The description's examples align with the enum values but add no new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Persist a memory into the Mnemosyne OS vault,' and enumerates concrete content types (decision, architecture note, debug finding, session summary). This differentiates it from query/read siblings like mnemosyne_memory_query and mnemosyne_memory_ask, which retrieve rather than store.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit trigger conditions are given: use at the end of a meaningful work session or whenever a decision reaches a point where future recall matters. It does not explicitly name alternatives or exclusion cases, but the clear write-vs-read contrast with the sibling tools makes the intended usage evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_memory_queryA
Raw chronicle search in a Mnemosyne OS vault. Returns the matching chronicles themselves (architecture notes, code, decisions, sessions, git history) for YOU to read, rank and cite. Nothing is rewritten, so this is what to use when you need the source text verbatim, e.g. to quote it or to write documentation from it. Ranked by vector similarity fused with a local BM25 channel, weighted by spineType. ⚠️ If your goal is to FIND something rather than to quote it, prefer mnemosyne_memory_ask even when you only want its sources: measured on 2026-08-31, ask surfaces notes on rare literal terms (proper nouns, identifiers, product names) that this tool misses, because it retrieves deeper and re-ranks. ⛔ And never read the score as confidence: a miss and a hit come back with indistinguishable scores, so judge the returned text, never the number beside it.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of results (default: 10, max: 50) | |
| query | Yes | The search query. Be specific. Examples: "Phase 51 auto-poll implementation", "SDK authentication bug", "why did we choose dual-vector dimensions". | |
| vault | No | Vault TOKEN to query (case-insensitive; the folder name uppercased, spaces and hyphens as underscores). The path-shaped `id` from mnemosyne_vault_list is also accepted and normalized. Mnemosyne OS exposes one vault per tracked folder. This deployment's default is "DEV". Tokens this MCP is SCOPED for (a config list, not a census, so some may not be mounted on this machine): PERSONAL, SOCIAL. Call mnemosyne_vault_list for the vaults that actually exist. Anything outside the scoped list is refused. | DEV |
| max_content_chars | No | Per-chronicle content snippet size in chars (default: 600). Each result is truncated to this length with a hint about total size. Raise to 2000+ when you genuinely need full file content, but be aware results stack up against your context window. | |
| spine_type_filter | No | Optional whitelist of spineTypes: restricts results to those types only. Use ["ARCHITECTURE"] to surface design docs over code, ["GIT"] for commit history, ["BUGFIX","DEBUG"] for incident knowledge, ["SOURCE_CODE"] to force code-only. Without this, all types are returned (the SOURCE_CODE scope weighting decides ranking). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden, and it delivers: it states that nothing is rewritten, explains the ranking mechanism (vector similarity fused with BM25, weighted by spineType), and discloses the non-intuitive behavior that hits and misses have indistinguishable scores. This goes well beyond a generic search description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then returns behavior, then use cases, then alternatives and caveats. Every sentence adds distinct value; the warnings and sibling comparison are dense but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description tells the agent what comes back (matching chronicles, truncated snippets, decorations hinting at total size) and how to interpret it. Combined with complete parameter documentation in the schema, the agent has enough context to select and call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters themselves are already well documented in the input schema. The tool description adds ranking context and a score caveat but no additional parameter-level semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Raw chronicle search in a Mnemosyne OS vault' that returns 'the matching chronicles themselves' for reading, ranking, and citing. It also separates this tool from mnemosyne_memory_ask by framing query as verbatim-source retrieval and ask as find-and-surface retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit: use this tool when you need source text verbatim for quoting or documentation, and prefer mnemosyne_memory_ask when the goal is to find something rather than to quote it. It even warns against treating scores as confidence, which directly shapes correct invocation and interpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_pheme_radarA
Read what the human's Pheme radar last found: fresh threads in the subreddits and Hacker News queries they watch, each with a topic score and, when the human has run the Mnemosyne pass, a tier (high / mid / low = how much substance THEY can bring to that thread). The answer leads with WHEN the scan ran: it is as fresh as the last time the human opened Pheme and pressed Scan, never fresher. Use it to find threads to draft a reply for; the human posts the reply. "No radar" means no scan has been projected yet, not that nothing was found: ask the human to open Pheme and scan. Needs the app running; Pheme itself may be closed.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | Only threads of this tier. Omit for all (unranked ones included, last). | |
| limit | No | How many threads at most (default 30, max 100). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and meets it: it discloses the freshness constraint ('never fresher'), the meaning of 'No radar' (no scan projected, not nothing found), the app-running requirement, and how tier is assigned. These are real behavioral details beyond a generic 'read' label.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each carries distinct information: what is read, freshness caveat, use case, no-radar semantics, and app dependency. Slightly dense with parentheticals, but no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no output schema, it describes the returned contents (threads, topic score, tier), a key temporal caveat, and special 'No radar' response. The only structured details left to the schema are limit/tier filters, which are documented. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters 100%, so baseline is 3. The description adds semantic value by defining high/mid/low as 'how much substance THEY can bring to that thread', which the schema doesn't explain. It doesn't add anything about limit, but the schema's description already covers default/max.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource (the human's Pheme radar last scan), and enumerates returned content: fresh threads, topic score, and tier. It is clear what the tool does, but it doesn't explicitly differentiate from siblings like mnemosyne_pheme_watch, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case: 'Use it to find threads to draft a reply for; the human posts the reply.' It also states operational prerequisites and what to do when 'No radar' is returned. However, it names no alternative tools or when-not-to-use conditions, so guidance is context-rich but not exclusionary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_pheme_watchA
Put a subreddit, a Hacker News search query or a topic on the human's Pheme radar (their reputation cartridge, which finds fresh threads worth a genuine reply), or take one off. The lists are THEIRS: an op that would empty a list is refused, every op reports its own outcome (done / already there / not there / refused), and the human sees a receipt in Pheme naming this agent and what changed. Use it when a conversation has found a community worth watching ("we answered a thread in r/hermesagent, keep an eye on it"). It does not scan and it does not post: nothing here posts anywhere; the human posts. Needs the app running (Pheme's settings mirror lives in it); Pheme itself may be closed.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | The changes, in order. Up to 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden, and it delivers: refused empty-list removals, per-op outcome reporting, user-visible receipts, no posting/scanning, human posts, and an app-running prerequisite. This is exactly the behavioral context an agent needs before invoking a mutation-like tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action, then invariants, use case, and constraints in order. It is slightly dense and uses in-house jargon ('settings mirror lives in it'), but every sentence carries substantive guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema and no annotations, the description tells the agent what results to expect (done/already there/not there/refused), what can't happen, and what environment is required. For a watchlist-mutation tool with one parameter, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: op, kind, and value are already documented, including r/-optional subreddits, the 120-character cap, and the three kinds. The description adds no parameter-level detail beyond that baseline; it does add behavioral context but that belongs to transparency.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific managed resource (the human's Pheme radar), the operations (add/remove watch items), and the item kinds. It is clear and distinctive, but it never contrasts with the likely read-side sibling mnemosyne_pheme_radar, so the distinction is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('Use it when a conversation has found a community worth watching') with a concrete example, and sets boundaries ('does not scan', 'does not post'). It does not explicitly state when to prefer a sibling or when not to call it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_position_getA
Read the last saved position of one Resonance: the phase and the free-text note an agent or the cockpit wrote when it stopped. Read-only: it queries memory and writes nothing. Returns the resonance id, when it was saved, the chronicle spineType, and the whole note. When nothing was ever saved under that id it answers in plain words and points at mnemosyne_position_update, never an error, so "never recorded" and "the call failed" do not look alike. Use it to resume work; call mnemosyne_resonance_list first when you do not know the id.
| Name | Required | Description | Default |
|---|---|---|---|
| resonance_id | Yes | ID of the resonance (e.g. "agent-cockpit", "mnemosync-p2p") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden and meets it: it declares read-only behavior ('it queries memory and writes nothing') and discloses the critical edge-case trait that a missing record returns plain words instead of an error, so 'never recorded' and 'call failed' are distinguishable. This is richer than the typical skeletal description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then progresses through behavior, return values, edge case, and usage guidance in a logical order. Each sentence earns its place; the only minor waste is 'Read-only' followed by 'writes nothing', which is trivial given the density of useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description correctly supplies the return contract by enumerating the returned fields. It also covers the no-record behavior, read-only safety, and prerequisite tool routing, leaving nothing an agent needs in order to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the single resonance_id parameter is already documented with concrete examples ('agent-cockpit', 'mnemosync-p2p'). The description adds domain context about what a saved position contains but no new syntax or format guidance, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Read the last saved position of one Resonance'), enumerates exactly what is returned (resonance id, saved time, chronicle spineType, whole note), and is clearly distinguishable from the sibling write counterpart mnemosyne_position_update. An agent can tell what this tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('Use it to resume work'), names the prerequisite call ('call mnemosyne_resonance_list first when you do not know the id'), and tells the agent the tool routes to mnemosyne_position_update on a never-recorded id. No inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_position_updateA
Update the current position of a Resonance. Call this at the end of a session to record where you left off: phase, current state, next steps. This is persisted as a DECISION chronicle in the vault.
| Name | Required | Description | Default |
|---|---|---|---|
| phase | Yes | Current phase label (e.g. "Phase 52", "v1.1.0 release") | |
| position | Yes | Description of the current position / what was done / what is next | |
| resonance_id | Yes | ID of the resonance to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It does disclose that the operation persists data ('persisted as a DECISION chronicle') and describes what is recorded, but it does not mention permissions, idempotency, failure behavior, or whether the update overwrites or appends. For a mutation tool, this leaves significant gaps for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. The main action is front-loaded, followed by usage timing and persistence detail. Every sentence earns its place, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple with no output schema. The description covers the purpose, when to use, and what gets persisted. However, it does not mention what the tool returns (if anything) or any error scenarios, which would be useful for an agent. It is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds some context by indicating what to record (phase, current state, next steps), but this largely reinforces the schema descriptions rather than adding substantial new meaning. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the primary action: 'Update the current position of a Resonance' which is a specific verb and resource. It also explains the purpose of calling it at the end of a session. However, it does not explicitly name the sibling it is not (e.g., position_get), though the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use: 'Call this at the end of a session to record where you left off'. It gives a clear usage context. It does not mention when not to use or alternative tools, but the context is sufficient for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_resonance_listA
List the Resonances recorded in the default vault, the cognitive workspaces tracking ongoing projects. Read-only: it queries memory and writes nothing. Each entry carries the resonance id, its last phase, how many minutes ago it moved, and the id of the chronicle behind it. There is no active/paused filter and no status field: you get every resonance the scan matched, in one vault, from at most 30 candidates. An empty result answers in words and means no resonance has been recorded yet, never that the call failed. Call mnemosyne_position_get with an id to read one in full, or mnemosyne_position_update to write a new one.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral burden and handles it thoroughly: it states the tool is read-only, writes nothing, has no active/paused filter, returns at most 30 candidates, and clarifies that an empty result means no resonances recorded rather than a failure. This is exemplary disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence carries unique information: purpose, read-only guarantee, return fields, filtering limitations, empty-result meaning, and sibling routing. The description is front-loaded with the core purpose and avoids redundancy, making it dense but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description fully compensates by specifying the exact fields in each entry (id, last phase, minutes ago, chronicle id), the absence of filters, candidate limits, and empty-result semantics. An agent has everything needed to invoke and interpret the call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema is an empty object. Per the rubric, the baseline is 4 for 0 params; the description does not need to explain parameters. It instead adds context about what each returned entry contains, which is helpful even though no parameter semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('List the Resonances recorded in the default vault') and clarifies the read-only nature. It also distinguishes itself from sibling tools by naming mnemosyne_position_get and mnemosyne_position_update as the follow-up actions, making the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains what this tool returns (all resonances, no filter, max 30 candidates) and when to use alternates: calling mnemosyne_position_get for full detail and mnemosyne_position_update to write. This gives clear routing versus siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_spine_assignmentsA
Inspect how Mnemosyne classified its memories: chronicle → spine assignments for a vault (newest first), whole-vault per-spine counts, and optionally the global spine taxonomy tree. Use it to audit auto-classification quality ("did memories land in the RIGHT spines?"), to see a vault's composition at a glance, or to discover the taxon ids to pass as spine_type_filter in mnemosyne_memory_query.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max assignments returned (default: 25 to stay context-friendly, server cap: 500). | |
| vault | No | Vault to inspect (case-insensitive). Default for this deployment: "DEV". | DEV |
| offset | No | Pagination offset (default: 0). | |
| spine_type | No | Restrict the assignment page to one spine taxon id (e.g. "DOCUMENT", "GIT"). Counts stay whole-vault. | |
| include_taxonomy | No | Also return the global spine taxonomy tree (natures → sub-spines). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It conveys a read/inspect nature through words like 'Inspect' and 'audit', states ordering ('newest first'), and mentions that counts remain whole-vault. However, it does not disclose auth requirements, rate limits, or the exact response shape, which would strengthen transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry the full value: the first states what the tool does and returns, the second states when to use it. There is no filler, and the most identifying information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a moderately simple inspection tool with zero required parameters and fully documented parameters. The description covers outputs, ordering, optional taxonomy, and practical use cases. It lacks an explicit return-format description, but given the rich schema and the tool's inspect-only nature, the context is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters. The description adds context by linking spine_type to mnemosyne_memory_query's filter and clarifying the tool's audit purpose, but it does not add significant meaning beyond the parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Inspect') and a precise resource: how Mnemosyne maps chronicle entries to spine assignments for a vault. It lists the distinct outputs (assignments newest first, whole-vault per-spine counts, optional taxonomy tree), which clearly distinguishes it from siblings like mnemosyne_memory_query and mnemosyne_vault_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete use cases: auditing auto-classification quality, viewing vault composition, and discovering taxon ids for spine_type_filter. It also names the sibling tool mnemosyne_memory_query as the place to pass those ids. It does not explicitly state when not to use this tool, but the intended contexts are clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_todo_addA
Put tasks into the human's To-do backlog (the To-do widget on their canvas), in order, optionally under named steps. Use it when a conversation has settled WHAT to do: "make tasks out of everything we said we would do". Name the list ("list"): call once without it to be told the lists that exist on a LIST_NOT_FOUND answer, or pass create_list: true to make a new one. Never assume a default list. The host routes the write through the widget's own store, so what you file is exactly what the human 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.
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | Displayed name of the destination list (case-insensitive), e.g. "En cours", "WIP", or a list the human created. Omitted = the first original list. Unknown name + create_list false = refused with the names that exist. | |
| color | No | Hex colour (#rrggbb) for a list being created. Optional; the host picks the next swatch otherwise. | |
| tasks | Yes | The tasks, in execution order. Each item is a string, or {"text": string, "group": string} where group is the STEP the task belongs to (e.g. "Step 1 · Mockup"); tasks with the same group are shown under one header in the list. One concrete, actionable line each; 300 characters max. | |
| create_list | No | Create the list named in "list" when it does not exist. Default false: an agent must not invent lists in someone's backlog without saying so. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden and does it well: it discloses that writes go through the widget's own store, that the user sees exactly what is filed, and that dev installs work with the app closed while npm installs require it running. It also surfaces LIST_NOT_FOUND behavior and warns against assuming default lists. It could add reversibility or permission details, but this is strong disclosure for an add operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but each clause earns its place: primary action, trigger condition, list workflow, storage guarantee, environment caveat, and sibling routing. It is front-loaded with the core purpose and usage before diving into environment details. Slightly dense, but not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters, no output schema, and no annotations, the description covers the required input meaning, optional list creation behavior, failure/error flow, runtime environment differences, and related siblings. The only notable omission is an explicit success-return format, which is not strictly necessary for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all parameters at 100%, so the baseline is 3. The description adds meaningful calling strategy beyond the schema: invoke once without 'list' to discover existing lists, pass create_list:true to create one, and never assume a default list. This complements rather than repeats the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: put tasks into the human's To-do backlog in order and optionally under named steps. It also distinguishes this adder from related operations by naming mnemosyne_todo_list, mnemosyne_todo_update, and mnemosyne_todo_categories as the read/change alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool: after a conversation has settled WHAT to do, e.g., 'make tasks out of everything we said we would do'. It also gives concrete operational guidance for list handling and points to siblings for reading or changing the backlog, so the agent can route between related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_todo_categoriesA
Manage the LISTS of the human's To-do backlog: create one, rename or recolour one, remove an empty one. Separate from mnemosyne_todo_update because these change the shape of someone's workspace rather than the work in it. Two refusals worth knowing before you call: a list that still HOLDS tasks is never removed (you are told how many are in the way - move them first, the host will not pick a destination on someone's behalf), and the three original lists can be renamed but never removed, because their contents are what make the file readable at all. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | The changes, applied in order - so you can create a list and rename another in one call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It discloses destructive constraints, refusal behavior, the fact that the host will not pick a destination, why original lists are protected, and whether the app must be running. This is unusually thorough for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense without padding: the core purpose is front-loaded, followed by the sibling distinction, refusal rules, and environmental caveat. Every sentence earns its place, even though the middle sentences have some parenthetical complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one nested-array parameter, no annotations, and no output schema, the description is complete enough: it covers what operations exist, when to choose this tool, what will be refused, protections for original lists, and runtime requirements. Nothing critical is left for the agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful semantic context beyond the schema by explaining the refusal conditions, the purpose of the operation types, and the distinction between workspace shape and work content, which helps an agent pick the right op values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: manage the To-do backlog's lists via create, rename/recolour, or remove. It also explicitly distinguishes itself from the sibling mnemosyne_todo_update by the workspace-shape vs work-in-it principle, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative tool (mnemosyne_todo_update) and gives a clear decision rule: use this tool when changing the shape of the workspace, not the work in it. It also pre-warns about refusals for non-empty lists and original lists, plus environment differences between dev installs and npm installs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_todo_listA
Read the human's To-do backlog back: the lists that exist and the tasks in them, each with the ID you must use to change it. Call this BEFORE mnemosyne_todo_update - that tool names tasks by id and never by text, because "delete the task about the invoice" is how the wrong task goes, in a sentence that reads perfectly either way. Also the way to answer "what is on my plate" or to check whether something is already filed before adding 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.
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | Only this list, by displayed name (case-insensitive) or by the key shown in brackets. Omitted = every list. A name that matches nothing returns NO tasks rather than silently widening to all of them. | |
| limit | No | Maximum tasks returned (default and ceiling: 300). The answer always says how many matched and how many were cut. | |
| include_done | No | Include tasks already checked off. Default false: the open ones are what almost every question is actually about. Tasks moved to the ARCHIVE are never listed, only counted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly: it is a read-only scope ('todo:read'), reads from a file via a daemon in dev installs, returns IDs needed for later mutation, and explains that results always state how many matched and were cut. This goes well beyond the input schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then adds targeted warnings, use cases, and environment context. Every sentence earns its place; the length is justified by the valuable guidance it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with three optional parameters, no output schema, and no annotations, the description covers what is returned (lists, tasks, IDs, counts), when to use it, and operational prerequisites. Nothing essential is missing for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already documents list, limit, and include_done behavior. The tool description adds no additional parameter-specific meaning beyond what the parameter descriptions provide, so no upgrade is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the human's To-do backlog back: the lists that exist and the tasks in them.' It also names the distinguishing purpose of exposing task IDs for later mutation, and explicitly contrasts itself with mnemosyne_todo_update. This makes the tool's role unambiguous even among similarly named siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to invoke this tool: before mnemosyne_todo_update, when answering 'what is on my plate', and before adding a duplicate via mnemosyne_todo_add. It also provides environmental guidance about dev installs versus npm installs. The usage conditions are concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_todo_updateA
CHANGE the human'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 - call that first. Removing a task ARCHIVES it by default (it leaves the list and can be restored); pass permanent: true only when the human 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.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | The changes, applied in order. Up to 100 per call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes on the full behavioral burden. It discloses that removal archives by default and is restorable, that the batch applies as one save, that operations report their own outcomes, and that a stale id won't sink others. It also covers environmental constraints. Slight gaps like non-recoverable streak side-effects are left to the schema, but overall transparency is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place, covering scope, prerequisite, destructive behavior, atomicity, error isolation, environment prerequisites, and required scope. It is front-loaded with the core purpose and operation list, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested ops array with multiple operation types) and lack of output schema, the description provides everything needed to call it correctly: task id sourcing, operation semantics, permanent deletion nuance, batch behavior, per-operation outcomes, environment constraints, and auth scope. The note that each operation reports its own outcome compensates for the missing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already thoroughly documents each field, including the op enum, permanent default, and field-specific behaviors. The description reinforces some key semantics (e.g., 'pass permanent: true only when...') but doesn't add substantial information beyond what the schema provides, keeping this at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('CHANGE') with a clear resource ('the human's To-do backlog') and enumerates the exact operations: edit, tick off, move, remove. It also implicitly distinguishes itself from siblings like mnemosyne_todo_add by framing this as modifying existing tasks and requiring ids from mnemosyne_todo_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to call mnemosyne_todo_list first to obtain task ids, which is a critical prerequisite. It also clarifies when to use permanent: true (only when outright deletion is requested) and notes environment-specific daemon requirements. It doesn't explicitly name mnemosyne_todo_add as the alternative for creating new tasks, but the 'CHANGE' framing makes the boundary reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mnemosyne_vault_listA
List the memory vaults this Mnemosyne OS exposes, each with its TOKEN, display name and chronicle count. Call this first when you are unsure which vault to query/ask/ingest against, or when the user refers to a memory store by a name you have not seen. Pass a returned token (bold, e.g. MNEMOSYNE_OS) as the vault argument to the other tools, never the id line, which is the host's internal path. Note: you can only read/write the vaults this MCP was configured for (MNEMO_VAULTS); others are flagged here and are refused until added.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and succeeds: it discloses that unconfigured vaults are flagged and refused, that the `id` line is the host's internal path and must never be re-passed, and it conveys the read-only nature of the call. This prevents real invocation errors against the sibling tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense, purposeful sentences, front-loaded with purpose before usage and output mechanics. The minor template artifact '(bold, e.g. MNEMOSYNE_OS)' and the inconsistent TOKEN/token casing keep it from a perfect structural score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with no output schema and no annotations, the description covers everything an agent needs: the returned fields, when to call it, how to consume the result in sibling calls, and the access-control failure mode for unconfigured vaults. No critical gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty, so the baseline is 4, and the description still adds value above it: the token-vs-`id` guidance teaches the agent exactly what to feed into the sibling tools' `vault` parameter, avoiding a common misuse. Since there are zero parameters, the description cannot do more than this, and it does it well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the memory vaults this Mnemosyne OS exposes') and names the output contract (TOKEN, display name, chronicle count). None of the 24 siblings deals with vault enumeration, so it is clearly distinguishable without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two explicit trigger conditions ('when you are unsure which vault to query/ask/ingest against' and 'when the user refers to a memory store by a name you have not seen') and positions it as the entry point ('Call this first'). It also routes the agent to the downstream tool families by explaining how the returned token becomes their `vault` argument.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
19 tool updates
v1.5.1-infinity- Changed
mnemosyne_agenda_add1 field changed- changed
Input schema / properties / events / items / properties / start / descriptionPrevious value: -"ISO 8601 date-time, e.g. \"2026-09-10T14:00:00\". No timezone offset = read as the HUMAN'S OWN machine local time, never UTC — do not add a \"Z\" unless you mean UTC."New value: +"ISO 8601 date-time, e.g. \"2026-09-10T14:00:00\". No timezone offset = read as the HUMAN'S OWN machine local time, never UTC. Do not add a \"Z\" unless you mean UTC."
- Added
mnemosyne_agent_list - Removed
mnemosyne_agents - Removed
mnemosyne_ask - Removed
mnemosyne_get_position - Removed
mnemosyne_ingest - Added
mnemosyne_memory_ask - Added
mnemosyne_memory_ingest - Added
mnemosyne_memory_query - Added
mnemosyne_position_get - Added
mnemosyne_position_update - Removed
mnemosyne_query - Added
mnemosyne_resonance_list - Removed
mnemosyne_resonances - Added
mnemosyne_todo_categories - Removed
mnemosyne_todo_lists - Removed
mnemosyne_update_position - Added
mnemosyne_vault_list - Removed
mnemosyne_vaults
25 tool updates
v1.10.0- First observed
mnemosyne_about - First observed
mnemosyne_agenda_add - First observed
mnemosyne_agenda_list - First observed
mnemosyne_agenda_remove - First observed
mnemosyne_agenda_update - First observed
mnemosyne_agent_collisions - First observed
mnemosyne_agent_files - First observed
mnemosyne_agents - First observed
mnemosyne_ask - First observed
mnemosyne_cockpit_update - First observed
mnemosyne_dream_bridges - First observed
mnemosyne_get_position - First observed
mnemosyne_git_log - First observed
mnemosyne_ingest - First observed
mnemosyne_pheme_radar - First observed
mnemosyne_pheme_watch - First observed
mnemosyne_query - First observed
mnemosyne_resonances - First observed
mnemosyne_spine_assignments - First observed
mnemosyne_todo_add - First observed
mnemosyne_todo_list - First observed
mnemosyne_todo_lists - First observed
mnemosyne_todo_update - First observed
mnemosyne_update_position - First observed
mnemosyne_vaults
TDQS
Scored across 25 tools
The tools are grouped into clear domains such as agenda, todo, memory, agent observation, pheme, and cockpit, and the descriptions explicitly cross-reference related tools. The main selection friction is between mnemosyne_memory_query and mnemosyne_memory_ask, which both retrieve memory and require careful reading to pick correctly; resonance_list and position_get/update also have a slightly fuzzy boundary.
Names consistently use the mnemosyne_ prefix and snake_case, mostly following a domain_action pattern like agenda_list, todo_add, and pheme_watch. The deviations are few but real: mnemosyne_about is a bare noun, and dream_bridges, spine_assignments, and pheme_radar are noun-style names rather than action-style names.
25 tools is at the high end of the borderline-heavy range, and an agent will have a lot of surface to hold in mind. That said, the count is not bloated: each tool maps to a distinct operation across many subsystems, so the size is defensible for an OS-style integration even if it is not a tightly scoped single-domain server.
Agenda and todo have full lifecycle coverage with list/add/update/remove, and memory has ingest plus two retrieval modes. The gaps are minor and often intentional: memory has no update/delete and resonances have no explicit delete, but those are consistent with the permanence and read-only design of the system.
Maintenance
Related MCP Connectors
Local-first, governed memory and session continuity for AI coding agents. No cloud, no telemetry.
91Shared memory for coding agents. Stop re-explaining your codebase every session.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
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.61 npm13MIT
- AlicenseNot gradedqualityAmaintenanceLocal-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 gradedqualityAmaintenanceLocal-first, source-grounded memory for AI agents, with citations, bitemporal history, review-gated corrections, and MCP tools for search and recall.3Apache 2.0
- AlicenseNot gradedqualityCmaintenanceProvides a local-first, source-cited memory layer for AI agents, with MCP tools to search, read, explain sources, and propose/apply memory updates.26 npm7Apache 2.0