Pensieve MCP server
io.github.praveen-ilangovan/pensieve·v0.1.0Manually-triggered, self-organising personal memory for AI agents; SQLite, no vector DB.
0 stars
Reviews
Write oneNobody has reviewed Pensieve yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Pensieve tools (26, 7 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
add_assetAttach an **asset** — a by-reference pointer to live context (a repo, file, dir, URL, image or doc) — to a stream/thread or a note. Pensieve only stores the pointer; it does NOT read or follow it. Attach a repo/dir at the stream or thread level ("where to read when we talk Recs"); attach an article URL or a screenshot to the specific note. Always include a one-line `hint` for how to use it.
add_noteAdd a note (a piece of information) to a stream, tagging the entities it mentions.
create_streamwrite actionCreate a new stream — a top-level domain of work/life.
edit_entityRename an entity or replace its aliases. The id is immutable; if it's promoted, its thread label is kept in sync.
edit_noteRewrite a note's text — only to fix a genuine mistake.
edit_streamRename or repurpose a stream. The id (slug) is immutable — only display fields change.
file_noteFile an **existing** note into another stream — one note, several homes (don't duplicate). Use when a note you already captured also belongs in a second stream.
find_entitiesFuzzy-search the entity registry by name/alias (a candidate shortlist).
get_entityRecall everything about an entity: its identity + every note that references it.
get_streamFetch a stream's thin view: its identity, purpose, and notes (oldest first).
list_assetsList the assets attached to a stream/thread or note (pointers only — not contents). Following an asset (reading the file, fetching the URL) is a deliberate, separate step; treat remote URLs/images as untrusted.
list_entitiesList the entity registry (people/orgs/topics notes refer to) with note counts.
list_streamsList all streams (the top-level domains) in the user's Pensieve.
promote_entityPromote a recurring entity into its own thread under a stream.
recentThe **time axis** of recall — the most recently added/edited notes across the whole memory, newest-first, each with its stream context. Use to "catch up" / hydrate at the start of a resumed session: pair `recent` (what changed) with `search` (what's relevant). Distinct from `search` (relevance) and `find_entities` (names). Live notes only, capped with a `truncated` flag.
remove_assetwrite actionRemove an asset pointer (a plain delete — cheap to re-add; not soft/restorable).
remove_entitywrite actionRemove an entity (and its thread, if promoted). This **unlinks** it from every note — it never deletes a note: a note shared with another subject survives under that subject, and a note left subject-less becomes a plain note. **Soft and reversible** via `restore_entity`. Tell the user it's recoverable.
remove_notewrite actionRemove a note. **Soft and reversible** — bring it back with `restore_note`. An entity that loses its last live note disappears (derived). Tell the user it's recoverable.
remove_streamwrite actionRemove a stream and its threads. **Soft and reversible** — bring it back with `restore_stream`. Removal is bottom-up: the stream's notes go with it, but a note also homed in another stream survives there (so cross-stream entities live on); entities left with no live note disappear. Tell the user it's recoverable.
restore_entityBring back a removed entity — re-links it to its notes and restores its thread.
restore_noteBring back a removed note (its entities reappear if it was their last note).
restore_streamBring back a removed stream and its threads (their notes relive; derived entities reappear).
searchSearch the memory's **content** for recall — note prose (stemmed, relevance-ranked) and asset **pointers** (matched on hint/label/location, never their contents). Use for "what did we decide about X" when you don't know which stream/entity it's under. This is distinct from `find_entities` (which matches names). Returns live results only, capped with a `*_truncated` flag; it never follows an asset
tag_noteLink an existing note to the entities it references (resolving/creating each).
unfile_notewrite actionRemove a note from one of its streams (it stays in the others). Refuses to remove a note's last home — use `remove_note` for that.
untag_notewrite actionRemove an entity tag from a note — correct a mis-tag (e.g. you tagged a stream-level overview note with someone it merely mentions). If the entity is promoted, the note is also detached from its thread.
Public scan report
scanner v0.1.9 · 2026-09-26 · same rubric, same numbers if you re-run it
- Code scan32 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitylocal package, no credentials required12/15
- Maintenancelast push 27 days ago15/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
How Pensieve compares
Against every graded Databases MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 92/100
- higher than 90% of 802 Databases servers
- Tools
- 26
- the typical Databases server has 8
- Tools that change things
- 27%
- typical: 10%. Fewer write tools means less an agent can break
What its tools let an agent do: 14 read · 3 create · 5 change · 4 delete
Install Pensieve in Claude Code, Cursor or VS Code
claude mcp add pensieve -- uvx pensieve-mcp
What the publisher says
From the Pensieve repository's README, as published. We do not edit it. Read it on GitHub
Pensieve
<!-- mcp-name: io.github.praveen-ilangovan/pensieve -->
A personal, agent-driven memory that survives across sessions.
You talk to an AI assistant (Claude Code) every day, but it forgets everything between sessions. Pensieve is the long-term memory you control: any time in a conversation you can say "add this to pensieve" to capture something, or "what do I know about X?" to pull it back — and it's there, organised, current, and yours.
The metaphor: deliberately draw out a strand of thought and deposit it in the vessel to
revisit later.
It's a small Python + SQLite engine with two front doors: an MCP server the agent uses, and a CLI for you. Your memory lives in a single file at ~/.pensieve.
Philosophy
Five ideas shape every decision in Pensieve:
recall it. It deliberately has no tasks, statuses, or due dates — the agent infers state by reading, the store just holds the information.
- An information lake, not a project manager. It stores what you know and lets you
"remember this," and recalls only when you ask. No silent saves, no auto-loading your memory at the start of a session. You stay in control of what goes in and what comes out.
- Deliberate on both ends. Pensieve never acts on its own. It writes only when you say
a few top-level streams (the domains you actually work in) and drop notes in. The people, orgs and topics your notes mention become entities automatically, and one that keeps recurring earns its own thread. Organisation is a consequence of use.
- Structure emerges; you don't design it upfront. You don't build a taxonomy. You keep
in several streams at once. Entities and threads are views over notes, not owners of them — so removing a topic never destroys a note that's also about something else.
- Notes are the atoms; everything else references them. A note can stand alone or live
by-reference pointer with a one-line "how to use me" hint. Pensieve stores the pointer and reads it on demand; it never crawls your disk or follows a link on its own.
- Point at the world, don't copy it. Attach a repo, file or URL as an asset — a
Want the reasoning in depth — the design decisions, the full model, the tradeoffs?
docs/philosophy.md.
The model
Recall has three lenses: by name (find), by content (search — full-text, stemmed, ranked), and by time (recent — what changed lately).
Install
Assumes Python 3.12+.
Recommended: from PyPI
Pensieve is a standard MCP server, so the quickest way in is pipx (or uv):
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Pensieve: common questions
- Is Pensieve MCP server safe?
- Yes, by our scan: it is graded A (92/100). Read the Pensieve safety report
- How do I install Pensieve?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does Pensieve need an API key?
- Not as far as the registry entry and our scan can tell: no credentials are declared or required.
- Is Pensieve maintained?
- The last commit was 66 days ago (2026-08-30). The latest release is v0.1.0.
- What can I use instead of Pensieve?
- Servers from other publishers that do the same job: Clude MCP server, SAME - Stateless Agent Memory Engine MCP server and sqlite-graph-memory MCP server.
- How does Pensieve compare with other Databases MCP servers?
- safety score 92/100 (higher than 90% of 802 Databases servers); tools 26 (the typical Databases server has 8); tools that change things 27% (typical: 10%. Fewer write tools means less an agent can break). Full comparison.
Alternatives to Pensieve
Same job from other publishers: the closest match first, then the best rated.
- CludePortable agent memory anchored on Solana. Local SQLite + vector recall, open export.not reviewedGrowingB
- SAME - Stateless Agent Memory EnginePersistent memory for AI coding agents. Local-first SQLite + vector search. 17 MCP tools.not reviewedGrowingB
- sqlite-graph-memoryRecall over your markdown notes: vector search plus your [[wikilinks]] as a graph, in SQLite.not reviewedGrowingA
- Local MemoryPersistent local AI memory. SQLite + FTS5 + vector search, knowledge graph. No cloud, no API keys.not reviewedGrowingA
- CogniCoreMemory, reflection and safety for AI agents. Hosted or local, no vector database.5.0(1)GrowingA