⚠ Work in progress — not stable, not production-safe, built actively. Use at your own risk.
A terminal window and a browser chat window connected through an encrypted MemBridge link
Open source & self-hostable — or use the free hosted instance

One encrypted memory.
Shared across all your AI agents.

Keep your notes, decisions, and rules in sync across your local terminal, IDE code editors, and web-based AI chats — stored as ciphertext, exposed as a standard, tool-agnostic MCP server.

# install memb CLI
$ curl -fsSL https://membridge.yaro.fr/install | bash
$ memb configure mem_YOUR_KEY   # after signing in
$ claude mcp add --transport http membridge https://membridge.yaro.fr/mcp
$ memb push
✓ context encrypted and synced.
 
> use membridge to add a note: "ship the v2 API by Friday"
✓ note added — visible next time your local agent pulls.
How it works

Same memory context, all your AI agents, zero copy-paste

One ciphertext blob per user. All your CLI terminals, IDE assistants, and browser chats read and write it through standard MCP tools.

Local CLI / IDEClaude Code, Cursor, etc.
CLI push / pull
⇄
ServerMemBridge
encrypted storage
⇄
Editor & Web ChatsClaude.ai, Gemini, etc.
MCP tool calls
Diagram: your device runs age encrypt, MemBridge stores ciphertext only, the other device runs age decrypt
①

Sign in with GitHub

OAuth login issues a scoped API key. No passwords, no separate account system.

②

Encrypted with age

The CLI encrypts fully client-side — your key never leaves your machine. MCP tool calls send the key over TLS so the server can decrypt on your behalf — never persisted.

③

Sync through one tiny API

A single ciphertext row per user. push/pull from the CLI, get_context/add_note/search from MCP.

⚡

Auto-push with a Claude Code Stop hook

Add this to ~/.claude/settings.json — your context is pushed silently every time a session ends, no manual memb push needed.

// ~/.claude/settings.json
{
  "hooks": {
    "Stop": [
      { "hooks": [{ "type": "command", "command": "memb push --silent 2>/dev/null || true" }] }
    ]
  }
}
♊

Connect to Gemini / Antigravity IDE

Configure MemBridge as an SSE server in your local Gemini config (~/.gemini/config/mcp_config.json):

// mcp_config.json
{
  "mcpServers": {
    "membridge": {
      "url": "https://membridge.yaro.fr/mcp",
      "headers": {
        "Authorization": "Bearer mem_YOUR_KEY"
      }
    }
  }
}

⚠️ Unsupported: Gemini Web (gemini.google.com) does not support custom MCP connections due to browser sandboxing. Also, Antigravity's continuous IDE agent model does not support a CLI session "Stop" hook.

Security model

Encrypted at rest. Standards-based in transit.

No custom auth scheme to audit — OAuth 2.1, PKCE, and dynamic client registration, all over TLS.

Diagram: data shielded in a TLS tunnel while in transit, then stored as scrambled ciphertext in a database at rest
④

age encryption

Context is stored as ciphertext only. The CLI's push/pull are end-to-end — the server never sees your key. MCP tool calls pass the key as an argument over TLS so the server can decrypt on your behalf (necessary for browser-based chats, which lack local crypto) — never persisted, but not zero-knowledge. MCP tools work in interactive assistant sessions; non-interactive subprocesses do not inherit MCP auth.

⑤

GitHub OAuth + API keys

Identity comes from GitHub OAuth. API keys are sha256-hashed in the database — the raw key is shown exactly once at signup and never retrievable again. Revoke and reissue any time.

⑥

OAuth 2.1 + PKCE for AI Clients

AI agents and web clients authorize via standard dynamic client registration and PKCE — no manually-managed client secrets, no shared passwords. The authorization server is the MemBridge server itself.

⑦

Rate limited

Per-user sliding window rate limiting (100 req/hr) protects the API from runaway clients. Excess requests get a 429 with a clear error message.

⑧

No plaintext ever stored

The database only holds the encrypted blob and its byte size. There are no logs of context content, no S3 backups of plaintext, no admin interface that could expose your data.

Quickstart

Self-host it in one docker compose up

One server, one database, no managed services. Don't want to run your own? use the free hosted instance instead.

An arrow labeled with a dollar-sign terminal prompt dropping into a stacked server, gear, and shield, representing one command deploying the whole stack
$ git clone https://github.com/TidyMaze/membridge && cd membridge
$ cp .env.example .env   # set GH_CLIENT_ID / SECRET / BASE_URL
$ docker compose up -d --build
✓ http://localhost:3000/health → {"ok":true}

# install the CLI
$ curl -fsSL https://your-domain.com/install | bash
$ memb configure mem_YOUR_KEY
$ claude mcp add --transport http membridge https://your-domain.com/mcp