Personal Memory MCP Server
Personal Memory MCP Server
A small, self-hosted server that gives any MCP-compatible AI tool (Claude Desktop, Claude Code, and others that support MCP) a shared, persistent memory it can read and write — independent of any single app or project.
Storage is SQLite (one file, memory.db). Tools exposed: remember,
recall, list_recent, forget, list_tags.
1. Run it locally first (sanity check)
pip install -r requirements.txt
export MEMORY_SERVER_TOKEN="pick-a-long-random-string-here"
python server.pyIt starts on http://localhost:8000. Leave it running.
2. Deploy it somewhere reachable from all your devices
Pick one — all are low/no cost for personal use:
Option A: Railway (easiest)
This repo is already on GitHub — good to go.
Go to railway.app → New Project → Deploy from GitHub repo.
In the service's Variables tab, add
MEMORY_SERVER_TOKEN= your secret string.Railway auto-detects the
Procfileand deploys. Add a Volume mounted at/dataand setMEMORY_DB_PATH=/data/memory.dbso your memories survive redeploys.Copy the generated public URL (e.g.
https://your-app.up.railway.app).
Option B: Render
New → Web Service → connect this repo.
Build command:
pip install -r requirements.txt. Start command:python server.py.Add env var
MEMORY_SERVER_TOKEN. Attach a persistent disk at/data, setMEMORY_DB_PATH=/data/memory.db.
Option C: Any VPS (DigitalOcean, Hetzner, etc.) with Docker
docker build -t memory-server .
docker run -d -p 8000:8000 \
-e MEMORY_SERVER_TOKEN="your-secret" \
-v ~/memory-data:/data \
memory-serverPut it behind a domain + HTTPS (e.g. Caddy or nginx + Let's Encrypt) so the token isn't sent over plain HTTP.
3. Connect Claude Desktop / Claude Code to it
Add a remote MCP server in Claude Desktop: Settings → Connectors → Add custom connector, with:
URL:
https://your-deployed-url/mcpHeader:
Authorization: Bearer your-secret-token
(Exact UI wording may vary by version — search Claude's docs for "custom connector" if the menu looks different.)
For Claude Code, add to your MCP config (e.g. .mcp.json or via claude mcp add):
{
"mcpServers": {
"personal-memory": {
"url": "https://your-deployed-url/mcp",
"headers": {
"Authorization": "Bearer your-secret-token"
}
}
}
}Any other MCP-compatible client (some third-party tools support MCP connectors too) can point at the same URL + token to share the exact same memory store.
4. Using it
Once connected, just talk naturally:
"Remember that my Mayo outreach uses 'research fellow' not 'postdoc'."
"What have I saved about the heme-onc template?"
"Forget memory #7."
The AI tool decides when to call these tools based on your conversation — you don't need to invoke them manually.
Notes / limitations
Security: the bearer token is the only protection. Keep it secret, use HTTPS in production, and don't commit
.envormemory.dbto git (already in.gitignore).Search is basic:
recalldoes a plain SQLLIKEmatch, not semantic search. Fine for a personal memory store with dozens–hundreds of entries; if it grows large and keyword search stops finding things, this is the first place to upgrade (e.g. add embeddings + a vector column).Backups: it's one SQLite file — back it up periodically (e.g. a cron job copying
/data/memory.dbsomewhere safe) since most free hosting tiers don't guarantee volume durability.This is separate from Claude's built-in memory — that still exists and works automatically within Claude. This server is for context you want to persist and be readable across different tools, not just Claude.