lal
A permissioned memory tree for you and your AI — served over MCP.
README
lal
A permissioned memory tree for you and your AI — served over MCP. Live at lal.dev. Free to use, open source, no plans and no payment method anywhere in the app.
lal is a knowledge graph you write in Markdown-ish leaves and your AI reads through the Model Context Protocol. Every leaf carries its own audience, so a person, a team, and a customer each see exactly their slice — and the AI inherits precisely the access of whoever is asking, never more.
Connect your AI
claude mcp add --transport http lal https://lal.dev/api/mcp
Then sign in and approve. Claude Desktop / web: add it as a custom connector with the same URL. Walkthrough: lal.dev/connect.
Access on lal.dev is by invitation. Anyone can create an account (Google / GitHub), but a memory tree only opens up once an organization invites that email — there is no self-serve org creation, on purpose. If you want your own instance today, self-host this repo.
Tools exposed to the model: memory_index, memory_search, memory_read, memory_suggest,
my_suggestions, plus the curator set memory_health, memory_curation, memory_verify.
What's in it
- Tree + editor — leaves with frontmatter, folders, tags, aliases, full-text search.
- Version history — append-only revisions, per-editor drafts with optimistic concurrency, soft-delete → archive → bin. Nothing is ever hard-deleted except by an admin purge.
- Access tiers — reader suggests · writer edits live · keeper approves · admin manages people,
with an
edit ⊆ readinvariant. Hidden leaves are indistinguishable from missing ones. - Suggestions + review — anyone can suggest; keepers approve; approved suggestions publish in place.
- Curator — health scoring, staleness/duplicate/orphan detection and verification passes, driven by your own AI through MCP prompts. No server-side model, no vendor lock.
- Graph — a live view of the tree with four renderers (3D force graph plus three hand-rolled Canvas2D modes) and read-traffic heat.
- Multi-tenant — organizations and divisions. An invite stays pending until the invited person actually signs in with that email, and binds only to rows addressed to it.
- Bilingual UI — Indonesian and English.
Stack
| Layer | What |
|---|---|
| Client | Vite SPA (React 19, TypeScript, Tailwind) |
| API + MCP | Hono on Cloudflare Workers (worker/) |
| Data | Supabase Postgres — schema db_memory, reached only through mem_* RPCs |
| Auth | OAuth 2.1 / magic link via the AMA Forum identity server |
Brutalist dark theme on purpose: hard 2px borders, zero rounding, amber on near-black.
Running it
npm install
npm run dev # Vite dev server
npm run typecheck # app + SPA + worker
npm run build # SPA + worker bundle into dist/
npm run deploy # build, then wrangler deploy (needs your own Cloudflare + Supabase)
Config lives in .env.production for the three public, client-inlined values
(Supabase URL, publishable key, app URL). Everything secret — the Supabase service key and friends —
is set as a Cloudflare Worker secret (wrangler secret put), never committed.
Honest caveat about self-hosting: the data layer is RPC-only and lives in Postgres. This repo mirrors the migrations from 2026-06-30 onward, not the full original
db_memoryschema, sogit clone && npm run deploywill not give you a working instance yet. Run it against your own Supabase and expect to fill in the earlier schema by hand. If you want that gap closed, say so in an issue — it's the main thing standing between this repo and a turnkey self-host.
Donate
lal is free and stays free. Nothing in the app charges, meters, or counts seats.
There is no donation link yet. If you want to support it — or just talk — reach me on X · @lalss08 or Threads · @lalss. Nothing you send buys a feature, priority, or a support tier.
What's not here
The content of the maintainer's own memory tree is private and always will be — this repo is the application, not the knowledge in it. A handful of migrations that are pure AMA-internal billing plumbing are also left out; nothing lal-the-app needs depends on them.
License
MIT.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.