Self-hosted multi-user memory for AI agents: a human-readable Markdown wiki with per-fragment ACL.
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.
Every AI agent you use, remembering into one shared Markdown wiki. Every fact in it governed individually: who it's about, who said it, who may read it, and when it stops being true.
βΈ Open the public demo Β· demo.contea.casa
One household's shared memory: three people, three assistants, 203 turns of conversation from 2 March to 18 July 2026, rebuilt by the engine and then frozen. Enter as Bob, Alice or Zoe with one click, on any page, and see what each of them may read. It is read-only: nothing you do changes it, nothing you click calls a model, and no agent can be attached to it. The guided tour walks eight pages of it.
Why Β· The demo Β· The tour Β· The idea, in one page Β· Quickstart Β· Where it fits Β· How it works Β· Docs
Ask most agent frameworks where their memory lives and the honest answer is "in a vector index somewhere." That works until you want to do something human with it: open it, fix a wrong fact, understand why the agent believes what it believes. Or the hard one, let more than one person share a memory without everyone seeing everything.
A blob of embeddings has no answer to who is this fact about, who told us, who's allowed to read it, and is it still true?
mwe-mcp answers all four. The memory is a folder of Markdown pages you can open and read. Underneath, every fact on those pages is indexed and governed one by one, and the rules are enforced by the engine in code, not by asking a model nicely.
A family runs one shared memory. Every assistant they talk to writes into it and recalls from it: the voice assistant in the kitchen, a bot on Telegram, Claude Code on a laptop. Alice and Bob are on the team. Zoe is family, but not on the team.
Alice: "Bob changed jobs, he's at AcmeCorp now." Assistant: "Noted in Bob's profile."
The engine resolves "Bob", decides the fact is about Bob so it lands on his page, keeps Alice as the one who reported it, and scopes it to group:team. Later, two different people ask:
Bob: "What do you know about my current job?" Assistant: "You're at AcmeCorp (noted by Alice on May 17)."
Zoe: "Do you know where Bob works?" Assistant: "I don't have anything I can share about that."
Same page, same fact, two answers. Zoe isn't on the team, so the span is removed before it ever reaches her agent. No error, no "access denied", just invisible.
Here is the page itself. Each governed span is wrapped in a marker that carries only a stable key, so the prose stays clean and everything sensitive about the fact (subject, sender, audience, validity) lives in the engine's index:
Alice sees that verbatim. Anyone who isn't Alice sees the protected span collapse:
The built-in dashboard renders the same page the same way: reading it is decided by the fact's subject, audience and sender, not by whose wiki the page sits in, and the reader is told the view is declassified, never what was withheld.
No permissions database bolted on top, no per-document walls. Visibility is enforced fragment by fragment, sentence by sentence. This is the thing most agent memories simply cannot express.
None of that is a diagram. There is a frozen instance of exactly this at demo.contea.casa, built by the engine out of four and a half months of one household talking to three different assistants. In it the group is called renovation, the kitchen rebuild, and Zoe was taken out of it on 5 June, six weeks after the tiler's quote was written down. Open the kitchen trades page as Bob and the Β£9,800 is there. Click Zoe in the bar at the top of the page you are already on, and the same paragraph comes back with that figure gone and the rest of it still reading. Nobody had to remember to hide it: her membership changed and the fact did not.
Eight stops on the frozen instance at demo.contea.casa. Every link below opens a real page there, and nothing on it can be changed: the instance is frozen.
Each stop says who to be. The sign-in screen offers Enter as Bob Β· Enter as Alice Β· Enter as Zoe, and the same switch sits in the bar at the top of every page as Look as:, so changing identity costs one click and puts you back on the page you were reading. A link followed from cold passes through the sign-in screen and then lands on the page it named. Entering as one of them is not a preview mode: the session carries that person's own identity and role, and the memory answers exactly as it would for them. Bob is also the operator of this deployment, which is why one of the stops below has to be his.
The cast is invented. Bob, Alice and Zoe share a house, Zoe is Alice's sister, Nora is Bob's mother and Sam a colleague of his, Marco is the tiler, Pepper is the cat. The three assistants are a speaker in the kitchen, a bot on the phones, and a coding agent on Bob's laptop. The three groups are household, all three of them; parents, the money and the family health; and renovation, the kitchen rebuild. Zoe joined parents on 10 May and left renovation on 5 June, and both changes were made in the identity console, with no fact edited and nothing re-indexed.
1 Β· One list, three readers, no copies. The shopping list Β· as Bob, then Alice, then Zoe.
Nineteen rows still to buy. Switch identity twice on that page and the nineteen rows do not move: every one of them is about group:household, and all three are in it. The same holds for everything else the household owns: type group:household into About on the Facts page and the same 73 rows come back whoever you are. There is one list, not three private copies somebody has to keep in step.
2 Β· Two values for one detail, and only one person can settle it. The question waiting on Zoe Β· as Zoe. On 24 June Zoe gave the memory her mobile number. Later Alice gave a different one for her. The memory did not pick, and it could not ask Alice either, because Alice may not read the number already on Zoe's card: it parked the new value and put the question to the one person entitled to answer it. The page shows both numbers, says why it stopped, and offers the three answers it will take.
3 Β· Forgetting is a vote when the fact is not only yours. The forget request Β· as Alice. Zoe asked the memory to forget that her contract was not renewed. She is who the fact is about, but she is not who put it there, and it is readable by more than her, so it is not hers to delete alone: the request became a ballot among the people who can read it, Alice and Bob. Silence consents, a majority of no blocks it, and the request is sitting on Alice until one or the other happens.
4 Β· A rule that changed address, and so changed which agents obey it. Zoe's rules page Β· as Zoe.
On 3 March Zoe told the kitchen speaker to keep it short. On 2 April she said she meant every assistant and not just that one, so the rule left that assistant and attached to her: it is on her own rules page now, and no longer on the kitchen assistant's. Nothing was deleted, and the Facts page shows it: put user:zoe in About, tick include facts that no longer hold, and the old row is there, held from 3 March to 2 April, its Wiki the kitchen assistant's and its Replaced by naming the one that took over. Where a rule lives is what decides which agents obey it.
Factual signals from GitHub, npm, and our automated checks β not a rating.
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/mwe-mcp-memory-wiki-engine)<a href="https://allmcps.com/mcp/mwe-mcp-memory-wiki-engine"><img src="https://allmcps.com/api/badge/mwe-mcp-memory-wiki-engine?style=directory" alt="Mwe Mcp β Memory Wiki Engine on AllMCPs" /></a>