Skip to main content
Glama

Graph-MIND

Your AI forgets everything when the session ends. This one remembers, and it never calls an LLM to do it.

88.8% on LongMemEval. Zero model tokens spent saving memory. Runs on your own PC.

goyohan0611-png/graph-mind MCP server

Decide something with one agent on Monday. Ask another on Wednesday. It knows.

Install

Windows: download Graph-MIND-Setup.cmd and double-click it, or in PowerShell:

irm https://raw.githubusercontent.com/goyohan0611-png/graph-mind/main/scripts/install.ps1 | iex

macOS / Linux:

curl -LsSf https://raw.githubusercontent.com/goyohan0611-png/graph-mind/main/scripts/install.sh | sh

No Python needed; nothing else to set up. Restart your AI apps afterwards. Already have Python? pip install graph-mind-memory && graph-mind-install. More: docs/install.md.

Related MCP server: Melchizedek

What it does

  • One shared brain for every agent in your terminal. Whichever coding agent or model you run, they all read and write the same memory: decide something with one, ask another later, it knows. Switch agents or models; the memory stays. Which ones

  • Remembers conversations word for word, on your own PC. Saving is a database write: no model call, no tokens. When a question depends on the past, the agent gets back the few thousand tokens that answer it. Korean and English.

  • One memory across your PCs. Tell the AI "let my other PCs use this memory", paste the code it gives you to the AI on the other PC. Office network or Tailscale, over TLS, every line encrypted before it leaves a PC.

  • Yours. No account, no cloud of its own, no telemetry. Secrets are masked before anything is stored, and "delete the password I typed earlier" deletes it everywhere. docs/privacy.md

  • Teams, if you want them. Share a project's decisions and progress with teammates' AIs, never your personal memory; files stay in Slack and GitHub. docs/teams.md

Does it work?

Same 40 questions, same answer model, same official judge, pre-registered before anyone looked:

accuracy

model tokens spent saving memory

Graph-MIND

85.0%

0

MemPalace 3.10.0

57.5%

0

Mem0 2.2.1 (open source)

52.5%

~640,000 per question

On all 500 LongMemEval questions: 88.8%. Against agentmemory on the same 499, its own published retrieval (95.2% R@5) handed to the same answer model and judge:

accuracy

text the answer model reads, per question

Graph-MIND

89.0%

3.4k tokens

agentmemory (its 5 sessions)

80.4%

~16.5k tokens

Every question, answer and verdict is in research/runs/; method, failures and how to rerun it: docs/benchmarks.md.

NOTE

Alpha. Used daily on Windows. macOS and Linux pass every test in CI but have not seen daily use yet.

More

MCP tools · See your memory in 3D (graph-mind-view) · Changelog · Security · Development: pip install -r requirements.txt, then python -m unittest discover -s tests

Contributions are welcome under the CLA. License: AGPL-3.0; a commercial license is available for products that cannot publish their changes.

Available Tools

7 tools
brain_checkpointA

Team project brains: decisions and progress shared with teammates' AIs, per project.

    Not for the user's own memory or their other PCs: that is brain_folder. A project brain
    holds what a team's AIs need to know about a project, apart from the user's personal
    memory and from every other project. Nothing
    personal is shared through this; only what is published here, when the user asks. Files
    and notifications stay in Slack, drives and GitHub; a project brain keeps the decisions,
    the progress, the context and links to where the work is.

    Always pass `workspace` = your current working folder: a folder bound to a project makes
    it the default `project`.

    Publish only when the user asks ("공유해", "프로젝트에 올려줘", "체크포인트 남겨"): that
    request is the approval, so do not ask again; ask only if the project is ambiguous.
    Afterwards say exactly what went where.
    - `projects`: the project brains the user takes part in, with when each was last shared.
    - `create_project` + `project` (+ `path` = folder to bind): only when the user names one.
    - `publish` + `type` + `summary` (one line, user's language) + `details` (a handover
      note: what changed and why, files and functions, test results, links, what is left).
      Never paste conversation text. `supersedes`=<id> replaces an earlier decision.
    - `context` (with publish or attach): what changed, where (pages, sections, files,
      functions), why, verification (test or check results), remaining, review_focus, and
      the ids it answers (`addresses`) and its `evidence` (commit, PR, test log, Slack or
      document links). Write only what you know; what is left out reads "not recorded".
    - `attach` + `path`: a git folder links its commit at the stage it really reached
      (committed / pushed / pr_open / merged / released; never call work done when the stage
      says otherwise); a URL (a Slack message, a drive document) is kept as a link. Files are
      not stored here: if the user wants a file shared, share it in Slack or a drive (with
      the tools for those) and attach the link.
    - `timeline`: "누가 어디까지 했어?" — answer from it only: who, what, what is left, and
      when it was last shared. Do not guess at anything newer. Follow its `instructions`.
    - `retract` + `checkpoint_id` (the publisher, or the project's owner);
      `set_instructions` + `instructions` (owner).
    - Members. Whoever creates a project owns it. `invite` + `member` + `role` (owner /
      editor / viewer) + `projects` returns a code to give them. `members` + `project`;
      `remove_member` + `member` + `project` (owner; or yourself, to leave). `audit`
      (+ `project`). On a teammate's PC: `join_team` + `code` (+ `name`), `leave_team` +
      `project`.
    - Where projects live: on a Postgres hub (`host`: make this PC one; teammates on the
      office network or over Tailscale), where `invite` on the hub's PC also makes their
      account (elsewhere they need an account from the hub's operator first); without a
      hub, on this PC alone. Someone in several team hubs and none of their own:
      `create_project` + `hub` (an address of it).
    - `set_name` + `name`: the name teammates see (else this PC's name). If a result says
      NAME_REQUIRED, ask the user for it (their own name, e.g. 고요한), set it, then retry.
    If the result says UNAVAILABLE, the hub cannot be reached: tell the user the latest
    shared state is unknown right now; never fill in from memory.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
hubNo
codeNo
nameNo
pathNo
roleNo
typeNo
actionYes
memberNo
contextNo
detailsNo
projectNo
summaryNo
projectsNo
workspaceNo
supersedesNo
source_refsNoLinks or ids it is based on.
instructionsNo
checkpoint_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply the generic readOnly/destructive/idempotent/openWorld flags; the description adds real behavioral context on top: who may retract (publisher or owner), who may set instructions (owner), that invite returns a code and may create the teammate's account on the hub's PC, that a git attach reflects the true commit stage and must not overstate it, and what to do on NAME_REQUIRED and UNAVAILABLE. Nothing here contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The intent is front-loaded, which is good, but the body is a ~500-word wall of dense pseudo-bullets mixing actions, parameters, membership rules and hub topology in one block. There is redundant restatement ('Nothing personal is shared through this' repeats the earlier exclusion), so several sentences do not earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-action, 18-parameter meta-tool this is unusually complete: it covers intent routing, permissions, membership lifecycle, hosting modes and the two named failure modes, and an output schema exists so return values need not be described. An agent has enough to pick the right action and parameters without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 6%, so the description carries the burden, and it largely does: it explains workspace (bind your cwd), project, path, type, summary (one line, user's language), details (handover-note contents), supersedes (replaces an earlier decision), context payload fields, checkpoint_id, member/role/projects, code, name and hub. The mapping is prose-embedded inside action bullets rather than per-parameter, and source_refs plus some action-specific params are never addressed, so it falls short of a full 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line states the resource precisely (team project brains holding decisions and progress shared with teammates' AIs, per project) and explicitly carves out the sibling it is not: 'Not for the user's own memory or their other PCs: that is brain_folder.' An agent can separate this from brain_folder and the personal-memory siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger ('Publish only when the user asks' with quoted user phrasings), a prohibition ('Never paste conversation text'), a fallback ('ask only if the project is ambiguous'), and a per-action routing table keyed to user intent (timeline for '누가 어디까지 했어?', invite for adding members). This is exactly the when/when-not/alternative guidance the dimension asks for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_contextA
Read-onlyIdempotent

Answer from the user's past: one bounded text packet to read before replying.

    The default memory call: use it whenever a request may depend on earlier conversations,
    facts, preferences, decisions or work. It returns `context`, a size-capped text of the
    relevant memories and conversation turns, each with its date and source. For structured
    rows, ids or one thing's history use brain_recall instead.

    Set `recent=true` whenever the question is about what happened lately or what the user was
    just doing: "what was I working on?", "where did we leave off?", "what did I do
    yesterday?", "최근에", "아까", "어제", "지금 뭐 하고 있었지?". Results then come newest
    first instead of by word overlap; naming something ("what did Kongi do lately") keeps them
    about that. Set `since` (ISO date or time) to drop anything earlier, e.g. "this week".
    Set `about_assistant=true` when the user asks what YOU said earlier: "which restaurant did
    you recommend?", "what were the steps you gave me?", "네가 아까 뭐라고 했지?". Your own
    past answers are then searched by meaning too, not only by their words.
    Set `around` when the question is about WHEN WE TALKED: "what did we discuss last week?",
    "지난달에 얘기한 거" -> resolve it yourself to a date or "start..end" (e.g. "2026-09-23"
    or "2026-09-01..2026-09-30"). Conversations from then rank first; nothing is dropped.
    Do not set it for when something HAPPENED ("the event I went to two weeks ago"): people
    mention events days or weeks before or after, so that date misleads (measured: on dev2
    it pushed the answering turn out in 2 of 11 questions and helped 2).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
as_ofNoISO time: only what had happened by then (default now).
limitNoMost items to return.
queryYesThe user's request, in their words.
sinceNo
aroundNo
policyNoauto skips requests with no sign of the past.always
recentNo
scopesNoOnly these scopes, e.g. ["global"] or a project; default all.
max_charsNoSize cap of the returned text.
about_assistantNo
knowledge_cutoffNoISO time: only what had been saved by then (default as_of).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds real behavioral context beyond that: the return is a size cap-limited text of memories and turns with date and source, and `recent`/`around` change ranking semantics (newest-first vs word overlap; conversations from then rank first, nothing dropped). It does not discuss cost/latency or the interaction of `limit` with ranking, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and the primary exclusion, then organized flag-by-flag. It is long, and the embedded Korean examples plus the measured statistic are dense, but each sentence carries routing or ranking information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't enumerate return fields, and it still names the `context` payload. For an 11-parameter, default-memory tool, the when-to-use rules, flag semantics, and the explicit misleading-case warning give the agent everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 64%, and the description compensates precisely for the undocumented parameters (recent, since, around, about_assistant), giving format hints ('ISO date or time', 'start..end') and semantic consequences. It leaves knowledge_cutoff and the exact ranking interaction with `limit`/`scopes` unexplained, so not a full 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('one bounded text packet to read before replying') and explicitly names the sibling it is not for structured rows/ids/history: brain_recall. An agent can distinguish it from brain_recall and brain_remember 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit default ('use it whenever a request may depend on earlier conversations, facts, preferences, decisions or work'), a routing rule to brain_recall, and per-flag conditions with concrete example queries (including Korean) for recent, since, about_assistant. It even states a when-NOT: do not set `around` for when something happened, with measured evidence (2 of 11 questions helped vs hurt).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_folderA
Idempotent

Where the user's own personal memory lives, and which of their own PCs share it.

    Not for teams: project brains shared with teammates are brain_checkpoint.

    Call it with `path` when the user names a folder for their memory, e.g. "use my Google
    Drive's Graph-MIND folder as my brain". A folder that OneDrive, Google Drive or Dropbox
    syncs makes the same memory available on every PC where the user chooses it too; nothing
    else is needed. Without `path` it reports the current folder and the devices writing to it.
    `path="local"` keeps the brain in this PC's own Postgres instead, shared the instant it is
    written (no sync delay).

    Other PCs: when the user asks to let their other PCs use this brain ("다른 PC도 붙게 해줘"),
    call it with `path="share"`. It opens this PC's Postgres to the local network and Tailscale
    (Windows may ask the user to approve a firewall rule once) and returns a
    `connection_code`. Show the user that code and tell them to paste it to the AI on the
    other PC; it contains the password, so say not to post it anywhere public.
    Codes: when the user pastes any Graph-MIND code ("gm1." for their own other PC, "gmt1."
    for a team invite), call this with `path=<the code>`; it does the right thing for either,
    so never ask the user which kind it is.

    `share_existing=true` sends what this PC remembers and the shared memory lacks (only that:
    it also repairs turns that missed a hub that was down). It uploads
    it to wherever the folder syncs. Set it only when the user has explicitly agreed to that.

    `reindex=true` brings the search index up to date (links new memories, embeds unembedded
    ones). Saving already does this; it is for a large imported backlog.

    Moving a whole memory as one file ("내 기억 파일로 내보내줘", "이 기억 파일 가져와"):
    `export_to=<file path>` writes every memory and conversation turn into that file;
    `import_from=<file path>` adds such a file's contents to this memory, skipping what is
    already here. Only when the user asks. Tell them the file holds their entire memory
    (secrets were masked when saved), so keep it private like a diary.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
reindexNo
export_toNo
import_fromNo
share_existingNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), it discloses real side effects: `path="share"` opens Postgres to the LAN/Tailscale, may trigger a one-time firewall prompt, and returns a connection_code containing a password with an explicit warning not to post it publicly. It also flags that export files contain the entire memory (secrets masked) and that share_existing uploads to the sync folder.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the team exclusion are front-loaded, then usage follows mode-by-mode, which is the right order. It is still long and repetitively framed around quoted user utterances, but almost every sentence adds a distinct operational rule rather than restating the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter tool with no schema descriptions but a present output schema, the description covers every parameter, the side effects of each mode, the privacy caveats, and the sibling boundary. 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does so: `path` is defined across its value space (a named sync folder, `"local"` for on-PC Postgres, `"share"`, or a pasted gmt1./gm1. code), and reindex, export_to, import_from, and share_existing each get a concrete meaning, trigger, and effect.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening states the resource (the user's personal memory folder and which PCs share it), and the second paragraph explicitly excludes the sibling case: 'Not for teams: project brains shared with teammates are brain_checkpoint.' However, the tool is an omnibus of modes (folder config, share, code redemption, export/import, reindex) that the name 'brain_folder' does not signal, so an agent must read the whole description to learn the full scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Nearly every mode is gated on an explicit trigger: call with `path` when the user names a folder, use `path="share"` when the user asks other PCs to connect, use `path=<the code>` when any Graph-MIND code is pasted, and 'Set it only when the user has explicitly agreed' for share_existing. It also names the alternative (brain_checkpoint) and pre-empts a question ('never ask the user which kind it is').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_forgetA
DestructiveIdempotent

Delete what the user wants gone from memory: "delete the password I typed earlier", "그 토큰 지워줘", "forget what I said about my ex".

    Always two calls. First `query`: what to look for, in general words ("password", "wifi",
    "DB login"); never repeat a secret the user typed. It returns numbered candidates with
    masked previews. Show the user exactly those previews and ask which to delete; never
    quote the original text. Then call again with the `ids` the user picked, and only those.

    Deleting removes them from this PC, its search indexes, the shared memory and the user's
    other PCs. This exchange about deleting is not saved either. The AI app's own chat
    history is separate and untouched (Claude Code keeps ~/.claude/projects).
    
ParametersJSON Schema
NameRequiredDescriptionDefault
idsNo
queryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this destructive/non-read-only/idempotent, and the description goes well beyond them by specifying deletion scope (this PC, search indexes, shared memory, other PCs), that the deletion exchange itself is not saved, and that app chat history is separate. It does not, however, describe failure behavior or what happens if ids match nothing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Longer than most definitions, but front-loaded with the purpose and each block (examples, two-call protocol, deletion scope) earns its place. Slightly more verbose than strictly necessary, but no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is unnecessary; the description instead supplies everything an agent needs to safely drive a destructive, two-step deletion — trigger conditions, privacy constraints, and blast radius. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the load, and it does: query must use general words and never repeat a secret the user typed; ids must be exactly the user-selected ones from the prior call. The mutual exclusivity/two-phase usage of the two optional params is implied clearly though not spelled out formally.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete what the user wants gone from memory') and grounds it in three concrete example utterances spanning languages. An agent can immediately distinguish this from brain_remember/brain_recall.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit two-call protocol: first query with general words, then a second call with the selected ids 'and only those.' It also states the required interaction pattern (show masked previews, ask the user which to delete, never quote the original).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_recallA
Read-onlyIdempotent

Raw lookup: the matching memories and turns as structured rows, not a ready context.

    To answer the user's question from their past, use brain_context instead; it returns one
    bounded text packet ready to read. Use brain_recall to inspect or list: the ids and fields
    of what matched (e.g. before brain_forget or `supersedes_memory_id`), one thing's history
    in order, or what the store knows about.

    `entity` answers "what happened to X, in order": every memory about that one thing (the
    auth module, this project, my address), oldest first, with replaced entries marked and the
    current one picked out. Similarity search returns only the nearest one or two of four
    decisions made about one thing in four sessions; this returns all four. With neither
    `query` nor `entity`, it lists what the store knows about, busiest first.

    `recent`, `since`, `about_assistant` and `around` mean the same as in brain_context.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
as_ofNoISO time: only what had happened by then (default now).
limitNoMost items to return.
queryNo
sinceNo
aroundNo
entityNo
recentNo
scopesNoOnly these scopes, e.g. ["global"] or a project; default all.
about_assistantNo
knowledge_cutoffNoISO time: only what had been saved by then (default as_of).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: results are raw rows, `entity` returns oldest-first with replaced entries marked and the current one picked out, and the no-filter default lists busiest-first. It stops short of describing pagination or result-size behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the key differentiator (raw rows vs ready context), then routing, then per-parameter behavior. Four dense paragraphs are on the long side but nearly every sentence carries distinct information; the `entity` versus similarity-search contrast earns its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return format needn't be restated, and the description covers routing, ordering, defaults, and the entity mode. The one gap is `query`, whose matching semantics are only obliquely implied by the similarity-search aside.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, so the description must compensate, and it largely does: `entity` is explained in depth and `recent`/`since`/`about_assistant`/`around` are cross-referenced to brain_context's semantics. `query` — arguably the primary selector — is never defined in either schema or description, which keeps this below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Raw lookup: the matching memories and turns as structured rows') and immediately contrasts the output shape with brain_context's 'ready context'. An agent can distinguish it from siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use routing ('To answer the user's question from their past, use brain_context instead') plus three concrete recall use cases (inspecting ids/fields before brain_forget or supersedes_memory_id, one thing's history, listing store contents). Alternatives and conditions are named, not implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

brain_rememberA

Save what the user just told you, in their own words. Call this proactively.

    A fact that can change later (where they live or work, a pet, a preference, a plan, a
    number they track): also pass `about` (who or what, e.g. "Kongi", "me") and `attribute`
    (which property, a short English snake_case name, e.g. "breed", "home_city",
    "favorite_coffee"). A later value with the same `about` and `attribute` replaces this
    one and recall shows both: the value now and what it was before. Use the same
    `attribute` names every time, and never put the value in the name: "last_trip", not
    "last_trip_paris", or the next trip will not replace it.

    Use it the moment the user mentions anything about their life, work, plans, preferences,
    people, places, meals, purchases, health, decisions or events, e.g. "I had kimchi fried
    rice today", "my dog is called Kongi", "we moved the meeting to Tuesday". Do not ask
    whether to save it and do not wait to be told "remember this". Only `content` is
    required: put the user's own sentence there verbatim. Add `entities` (who or what it is
    about) and `effective_at` (when it happened, ISO time) when you know them. If it updates
    something remembered earlier, pass that memory's id as `supersedes_memory_id`.
    Decisions and their reasons are memories too: `memory_type="decision"`, the reason in
    `content`, the project or component in `entities`.

    Save silently. Do not tell the user you saved it ("I've noted that", "저장해 뒀어"); just
    carry on with the conversation. Talk about memory only if the user asks what you remember
    or whether something was saved.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoFree labels to find it by.
aboutNo
scopeNoglobal, or a project scope to keep it apart.global
titleNoShort title; default: the first line of content.
contentYes
entitiesNo
modalityNoOptional; usually left empty.
attributeNo
memory_idNo
retentionNoOptional; usually left empty.
attributesNoOptional; usually left empty.
confidenceNoOptional; usually left empty.
importanceNoOptional; usually left empty.
source_refNoWhere it came from: a file, URL or id.conversation
memory_typeNofact
source_typeNoLeave as is.mcp-client
effective_atNo
memory_classNoOptional; usually left empty.
related_memory_idsNoIds of memories this one relates to.
supersedes_memory_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false): it discloses that a later value with the same `about`/`attribute` REPLACES the earlier one, that recall surfaces both current and prior values, that saving is silent with no user-facing confirmation, and that decisions should be stored with a reason. These are exactly the non-obvious behaviors an agent would otherwise get wrong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core directive, then logically grouped into identity/supersession, triggering, and silence rules. It is long for a tool description and repeats the 'use the same attribute names' point twice, but nearly every sentence carries operational guidance rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description covers the calling contract, supersession model and the required `content` field. The main gap is the absence of any guidance on `scope` (project vs global) and on when the optional metadata params matter, which for a 20-param tool is a real but secondary omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 60%, so the description must carry weight, and it does for the semantically tricky params: it explains `about`/`attribute` pairing, the snake_case naming convention with a failure example ('last_trip', not 'last_trip_paris'), `content` as verbatim user text, plus `entities`, `effective_at`, `supersedes_memory_id` and `memory_type`. It leaves roughly a third of the 20 params (scope, tags, modality, retention, confidence, importance, memory_class, related_memory_ids) undocumented, though the schema marks most of those 'optional; usually left empty'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: 'Save what the user just told you, in their own words,' which immediately separates it from brain_recall, brain_forget and brain_context. The proactive-call directive further pins down its role in the sibling set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use with concrete trigger examples ('I had kimchi fried rice today', 'my dog is called Kongi'), explicit when-not ('do not wait to be told remember this'), and an explicit anti-pattern ('do not ask whether to save it'). No alternative tool is named, but the routing conditions are unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

code_activityA
Read-onlyIdempotent

Code changes the capture service recorded, with diff excerpts, filtered by project, time range (happened_from/happened_to, ISO), file, symbol or kind. For "what did I change in auth.py last week?" or "when did the parser change?". Empty unless a code folder is being watched (automatic-capture.json, code_workspaces).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMost items to return.
symbolNo
file_pathNoPath inside the project, e.g. src/auth.py.
project_idNoA watched project's id; default all.
change_kindNoADDED, MODIFIED or DELETED.
happened_toNo
happened_fromNo
max_diff_charsNoDiff excerpt size per change, 200-20000.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive and closed-world, so the safety profile is covered. The description adds real context beyond that: results carry diff excerpts, results are silently empty without a watched code folder, and it names the config artifacts (automatic-capture.json, code_workspaces) that control that behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool returns, then the filter axes, then the caveat about watched folders. Dense but every clause carries information; slightly long for a single paragraph, with the caveat tucked at the end where it is easiest to miss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return fields, and it correctly focuses on filtering, diff excerpting, and the empty-result precondition. Nothing essential for a correct call is missing, though the default limit/max_diff_chars tradeoffs are only in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 63%; the description supplies meaning for the undocumented parameters by naming the filter set (project, happened_from/happened_to as ISO, file, symbol, kind) and tying them to example queries. limit and max_diff_chars are left to their schema text, which already documents them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: code changes recorded by the capture service, with diff excerpts, plus the filter axes (project, time range, file, symbol, kind). This is clearly distinct from the brain_* sibling tools, so an agent can select it 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives two concrete example questions ('what did I change in auth.py last week?', 'when did the parser change?') that map directly onto the filters, and states the precondition that results are empty unless a code folder is being watched. It does not name any alternative tool to prefer or avoid, but no sibling overlaps this domain.

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.

  1. 5 tool updatesv0.9.5
    • Changedbrain_checkpoint1 field changed
      • addedInput schema / properties / source_refs / description
        Added value: +"Links or ids it is based on."
    • Changedbrain_context7 fields changed
      • addedInput schema / properties / as_of / description
        Added value: +"ISO time: only what had happened by then (default now)."
      • addedInput schema / properties / knowledge_cutoff / description
        Added value: +"ISO time: only what had been saved by then (default as_of)."
      • addedInput schema / properties / limit / description
        Added value: +"Most items to return."
      • addedInput schema / properties / max_chars / description
        Added value: +"Size cap of the returned text."
      • addedInput schema / properties / policy / description
        Added value: +"auto skips requests with no sign of the past."
      • addedInput schema / properties / query / description
        Added value: +"The user's request, in their words."
      • addedInput schema / properties / scopes / description
        Added value: +"Only these scopes, e.g. [\"global\"] or a project; default all."
    • Changedbrain_recall4 fields changed
      • addedInput schema / properties / as_of / description
        Added value: +"ISO time: only what had happened by then (default now)."
      • addedInput schema / properties / knowledge_cutoff / description
        Added value: +"ISO time: only what had been saved by then (default as_of)."
      • addedInput schema / properties / limit / description
        Added value: +"Most items to return."
      • addedInput schema / properties / scopes / description
        Added value: +"Only these scopes, e.g. [\"global\"] or a project; default all."
    • Changedbrain_remember12 fields changed
      • addedInput schema / properties / attributes / description
        Added value: +"Optional; usually left empty."
      • addedInput schema / properties / confidence / description
        Added value: +"Optional; usually left empty."
      • addedInput schema / properties / importance / description
        Added value: +"Optional; usually left empty."
      • addedInput schema / properties / memory_class / description
        Added value: +"Optional; usually left empty."
      • addedInput schema / properties / modality / description
        Added value: +"Optional; usually left empty."
      • addedInput schema / properties / related_memory_ids / description
        Added value: +"Ids of memories this one relates to."
      • addedInput schema / properties / retention / description
        Added value: +"Optional; usually left empty."
      • addedInput schema / properties / scope / description
        Added value: +"global, or a project scope to keep it apart."
      • addedInput schema / properties / source_ref / description
        Added value: +"Where it came from: a file, URL or id."
      • addedInput schema / properties / source_type / description
        Added value: +"Leave as is."
      • addedInput schema / properties / tags / description
        Added value: +"Free labels to find it by."
      • addedInput schema / properties / title / description
        Added value: +"Short title; default: the first line of content."
    • Changedcode_activity5 fields changed
      • addedInput schema / properties / change_kind / description
        Added value: +"ADDED, MODIFIED or DELETED."
      • addedInput schema / properties / file_path / description
        Added value: +"Path inside the project, e.g. src/auth.py."
      • addedInput schema / properties / limit / description
        Added value: +"Most items to return."
      • addedInput schema / properties / max_diff_chars / description
        Added value: +"Diff excerpt size per change, 200-20000."
      • addedInput schema / properties / project_id / description
        Added value: +"A watched project's id; default all."
  2. 1 tool updatev0.9.0
    • Changedbrain_folder2 fields changed
      • addedInput schema / properties / export_to
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Export To"
        +}
      • addedInput schema / properties / import_from
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Import From"
        +}
  3. 7 tool updatesv0.1.0
    • First observedbrain_checkpoint
    • First observedbrain_context
    • First observedbrain_folder
    • First observedbrain_forget
    • First observedbrain_recall
    • First observedbrain_remember
    • First observedcode_activity

TDQS

A4.4/5.0

Scored across 7 tools

Disambiguation4/5

Most tools target clearly distinct concerns (save vs delete vs team-sharing vs memory-location), and the descriptions explicitly route agents between the tricky pairs (brain_recall vs brain_context, brain_checkpoint vs brain_folder). However, brain_remember/brain_recall/brain_context all revolve around reading and writing the same memory store, and the boundary is only clear after reading the long routing prose, so some misselection risk remains.

Naming Consistency4/5

Six of seven tools use a clean, consistent brain_<verb_or_noun> prefix (remember, forget, recall, context, checkpoint, folder). Only code_activity breaks the pattern, which is a minor deviation for what is arguably a separate domain.

Tool Count5/5

Seven tools is well-scoped for a personal/team memory server, with no redundant or trivial entries. Each tool maps to a real capability (capture, inspect, answer, delete, share, locate, team), so the count feels earned rather than padded.

Completeness4/5

The memory lifecycle is nearly fully covered: create (remember), read (recall/context), delete (forget), update-by-supersession, plus sharing/export/import. The main gap is that there is no explicit update tool, and code_activity is a lone read-only tool with no corresponding code-search or code-management surface, but core workflows are intact.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    A graph-based MCP server that provides AI coding agents with persistent memory to store patterns, track complex relationships, and retrieve knowledge across sessions. It leverages graph structures to handle temporal queries and relational paths that traditional vector stores often miss.
    252
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Persistent memory for Claude Code. Automatically indexes every conversation and provides production-grade hybrid search (BM25 + vectors + reranker) via MCP tools. 100% local, zero config, zero API keys, zero invoice.
    16
    17 npm
    7
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Cross-machine memory system for Claude Code that records sessions as searchable markdown, syncs across machines via Git, and exposes full-text search, semantic search, session summarization, and a knowledge graph through an MCP server.
    24 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Saves the user's exact words as immutable, SHA-256-hashed captures before anything else, then derives events, entities, context cards, and causal hypotheses — every fact traceable to its verbatim source. Local-first personal memory for Claude Code, Codex, and any MCP client.
    13
    3
    MIT