mcp-memory
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| rememberA | Stores a text permanently in memory. Reports back which existing entries resemble the new one - so contradictions get noticed instead of silently sitting side by side. Args: text: The content to remember. tags: Optional keywords, separated by spaces or commas. Convention: the project, i.e. WHERE the knowledge belongs. art: WHICH KIND of knowledge - exactly one of: schnittstelle (interface: signature, file name, command, data format), fallstrick (pitfall: the obvious approach is wrong because ...), entscheidung (decision, made this way, with rationale), messwert (measurement: a number plus its measurement criterion), arbeitsweise (way of working), verlauf (chronicle - excluded from recall's default view). ersetzt: Ids of outdated entries that this one supersedes (e.g. "12,34"). They are not deleted, only removed from the default view. |
| verdichtenA | Finds groups of entries that say largely the same thing. Does not summarize anything itself - that's a judgment call. The tool delivers the groups; the caller writes a new entry and supersedes the old ones via remember(..., ersetzt="..."). Args:
marke: Only consider entries from this project (empty = all). Same
reading as recall and themen: the tag is searched as a phrase in
the tag field, so multi-tagged entries and sub-tags are included
("spiel3d-test" also matches "spiel3d-test Nachtfrost"). Used to
be called |
| pruefeA | Has a small language model judge how the named entries relate to each other. Counterpart to verdichten (consolidate): that one finds groups by word overlap, this one says whether a contradiction is behind it or just a newer state of affairs. All pairs from the named ids are judged. Does NOT judge authoritatively. Measured against 70 pairs: 67 % correct, 9 % false contradiction alarms, but only 2 of 6 real ones caught - and the model says FORTSCHRITT (progress) in 50 of 70 cases. The result says where to look closer, not what the actual case is. Each pair is asked in BOTH directions, and only what comes back the same both times is reported; otherwise it says "uneinig" (disputed/unclear). Without this, the order of the supplied ids would influence the outcome (measured: 2 of 5 pairs were symmetric). This costs double, i.e. roughly 10 seconds per pair, which is why the cap is 5 pairs asked per call. Opt-in: needs MEMORY_FC_URL and MEMORY_FC_MODELL pointing at any OpenAI-compatible endpoint (local model, LAN device, or cloud provider; MEMORY_FC_SCHLUESSEL for providers that want a key). Without both set, this tool does nothing and says so - there are no defaults, so nothing is contacted unless it was set up deliberately. Note that when it IS set up, up to 200 characters of each note are sent to that endpoint. If it is unreachable, the tool says so and returns nothing - all other tools are unaffected. Args: ids: Two or more entry ids, e.g. "249,255". |
| vergessenA | Marks entries as outdated, without a replacement. They disappear from recall's default view but remain findable with mit_veraltet=True. Nothing is deleted. Args: ids: One or more entry ids, e.g. "12,34". grund: Why - appears later in the display of outdated entries. |
| recallA | Searches memory via full-text search, best matches first. Also finds inflected forms ("Rangliste" -> "Ranglisten"/rankings) and word parts of compounds ("Katalysator" -> "Fusionskatalysator"). By default returns a PREVIEW per hit (id, kind, date, title line). Get the full text of the interesting ones afterwards with zeige("376,481") - or set voll=True right away if the question is narrow enough. Args: query: Search term(s), FTS5 syntax allowed (e.g. "sqlite AND fts5", "proj*"). limit: Maximum number of hits (default 8). Measured: below this, exact matches drop out due to morphology blending them in; above it, mostly just the returned payload grows. art: Restrict to kinds of knowledge, e.g. "fallstrick,entscheidung". Possible values: schnittstelle (interface), fallstrick (pitfall), entscheidung (decision), messwert (measurement), arbeitsweise (way of working), verlauf (chronicle), gemischt (mixed/not yet classified), alle (all). Default: everything except verlauf - otherwise the chronicle drowns out every search for a specific detail. marke: Restrict to a project, e.g. "raumschiff-project". Multiple tags separated by comma or space are OR-combined. Sub-tags are included: "leuchtturm" also matches "leuchtturm-project", but conversely "mcp-memory-server" does not match "mcp-memory". themen() lists which tags exist. Nothing outside the tag can show up in the hits; if the best match lies outside, a last line names it. voll: Full text instead of preview (default: no). mit_veraltet: Also show superseded entries (default: no). |
| themenA | Shows which projects exist - or the title index of one project. Counterpart to recall: that searches for words, this browses. Without an argument, the tag board (which project, how many entries, how they're distributed across kinds of knowledge); with an argument, that project's title lines, newest first, one page at a time - the last line says how many more there are and how to get them. Page 1 answers "what happened here lately"; for anything older use recall(query, marke="..."). What this is for: recall only finds what you already know to ask for.
Someone picking a project back up after months doesn't remember the
terms anymore - and needs a list first, from which to pull up the entry.
Follow up with Outdated entries don't count, as everywhere in the default view. The chronicle does count here though: when browsing it's the scaffolding, not the filler that drowns out every search. Args: marke: Project, e.g. "raumschiff-project". Empty = tag board. limit: Rows per page (default 40 for the board, 30 for the title index). seite: Page of the title index (default 1 = the newest). alle: Whole title index at once, grouped by kind. Large for a big project - prefer recall(query, marke=...) when you know a term. |
| zeigeA | Returns the named entries in full text. Counterpart to recall's preview: first see which entry is meant, then read only that one. Outdated entries are explicitly included here - whoever asks for the id means that one too, even if it's outdated. One call returns about 6000 characters of full text, in the order asked. Whatever doesn't fit comes back as a title line plus the call that fetches it - nothing is dropped silently. The pieces of one cut-up memo are never separated. Args: ids: One or more entry ids, e.g. "376,481". Most wanted first. voll: Everything asked for at once, without the cap (default: no). |
| einordnenA | Sets the kind of knowledge for existing entries. Meant for doing in passing: whatever recall surfaces anyway gets its kind assigned along the way. The backlog doesn't have to be sorted in one sitting. Args: ids: One or more entry ids, e.g. "376,481". art: Exactly one of: schnittstelle (interface), fallstrick (pitfall), entscheidung (decision), messwert (measurement), arbeitsweise (way of working), verlauf (chronicle). "gemischt" (mixed) undoes the classification. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Each tool has a distinct primary role: store (remember), search (recall), browse (themen), fetch (zeige), classify (einordnen), forget (vergessen), and two consolidation helpers (verdichten, pruefe). The closest pairs, verdichten/pruefe and vergessen/remember with ersetzt, are clearly delineated by the descriptions, but the fine distinction between finding duplicates versus judging contradictions could still cause occasional hesitation.
Tool names mix English ('remember', 'recall') with German ('verdichten', 'pruefe', 'vergessen', 'zeige', 'einordnen') and one noun ('themen') among otherwise imperative verbs. All names are single lowercase tokens, so they are readable, but the convention is not uniform enough for a high consistency score.
Eight tools are well-scoped for a personal memory server, covering create, read, search, browse, classify, forget, and two targeted consolidation helpers without obvious redundancy. Each tool earns its place and the set does not feel bloated or thin.
The core lifecycle is covered: create (remember), read (recall, zeige, themen), update knowledge kind (einordnen), soft delete (vergessen), and consolidation (verdichten, pruefe). Minor gaps exist—no way to edit tags of an existing entry and no hard delete—but these appear intentional and can be worked around by creating a new entry and superseding the old one.