Live · Private beta · mdenh.dev

mdenh

The private memory your AI plugs into via MCP — memory you read and edit, not memory that reads you.

MCPPostgreSQLpgvectorPostgres FTSHybrid search (RRF)Cross-encoder rerankerall-MiniLM-L6-v2ModalOCR ingestionOAuth (Stytch)LLM-as-judge evalsNext.js 15Drizzle ORM
mdenh interface
~81%
fewer tokens to answer (5.3×) — quality held
0.965
answer faithfulness (LLM-as-judge)
7-suite
eval program, gated in CI

The thesis

People want their AI to answer from their own notes, docs, and chat history. The default move — paste the whole library into the prompt — is expensive, hits context limits, and dilutes the answer with irrelevant text. The insight: the assistant shouldn't receive your library, it should query it. The Model Context Protocol (MCP) makes that real — Claude, Cursor, and ChatGPT connect directly to a hosted memory and pull only the relevant spans. That splits the product's job into two things worth being excellent at: make the memory good (hybrid retrieval, OCR ingestion, compression, reranking) and make it trustworthy — memory you can read, edit, and delete, that never leaves first-party infrastructure. The strategic bet is deliberately not to out-benchmark heavier incumbents like Supermemory on a compute-war leaderboard, but to match their token economy with first-party components and win on the one axis they structurally won't copy: inspectable, curated memory you own. The ~81% token headline is only allowed to count because answer quality is measured separately, at the same retrieval depth.

What it does

Memory your AI queries — not a prompt you re-paste

Save your notes, docs, and chat history once; Claude, Cursor, and ChatGPT retrieve only what they need on demand over MCP instead of ingesting the whole library. Connection is one-click OAuth — no config files, no tokens to copy and paste.

Memory you own and can inspect

Unlike black-box auto-extraction tools that silently build a representation of you, every memory in mdenh is a full markdown document you can read, edit, and delete. Imported chats and AI-saved notes land as readable documents, not opaque extracted facts.

A measured token economy

Roughly 81% fewer tokens (about 5.3×) to answer a question from your library via retrieval versus pasting it into the prompt. The MCP path stays flat at ~1,217 tokens per question no matter how large your library grows, while every paste baseline scales with it — so the win widens the more notes you keep.

A self-populating library

Chat-history import seeds the library from existing ChatGPT/Claude exports, and a save_to_library MCP write tool lets the assistant grow it during sessions — so the corpus fills in as you work rather than requiring manual filing.

Trust as a gate, not a vibe

A seven-suite eval program (E1–E7) runs deterministic gates in CI — ingestion fidelity, cross-tenant isolation, write-scope gating, retrieval quality — plus a separate LLM-as-judge report for faithfulness, citation correctness, and abstention. Quality regressions have to surface before a user ever feels them.

A look inside

mdenh landing hero — 'Stop re-posting. Give your AI a memory.' beside an ~81% fewer-tokens panel
The pitch and the wedge — 'Stop re-posting. Give your AI a memory,' beside the ~81% fewer-tokens panel. Works with Claude, Cursor, ChatGPT, VS Code, and Windsurf.
mdenh full landing page showing positioning, three pillars, and how it works
The full landing — positioning, the three pillars (memory you can read, private by architecture, plugs into the AI you already use), and how it works.
mdenh request-beta-access page qualifying testers by their AI tool and use case
Beta access, instrumented to learn — a consent-gated funnel with an activation checklist, micro-survey, and PMF capture, so it answers 'is this valuable enough to pay for?'
mdenh privacy page explaining what happens to your content in plain language
Privacy in plain language — the 'what happens to your content' contract: content stays first-party and encrypted, usage-shape analytics go to PostHog with consent, because 'memory you own' has to be more than a tagline.

Architecture & decisions

  • Retrieval stack earning the token number: hybrid search (pgvector cosine + Postgres full-text) fused via Reciprocal Rank Fusion (K=60) → extractive sentence-window compression → a first-party cross-encoder reranker (BAAI/bge-reranker-base on Modal).
  • Embeddings are local/first-party: all-MiniLM-L6-v2 (384-dim) via a first-party Modal embed-service — no document content is sent to a third party to embed.
  • Compression is extractive, not LLM-based: it scores sentences by query-token overlap and returns the tightest relevant window, preserving citation provenance (title, chunk ID, char offsets) — ~60–73% per-passage reduction with zero LLM calls or new sub-processors.
  • The assistant connects over MCP (Streamable HTTP) with zero-setup OAuth via Stytch Connected Apps — working in production for Claude.ai web and Claude Desktop — and pulls only relevant spans at query time; no library dump into the context window.
  • Retrieval-only by design: the API/MCP surface returns passages + citations from the owner's corpus and leaves generation to the consuming agent; every query is owner- and project-scoped.
  • Postgres/Neon data model with Drizzle ORM: documents as text, a generated tsvector for FTS, pgvector columns for semantic relatedness and topic clustering, and chunk rows carrying passage offsets for citation integrity. The hybrid+compression path runs by default; the lexical RRF arm needs migration 0009 and the cross-encoder reranker is wired but founder-ops-gated behind RERANK_SERVICE_URL.

Engineering highlights

  • Cost and quality are measured at the same retrieval depth so a token 'win' can never hide a quality regression — the discipline that separates an honest AI metric from a vanity one.
  • Deterministic eval gates run in CI: ingestion fidelity 1.0 across eight sub-metrics, cross-tenant isolation 0 leaks (5 reader functions, 16 inspected queries, 2 seeded owners), write-scope 100% refused for read-only/OAuth callers, retrieval Recall@5 0.974 / MRR 0.930 / nDCG@10 0.927.
  • Answer quality is graded by a separate LLM-as-judge run where the answer model (owl-alpha via OpenRouter) and judge model (Claude Sonnet via the local CLI) are deliberately distinct — no self-grading — over a 17-item QA set with 4 planted 'not in corpus' probes: faithfulness 0.965, citation correctness 0.988, abstention accuracy 0.941.
  • The offline eval harness ports production TypeScript (rrf.ts, compress.ts) to a deterministic .mjs runner guarded by a drift test, so the eval can never silently diverge from what production actually does.
  • Intellectual honesty is engineered in: the more conservative earlier ~69% / 3.2× equal-recall number is kept on the record beside the ~81% headline, and every eval ships explicit honesty caveats (synthetic proxy corpus, TF-IDF stand-in for the semantic ranker, reranker modeled as an oracle upper bound).
  • Known weaknesses are surfaced, not buried: completeness (0.838) and abstention recall (0.400) are the lowest scores and are tracked as open items rather than hidden.
  • Non-trivial bets are written as numbered ADRs before the code — 29 decision records covering the retrieval architecture (ADR-0026), MCP OAuth (ADR-0025), the self-populating library (ADR-0027), and privacy posture (ADR-0009).
  • Privacy is content-blind by construction: usage-shape analytics (PostHog, US) emit only action types, counts, booleans, and opaque owner IDs with consent — no document content, query text, filenames, or emails ever reach any vendor; document content and query text stay first-party and encrypted.

Why this matters

mdenh is the case study I point to for AI product judgment. I killed the original 'enhanced markdown reader' framing after a competitive teardown (Supermemory, Notion's MCP connector, savemarkdown.co, free OSS vault servers) showed the mechanic was commoditizing at every price point including free, and re-anchored on 'memory you own and can inspect' — the one axis incumbents structurally won't copy. I made a deliberate sequencing call to defer real quality levers (768-dim embeddings, atomic-fact distillation) until the eval needle actually moves on real cohort data, rather than burning runway on novelty before the value hypothesis is validated. I chose value and willingness-to-pay (Sean-Ellis PMF, NPS, WTP) and activation as the beta's primary metrics over vanity signups, and refused to let the token-cost win hide a quality loss by measuring both at the same retrieval depth. The signature move is intellectual honesty as a feature: the more conservative earlier number stays on the record, and every eval ships an explicit 'what this does not prove' section.

Want the full story?

Ask the portfolio chat, or reach out directly.