learned-experience
Manage a persistent, local-first memory of solved problems for AI agents over MCP: search past experiences, record new lessons, and update/curate the catalogue.
Recall: Search past experiences by problem text, exact error signals, context tags, and score threshold; returns ranked fixes with confidence.
Record: Store a lesson with problem, outcome, signals, fix, avoid-list, context, root cause, attempts, and provenance; duplicates are merged or linked.
Reinforce: Report whether a recalled fix worked; updates confidence and adds failure notes to the avoid-list.
Amend: Patch fields of an existing record.
Forget: Permanently delete a wrong or obsolete record.
Consolidate: Find clusters of similar episodes and write one generalised rule.
Stats: View counts, success rate, duplicates prevented, embedding status, and common context tags.
Transfer: Export or import the catalogue as JSONL, with idempotent merging and embedding recomputation.
Install and hook integration: Set up the MCP server for many agents, plus hooks for automatic recall/record/reinforce in supported hosts.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@learned-experiencerecall how I fixed the EACCES npm install error last time"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
learned-experience
A memory of solved problems for AI agents. Any agent that speaks MCP can check it before working, apply what worked last time, report whether it worked, and record new lessons. Nothing has to be learned twice, and the catalogue travels with you across models, tools, and machines.
Works with any MCP host: Claude Code, Claude Desktop, Cursor, Windsurf, Codex CLI, Gemini CLI, or anything built on an MCP client. The server, tools, and data are identical everywhere.
One-command setup:
npx -y learned-experience installdetects your agents and configures each one.Automatic in Claude Code, Codex, and Gemini CLI: hooks make recall and recording happen without the model having to remember.
Your data, in one file: a SQLite database you own, plus a small embedding model that runs on your machine. No account, no API key, nothing sent anywhere. Sync the file, export it, or serve it over HTTP to carry it between machines.
Deterministic where it matters: exact error fingerprints, lexical search, fixed-weight fusion, Bayesian confidence.
Self-improving: outcomes feed back into ranking, and duplicates are merged instead of stored twice.
Portable: JSONL export and import, with secrets redacted and paths made machine-independent.
Quick start
Requires Node 22.13 or newer.
npx -y learned-experience installThat detects the agents on your machine and configures each one: the MCP server everywhere, plus hooks where the host supports them. It is safe to re-run, backs up every file it touches (<file>.bak), never removes anything that is not its own, and --dry-run shows the plan without writing. Then restart the agents. The first use downloads a 23 MB embedding model into ~/.learned-experience/models, after which everything runs offline.
Host | What | What you still do |
Claude Code | Registers the server with | Restart Claude Code |
Codex CLI and the Codex desktop app | Registers the server with | Run |
Gemini CLI | Adds the server and two hooks to | Nothing |
OpenClaw | Adds the server under | Restart the gateway. OpenClaw hooks are in-process plugins, not shell commands, so the model follows the protocol from MCP instructions. |
Cursor | Adds the server to | No hooks exist, so paste the reminder from Hosts without hooks into your Cursor rules |
Windsurf | Adds the server to | Same: paste the reminder from Hosts without hooks into your global rules |
Claude Desktop | Adds the server to | Restart Claude Desktop |
Pick hosts explicitly with install codex gemini, remove everything with uninstall, and use --local when running from a clone so hosts launch your build instead of the npm package.
Plugins (alternative to the installer; same result, managed by the host's plugin system, updated when a new version is published):
# Claude Code
claude plugin marketplace add fitz2882/learned-experience
claude plugin install learned-experience@learned-experience
# Codex CLI and desktop app
codex plugin marketplace add fitz2882/learned-experience
codex plugin add learned-experienceBoth plugin systems check the marketplace for new versions in the background and pick up a release when its version number changes. To force it: claude plugin update learned-experience or codex plugin marketplace upgrade.
One catalogue for all of them. Every host launches the same server, and the server reads the same database, so a lesson recorded in Codex is recalled in Claude Code, Gemini, Cursor, or OpenClaw, and vice versa.
Any other MCP host, by hand:
{
"mcpServers": {
"learned-experience": {
"command": "npx",
"args": ["-y", "learned-experience"]
}
}
}Related MCP server: Recall
What is universal and what is per host
The MCP server, its eight tools, the record format, the search, and the database are the same on every host and with every model. Nothing in them knows which agent is calling. That is the part that makes the catalogue portable across providers.
Hooks are not part of MCP. Each host decides whether it has hooks, which events exist, and what the payloads look like. Claude Code has a dedicated tool-failure event. Codex and Gemini CLI only have a general after-tool event, so the hook checks the response for signs of failure itself. OpenClaw's hooks are in-process TypeScript plugins rather than shell commands. Cursor, Windsurf, and Claude Desktop have no hooks at all. The single learned-experience hook command understands every dialect it has been taught (Claude Code, Codex, Gemini CLI), and hosts without hooks fall back to the protocol the server sends as MCP instructions, which every host injects into the model's context.
How it works
Every record is a compact, standardised lesson:
Field | Meaning |
| One generic line: what went wrong or what was hard |
| Exact error text, failing command, or symptom. This is the deterministic key. |
| Tags: language, framework, tool, OS |
| What worked, concrete enough to repeat |
| What did not work, or made it worse |
| Why it happened, if known |
|
|
| Derived from real outcomes: |
The loop the agent runs:
Recall before working. Exact signal matches are found without any model. Similar problems are found by combining local embeddings with lexical search.
Apply the best fix, respecting the avoid-list.
Reinforce: report whether it worked. This is what makes ranking improve over time.
Record anything non-trivial once solved. Duplicates are merged automatically, and the same symptom with a different fix is linked rather than duplicated.
Dismiss a hit that did not apply. The record is never recalled for that query again, and its fuzzy matches are damped everywhere, so false positives fade instead of repeating.
It learns from anything the agent records, not just tool errors: tricky refactors, surprising library behaviour, build configuration, design choices that turned out badly.
What the hooks do
MCP cannot see a model's reasoning, so without hooks the model has to remember to use the catalogue. Hooks remove that dependency. They all run the same command, learned-experience hook, which dispatches on the host's event name:
Moment | Claude Code | Codex | Gemini CLI | What happens |
A tool call fails |
|
|
| The error text becomes a query. Matching fixes are injected with the instruction to apply one and |
You send a request |
|
|
| The request becomes a query. If past experience looks relevant it is injected before the model starts. Silent otherwise; skipped for short prompts and slash commands. |
The turn ends |
|
| not available | If the turn had failed tool calls (or was very long) and nothing was recorded, the model is asked once whether something is worth recording. Never twice in a turn, never after a |
What the model sees after a failure:
learned-experience: 1 past experience matches this failure.
1. [x_9f1c2a4b] Global npm install fails with EACCES | fix: npm config set prefix ~/.npm-global … | avoid: sudo npm install -g | (confidence 0.8, exact match)
Apply the best-fitting fix first, then call learned-experience `reinforce` with its id and whether it worked. If none fit and you solve it another way, call `record` once.Failures caused by you (interrupts, permission denials) and failures of learned-experience's own tools are ignored, so the hooks cannot loop.
install writes these for you. By hand, the Claude Code shape in ~/.claude/settings.json is:
{
"hooks": {
"PostToolUseFailure": [{ "hooks": [{ "type": "command", "command": "npx -y learned-experience hook", "timeout": 30 }] }],
"UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "npx -y learned-experience hook", "timeout": 20 }] }],
"Stop": [{ "hooks": [{ "type": "command", "command": "npx -y learned-experience hook", "timeout": 20 }] }]
}
}Codex uses the same shape in ~/.codex/hooks.json with PostToolUse (see examples/codex-hooks.json). Gemini CLI uses hooks inside ~/.gemini/settings.json with AfterTool and BeforeAgent, timeouts in milliseconds, and a name on each hook.
Hosts without hooks
Cursor, Windsurf, Claude Desktop, and OpenClaw cannot run these shell hooks, so there the model has to remember to use the catalogue. The server sends its protocol as MCP instructions, which these hosts inject into the model's context, and a short standing reminder in the host's rules makes it reliable. Paste this into Cursor's rules, Windsurf's global rules, CLAUDE.md, or AGENTS.md:
Before investigating any error or failing command, call the learned-experience `recall` tool with the exact error text in `signals`.
After applying a recalled fix, call `reinforce` with the result. After solving something non-trivial, call `record` once.Tools
Tool | Purpose |
| Has this problem, or a similar one, been solved before? Returns ranked hits with fix, avoid-list, and confidence. |
| Store a lesson. Merges or links duplicates automatically. |
| Report whether a recalled fix worked. Failure notes go on the avoid-list. |
| Report that a recalled record did not apply to the problem. Suppresses it for that query and damps its fuzzy matches. |
| Patch fields of an existing record. |
| Delete a record. |
| Cluster similar episodes so the agent can write one generalised |
| Counts, success rate, duplicates prevented, embedding status. |
| Export or import JSONL. |
Resource learned-experience://protocol and prompt solve carry the same protocol text the server sends as instructions.
Command line
Useful for scripts, other hosts, or just looking at what you have:
npx -y learned-experience install --dry-run # show what setup would change
npx -y learned-experience install codex gemini # set up specific hosts
npx -y learned-experience uninstall # remove everything it added
npx -y learned-experience recall "postgres connection refused"
npx -y learned-experience stats
npx -y learned-experience export backup.jsonl
npx -y learned-experience import backup.jsonl
npx -y learned-experience --http --port 3111 # streamable HTTP at http://127.0.0.1:3111/mcpHTTP mode is for hosts that want a URL, or for sharing one catalogue across machines (see below).
Taking it with you
"Local" means the data is yours and nothing phones home. It does not mean the catalogue is stuck on one machine. Everything lives in one file, ~/.learned-experience/experiences.db, and there are three ways to carry it:
Sync the folder. Point
LEARNED_EXPERIENCE_HOMEat a directory in iCloud Drive, Dropbox, Syncthing, or a git repo, on every machine. Simplest, and fine when one machine at a time is writing. Two machines writing at the same moment through a file-sync service can conflict, as with any SQLite file; if that is your situation, use option 3.Export and import.
exportwrites JSONL,importmerges it. Import is idempotent: importing the same file twice changes nothing. Embeddings are not exported; the destination recomputes them with its own model. Good for hand-offs, backups, and sharing a catalogue with a teammate.Serve it. Run
npx -y learned-experience --httpon one machine (or a small VPS) and point the other hosts at the URL. One catalogue, many agents, no sync at all. Put it behind your own auth before exposing it beyond localhost.
On a single machine, several agents can share the database at once. Each server picks up the others' writes.
Configuration
All optional.
Variable | Default | Meaning |
|
| Data directory |
|
| Database path |
|
| The only directory the |
|
|
|
| per provider |
|
| per provider | Any OpenAI-compatible endpoint, or the Ollama base URL |
|
| Key for remote providers |
| unset |
|
|
|
|
|
| Failed tool calls needed before the end-of-turn reminder |
|
| Tool calls needed before the end-of-turn reminder |
|
| Tool calls after which the reminder fires even without failures |
Changing the embedding model is safe. Stored vectors are tagged with the model id, and stale ones are recomputed at startup.
Privacy
Records are meant to travel, so every string is cleaned on write: API keys, tokens, JWTs, bearer headers, key=value secrets, emails, and URL credentials are redacted, and home directories become ~. Nothing leaves your machine unless you choose a remote embedding provider or export a file.
Development
npm install
npm test # vitest, in-memory database, deterministic fake embedder
npm run typecheck
npm run smoke # builds, then drives the real server over stdio with the real local modelDesign rationale, the retrieval fusion, and the dedup rules are in DESIGN.md.
License
MIT
Available Tools
8 toolsamendAmend an experienceAIdempotent
Patch fields of an existing record (better fix, extra avoid items, corrected context). Only supplied fields change.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| patch | Yes | Fields to replace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (non-read-only, idempotent, not destructive). The description adds the critical partial-update behavior—only supplied fields are changed—which goes beyond what readOnlyHint/idempotentHint convey. It does not mention return behavior or failure modes, but those are not essential given 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the core behavior, scope, and an illustrative example with no filler. The critical constraint 'Only supplied fields change' is placed prominently at the end of the description, making it easy for an agent to parse.
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 patch operation with a rich nested schema, the description plus schema covers the essentials: what to patch, that it is an existing record, and that the update is partial. With no output schema, return-value explanation is unnecessary. The only notable gap is lack of explicit sibling routing, but that is more a usage-guidelines concern.
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 roughly 50%: the patch object has 'Fields to replace', but id has no description. The tool description reinforces the partial-replacement meaning and gives a few examples, but it does not enumerate or explain all patch subfields. Overall the schema names and enums are reasonably self-explanatory, so this is adequate but not exceptional.
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 ('Patch') and resource ('fields of an existing record'), immediately distinguishing it from create/read/delete operations. The parenthetical examples ('better fix, extra avoid items, corrected context') clarify the kind of amendments intended, and 'Only supplied fields change' pins down the exact scope.
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 word 'existing' implies this is for updates rather than new records, and 'only supplied fields change' clarifies partial overrides. However, no explicit guidance is given about when to prefer this tool over siblings like record, reinforce, or forget, and no alternative conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consolidateFind clusters of similar experiencesARead-onlyIdempotent
Deterministic clustering of episodes that look like the same underlying lesson. For each cluster, write ONE record with kind='rule' that generalises them. Read-only; nothing is changed by this call.
| Name | Required | Description | Default |
|---|---|---|---|
| min_size | No | Minimum cluster size to report (default 3) | |
| threshold | No | Cosine similarity to cluster at (default 0.8) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds 'deterministic', 'Read-only; nothing is changed', and tells the agent to emit one rule record per cluster, which is useful context on top of the readOnlyHint and idempotentHint annotations. The word 'write' is slightly ambiguous (could be read as mutation), though the following 'Read-only' mitigates it; no direct contradiction with annotations.
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 short sentences with no filler and purpose front-loaded. The only minor flaw is the ambiguous 'write' phrasing, which costs a point.
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 simple optional-parameter tool with no output schema, the description gives enough to understand what the call returns conceptually (a rule record per cluster) and its read-only safety. It could be clearer about the exact return payload or cluster format, but it's largely sufficient.
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 fully describes both parameters, including defaults, ranges, and meaning; the description contributes nothing about min_size or threshold, so baseline 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?
States a specific action ('deterministic clustering of episodes') and a concrete output ('ONE record with kind='rule'') that generalises them. This clearly separates it from sibling memory tools like recall or transfer.
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?
Implies usage when multiple episodes represent the same underlying lesson and need generalisation into a rule, but it never explicitly states when to prefer consolidate over siblings or when not to use it. There are no exclusion conditions or alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forgetDelete an experienceADestructiveIdempotent
Permanently remove a record that is wrong or obsolete.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds the crucial behavioral trait of permanence ('Permanently remove'), which is not fully captured by the annotations, and specifies what is destroyed (the wrong or obsolete record). No contradiction with annotations.
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 a single concise sentence with no filler. The core action ('Permanently remove') is front-loaded, and the condition ('wrong or obsolete') is placed right after, making it instantly scannable.
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 simple delete operation with one required parameter, no output schema, and destructiveness already annotated, the description is nearly complete. The only gap is the lack of explicit parameter explanation, but the overall context is sufficient for an agent to use 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?
The schema has 0% description coverage for its single 'id' parameter, and the description does not mention the parameter at all. The tool's purpose implies the id identifies the record to remove, but the description does not explicitly state how the parameter maps to the operation, so it fails to compensate for the low 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 states a specific verb and resource: 'Permanently remove a record', which clearly maps to the title 'Delete an experience'. It distinguishes from siblings implicitly—none of the other sibling tools (record, recall, amend, etc.) perform deletion, so the purpose 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 gives a clear condition for use: the record is 'wrong or obsolete'. This tells an agent when to invoke forget versus other actions, though it does not explicitly name alternatives or exclusions. The context is clear and sufficient for most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallRecall past experienceARead-onlyIdempotent
Check whether this problem (or a similar one) has been solved before. Call BEFORE investigating. Returns ranked hits with fix, avoid-list and confidence. Exact error text in signals enables deterministic matching; semantic + lexical search catches near matches. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | Restrict to 'episode' or 'rule' records | |
| limit | No | Max hits (default 5) | |
| context | No | Tags: language, framework, tool, OS | |
| problem | Yes | One-line generic description of the problem | |
| signals | No | Exact error messages, failing commands, symptoms | |
| min_score | No | Drop non-exact hits below this score (default 0.35) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and idempotent behavior, so the description adds value by disclosing the return shape ('ranked hits with fix, avoid-list and confidence') and the matching mechanism ('Exact error text in signals enables deterministic matching; semantic + lexical search catches near matches'). This is meaningful behavioral context beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and every sentence contributes: purpose, when to call, return content, input strategy, and read-only nature. 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 read-only search tool with no output schema, the description adequately covers return expectations, matching behavior, and invocation timing. The input schema handles parameter details, and annotations cover side-effect safety, making the description complete for an agent 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 baseline is 3. The description compensates by explaining the role of the 'signals' parameter in achieving deterministic matching and near-match search, which adds semantic meaning not present in 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 states a specific verb and resource: 'Check whether this problem (or a similar one) has been solved before.' This clearly distinguishes it from sibling tools like record, forget, and amend, and the 'Read-only' tag further separates it from mutation tools.
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 instruction 'Call BEFORE investigating' provides explicit timing for when to use the tool, and the description of deterministic vs. near-match signals gives practical input guidance. It does not explicitly name alternatives or exclusion conditions, but the usage context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recordRecord an experienceA
Store what happened after solving (or failing to solve) a non-trivial problem. Duplicates are merged automatically: the response says whether the record was created, merged into an existing one, or linked to one with a different fix. Keep it terse and never include secrets.
| Name | Required | Description | Default |
|---|---|---|---|
| fix | No | What finally worked, concrete enough to repeat. Omit if unresolved. | |
| kind | No | 'episode' (default) or 'rule' for a generalisation of several episodes | |
| avoid | No | What did not work or made things worse | |
| source | No | Provenance: which agent/model is recording | |
| context | No | Tags: language, framework, tool, OS, domain. e.g. ['node','postgres','macos'] | |
| outcome | Yes | ||
| problem | Yes | One-line statement of the problem, as generic as is accurate | |
| signals | No | Exact error messages, failing commands, or symptoms. These form the deterministic fingerprint. | |
| attempts | No | Ordered attempts and whether each worked | |
| root_cause | No | Why it happened, if known |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: duplicates are merged automatically, the response indicates whether the record was created, merged, or linked to a different fix, and secrets must never be included. This is valuable operational detail that the schema and annotations do not provide.
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 compact and front-loaded: it states the core purpose first, then deduplication behavior, then a privacy rule. Every sentence earns its place and nothing is redundant with 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 tool with 10 parameters and no output schema, the description does a good job covering purpose, when to use it, deduplication behavior, and response semantics. It could be more complete by hinting at how records relate to sibling operations like reinforce or consolidate, but the schema carries the parameter details.
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 90%, so the schema already documents nearly all parameter meanings. The description adds little parameter-level detail, only a stylistic instruction to keep records terse, which does not materially enhance understanding of the 10 parameters.
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 a specific action and resource: 'Store what happened after solving (or failing to solve) a non-trivial problem.' This makes the tool's purpose obvious and separates it from read/delete/update siblings like recall, forget, and amend, though it does not explicitly name any alternative.
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 clear conditions for use: record after solving or failing to solve a non-trivial problem. It does not explicitly discuss when not to use the tool or point to alternatives, but the when-to-use context is strong enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reinforceReport whether a recalled fix workedA
Feedback loop. After applying a fix from recall, report whether it worked. Updates the record's confidence, which drives future ranking. If it failed, pass a short note and it is added to the record's avoid-list.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Experience id from recall | |
| note | No | If it failed: what went wrong, one line | |
| worked | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say non-readonly/non-idempotent/non-destructive; the description adds the meaningful side effects: it 'Updates the record's confidence, which drives future ranking' and appends failed notes to the record's 'avoid-list'. This tells the agent the tool mutates ranking state and memory, beyond what annotations 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?
Four short sentences, front-loaded with the triggering context ('After applying a fix from `recall`') before mechanics. No filler; the 'Feedback loop' label and side-effect/avoid-list details all earn their place.
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 3-parameter mutation with no output schema, the description covers purpose, when to call, side effects, and parameter behavior. Nothing critical is missing; return-value details are the only gap and are not essential 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?
Schema documents `id` and `note`, but `worked` has no description. The tool description fills the gap by defining it as 'whether it worked' and clarifies `note`'s conditional use ('If it failed... avoid-list'). With 67% schema coverage and the description covering the remaining param plus the conditional behavior, it adds real semantic value.
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: 'report whether [a recalled fix] worked' and names its role as a 'Feedback loop' after `recall`. This clearly distinguishes it from siblings like `recall` (which retrieves fixes) and `amend` (which edits records); an agent can tell what `reinforce` does without opening neighboring definitions.
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 frames when to call: 'After applying a fix from `recall`, report whether it worked.' It also gives conditional guidance for the failure case ('If it failed, pass a short note...'). It doesn't enumerate exclusions vs alternatives, but the trigger condition is unambiguous enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsCatalogue statisticsARead-onlyIdempotent
Counts, success rate, duplicates prevented, embedding status, most common context tags.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, covering the safety profile. The description adds value by enumerating the metrics returned, but it does not disclose additional behavioral details such as output structure, potential latency, or any dependence on prior operations. With annotations present, this is adequate but not exceptional.
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 a single sentence that front-loads the key information with a compact comma-separated list. Every word contributes meaning, and there is no redundancy 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?
For a parameterless, read-only statistics tool with safe annotations, the description covers the main dimensions an agent would need: what the tool reports. The absence of an output schema means the description bears some responsibility for explaining return values, and the high-level list is sufficient for basic invocation, though it doesn't detail types or structure.
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 takes zero parameters, and the schema confirms this with 100% coverage. Per the calibration rule, a zero-parameter tool receives a baseline of 4 since there are no parameter semantics to clarify. The description appropriately focuses on output rather than inputs.
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 identifies the tool as providing catalogue statistics through a specific list of outputs: counts, success rate, duplicates prevented, embedding status, and common context tags. It distinguishes itself from the sibling tools (all action-oriented) by describing a read-only reporting function, though it lacks an explicit imperative verb like 'returns' or 'provides'.
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 usage is implied by the tool name and description: call when you need aggregate statistics about the catalogue. However, there is no explicit guidance on when to prefer this tool over siblings, nor any mention of alternatives or exclusions, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transferExport or import the catalogueAIdempotent
Portability. mode='export' writes every record as JSONL (to path if given, else returned inline). mode='import' reads JSONL from path or jsonl and merges it idempotently: newer wins on id clash, duplicates are merged. Paths are .jsonl files inside the transfer directory (relative names are resolved there). Embeddings are not transferred; they are recomputed by whichever model the destination uses.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| path | No | File name or path (.jsonl) inside the transfer directory | |
| jsonl | No | Inline JSONL for import |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations, detailing the JSONL format, path resolution rules, idempotent merge behavior, conflict resolution (newer wins, duplicates merged), and the important caveat that embeddings are not transferred and are recomputed. This gives the agent substantial behavioral transparency beyond the simple readOnly/destructive/idempotent hints.
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 compact and front-loaded: the single word 'Portability' establishes intent immediately, followed by three dense, purposeful sentences covering modes, path behavior, merge semantics, and embedding caveats. 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 tool with no output schema and moderate parameter count, the description covers all necessary operational details: mode selection, input/output destinations, idempotency, conflict handling, and the embedding recomputation caveat. An agent has enough information to call the tool correctly and predict its side effects.
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 67%, with path and jsonl already described in the schema. The description adds significant semantic value by explaining the mode enum values in context, clarifying how path is resolved relative to the transfer directory, and defining idempotent merge semantics for import. This meaningfully supplements 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 states a clear verb-resource pairing: export or import the catalogue, with specific modes for each direction. The opening 'Portability' frames it as a bulk data movement operation, which distinguishes it from the sibling memory operations like record, recall, or forget.
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 clearly explains when to use export vs import and how each mode behaves. It does not explicitly name alternatives or say 'use this instead of X', but the portability framing combined with the detailed mode semantics gives a clear context for choosing this tool over per-record siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool maps to a distinct operation in the lesson lifecycle: recall searches, record creates, amend and reinforce update in different ways, consolidate clusters, forget deletes, stats reports, and transfer imports/exports. The only possible overlap is amend versus reinforce, but their descriptions clearly separate field patching from feedback/confidence updates.
Tool names are uniformly lowercase single words and mostly imperative verbs, giving a predictable and memorable pattern. The one minor deviation is 'stats', which reads as a noun rather than a command verb, but this does not create meaningful confusion.
Eight tools cover the full memory lifecycle without redundancy, which is well within the ideal 3-15 tool range for a focused experience/knowledge server. Each tool has a clear purpose and earns its place in the set.
The surface covers the complete lifecycle: create (record), read/search (recall, stats), update (amend, reinforce), delete (forget), plus maintenance features like consolidate and transfer. There are no obvious dead ends or missing operations for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Collective memory for AI agents. One agent solves a bug — every agent gets the fix instantly.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Persistent memory for AI agents. EU-hosted, privacy-first, hybrid recall, contradiction detection.
Persistent memory for AI agents — verbatim conversations, searchable by meaning.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to retain memory of past interactions and detect behavioral drift, preventing repeated mistakes without LLM token extraction.447MIT
- AlicenseNot gradedqualityCmaintenanceProvides persistent, cross-session memory for AI agents, allowing them to store and automatically retrieve information across different conversations and sessions without repeating context.15175MIT
- AlicenseNot gradedqualityBmaintenanceGives AI assistants a reliable memory for proven, verified skills, enabling them to reuse successful solutions and avoid repeating mistakes.161MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to store, retrieve, and self-improve procedural memories (lessons learned) based on relevance to the current task, pruning unused memories to reduce context load and prevent repetition of past mistakes.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/fitz2882/learned-experience'
If you have feedback or need assistance with the MCP directory API, please join our Discord server