LLM-maintained personal wiki: cross-references sources, flags contradictions. Local markdown.
io.github.frankchu91/mindbase โ Model Context Protocol (MCP) Server
LLM-maintained personal wiki that stores notes locally as Markdown. It supports cross-referencing sources and flags contradictions within the content, helping keep related information connected. The server description indicates it focuses on reference integrity and consistency for personal knowledge bases.
๐ ๏ธ Key Features
Local Markdown personal wiki
Cross-references sources
Flags contradictions
LLM-maintained content
๐ Use Cases
Maintaining a personal knowledge base in Markdown
Linking related sources within notes
Identifying conflicting claims across references
โก Developer Benefits
Simple local Markdown representation for easy inspection and versioning
Source cross-references and contradiction flags to improve context clarity
โ ๏ธ Limitations
Limited details available: no explicit tool list or capabilities beyond the provided description
An AI research assistant that builds and maintains a wiki from your sources. Not RAG-in-a-vector-DB. A real markdown wiki on your disk, that an LLM gardens for you between conversations.
MindBase implements Andrej Karpathy's LLM-Wiki pattern as a product. You feed it sources (papers, articles, thoughts). The LLM reads, cross-references, flags contradictions, and writes structured wiki pages. Later, when you ask a question, the wiki already has the synthesized answer โ no vector search re-derivation at query time.
MindBase: you feed sources, the LLM gardens them into a wiki that compounds โ plain markdown on your disk
Status: Early access. Beta for feedback (2026-Q3). Data model + core loop stable; some UI features still in v1 โ v2 migration.
You read a lot. Papers, articles, tweets, docs. You want to remember them, connect them, form opinions from them. Today you have two bad options:
Notion / Obsidian / Roam: Passive containers. You do all the organizing. AI features are bolted-on generation, not maintenance.
NotebookLM / Perplexity Pages / ChatGPT search: RAG-based. Nothing accumulates. Every question re-derives the answer from raw sources.
MindBase is the third option: the LLM actively maintains a persistent, structured wiki as you feed it sources. Knowledge compounds. Your context.md gets sharper every time you contribute. The AI remembers you across sessions because your beliefs are written down in markdown files โ not stored in a chat history that gets summarized away.
Think of it as a personal Wikipedia that an AI intern writes for you, kept up to date, cross-referenced, and honest about what it doesn't know.
How it works (30 seconds)
Three physical layers on disk (Karpathy's model):
code
Layer 1 โ sources/ You add these. Append-only. LLM reads, never rewrites.
โโ contributors/ Your thoughts, dated per-user (like a lab notebook)
โโ research/ Wiki pages the LLM writes (concepts, entities, syntheses)
โโ raw/ PDFs, URL captures, pastes โ original binaries
Layer 2 โ README.md The rules of your wiki. You edit. LLM reads at every op.
context.md The synthesized current truth. LLM writes. You read.
index.yaml Auto-generated file catalog. LLM maintains.
Layer 3 โ logs/ Chronological log of every operation. LLM appends.
artifacts/ Generated outputs: daily briefs, exports, lint reports.
Three operations the AI can run:
Operation
What happens
Contribute
You feed a thought / PDF / URL. LLM reads, discusses key takeaways with you, updates 5-15 relevant wiki pages, appends log.
Ask
You ask a question. LLM reads your context.md first (already-synthesized truth), then drills into cited source pages. Cited answers with [[wikilink]] provenance.
Lint
LLM audits the whole wiki for contradictions, stale claims, orphan pages, missing cross-references, gaps that need investigation.
They form a loop โ good answers and lint findings flow back in as new contributions, so the wiki compounds:
flowchart LR
C["contribute<br/><small>thought ยท PDF ยท URL</small>"] --> S[("sources/<br/><small>append-only</small>")]
S --> B["build<br/><small>LLM synthesizes</small>"]
B --> W[("context.md<br/>research/*.md")]
W --> Q["ask<br/><small>cited answers</small>"]
W --> L["lint<br/><small>contradictions ยท orphans ยท gaps</small>"]
Q -. "good answers filed back" .-> C
L -. "follow-up notes" .-> C
That's the entire product. Everything else is UX.
What makes it different
vs. Notion: You own the data (markdown files, not a proprietary DB). The AI is a maintainer, not a bolt-on generator. context.md evolves; Notion pages don't.
vs. Obsidian: You get the same local-first markdown vault, but with an AI that actively writes the wiki โ you don't have to hand-craft every note. Comes with [[wikilinks]] cross-referencing done for you.
vs. NotebookLM / Perplexity: Knowledge compounds. Ask "what's my view on RAG?" and the answer already exists in context.md. NotebookLM re-derives it from raw sources every time โ nothing accumulates.
vs. any RAG tool: RAG is stateless retrieval. MindBase is stateful synthesis. The wiki gets richer with every ingest. Answers get faster and more consistent over time.
Prerequisites
Node.js 20+ (that's it for Cursor / Windsurf / Cline / Continue โ the MCP server installs itself via npx)
One of: Claude Code, Cursor, Windsurf, Cline, Continue.dev, or another MCP-compatible AI editor
pnpm 10+ only if you install the Claude Code plugin or the web UI from source
(Optional) A modern browser, if you want the web UI
MindBase runs entirely on your machine. No cloud upload, no signup, no telemetry.
Install โ choose your AI editor
MindBase ships as an MCP (Model Context Protocol) server โ published on npm as mindbase-mcp. Every MCP-compatible AI editor can use its tools with a one-line config; no clone, no build. Claude Code gets an extra layer of polish (slash commands, sub-agents) via the plugin.
Claude Code (flagship experience)
Get the full Karpathy 8-step ingest with sub-agents, slash commands, auto-context, and per-agent tool boundaries.
Install the plugin โ two commands inside Claude Code, no clone, no build:
Restart Claude Code when prompted. (The plugin launches its MCP server via npx -y mindbase-mcp, so npm delivers the server automatically.)
Developing the plugin from a clone?
bash
git clone https://github.com/frankchu91/mindbase.git
cd mindbase && pnpm install
claude --plugin-dir apps/plugin
Verify: Open Claude Code, type /. You should see /mb:contribute, /mb:ask, /mb:build, /mb:status, and 8 others. Run /mcp โ you should see mb connected with 49 tools.
What you get:
12 slash commands (/mb:*)
5 sub-agents with security boundaries (contributor, builder, curator, researcher, migrator) โ each has a strict tool allowlist
SessionStart hook โ every new Claude Code session auto-injects your project's README + context + recent log entries
The full Karpathy 8-step ingest: read โ discuss takeaways โ propose plan โ wait for approval โ execute
Restart Cursor. Open Cursor Chat โ the tool picker should list mindbase_contribute, mindbase_ask_wiki, and 47 others.
Optional but recommended: teach Cursor's LLM about MindBase conventions by adding to ~/.cursor/rules.md (or per-project .cursorrules):
code
# MindBase conventions
When the user mentions "mindbase", "mb", "my wiki", "่ฎฐไธไธ", or "่ฎฐๅฟ",
the following MCP tools are available: mindbase_contribute, mindbase_ask_wiki,
mindbase_status, mindbase_load_project, and more.
Rules:
1. When user says "add to mindbase X" or "่ฎฐไธไธ X", ALWAYS call mindbase_contribute
with text=X. Never just acknowledge without calling the tool.
2. When user says "ask mindbase X" or "้ฎ้ฎๆ็ wiki", call mindbase_ask_wiki
with query=X.
3. When ingesting a PDF/URL, follow the 8-step Karpathy loop:
read โ discuss 3 key takeaways with user โ propose plan โ wait for approval
โ then call mindbase_contribute with the summary.
4. Default project comes from config.json currentProjectId. If the user says
"for project X" or "ๅจ X ้กน็ฎ้", pass projectId=X to the tool call.
Restart VSCode. In Continue chat, MCP tools appear under @. Skip to First project.
Any other MCP-compatible client
If your editor supports MCP (Zed, Aider, Goose, ChatGPT Desktop's future MCP support, custom Claude Agent SDK apps), the pattern is identical: point it at
code
npx -y mindbase-mcp
as a stdio server. See your client's MCP docs for the exact config location.
First project (2 minutes)
Once your editor has the MCP server connected, create your first project.
Claude will scaffold ~/mindbase-data/projects/my-research/ with README.md, context.md, index.yaml, and empty sources/, logs/, artifacts/ directories, and set it as your current project.
Cursor / Windsurf / Cline / Continue
Type in chat:
code
Create a new mindbase project called my-research about transformer
attention mechanisms.
The LLM will call mindbase_init_project({ name: "my-research", mission: "..." }) and confirm.
Read this paper [/Downloads/paper.pdf] and ingest it into my mindbase.
Walk me through the 3 key takeaways before committing anything.
You get most of the value but the sub-agent's structured approval flow is a Claude Code exclusive. The LLM in Cursor/Windsurf/Cline will typically call mindbase_contribute directly โ you can steer the ritual manually via your prompt.
3. Ask your wiki
Query with cited answers.
Claude Code:
code
/mb:ask "how did I resolve the attention scaling factor question?"
Any other IDE:
code
Search my mindbase โ how did I resolve the attention scaling factor question?
The LLM calls mindbase_ask_wiki (graph-aware retrieval: top hits + wikilink neighbors) then synthesizes a cited answer:
code
You resolved this on 2026-06-15 [context.md:42-51]. The 1/โd_k scaling
prevents dot products from growing too large in high dimensions, which
would push softmax into low-gradient regions [attention-mechanism.md:23-28].
Sources:
- [[context.md]]
- [[attention-mechanism.md]]
- [[sources/research/scaled-attention.md]]
4. Build (regenerate context.md)
After a few contributions, regenerate the curated context.md so it reflects your current thinking.
Claude Code (flagship โ with sub-agent):
code
/mb:build
The builder sub-agent:
Validates project structure
Gathers all unbuilt sources since last build
Synthesizes them into a fresh context.md
Writes atomically (snapshots the old one first so you can rollback)
Rebuilds the index
Any other IDE:
code
Rebuild my mindbase context.md โ synthesize all unbuilt sources.
The LLM will orchestrate the equivalent MCP tool calls. Slightly less structured than the sub-agent flow but functionally equivalent.
5. Health check (lint)
Ask MindBase to audit itself.
Claude Code:
code
/mb:lint
Any other IDE:
code
Run a health check on my mindbase โ find contradictions, orphans, gaps.
Output looks like:
code
Found:
- 1 contradiction: attention-mechanism.md:15 says "scaling by โd" but
context.md:32 says "scaling by 1/โd". Same claim, different notation.
- 2 orphan pages: [[legacy-transformer-note]] and [[old-benchmark]]
have no inbound wikilinks.
- 1 gap: "positional encoding" is mentioned 4 times across the wiki
but has no dedicated page.
- 3 suggested cross-links: [[scaled-attention]] โ [[transformer-architecture]]
(co-mentioned in 3 sources).
Want to file follow-up notes for any of these?
Working with multiple projects
You can have as many projects as you want (ai-research, insurance, dissertation). One is the "current" project โ everything defaults to it. To switch, or to route a single operation to a specific project without switching, use flags.
Switch current project
Claude Code:
code
/mb:load ai-research
Any other IDE:
code
Switch my mindbase to the ai-research project.
Writes {"currentProjectId": "ai-research"} to ~/mindbase-data/config.json. Persists across sessions.
One-off routing (-p flag) โ Claude Code
Every command that takes a project supports -p <project-id> (or --project <project-id>):
The -p flag does not change your current project. It only routes this one operation.
One-off routing โ other IDEs
Just mention the project in natural language:
code
Add "GPT-5 rumored 2026-Q4" to my mindbase's ai-agents project.
The LLM passes projectId: "ai-agents" to the MCP tool call. Current project unchanged.
Web UI (optional companion)
MindBase includes a browser-based viewer at http://localhost:4321. It's not required โ the plugin/MCP path is the primary interface โ but useful for browsing what the LLM has written.
MindBase web UI โ category tree on the left, the LLM-maintained context.md in the center, chat starters on the right
Cmd+I quick capture in dark mode โ a thought typed into the Add-to-today modal, appended straight to your contributor file
Cmd+I from anywhere โ a thought goes straight into today's contributor file. Dark mode included.
Start it
bash
pnpm --filter @mindbase/server dev
# then open http://localhost:4321
You'll see:
LeftRail tree: Contributors, Research, Logs, Artifacts, README, Context, Raw โ organized as a file tree
Article view: click any file to read it; edit inline
Cmd+I AddEntry: quick capture that appends to today's contributor file (works in any browser tab)
Search (Cmd+K): keyword search across your wiki
Project switcher: dropdown at the top
What the Web UI can't do (yet):
Run /mb:ask, /mb:build, /mb:lint, /mb:research โ these need an LLM in the loop, which lives in your AI editor
The Rebuild button in the Web UI just tells you to run /mb:build in Claude Code
Think of the Web UI as a Finder for your wiki, and your AI editor as where you talk to it.
Feature matrix by editor
Feature
Claude Code
Cursor / Windsurf / Cline / Continue
Web UI
Slash commands (/mb:*)
โ
โ (use natural language)
โ
MCP tools directly
โ
โ
โ
Karpathy 8-step ingest with sub-agents
โ
โ ๏ธ Manual (LLM won't auto-follow the ritual)
โ
Auto-context via SessionStart hook
โ
โ (Cursor supports MCP hooks)
N/A
Contribute short thought
โ
โ
โ (Cmd+I)
Ingest PDF / URL / paste
โ
โ
โ
Ask wiki with cited answers
โ
โ
โ (planned)
Build (regenerate context.md)
โ
โ
โ ๏ธ (button dispatches, but LLM runs elsewhere)
Health check / lint
โ
โ
โ (planned)
Deep research (web + wiki)
โ
โ
โ
Wiki tree browsing
โ
โ
โ
Rich file editor
โ
โ
โ
Cross-project search
โ
โ
โ ๏ธ (partial)
-p project-id routing flag
โ
โ ๏ธ (via natural language)
N/A
Legend: โ works ยท โ ๏ธ partial / experimental ยท โ not yet
Where your data lives
Everything is under ~/mindbase-data/ (override with MINDBASE_DATA_DIR env var).
Cause: malformed config JSON, or the server binary can't start.
Fix:
Run it manually: npx -y mindbase-mcp < /dev/null โ should print [mindbase-mcp] connected ยท dataDir=โฆ on stderr and exit 0.
If that works, the issue is in your editor's config (typo, wrong file, trailing comma).
Claude Code plugin users: verify the bundle exists โ ls /path/to/mindbase/apps/plugin/mcp-server/dist/cli.js โ and rebuild with pnpm --filter @mindbase/plugin build if missing.
Restart your editor after fixing config.
"No current project"
Cause: You haven't run /mb:init yet, or config.json is missing currentProjectId.
Fix:
code
/mb:init my-first-project
Or manually: echo '{"currentProjectId": "my-project"}' > ~/mindbase-data/config.json
"V1_LAYOUT_UNSUPPORTED"
Cause: you have a legacy v1 project directory (from before the 2026-06 refactor).
Fix (Claude Code only):
code
/mb:migrate --project <legacy-project-name>
Or delete it and start fresh: rm -rf ~/mindbase-data/projects/<legacy-project-name> then /mb:init.
Tools don't show in autocomplete
Cause: MCP handshake didn't complete.
Fix: Restart your editor. Check that no other MCP server is failing (a crash in one can block others in some clients).
The LLM in Cursor/Windsurf ignores my "add to mindbase" request
Cause: the LLM didn't recognize the intent as a tool call opportunity.
Fix: Add the .cursorrules block from the Cursor section. Being explicit ("call mindbase_contribute with text=...") works too.
"/api/counts 404" in Web UI
Cause: a pre-existing server-side route gap. Non-blocking โ some tab count badges show 0 until fixed.
Fix: known issue, coming in the next patch release. Track it on the issues page.