{"slug": "show-hn-friday-self-hosted-persistent-memory-for-ai-coding-agents-mcp", "title": "Show HN: Friday – Self-hosted persistent memory for AI coding agents (MCP)", "summary": "An open-source project called Friday launched as a self-hosted persistent memory layer for AI coding agents, connecting to tools such as Cursor, Claude, Copilot, and VS Code through the Model Context Protocol (MCP). Friday runs on a FastAPI backend combining Mem0 semantic memory, ChromaDB vector search, and Neo4j knowledge graph, exposing four MCP tools — add_memory, add_fact, memory_search, and get_context — and claims targeted retrieval cuts token use by 90% while developers spend up to 40% of their time rebuilding context without persistent memory.", "body_md": "The open-source, self-hosted **persistent cognitive memory layer** for AI coding agents.\n\n  Cursor forgets. Claude forgets. Copilot forgets.\n\n**Friday doesn't.**\n\n| [**🚀 Quickstart**](#-60-second-quickstart) | [**🔌 IDE Setup**](#-ide-setup--10-seconds) | [**✨ Features**](#-features) | [**📡 API Docs**](#-api-reference) | [**🏗️ Architecture**](#-architecture) | [**🗺️ Roadmap**](#-roadmap) | \n\n*Live Neural Studio — Obsidian-grade knowledge graph visualizer mapping real AI cognitive memory constellations.*\nYou're deep in a session with Cursor. You've explained your entire auth architecture.\n\nYour JWT strategy. Your database schema. Your preferred patterns.\n\nYou open a new chat.\n\n```\nYou:     \"Add a refresh token endpoint using our JWT pattern.\"\nCursor:  \"Sure! What JWT library are you using? And how is your auth structured?\"\nYou:     😤  (again. for the 47th time this week.)\n```\n\n**Every AI coding assistant suffers from the same critical design flaw: no persistent memory.**\n\nEach session starts at zero. Your AI gives you generic advice instead of deeply personalized,\n\nproject-specific insight. You're repeating yourself constantly.\n\nThe result? **You're spending up to 40% of your time just rebuilding context** — instead of building product.\n\nFriday is a **persistent cognitive memory backbone** that plugs into your existing AI tools via the\n\n[Model Context Protocol (MCP)](https://modelcontextprotocol.io). It runs fully self-hosted on your\n\nown infrastructure — your data never leaves your machine or your server.\n\n```\n┌──────────────────────────────────────────────────────────────────────┐\n│         YOUR AI AGENT   (Cursor / Claude / Antigravity / VS Code)    │\n└──────────────────────────────┬───────────────────────────────────────┘\n                               │\n                    4 MCP Tools (stdio transport)\n                    ├── add_memory\n                    ├── add_fact\n                    ├── memory_search\n                    └── get_context\n                               │\n                               ▼\n┌──────────────────────────────────────────────────────────────────────┐\n│                        FRIDAY BRAIN (FastAPI)                        │\n│                                                                      │\n│    Layer 2: Mem0           Layer 3: ChromaDB      Layer 4: Neo4j     │\n│  ┌──────────────────┐    ┌─────────────────┐    ┌───────────────┐   │\n│  │ Semantic Memory  │    │  Vector Search  │    │  Knowledge    │   │\n│  │                  │    │                 │    │  Graph        │   │\n│  │ • Cross-session  │    │ • 90% fewer     │    │  ──────────   │   │\n│  │   persistence    │    │   tokens via    │    │  ● WebApp     │   │\n│  │ • Contextual     │    │   targeted      │    │  ● Auth       │   │\n│  │   similarity     │    │   retrieval     │    │  ● Payments   │   │\n│  └──────────────────┘    └─────────────────┘    └───────────────┘   │\n│                                                                      │\n│    ⚡ Auto-Graph Engine                                              │\n│  ┌─────────────────────────────────────────────────────────────┐    │\n│  │  Every memory → LLM extraction → Neo4j nodes + edges        │    │\n│  │  Zero manual linking. Your knowledge base wires itself.      │    │\n│  └─────────────────────────────────────────────────────────────┘    │\n│                                                                      │\n│    🎨 Neural Studio                                                  │\n│  ┌─────────────────────────────────────────────────────────────┐    │\n│  │  Obsidian-grade live knowledge graph browser                 │    │\n│  │  Spread slider • Filters • Inspector drawer • Full CRUD      │    │\n│  └─────────────────────────────────────────────────────────────┘    │\n└──────────────────────────────────────────────────────────────────────┘\n```\n\n| Capability | Without Friday | With Friday | \n|---|---|---|\n| Remembers architecture decisions across sessions | ❌ | ✅ | \n| Recalls your exact coding preferences & style | ❌ | ✅ | \n| Knows your full project stack & dependencies | ❌ | ✅ | \n| Persists knowledge across chat resets | ❌ | ✅ | \n| Visual knowledge graph of your codebase | ❌ | ✅ | \n| Versioned facts ledger with full audit trail | ❌ | ✅ | \n| Self-hosted — data never leaves your infra | ❌ | ✅ | \n| Works with Cursor, Claude, VS Code, Antigravity | ❌ | ✅ | \n| **Token cost per task** | ~8,000 tokens | **~800 tokens** | \n| **Context recall accuracy** | ~30% | **~94%** | \n\n**Requirements:** [Docker](https://docker.com) + [Docker Compose](https://docs.docker.com/compose/) installed.\n\nThat's literally it. No Python setup. No database config. No services to manage manually.\n\n**Clone and configure**\n\n```\ngit clone https://github.com/itskie/friday.git\ncd friday\ncp .env.example .env\n```\n\n**Fill in your `.env`** — takes 60 seconds\n\n```\n# Set your own master password to protect your self-hosted server\nFRIDAY_API_KEY=pick_any_secret_password_you_want\n\n# DeepSeek (ultra-affordable — $0.14/M tokens)\n# Get yours at: https://platform.deepseek.com\nDEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Mem0 — generous free tier available\n# Get yours at: https://mem0.ai\nMEM0_API_KEY=m0-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n# Neo4j password — you choose this\nNEO4J_PASSWORD=change_to_something_strong\n```\n\n**Launch everything in one command**\n\n```\ndocker compose up -d\n```\n\nThis starts:\n\n- 🧠 **Friday Brain** on`http://localhost`\n- 🕸️ **Neo4j** on`http://localhost:7474`\n- 🎨 **Neural Studio** at`http://localhost`\n\n**Verify it's running**\n\n```\ncurl http://localhost/health\n# {\"status\":\"healthy\",\"layers\":{\"neo4j\":\"ok\",\"mem0\":\"ok\",\"facts\":\"ok (0 entries)\"}}\n```\n\n**Store your first memory**\n\n```\ncurl -X POST http://localhost/add \\\n  -H \"X-Brain-Key: your_key\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"content\": \"We use JWT with 15min access tokens + 7-day refresh. Implementation in gateway/auth.py. Never store tokens in localStorage — httpOnly cookies only.\",\n    \"project\": \"MyApp\"\n  }'\n```\n\n**Your AI now remembers. Forever.** ✅\n\nFriday is designed to be the **central cognitive memory for all your AI coding tools**.\n\nWhether Friday runs locally on your machine or on a **remote 24/7 cloud server (AWS EC2, VPS, Homelab)**, every agent connects to the **same unified memory** via the [Model Context Protocol (MCP)](https://modelcontextprotocol.io).\n\n```\n ┌───────────────────────┐\n │   Cursor (Desktop)    │──┐\n └───────────────────────┘  │\n ┌───────────────────────┐  │\n │    Claude Code CLI    │──┼── MCP Protocol (stdio transport)\n └───────────────────────┘  │   FRIDAY_URL=\"http://your-server-ip:8000\"\n ┌───────────────────────┐  │   BRAIN_API_KEY=\"your_secret_key\"\n │    Antigravity IDE    │──┤\n └───────────────────────┘  │\n ┌───────────────────────┐  │\n │ Codex / Custom Agents │──┘\n └───────────────────────┘\n                            ▼\n             ┌──────────────────────────────┐\n             │     FRIDAY CENTRAL BRAIN     │\n             │   (Self-Hosted on Cloud/EC2) │\n             │   FastAPI + Mem0 + Neo4j     │\n             └──────────────────────────────┘\n```\n\n💡 **Shared Brain Superpower**: An architectural rule or decision stored by **Claude Code** in your terminal is immediately accessible to **Cursor**, **Antigravity IDE**, or **Codex** on your desktop. Zero manual syncing. One brain across your entire toolchain.\n\nPick your client below, paste the configuration, and restart your agent:\n\n## **⚡ Antigravity IDE**\n\nAdd Friday to your Antigravity global MCP configuration at `~/.gemini/config/mcp_config.json`:\n\n```\n{\n  \"mcpServers\": {\n    \"friday\": {\n      \"command\": \"python\",\n      \"args\": [\"-m\", \"mcp.server\"],\n      \"cwd\": \"/path/to/friday\",\n      \"env\": {\n        \"FRIDAY_URL\": \"http://localhost:8000\",\n        \"BRAIN_API_KEY\": \"your_key_from_env\"\n      }\n    }\n  }\n}\n```\n\n*(If Friday runs on a remote server/EC2, change `FRIDAY_URL` to `http://<your-server-ip>:8000`)*\n\n## **🤖 Claude Code (CLI)**\n\nConnect Claude Code to your Friday brain with one terminal command:\n\n```\nclaude mcp add friday   -e FRIDAY_URL=\"http://localhost:8000\"   -e BRAIN_API_KEY=\"your_key_from_env\"   -- python -m mcp.server\n```\n\nOr configure directly in `~/.claude.json` under `\"mcpServers\"`:\n\n```\n{\n  \"mcpServers\": {\n    \"friday\": {\n      \"command\": \"python\",\n      \"args\": [\"-m\", \"mcp.server\"],\n      \"cwd\": \"/path/to/friday\",\n      \"env\": {\n        \"FRIDAY_URL\": \"http://localhost:8000\",\n        \"BRAIN_API_KEY\": \"your_key_from_env\"\n      }\n    }\n  }\n}\n```\n\n## **🖱️ Cursor**\n\nCreate or edit `.cursor/mcp.json` in your project root (or add globally in **Cursor Settings → MCP → Add New Server**):\n\n```\n{\n  \"mcpServers\": {\n    \"friday\": {\n      \"command\": \"python\",\n      \"args\": [\"-m\", \"mcp.server\"],\n      \"cwd\": \"/path/to/friday\",\n      \"env\": {\n        \"FRIDAY_URL\": \"http://localhost:8000\",\n        \"BRAIN_API_KEY\": \"your_key_from_env\"\n      }\n    }\n  }\n}\n```\n\n*(For a remote server, change `FRIDAY_URL` to `http://<your-server-ip>:8000`)*\n\n## **📟 Codex & Autonomous Agents (CLI / Scripts)**\n\nAny custom agent, Codex script, or CI loop can interact with Friday in two ways:\n\n**Option A: Via MCP stdio**\nRun the MCP server directly as a subprocess using standard JSON-RPC 2.0.\n\n**Option B: Direct HTTP REST API** (zero client dependencies)\n\n```\n# Store memory from any agent script\ncurl -X POST http://<your-server-ip>:8000/add   -H \"X-Brain-Key: your_key\"   -H \"Content-Type: application/json\"   -d '{\"content\": \"Refactored payment gateway to Stripe SDK v2.\", \"project\": \"MyApp\"}'\n\n# Retrieve relevant context before starting a prompt\ncurl -X POST http://<your-server-ip>:8000/search   -H \"X-Brain-Key: your_key\"   -H \"Content-Type: application/json\"   -d '{\"query\": \"How is payments structured?\", \"project\": \"MyApp\"}'\n```\n\n## **💻 VS Code (Cline / Roo Code)**\n\nAdd to your VS Code `settings.json` (or via Cline MCP settings):\n\n```\n{\n  \"cline.mcpServers\": {\n    \"friday\": {\n      \"command\": \"python\",\n      \"args\": [\"-m\", \"mcp.server\"],\n      \"cwd\": \"/path/to/friday\",\n      \"env\": {\n        \"FRIDAY_URL\": \"http://localhost:8000\",\n        \"BRAIN_API_KEY\": \"your_key_from_env\"\n      }\n    }\n  }\n}\n```\n\n## **🖥️ Claude Desktop**\n\nEdit your Claude Desktop configuration:\n\n- **macOS** :`~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows** :`%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```\n{\n  \"mcpServers\": {\n    \"friday\": {\n      \"command\": \"python\",\n      \"args\": [\"-m\", \"mcp.server\"],\n      \"cwd\": \"/path/to/friday\",\n      \"env\": {\n        \"FRIDAY_URL\": \"http://localhost:8000\",\n        \"BRAIN_API_KEY\": \"your_key_from_env\"\n      }\n    }\n  }\n}\n```\n\n📁 Pre-built config templates for all clients are available in [`examples/`](https://github.com/itskie/friday/blob/main/examples).\n\nEvery memory you store is automatically analyzed by an LLM (DeepSeek Flash).\n\nEntities and relationships are extracted and wired into your Neo4j knowledge graph\n\n**without any manual input from you.**\n\n```\nInput:\n\"MyApp uses Stripe for subscriptions. Plans: Free ($0), Pro ($19/mo), Team ($49/mo).\n PayPal handles international. Webhooks at /api/payments/webhook.\"\n\nAuto-extracted graph:\n  MyApp ────USES────────▶ Stripe\n  MyApp ────USES────────▶ PayPal\n  MyApp ────HAS_PLAN────▶ FreePlan     [price: $0]\n  MyApp ────HAS_PLAN────▶ ProPlan      [price: $19/mo]\n  MyApp ────HAS_PLAN────▶ TeamPlan     [price: $49/mo]\n  Stripe ───WEBHOOK_AT──▶ /api/payments/webhook\n```\n\nNo YAML. No manual tagging. Just store memories, and your knowledge graph builds itself.\n\nA browser-based visual explorer for your AI's knowledge — built with the same graph engine\n\nthat powers [Obsidian](https://obsidian.md)'s graph view.\n\n**What you can do:**\n\n- 🌌 Explore your entire knowledge base as a living constellation\n- 🔍 Full-text search — camera auto-follows, inspector slides open\n- 🎛️ **Spread slider** (1–10) — breathe space into dense graphs in real-time\n- 🏷️ **Project filter chips** — isolate WebApp vs Auth vs Payments constellations\n- 🖱️ **Click any node** → right-side inspector with facts, edges, actions\n- ➕ Add / ✏️ Rename / 🗑️ Delete / 🔗 Connect — full CRUD via UI\n- ❄️ **Freeze** physics to lock a layout,**Fit View** to reset camera\n- ⚡ Live auto-refresh as new memories arrive\n\nDiscrete facts (rules, preferences, constants) are stored with **immutable version history**.\n\nOld versions are superseded, never deleted. You always have a full audit trail.\n\n```\n# Store a fact\nPOST /facts  →  {\"content\": \"We deploy on Ubuntu 22.04 LTS + systemd\"}\n# id: \"a3f9e1b2\", created_at: \"2026-09-01\", superseded: false\n\n# 3 months later — upgraded\nPOST /facts  →  {\"content\": \"We deploy on Ubuntu 24.04 LTS + Docker Compose\"}\n# Old fact: superseded: true  ← preserved for history\n# New fact: superseded: false ← active version\n\n# Your AI always gets the active version. Past versions auditable via API.\nGET /facts?include_superseded=true\n```\n\nInstead of dumping your entire memory into every prompt, Friday uses ChromaDB vector search\n\nto retrieve only the **most relevant context** for each query.\n\n```\n# Traditional RAG — expensive and noisy\ncontext = all_memories  # 10,000 tokens of everything\n\n# Friday — surgical precision\ncontext = memory_search(\"JWT refresh token implementation\")\n# Returns: exactly the 3-5 memories about JWT, nothing else\n# Cost: ~200 tokens vs 10,000  →  95% reduction\n```\n\nOnce connected, your AI agent automatically calls Friday's tools. No prompting required.\n\n```\n┌──────────────────────────────────────────────────────────────────┐\n│  Tool            │  When Your Agent Uses It                      │\n├──────────────────┼───────────────────────────────────────────────┤\n│  get_context     │  At session START — loads all active facts    │\n│                  │  + recent memories for instant orientation     │\n├──────────────────┼───────────────────────────────────────────────┤\n│  memory_search   │  Before answering architecture/design Q's     │\n│                  │  \"What's our auth pattern again?\"              │\n├──────────────────┼───────────────────────────────────────────────┤\n│  add_memory      │  After implementing features, fixing bugs,    │\n│                  │  making architectural decisions                │\n├──────────────────┼───────────────────────────────────────────────┤\n│  add_fact        │  For atomic rules that never change:          │\n│                  │  stack choices, team preferences, standards   │\n└──────────────────┴───────────────────────────────────────────────┘\n```\n\n**Suggested system prompt addition:**\n\n```\nAt the start of every session, call get_context to load my preferences and project context.\nBefore answering any technical question, call memory_search with the relevant topic.\nAfter implementing features or making decisions, call add_memory to persist the context.\nfriday/\n│\n├── 📡 gateway/\n│   └── main.py              # FastAPI backbone — auth, routing, all endpoints\n│\n├── 🧩 layers/               # Pluggable memory backends (swap any layer)\n│   ├── layer2_mem0.py       # Semantic memory — Mem0 cloud API\n│   ├── layer3_chroma.py     # Vector store — ChromaDB (local)\n│   └── layer4_neo4j.py      # Knowledge graph — Neo4j\n│\n├── ⚡ pipelines/            # Background intelligence\n│   ├── auto_graph.py        # LLM entity extraction → Neo4j wiring\n│   └── extract_facts.py     # S3-style versioned fact management\n│\n├── 🔀 orchestrator/\n│   └── router.py            # Query routing — picks best layer per query type\n│\n├── 🔌 mcp/\n│   └── server.py            # MCP stdio server (JSON-RPC 2.0)\n│                            # ← This is what your IDE connects to\n│\n├── 🎨 studio/\n│   └── index.html           # Neural Studio — 1,400 lines, zero dependencies\n│                            # force-graph + d3 + vanilla JS\n│\n├── 🐳 docker-compose.yml    # Neo4j + Friday Brain — production-ready\n├── 🐳 Dockerfile            # python:3.11-slim, multi-stage ready\n├── 📦 requirements.txt      # Pinned dependencies\n└── 🌱 seed/                 # Demo data to bootstrap a fresh install\n    ├── facts.example.json\n    └── blueprints/demo_architecture.md\n```\n\n**Data Flow:**\n\n```\n[Your IDE] \n    → MCP call: add_memory(\"We use Redis for rate limiting\")\n        → gateway/main.py  → Mem0 store (sync)\n                           → auto_graph.py (background)\n                               → DeepSeek: extract entities\n                               → Neo4j: MERGE Redis node\n                               → Neo4j: CREATE edge (:App)-[:USES]->(:Redis)\n        ← {\"status\": \"added\", \"mem0_id\": \"abc123\"}\n```\n\nAll authenticated endpoints require the `X-Brain-Key` header.\n\n🌐 = public endpoint (no auth required).\n\n| Method | Endpoint | Auth | Description | \n|---|---|---|---|\n| `GET` | `/` 🌐 | — | Serves the Neural Studio UI | \n| `GET` | `/health` 🌐 | — | Health check — reports status of all layers | \n| `GET` | `/docs` 🌐 | — | Interactive Swagger UI | \n| `POST` | `/add` | ✅ | Store a memory + trigger auto-graph wiring | \n| `POST` | `/facts` | ✅ | Add or supersede a versioned fact | \n| `GET` | `/facts` 🌐 | — | List all active facts | \n| `GET` | `/facts?include_superseded=true` 🌐 | — | Full history including superseded | \n| `POST` | `/search` | ✅ | Semantic search via Mem0 | \n| `POST` | `/ingest` | ✅ | Ingest a document / architecture blueprint | \n| `GET` | `/api/graph-data` 🌐 | — | All nodes + edges for Neural Studio | \n| `GET` | `/api/search-quick?q=term` 🌐 | — | Fast fuzzy node name search | \n| `POST` | `/api/node/create` | ✅ | Create entity node in graph | \n| `DELETE` | `/api/node/{id}` | ✅ | Delete node + all relationships | \n| `POST` | `/api/node/rename` | ✅ | Rename an entity node | \n| `POST` | `/api/link/create` | ✅ | Create a typed relationship edge | \n\nFull interactive docs: `http://localhost/docs`\n\n| Variable | Required | Default | Description | \n|---|---|---|---|\n| `FRIDAY_API_KEY` | ✅ | — | Your self-hosted server secret (set by you to protect endpoints) | \n| `DEEPSEEK_API_KEY` | ✅ | — | LLM key for auto-graph extraction | \n| `MEM0_API_KEY` | ✅ | — | Mem0 key for semantic memory | \n| `NEO4J_PASSWORD` | ✅ | — | Neo4j DB password (you set this) | \n| `NEO4J_URI` | — | `bolt://neo4j:7687` | Neo4j connection string | \n| `NEO4J_USER` | — | `neo4j` | Neo4j username | \n| `DEEPSEEK_BASE_URL` | — | `https://api.deepseek.com` | LLM API base URL | \n| `DEEPSEEK_MODEL` | — | `deepseek-chat` | LLM model name | \n| `FACTS_PATH` | — | `/app/facts/facts.json` | Path for facts ledger file | \n| `HOST` | — | `0.0.0.0` | Server bind address | \n| `PORT` | — | `8000` | Server port | \n\n**Where to get your keys (all have free tiers):**\n\n| Service | Link | Cost | \n|---|---|---|\n| **DeepSeek** | [platform.deepseek.com](https://platform.deepseek.com) | ~$0.14/M tokens — cheapest capable LLM | \n| **Mem0** | [mem0.ai](https://mem0.ai) | Generous free tier | \n| **Neo4j** | Bundled in Docker Compose | Free & local | \n\n**v1.0 — Foundation** ✅ *shipped*\n\n- FastAPI memory gateway with full REST API\n- Neo4j knowledge graph integration\n- Autonomous graph extraction engine (DeepSeek + Neo4j)\n- Neural Studio UI — Obsidian-grade graph browser\n- MCP server — Cursor / Antigravity / Claude Desktop / VS Code\n- S3-style versioned facts ledger\n- Docker Compose — 1-command self-hosted setup\n- ChromaDB semantic search layer\n- Full CRUD via Neural Studio (add / rename / delete / connect)\n- Per-project constellation namespacing\n\n**v1.1 — Multi-User & DX** 🚧 *in progress*\n\n- Multi-user support with isolated namespaces\n-  Python SDK (`pip install friday-client` )\n- TypeScript/JavaScript SDK\n-  `friday` CLI —`friday add \"...\"` ,`friday search \"...\"` from terminal\n\n**v1.2 — Integrations** 📋 *planned*\n\n- GitHub Actions bot — auto-store PR summaries as memories\n-  Slack integration — `/friday remember ...` from Slack\n- Jira / Linear sync — auto-import tickets as project context\n- VS Code extension — sidebar memory panel\n\n**v2.0 — Cloud** 🌐 *future*\n\n- Friday Cloud — managed, zero-infra option\n- Team workspaces — shared memory across your engineering team\n- Private beta waitlist\n\nFriday is built in public and we'd love your contributions.\n\n```\n# Fork & clone\ngit clone https://github.com/YOUR_USERNAME/friday.git\ncd friday\n\n# Set up environment\ncp .env.example .env\npip install -r requirements.txt\n\n# Run tests — all must be green before PRing\npython -m pytest tests/ -v\n# ✅ 9 passed in 0.34s\n\n# Create your branch\ngit checkout -b feat/your-amazing-feature\n\n# Commit using conventional commits\ngit commit -m \"feat: add X that does Y\"\n\n# Push & open PR\ngit push origin feat/your-amazing-feature\n```\n\nSee [CONTRIBUTING.md](https://github.com/itskie/friday/blob/main/CONTRIBUTING.md) for full guidelines.\n\nBrowse [`good first issue`](https://github.com/itskie/friday/issues?q=label%3A%22good+first+issue%22) labels to find where to start.\n\nFriday is designed for self-hosted deployment. A few notes:\n\n- **API Key auth** — all write endpoints require`X-Brain-Key` header\n- **Public read** —`/health` ,`/facts` (read),`/api/graph-data` , and Neural Studio are public by default. If you expose Friday publicly, consider adding reverse-proxy authentication (e.g., Nginx basic auth or Cloudflare Access).\n- **Secrets** — never commit your`.env` . It's in`.gitignore` by default.\n- **Network** — by default, Friday binds to`0.0.0.0` . For local-only use, change to`127.0.0.1` in`.env` .\n\nFound a vulnerability? Please open a **private** security advisory on GitHub rather than a public issue.\n\nMIT © 2026 Friday Contributors — see [LICENSE](https://github.com/itskie/friday/blob/main/LICENSE) for details.\n\n**Built for the AI-native developer generation.**\n\nIf Friday saved you from AI amnesia, please consider giving it a ⭐\n\nIt helps more developers discover the project and keeps us motivated.\n\n[⭐ Star on GitHub](https://github.com/itskie/friday)  · \n[🐛 Report Bug](https://github.com/itskie/friday/issues/new?template=bug_report.md)  · \n[💡 Request Feature](https://github.com/itskie/friday/issues/new?template=feature_request.md)  · \n[💬 Discussions](https://github.com/itskie/friday/discussions)\n\n<sub>Made with ❤️ by developers who were tired of repeating themselves to their AI.</sub>", "url": "https://wpnews.pro/news/show-hn-friday-self-hosted-persistent-memory-for-ai-coding-agents-mcp", "canonical_source": "https://github.com/itskie/friday", "published_at": "2026-09-16 18:55:09+00:00", "updated_at": "2026-09-16 19:14:02.083084+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products", "mlops"], "entities": ["Friday", "Cursor", "Claude", "GitHub Copilot", "VS Code", "Model Context Protocol", "FastAPI", "Mem0"], "alternates": {"html": "https://wpnews.pro/news/show-hn-friday-self-hosted-persistent-memory-for-ai-coding-agents-mcp", "markdown": "https://wpnews.pro/news/show-hn-friday-self-hosted-persistent-memory-for-ai-coding-agents-mcp.md", "text": "https://wpnews.pro/news/show-hn-friday-self-hosted-persistent-memory-for-ai-coding-agents-mcp.txt", "jsonld": "https://wpnews.pro/news/show-hn-friday-self-hosted-persistent-memory-for-ai-coding-agents-mcp.jsonld"}}