Open Source

memshare

Peer-to-peer AI memory sharing between users —
with full control, explicit consent, and no vendor lock-in.

Any tool  ·  Any model  ·  Any teammate  ·  Your machine only

The Problem

Your AI's memory is trapped

Every vendor builds memory in its own proprietary, closed format.

🔒

Locked to one platform

Spent 6 months "training" Claude or ChatGPT on your preferences? Want to switch? Start from zero.

🏝️

Isolated to one user

Every AI memory product is per-user by design. There's no way to share context with a colleague or friend.

🤷

No real control

"Deleted" is a promise, not a guarantee. You don't know what's saved, where, or who has access.

What Exists Today

Memory is built as a chat feature, not a data type

Powerful tools exist. But every one of them stores memory per-account, in a format you cannot inspect, verify, or hand to anyone else.

Tool Cross-model portability Self-hosted User-to-user sharing Consent flow
Claude / ChatGPT Memory
Mem0
OMP (Open Memory Protocol)
Portable Memory (MacPaw)
memshare
The Missing Piece

Memory as
files you own

Make memory a file and three things follow — in this order.
Inspect it. Move it. Then share it, with approval on both sides.

1  Inspect — plain JSON. Greppable, diffable, deleted when you delete it.

2  Move — one store, every MCP tool, every machine you own.

3  Share — item by item, preview and approval on both sides.

  No central server. No vendor can revoke any of it.

🧑 Alice
Claude
←MCP→
Memory
Server A
↕ bundle
🧑 Bob
ChatGPT
←MCP→
Memory
Server B

Each person runs their server locally.
No central server sees everything.

Cross-Platform · Model-Agnostic

Not tied to Claude.
Not tied to anyone.

Your memory is local JSON files. The MCP server is just one of several adapters.

🧠
~/.memshare/
JSON files — the actual product
▲   ▲   ▲   ▲
MCP Server
Claude · Cursor · VS Code
Windsurf · any MCP tool
CLI
list · export · import
preview · add
ChatGPT Adapter
Custom GPT action
or browser extension
System Prompt Inject
Ollama · Gemini
any LLM with an API

If MCP disappears tomorrow — your data is still here. Just files.

How Memory Gets Built

Capture is automatic.
Sharing never is.

Three modes control what gets written down. What gets shared is gated separately, and always by you.

🤖

Auto (default)

Claude saves what it learns as you work. Everything lands private — nothing can be shared until you mark it.

Claude silently calls memory_set()
💬

Suggest

Claude proposes what to save at the end of a conversation. You approve, edit, or skip.

Claude calls memory_suggest() → user approves
👆

Manual

"Save this to memory" — only saved when you explicitly ask. Maximum control.

User says "remember this" → Claude calls memory_set()

Suggest mode — what actually happens:

// Claude, mid-conversation — nothing is stored yet
memory_suggest({ suggestions: [
  { content: "Auth service uses JWT with 15min refresh", tags: ["auth"] },
  { content: "Team decided Postgres over MySQL", tags: ["db"] }
] })

// Later, in your terminal — you decide
$ memshare review
   Auth service uses JWT with 15min refresh
   Team decided Postgres over MySQL
  space to toggle · enter to confirm
Architecture

Federated, Self-Hosted

Starts local on your machine. Same code deploys to a team server when you're ready.

📦

MCP Server (local process)

Not a real server — a local process that Claude starts and stops automatically. No open ports, no Docker, no cloud.

🗂️

Local JSON Files

Human-readable, diffable, git-friendly. Sync between devices via Dropbox or git.

🤝

Bundle Exchange

Selective export → preview → approval → import. Send the file however you want — email, Slack, AirDrop.

# Install — no server, no signup
npm install -g memshare-cli
memshare init

# Connect to Claude
claude mcp add memshare -- npx -y memshare-cli serve

# See what's in your memory
memshare list
memshare list --tags "project-x"

# Preview before you share anything
memshare export --tags "project-x" --preview

# Export when ready
memshare export --tags "project-x" --for "bob"
Consent Flow

Full control — on both sides

1

Alice picks what to share

Every memory item is tagged private or shareable at creation time. Not all-or-nothing.

2

Automatic redaction

Sensitive PII (health, financial, government IDs) is blocked automatically before export. Conservative by default.

3

Exact preview

Alice sees exactly what will be included in the bundle before final approval.

4

Bob receives and chooses

Bob sees a preview of incoming items. Accepts or rejects per-item. Smart merge, no overwrites.

# Alice exports selected memories
memshare export --tags "project-x,architecture" \
  --for "bob" \
  --expires "7d"

# → bundle-a3f8.memshare.json
# Alice sends the file to Bob
# Bob previews before importing
memshare preview bundle-a3f8.memshare.json

# Bob sees each item and chooses
memshare import bundle-a3f8.memshare.json
# → interactive: accept/reject per item
In Practice

A team, two weeks, no documentation written

Almost none of this is typed at a terminal. You talk to your AI; the context accumulates on its own.

DAY 0 · DANA (TECH LEAD)

Install, then forget it

Install once. After that she never types a memshare command — she just works, and her AI records what it learns.

# she just says, mid-conversation:
"we went with Postgres —
 the JSONB support decided it"

→ Claude calls memory_set()
→ saved, and private

DAY 14 · FIVE MINUTES

Mark what the team needs

~40 memories accumulated. Ask the AI what it knows, then make the consent call yourself. That one is a command, on purpose.

"what have you learned
 about project-x?"

→ Claude calls memory_get()

# the consent call is yours:
memshare mark --tags "project-x" --shareable

DAY 15 · SAM JOINS

Productive on the first prompt

Sam accepts item by item. Then he is back to plain conversation — and his AI already knows the codebase.

# Dana sends one file, Sam runs:
memshare import bundle-a3f8...

# then, on day one:
"how do migrations work here?"
→ the real answer. no onboarding.

Two commands in two weeks. Everything else was just talking. The one step that stays a command is the moment you decide what leaves your machine.

Use Cases

Sharing between people

🆕

Onboarding a new teammate

Dana joins the team. Instead of spending a week "teaching" her Claude about the project, the tech lead shares a bundle — internal terms, architecture decisions, code conventions.

memshare export --tags "project-x,onboarding" --for "dana"
🔄

Project handoff between freelancers

Uri finished his part of the project. Instead of the next freelancer starting from zero, Uri shares a bundle — client preferences, decision history, technical gotchas.

memshare export --tags "client-acme" --expires "30d"
🎨

A designer on Cursor, devs on Claude

The designer’s AI knows the component conventions. The backend devs’ AI knows the API contract. One bundle each way and neither side re-explains. Different people and different vendors — the only tool that crosses both.

memshare export --tags "design-system" --for "the-devs"
# Cursor → Claude. same bundle format.
🎓

Mentor shares knowledge with mentee

A senior engineer "taught" their Claude about best practices, design patterns, and review guidelines. Instead of writing a guide — they share the memory directly.

memshare export --tags "best-practices,code-review"
Use Cases

Sharing between models and sessions

🔀

Switching tools mid-project

Claude Code today, Cursor tomorrow, Windsurf next month. There is nothing to migrate — every MCP client reads the same local store. Same context, zero commands. (A ChatGPT adapter is v0.3.)

# nothing to run. it is already there.
memshare list --from "cursor-vscode"
# → what Cursor taught it, in Claude
🪟

Between distant Claude sessions

Long conversation with rich context. Open a new chat and have to explain everything again. With memshare — the MCP server auto-injects relevant context.

# MCP server auto-injects relevant context
memshare recall --tags "project-x"

Using multiple models in parallel

Claude for code, ChatGPT for research, Gemini for document analysis. All read from the same local memory store — no duplicating context three times.

# One memory, every model reads it
memshare serve # → Claude, GPT, Gemini all connect
💻

Between devices

Working on the laptop at home and the desktop at the office. The memory store syncs via git or Dropbox — because it's just JSON files.

# Sync via git — it's just files
cd ~/.memshare && git push
Deployment

Same code. Your choice where it runs.

Same protocol, same files, no code changes between them. Two work today — the other two are on the roadmap.

WE SUGGEST STARTING HERE

💻

Local

Files on your laptop.
MCP as local process.

Sharing via:

Export file → email/Slack → import file

ALSO WORKS TODAY

📂

Shared folder

Dropbox, Google Drive,
or a git repo.

Sharing via:

Auto-sync through the shared folder

PLANNED · v0.4

🖥️

Team server

Docker on your VPS.
Team connects remotely.

Sharing via:

By username on the server

PLANNED · v0.5

☁️

Hosted service

Managed infra.
Same protocol, zero ops.

Sharing via:

Username, invite link, or email

# Local: export a file, send it yourself
memshare export --tags "project-x" --for "bob"
# → bundle-a3f8.memshare.json — send via Slack, email, etc.
# Team server — v0.4, not built yet:
memshare share --tags "project-x" --with "bob"

# Bob sees it in his inbox
memshare inbox
# → Alice shared 3 items (pending)
memshare accept alice/project-x
Open Source · MIT License

memshare

Your memory belongs to you.
You decide what to share, with whom, and for how long.

✅ v0.2 · shipped

CLI + MCP server
Consent flow + bundles

📡 v0.3

ChatGPT adapter
System-prompt inject

🖥️ v0.4

Docker deploy
Remote MCP server

🌐 v0.5

Discovery + Live sync
Real-time sharing

github.com/kampana/memshare