Build With Moenu buildwithmoenu.com
Case Study

duSraBheja — Personal AI Second Brain & MCP Server

duSraBheja · duSraBheja
Live

A personal open-brain that ingests everything I capture and makes it answerable by AI agents through MCP.

Overview

Project framing

A personal AI second brain that doesn't ask me to organize anything. I drop things into a Discord channel and ask later. The system handles the capture, classification, embedding, and merge into a canonical memory — and exposes the answer surface to Claude Code, Codex, and a public chat through MCP.

Problem

The problem isn't capturing information — it's retrieving it when you need it and knowing what you know. Every tool I tried required manual organization I don't actually do.

Role

Designer, engineer, operator. Solo build.

Why now

MCP changed the answer surface. Once Claude Code and Codex could call into a brain over MCP, the second-brain problem stopped being about UI and started being about pipelines, retrieval quality, and what the public surface should and should not say.

Topline

Constraints

  • A zero model budget — every chat, vision and embedding call routes through free-tier models; usage is logged and cost stays at zero.
  • Deliberately small-scale operations, so the public path was engineered to be fast rather than to scale out.

Outcomes

  • A live, working retrieval system I use daily — ask it anything about my work and it answers from what it has ingested.
  • Demonstrates the same capability a business needs over its own documentation, contracts, or ops data — a system that answers questions and acts on the knowledge it holds.
  • Everything is captured privately by default; only owner-approved facts ever reach the public surface.
Architecture

From capture to answer

How a single Discord message becomes something the brain can answer with.

01
Step 1

Capture

A message, image, PDF, or link lands in Discord #inbox. The bot enqueues a job, never blocks.

02
Step 2

Extract

Worker routes by MIME type and pulls text from PDFs, images (vision OCR), Excel, DOCX, or web links.

03
Step 3

Classify

Below 0.75 → review queue.

04
Step 5

Librarian merge

Source artifacts are kept with provenance.

05
Step 6

Answer

Same canonical store powers /brain chat, MCP tools for Claude Code & Codex, and the private dashboard.

Low-confidence path

Items below the 0.75 gate get a clarification question and a review-queue row instead of being silently dropped.

Cognition trigger

Every 20 merges, an on-demand synthesis pass runs across recent signals to surface threads I haven't seen.

OutcomeOne brain, six capture surfaces, two answer surfaces.
Key Decisions
1 / 1
Owner-approved public surface, not derived

Build a separate snapshot for the public site that only surfaces facts I've explicitly approved.

A second brain that auto-publishes is a liability. I want the brain to remember everything privately and only say in public what I've signed off on.

More owner work (approval queue) for a fundamentally safer public surface.
Struggles

Vector search silently returned wrong results for a day.

Three-commit fix, about 65 lines. The deeper cost was confidence in retrieval. Recovery was discipline: every retrieval path got a test before being shipped, and the librarian and retriever got project-aware ranking. That habit is how I now ship retrieval changes without anxiety.
Learnings
Schema discipline survives rewrites; framework choices don't.
Retrieval tests are the cheapest insurance you can buy.
Anything that has to survive a refactor lives in a file or env var, not a Python function.