Skip to main content
Glama
fitz2882

learned-experience

by fitz2882

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 install detects 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 install

That 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 install does

What you still do

Claude Code

Registers the server with claude mcp add, adds three hooks to ~/.claude/settings.json. Skipped if the plugin below is installed.

Restart Claude Code

Codex CLI and the Codex desktop app

Registers the server with codex mcp add, adds three hooks to ~/.codex/hooks.json. The desktop app (inside the ChatGPT app) reads the same ~/.codex configuration.

Run /hooks once in Codex to trust them

Gemini CLI

Adds the server and two hooks to ~/.gemini/settings.json

Nothing

OpenClaw

Adds the server under mcp.servers in ~/.openclaw/openclaw.json (or via openclaw mcp add when the file uses JSON5 syntax)

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 ~/.cursor/mcp.json

No hooks exist, so paste the reminder from Hosts without hooks into your Cursor rules

Windsurf

Adds the server to ~/.codeium/windsurf/mcp_config.json

Same: paste the reminder from Hosts without hooks into your global rules

Claude Desktop

Adds the server to claude_desktop_config.json

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-experience

Both 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

problem

One generic line: what went wrong or what was hard

signals

Exact error text, failing command, or symptom. This is the deterministic key.

context

Tags: language, framework, tool, OS

fix

What worked, concrete enough to repeat

avoid

What did not work, or made it worse

root_cause

Why it happened, if known

outcome

success, partial, or failure. Dead ends are worth recording too.

confidence

Derived from real outcomes: (successes + 1) / (uses + 2)

The loop the agent runs:

  1. Recall before working. Exact signal matches are found without any model. Similar problems are found by combining local embeddings with lexical search.

  2. Apply the best fix, respecting the avoid-list.

  3. Reinforce: report whether it worked. This is what makes ranking improve over time.

  4. Record anything non-trivial once solved. Duplicates are merged automatically, and the same symptom with a different fix is linked rather than duplicated.

  5. 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

PostToolUseFailure

PostToolUse

AfterTool

The error text becomes a query. Matching fixes are injected with the instruction to apply one and reinforce. On a miss, a one-line reminder to record once solved. Codex and Gemini have no failure event, so the hook runs after every tool call and acts only when the response carries a non-zero exit code, an error flag, or unmistakable failure text.

You send a request

UserPromptSubmit

UserPromptSubmit

BeforeAgent

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

Stop

Stop

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 record or reinforce.

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

recall

Has this problem, or a similar one, been solved before? Returns ranked hits with fix, avoid-list, and confidence.

record

Store a lesson. Merges or links duplicates automatically.

reinforce

Report whether a recalled fix worked. Failure notes go on the avoid-list.

dismiss

Report that a recalled record did not apply to the problem. Suppresses it for that query and damps its fuzzy matches.

amend

Patch fields of an existing record.

forget

Delete a record.

consolidate

Cluster similar episodes so the agent can write one generalised rule.

stats

Counts, success rate, duplicates prevented, embedding status.

transfer

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/mcp

HTTP 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:

  1. Sync the folder. Point LEARNED_EXPERIENCE_HOME at 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.

  2. Export and import. export writes JSONL, import merges 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.

  3. Serve it. Run npx -y learned-experience --http on 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

LEARNED_EXPERIENCE_HOME

~/.learned-experience

Data directory

LEARNED_EXPERIENCE_DB

$HOME_DIR/experiences.db

Database path

LEARNED_EXPERIENCE_TRANSFER_DIR

$HOME_DIR/transfers

The only directory the transfer tool may touch

LEARNED_EXPERIENCE_EMBEDDINGS

local

local, openai, ollama, or none (lexical only)

LEARNED_EXPERIENCE_EMBED_MODEL

per provider

Xenova/all-MiniLM-L6-v2, text-embedding-3-small, nomic-embed-text

LEARNED_EXPERIENCE_EMBED_BASE_URL

per provider

Any OpenAI-compatible endpoint, or the Ollama base URL

LEARNED_EXPERIENCE_EMBED_API_KEY

$OPENAI_API_KEY

Key for remote providers

LEARNED_EXPERIENCE_HOOK_QUIET

unset

1: no reminder after a failure that matches nothing

LEARNED_EXPERIENCE_STOP_NUDGE

1

0: never ask for a record at the end of a turn

LEARNED_EXPERIENCE_STOP_MIN_FAILURES

1

Failed tool calls needed before the end-of-turn reminder

LEARNED_EXPERIENCE_STOP_MIN_CALLS

3

Tool calls needed before the end-of-turn reminder

LEARNED_EXPERIENCE_STOP_LONG_TURN

15

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 model

Design rationale, the retrieval fusion, and the dedup rules are in DESIGN.md.

License

MIT

Available Tools

8 tools
amendAmend an experienceA
Idempotent

Patch fields of an existing record (better fix, extra avoid items, corrected context). Only supplied fields change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
patchYesFields to replace

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 experiencesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
min_sizeNoMinimum cluster size to report (default 3)
thresholdNoCosine similarity to cluster at (default 0.8)

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 experienceA
DestructiveIdempotent

Permanently remove a record that is wrong or obsolete.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 experienceA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindsNoRestrict to 'episode' or 'rule' records
limitNoMax hits (default 5)
contextNoTags: language, framework, tool, OS
problemYesOne-line generic description of the problem
signalsNoExact error messages, failing commands, symptoms
min_scoreNoDrop non-exact hits below this score (default 0.35)

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixNoWhat finally worked, concrete enough to repeat. Omit if unresolved.
kindNo'episode' (default) or 'rule' for a generalisation of several episodes
avoidNoWhat did not work or made things worse
sourceNoProvenance: which agent/model is recording
contextNoTags: language, framework, tool, OS, domain. e.g. ['node','postgres','macos']
outcomeYes
problemYesOne-line statement of the problem, as generic as is accurate
signalsNoExact error messages, failing commands, or symptoms. These form the deterministic fingerprint.
attemptsNoOrdered attempts and whether each worked
root_causeNoWhy it happened, if known

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExperience id from recall
noteNoIf it failed: what went wrong, one line
workedYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 statisticsA
Read-onlyIdempotent

Counts, success rate, duplicates prevented, embedding status, most common context tags.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 catalogueA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYes
pathNoFile name or path (.jsonl) inside the transfer directory
jsonlNoInline JSONL for import

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A4.2/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides persistent, cross-session memory for AI agents, allowing them to store and automatically retrieve information across different conversations and sessions without repeating context.
    15
    175
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Gives AI assistants a reliable memory for proven, verified skills, enabling them to reuse successful solutions and avoid repeating mistakes.
    16
    1
    MIT

Latest Blog Posts

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