cog-brain
OfficialThis server provides tools for maintaining and querying a local Markdown/Obsidian vault as agent memory.
Check index health and stale notes, and rebuild the index incrementally or fully.
List notes by tag/folder and read notes or their outlines.
Run hybrid semantic/keyword search and find related notes via semantics and wiki-links.
Inspect backlinks, outbound links, broken links, hub notes, and orphan notes.
Create and patch notes with metadata, tags, aliases, descriptions, retraction/supersedes fields, and automatic index refresh.
Allows agents to use an Obsidian vault as long-term memory, providing tools to semantically search, read, write, and maintain Markdown notes, including backlinks, graph overview, broken links, and vault health metrics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cog-brain search my vault for RAG evaluation notes and show backlinks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
cog-brain
Your notes. Your agents. One memory.
Keep decisions, sources and next steps in Markdown. Let your coding agents bring that knowledge into your work, so the next session can pick up where you left off.
cog-brain connects a personal knowledge base to your coding agents. You read and edit the notes in Obsidian or your editor; agents search them, save useful findings and maintain a short handoff for each project.
Get started · Daily workflow · Integrations · Reference
What it helps with
Continue a project. Bring its goal, constraints and next action into a new session, including when you switch agents.
Remember the reason. Keep the decision, the evidence and the conditions under which it applies, alongside links to the original sources.
Capture without organizing first. Save an idea or a link in today's daily note. Turn it into lasting knowledge when it proves useful.
Keep corrections visible. Withdrawn claims remain searchable with a warning and a link to their replacement.
The working loop is small: recall context, do the work, save what you verified, leave a useful next step.
Related MCP server: Brainstem
Get started
You'll need macOS or Linux, Python 3.12+, uv, and an existing folder of Markdown notes. Obsidian is optional. The default search engine runs locally without Docker or an embedding service.
1. Install and point it at your notes
uv tool install git+https://github.com/cog-sh/cog-brainPoint it at your existing vault and build the local index:
cog-brain setup --vault ~/Notes
cog-brain doctorSetup saves the vault and backend to ~/.config/cog-brain/config.toml, preserving
other settings and backing up changes. SQLite is the default: no Docker, account
or model download. Replace ~/Notes with your folder of notes.
2. Connect your agent
Choose your client (the integration table lists all options):
cog-brain install --harness codex --mode code
# Other examples:
cog-brain install --harness claude-code --mode code
cog-brain install --harness opencode --mode codeRestart the client and enable its hooks if prompted. In Codex, open /hooks
and approve the new cog-brain handlers. A managed instruction provides CLI recall
while those hooks await review.
Installation adds a skill and the client's hooks, extension or instructions.
It backs up changes, preserves unrelated settings and disables only the existing
cog-brain MCP entry. Use --keep-mcp to retain it. Add --scope project to install
in the current repository (required for VS Code).
3. Give your project a starting point
Open a repository in your agent and ask:
Create a cog-brain project card for this repository. Link it to a relevant existing note. Record the goal, current state, constraints and next step.
That card binds the repository to its memory. Future tasks can retrieve the card and relevant notes automatically. If a project has no card, cog-brain reports that explicitly.
Try it with an ordinary question:
Where should we pick up on this project?
A day with cog-brain
When | What you do | What the agent keeps |
Start a session | Describe the task | The project card and relevant evidence in context |
Find something interesting | “Capture this link for later” | Raw material in |
Settle a decision | “Save why we chose this” | A linked note with the reason, scope and verification |
Finish or switch projects | “Update the handoff” | Current state, checks, blockers and the next action |
Once a week, review the captures worth developing and the projects still active. Daily notes stay out of ordinary knowledge retrieval, so an unprocessed thought doesn't become a confirmed fact just because it was saved.
You can keep using your existing vault. New knowledge notes use a short description and a link to an existing note; project cards stay brief enough to read at the start of a session.
See the note formats and writing guide for the conventions shared by you and your agents.
Choose your integration
Client ( | How memory reaches the agent |
Codex ( | Session/prompt hooks; AGENTS fallback; hook approval required |
Oh My Pi ( | Native extensions before work and after compaction |
Claude Code ( | SessionStart and UserPromptSubmit hooks; CLAUDE.md fallback |
Gemini CLI ( | SessionStart and BeforeAgent hooks; GEMINI.md fallback |
Cursor ( | SessionStart hook; project rule for task-time recall |
OpenCode ( | Native context hook; V2 default, |
Copilot CLI ( | Instructions ask the agent to recall through its executor |
VS Code Copilot ( | Repository instructions and skill; project scope only |
Windsurf ( | Global/project rules ask the agent to recall through its executor |
Other MCP clients | Optional MCP adapter |
All code integrations use the existing executor and local runtime. Hook-based clients can receive a bounded project packet before answering; instruction-based clients depend on the agent following the recall rule. Cursor's startup hook loads context once per session; its prompt-validation hook cannot inject context. Client permissions and hook support still apply.
For marketplace installation and /brain-* commands, see
cog-brain-plugins.
Code Mode means an agent can search, read several notes and filter the results inside one program. Only what the program returns needs to enter the model's context. MCP remains available for clients that use it.
For example, inside a Python environment with cog-brain installed:
import json
from cog_brain import Brain
brain = Brain()
found = brain.search("why did we choose this database?", project="my-project", limit=4)
notes = [
brain.read(hit["file_path"], max_chars=1200)
for hit in found["hits"][:2]
]
print(json.dumps({"notes": notes, "warnings": found["warnings"]}, ensure_ascii=False))Replace my-project with your project card's identifier. See the
API and integration reference for setup details and commands.
Your knowledge stays readable
The vault is the source of truth. Notes remain ordinary Markdown with YAML
properties and [[wiki-links]]. The search index can be rebuilt from those files.
cog-brain preserves existing YAML fields and comments when editing notes. Writes are atomic, concurrent appends are serialized, and replacing a note's body through the Python API requires the revision you read. Indexing failures are reported separately from a successful note save.
You can edit in Obsidian or another editor. External editors do not participate in cog-brain's locks; detected conflicts require a fresh read. Malformed YAML is reported instead of silently rewritten.
Files and indexes live locally by default. Retrieved notes become part of the context sent to your chosen agent's model provider. With vector search enabled, embedding requests go to the endpoint you configure.
Search that fits your setup
Engine | Best starting point for | What it needs |
SQLite — default | Local keyword search with a persistent index | No background services |
Markdown | Searching directly from the vault without a persistent index | No background services |
Qdrant | Hybrid semantic and keyword search | Qdrant and an embedding endpoint |
Automatic lifecycle context uses local keyword search even when Qdrant is your configured engine, so it doesn't wait for the vector services to start.
After editing notes outside cog-brain, run cog-brain reindex. During a longer
editing session, cog-brain-index --watch keeps the index updated.
Want semantic search?
cog-brain setup --backend qdrant --vault ~/Notes --dry-run
cog-brain setup --backend qdrant --vault ~/NotesSetup reuses healthy Qdrant/Ollama endpoints. If either service is missing locally, it needs a running Docker installation and starts only that service. It downloads the embedding model when needed, checks its 1024-dimensional output and collection compatibility, then saves the backend and indexes your vault. The first run needs internet, disk space and time.
Managed services bind to 127.0.0.1, restart with Docker and keep data in named
volumes. Setup never deletes a container, volume or collection. You can return to
service-free search with cog-brain setup --backend sqlite; vector data stays in
place. See bootstrap details.
Project status
cog-brain is an early release. Local API, note safety and integration behavior have isolated regression coverage. Autonomous CLI recall has also been checked in a live Codex session. Additional client adapters and service bootstrap have isolated regression coverage; complete live LLM workflows across every client and fresh Docker downloads are not yet validated.
Automatic recall requires a bound project card and an enabled client integration. The agent saves decisions and handoffs through the API; hooks do not archive every conversation or turn every answer into a note.
Go further
MIT licensed. Built by cog-sh.
Available Tools
12 toolsbacklinksB
Who links to this note (inbound) and where this note points (outbound, with resolution).
Frontmatter links count: moc: "[[Rust MOC]]" is a real reference.
Inputs: file_path (required), k. Returns: result
broken_linksB
Wiki-links that resolve to no existing note (by stem or title), grouped by source note.
Inputs: limit. Returns: result
graph_overviewB
Knowledge-graph overview: hub notes (most outgoing wiki-links — MOC candidates) and orphans (no links at all).
Inputs: k. Returns: result
index_nowA
Run the vault indexer now (incremental; full=True re-embeds everything).
Concurrent runs are safe: the indexer holds a lock and a second run exits immediately.
Inputs: full. Returns: result
list_notesA
Cheap inventory of notes: file_path, title, type, status, tags. Filter by tag or folder prefix.
Inputs: tag, limit, folder. Returns: result
outlineA
Headings of a note with their levels — cheap context before reading the whole thing.
Inputs: file_path (required). Returns: result
read_noteA
Read the full text of a vault note by its relative path (path from semantic_search/list_notes).
max_chars bounds the result for a large note; the truncation is marked explicitly.
Inputs: file_path (required), max_chars. Returns: result
semantic_searchB
Hybrid (dense+BM25, RRF) semantic search over the Obsidian vault. Returns chunks with file_path citations.
chunks_per_note raises how many chunks one long note may contribute (default 1, the previous
behaviour). Every result carries index_stale: how many notes changed since the last index —
0 means the results are current, -1 means the index has never run. Trust accordingly.
Inputs: query (required), k, tag, folder, +1 more. Returns: result
update_noteC
Patch an existing note in place: frontmatter fields and/or body, bumping updated.
Only the arguments you pass are changed. content replaces the body, or appends to it with
append=True. The result is re-checked for at least one resolvable [[wiki-link]].
Inputs: file_path (required), moc, tags, type, +10 more. Returns: result
vault_statusA
Index health: notes on disk vs indexed, when the index last ran, and which notes changed since.
Call this before trusting a search result: after a write the index is refreshed automatically, but a manual file edit from outside this server leaves it stale.
Inputs: no named parameters. Returns: result
write_noteB
Create a new vault note. Flat vault: file_path is kebab-case EN in the vault root.
description is required (one sentence — it is the RAG chunk title) and moc takes either
Rust MOC or [[Rust MOC]]. The body must link at least one EXISTING note; links that do
not resolve yet are reported back rather than rejected, so a hub may be written before its
spokes. The index is refreshed automatically (set auto_index=False to batch).
Inputs: title (required), content (required), file_path (required), moc, +8 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Each tool targets a distinct action or resource: status, inventory, outline, full read, search, related notes, backlinks, broken links, graph overview, create, update, and index. Overlaps are minimal and descriptions clearly differentiate.
Some tools use verb_noun (list_notes, read_note, write_note, update_note, find_related), while others are noun phrases (vault_status, semantic_search, backlinks, broken_links, graph_overview). The mix is readable but not a consistent pattern.
12 tools is well within the typical 3-15 range and each tool has a clear, non-redundant purpose for managing an Obsidian vault.
The surface covers create, read, update, search, linking, and indexing, but lacks a delete_note operation and any move/rename capability. These are notable gaps for full vault lifecycle management.
Maintenance
Related MCP Connectors
Token-efficient MCP memory for Markdown vaults. Tiered search, GraphRAG, AI memories.
A second brain for your AI agent. Shared memory for your team's AI agents, plus public and private knowledge bases — works with ChatGPT, Claude, Cursor and any MCP client.
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceTurns your Obsidian vault into an MCP-enabled workspace with tools for reading/writing notes, managing folders, running semantic searches, and maintaining long-term memory—all while keeping data local to your vault.311,836 npm158MIT
- AlicenseNot gradedqualityDmaintenanceLocal-first knowledge backend for AI agents that connects MCP hosts to an Obsidian-compatible vault with indexed retrieval, token-budgeted memory recall, and secure ingestion.1MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes an Obsidian-style markdown vault as agent-readable memory. It provides tools for search, read, graph, and guarded capture without using embeddings.1MIT
- AlicenseAqualityBmaintenanceExposes a typed, provenance-aware knowledge graph over an Obsidian vault to coding agents over MCP, so they can trace what grounds a claim, compute which other notes a change makes wrong, surface contradictions and admitted gaps, and assemble a task-specific token-budgeted subset of the vault. Indexing, retrieval, and impact analysis run with zero third-party runtime dependencies beyond the Python standard library.10MIT