Open, local-first engram memory for AI agents: read, correct, delete; shared over MCP.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Persistent, open memory for AI agents β local-first, zero-cost, shared across MCP tools (Claude Code, Codex, Cursor, Hermes, OpenClaw). Your agent's memory is plain-text engrams you can read, correct, and delete β not weights you can't.
plur.ai Β· Benchmark Β· Engram Spec Β· npm Β· Comparisons
PLUR is memory, not just retrieval β so we measure it on more than one axis, on the full corpus, and we publish the harness so you can reproduce every number.
Retrieval recall β full LongMemEval-S (N=500), R@5, fully local:
| Stack | R@5 | Notes |
|---|---|---|
| BM25 only | 92.2% | no embedder β fully airgapped |
| Hybrid (BGE-small, shipping default) | 95.6% | bundled local embedder, zero downloads |
| + BGE-reranker-v2-m3 | 97.6% | local cross-encoder, max quality β opt-in, β5s p50 on CPU |
Numbers come from plur-ai/plur-bench, which is the source of truth for every benchmark figure PLUR publishes. Where an in-repo number and a plur-bench number disagree, plur-bench wins β it is the reproducible harness, and it is what CI regression-checks.
Chunk granularity, canonical-doc scoring, corpus SHA256 pinned β reproduce it in plur-ai/plur-bench. No cloud call is required for any of these numbers (an optional cloud embedder, openai-3-large, reaches 97.0% hybrid). A faster reranker β ms-marco-minilm-l6 (p50β245ms vs BGE's β5s on CPU) β trades a little recall for sub-second latency.
Run it yourself β and tell us what you get. The harness is plur-ai/plur-bench: CPU-runnable, no API key needed for the local path, corpus auto-fetched and SHA-verified. If you run it, we'd genuinely love to see your numbers β open an issue or discussion with your results, especially if they don't match ours. Independent reproduction is worth more than any number we publish, and we'll gladly credit you.
Retrieval β answer accuracy β and we report them separately, never conflated. End-to-end (LLM-judge) answer accuracy with the reranker stack is 60.5%, versus 52.0% for dumping full context into the prompt and 5.5% with no memory at all.
Agent-task impact β same task, with memory vs without: Haiku + PLUR outperforms Opus without it at roughly 10Γ less cost; house rules 12β0 across Haiku, Sonnet, and Opus.
Operational β local-first, zero-cost search, data-sovereign by design.
More in progress: LoCoMo, agentic task suites, cross-tool portability, decay / contradiction correctness. Full methodology β
You correct your agent's coding style on Monday. On Tuesday, it makes the same mistake. You explain your architecture in Cursor. That night, Claude Code has no idea.
PLUR fixes this. Install it once, and corrections, preferences, and conventions persist β across sessions, tools, and machines. Your memory is stored as plain YAML on your disk. No cloud, no API calls, no black box.
The interesting part: in our tool-routing and local-knowledge benchmark, Haiku with PLUR memory outperformed Opus without it β 2.6x better on tool routing, at roughly 10x less cost. Turns out the bottleneck isn't model intelligence. It's context.
The model is rented; your memory is owned. Swap Haiku for Opus for whatever ships next month β the reasoning is a commodity you don't control. The part that's yours β everything the agent has learned about your work, your corrections, your conventions β shouldn't live in someone else's cloud or be baked into weights you can't read. PLUR keeps it in plain files on your disk, in an open format you can inspect, correct, and delete. That's what owning your intelligence actually means.
Paste this to your coding agent (Claude Code, Cursor, Windsurf, OpenClaw):
Prefer a guided setup? plur.ai has the exact config for your tool β Claude Code, Cursor, Windsurf, or OpenClaw.
One command sets up everything β storage, MCP config, and Claude Code hooks:
This creates ~/.plur/ for storage, adds PLUR to your .mcp.json, and installs Claude Code hooks for automatic engram injection. The hooks also auto-close the memory lifecycle: a SessionEnd hook captures a closing episode and cleans up session state when a conversation ends, so memory closes cleanly even if the agent forgets to call plur_session_end. PLUR is installed globally β one MCP server, one store, available in every project. You only run init once.
For multi-project setups, use domain/scope to separate knowledge:
This creates a .plur.yaml in the project with defaults that hooks apply automatically. Engrams learned in that project are tagged; recall filters by scope but always includes global knowledge.
Set scope per engram, by content. Scope is not a once-per-session setting β every plur_learn call takes its own scope, chosen from what the engram is about. Team/shared knowledge goes to a team scope (e.g. group:<org>/<team>, used by PLUR Enterprise); project details to project:<name>; personal preferences stay local. Don't let team-relevant knowledge fall back to global by omitting scope β global leaks into every project and (with a team store configured) never reaches the team. plur_session_start lists the remote scopes a token can write to.
Run init from your project root β it sets up Cursor's .cursor/mcp.json (plus Cursor hooks and a context rule):
PLUR runs under a lean tool profile in Cursor (PLUR_TOOL_PROFILE=cursor) β Cursor caps the tools a workspace can expose, so PLUR surfaces a curated core set (learn / recall / inject / status) instead of all 43, with the rest reachable through plur_admin. Cursor support shipped in v0.13.
Registers the MCP server via codex mcp add, writes lifecycle hooks to ~/.codex/hooks.json, and adds a PLUR section to AGENTS.md. Auto-detected when ~/.codex/ exists.
Injection uses hybrid search (BM25 + embeddings) with an automatic BM25 fallback if the embedder is slow or unavailable. Set PLUR_HOOK_HYBRID=0 to force BM25 (applies to the Antigravity hooks too; PLUR_CODEX_HYBRID is honoured as an alias). PLUR_HOOK_HYBRID_DEADLINE_MS tunes the fallback deadline β keep it below your harness's hook timeout (Codex 25s, Antigravity 20s).
One manual step after install: open Codex, run /hooks, and trust the PLUR entries. Codex fingerprints every hook and refuses to run untrusted ones β silently, with no warning and a zero exit code. Until you trust them, memory simply never loads. plur doctor says so too.
Every MCP client can call PLUR's tools. Only some have an adapter β the hooks and always-on context that make memory load automatically instead of waiting for the agent to think of it. Without one, recall and learning depend entirely on the model choosing to call the tools, which degrades badly under context pressure.
| Harness | Tools | Auto-injection + enforcement |
|---|---|---|
| Claude Code | β | β
hooks + CLAUDE.md |
| Codex | β | β
hooks + AGENTS.md (trust /hooks once) |
| Cursor | β | β hooks + rules |
| OpenClaw | β | β ContextEngine plugin |
| Hermes | β | β plugin |
Antigravity CLI (agy) | β | β
hooks + AGENTS.md |
| Windsurf, Gemini CLI, other MCP clients | β | β tools only |
If your harness is in the last row, paste the PLUR section from CLAUDE.md into
its own context file (AGENTS.md, GEMINI.md, β¦) as an interim measure β that
restores the instruction layer, though not automatic injection.
Writes hooks and the MCP server into agy's global config (~/.gemini/config/) and adds a PLUR section to AGENTS.md. Auto-detected when ~/.gemini/antigravity-cli/ exists. No trust step β agy runs configured hooks on first invocation; just restart agy.
Antigravity has no session-start event and no per-prompt hook, so PLUR drives everything from PreInvocation: per-prompt recall is read from the conversation transcript, and the turn's memory is re-injected as an ephemeral message on every model invocation so it survives tool calls without accumulating in history.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/plur)<a href="https://allmcps.com/mcp/plur"><img src="https://allmcps.com/api/badge/plur?style=directory" alt="Plur on AllMCPs" /></a>