Lore
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., "@Loresearch memory for the database schema decision"
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.
π Lore
Lightweight MCP for infinite agent memory.
Any agent. Any session. Anytime.
Your agents forget everything the moment a session compacts or ends. You spend an hour getting one deep into a gnarly problem, the window fills up, and suddenly it's a stranger again. Sure, compaction helps, untill you're 10 compats into a session.
So you start a new session.
Re-explain the thing you already explained.
Beat your workflow back into the agents, just for the ctx window to refill.
The work isn't gone, it's sitting right there on disk. It's just unreachable.
Lore fixes that. It quietly indexes every session your agents have ever had and hands it back, fully searchable, right where they work. An agent can pull up a decision from last Tuesday as easily as the line it just wrote. Local, private, and yours forever.
https://github.com/user-attachments/assets/b5c0f077-47da-4502-bf78-2ce08abf034f
β¨ Why you'll want it
π§ Memory that outlives the context window. Compaction stops meaning amnesia. Last week's reasoning is one search away.
π One brain, every agent. Claude Code, Codex, Cursor, and Cline all read and write the same store. What one figured out, the others can find.
π Search that speaks code.
getUserById,foo.bar.ts, andtrust-metadatastay findable as whole words, not shredded into noise.π Local by default. Everything lives at
~/.lore/lore.dbon your machine. Nothing phones home. Ever.
π Quick start (paste this into your agent)
Lore sets itself up. Drop the blurb below into any coding agent. It clones the repo, installs Lore, indexes your own history, registers itself into its own MCP config, figures out the reload step for your client, and proves search works before it calls itself done.
Clone https://github.com/jordanhindo/lore into a directory of your choosing
and cd into it, then set up Lore (full-fidelity session memory over MCP)
for yourself. Read AGENT-ONBOARD.md in the repo you just cloned and follow
it top to bottom: install + build, run `lore setup` to index my history
and self-verify, register the Lore MCP server in your own client config,
reload so the tools load, then prove it by calling search_memory for a word
from a past session. Tell me any manual step (like restarting) that I have
to do.The deterministic recipe the agent follows lives in
AGENT-ONBOARD.md. Prefer to drive it yourself? The one
command that does the indexing half is lore setup (below).
The fact that Lore can onboard itself, on a machine it's never seen, is the demo. If an agent can stand it up from a paste, it works.
π οΈ Install it yourself
npm install -g @jordanhindo/lore # puts the `lore` command on your PATHRequires Node 22+. That's the whole install. lore setup (below) takes it from
here. If npm install chokes on better-sqlite3, or lore isn't found
afterward, the Troubleshooting
section has you covered (Windows included).
From source
Cloning is for contributors, or for writing a new adapter (which needs the source tree):
git clone https://github.com/jordanhindo/lore && cd lore
npm install
npm run build
npm link # optional: puts `lore` on your PATHπ₯ Backfill your history
lore setup is the fast path. It sniffs out the harnesses on your machine,
indexes each one, checks that search works, and prints how to wire Lore into
your MCP client.
lore setupWant finer control? Point lore index at a transcript directory. For Claude
Code that's ~/.claude/projects:
lore index ~/.claude/projects # primary transcripts
lore index ~/.claude/projects --subagents # include subagent transcripts
lore index ~/.claude/projects --redact # opt-in secret redaction (see Privacy)Other harnesses come in with --source. Codex is built in:
lore index ~/.codex/sessions --source codexRe-run any of these whenever. Unchanged files get skipped, so repeat runs are cheap.
π Serve it to your client
lore serve starts the MCP server over stdio. Point any MCP client at it.
Claude Code (add to ~/.claude/settings.json):
{
"mcpServers": {
"lore": { "command": "lore", "args": ["serve"] }
}
}Cursor / Cline and friends: add an stdio server entry with the same
command / args shape in the client's MCP config.
What your agent can do
Tool | What it does |
| Keyword search across every transcript, ranked by bm25, with filters. |
| Like |
| Fetch one message by id ( |
| The neighbor window around an anchor message. |
| One logical session as a folded, paginated timeline. |
| Session rollups (counts, first / last activity), filterable. |
| Bucketed activity over time, by day or hour. |
Every search tool takes the same dimension filters: project, branch,
source, agent, skill, tool, role, model, since, until, limit.
What a search returns
Your agent calls search_memory with a query (plus any filters) and gets back a
count and a ranked list of hits. Each hit carries the matched text and full
provenance, so the agent knows where the memory came from and can pull the rest
with get_message:
// search_memory({ query: "fts tokenizer", source: "claude-code", limit: 2 })
{
"count": 2,
"hits": [
{
"messageId": "9f3cβ¦a71b", // synthetic, stable across re-index
"sessionId": "0c1d2e3f-β¦",
"sourceFileId": "claude-code:β¦",
"role": "assistant",
"timestamp": "2026-06-05T18:22:41.103Z",
"project": "/Users/you/lore",
"branch": "main",
"model": "claude-opus-4",
"agent": null,
"score": 11.27, // higher is a better match (bm25)
"text": "Switched the FTS5 tokenizer to unicode61 with tokenchars '_-.' so getUserById and foo.bar.ts stay wholeβ¦",
"textTruncated": false
}
// β¦one more hit
]
}Long messages come back elided with a marker telling the agent how to fetch the
full text via get_message(message_id, full=true) β so one giant transcript can
never blow the context window.
πͺ Survive compaction
Compaction is the moment memory matters most, so catch the session right before
the window gets wiped. Wire lore hook into your harness's lifecycle hooks. It
reads the hook payload on stdin, indexes just that one file, and always exits 0
(it will never crash your harness).
For Claude Code, add to ~/.claude/settings.json:
{
"hooks": {
"PreCompact": [{ "hooks": [{ "type": "command", "command": "lore hook" }] }],
"SessionEnd": [{ "hooks": [{ "type": "command", "command": "lore hook" }] }]
}
}π§© Bring your own harness
Don't see your agent on the list? lore sample <transcript-dir> summarizes its
on-disk format, and the bundled lore-setup skill (skills/lore-setup/)
walks an agent from "installed" to "my sessions are searchable," including writing
and proving a new adapter, or using the live push path when a harness keeps no
files at all.
π Privacy
The store is local (
~/.lore/lore.db), lives outside any repo, and*.dbis gitignored. Move it withLORE_DB.Transcripts are indexed verbatim by default. It's your own memory, so nothing gets dropped unless you ask.
Opt-in redaction. Pass
--redacttolore index/lore hookand a conservative credential scrubber runs over message text and tool payloads first (OpenAI / GitHub / AWS / Slack keys, Bearer tokens, PEM private-key blocks). Think of it as a safety net, not a guarantee.
𧬠How it works under the hood
One shared store, many harnesses. Each harness writes into its own
sourcenamespace (claude-code,codex, ...). Any MCP client can read everyone's history.Three IDs. A
source_file_idis a physical transcript file (the unit of ingestion and the resume watermark). Asession_idis a logical session shared across a primary file and its subagent files. Each message gets a syntheticmessage_id = hash(source_file_id + uuid + seq)because raw uuids collide.Incremental by construction. A per-file watermark skips unchanged files, appends only new tails, and fully re-indexes rewritten ones. Re-running a backfill over thousands of transcripts only touches what changed.
Code-aware search. The FTS5 tokenizer keeps identifiers and paths whole, so the things you actually search for stay searchable.
βοΈ Environment
Var | Default | Meaning |
|
| Store location. |
|
|
|
π· Development
npm run check # typecheck + lint + format + test
npm run test:watchLicense: MIT.
This server cannot be installed
Maintenance
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/jordanhindo/lore'
If you have feedback or need assistance with the MCP directory API, please join our Discord server