Skip to main content
Glama

🧠 Second Brain MCP

Remember everything you watch and listen to.

A Model Context Protocol server that turns YouTube videos and podcasts into a private, searchable memory β€” built on the brand-new stateless MCP spec (2026-07-28).

Paste a link once. Ask about it forever.

"What did that video I watched last month say about salary negotiation?"

🧠 β†’ "At [12:43] in Never Split the Difference β€” Chris Voss, he says never to accept the first offer without anchoring high…" β€” with a deep link that jumps to the exact second.

Why

You watch hours of talks, tutorials, and podcasts β€” and a week later you can quote none of it. Browser history remembers that you watched something; nothing remembers what it said. Second Brain gives your AI assistant total recall over everything you've ever watched or listened to:

  • 🎯 Ask across your whole watch history β€” answers come back with timestamps and deep links to the exact moment.

  • πŸ”’ Private by design β€” one local SQLite file. No cloud, no accounts, no API keys. Podcast audio is transcribed locally.

  • ⚑ Zero-key ingestion β€” YouTube captions are fetched directly; nothing to configure.

  • πŸ—‘οΈ Nothing is deleted without you β€” destructive operations use the spec's new multi round-trip (MRTR) approval flow.

Related MCP server: yt

Quickstart

1. Install

Option A β€” as a tool, straight from GitHub (recommended):

uv tool install git+https://github.com/ravishu5/second-brain-mcp

This installs the second-brain command into ~/.local/bin. Find its absolute path β€” you'll need it below:

which second-brain     # e.g. /Users/you/.local/bin/second-brain

Option B β€” from a local clone (for hacking on it):

git clone https://github.com/ravishu5/second-brain-mcp
cd second-brain-mcp
python3 -m venv .venv && .venv/bin/pip install -e .

Your binary is then at <clone-dir>/.venv/bin/second-brain.

2. Connect a client

Always use the absolute path to the binary. GUI apps (like Claude Desktop) don't inherit your shell's PATH, so a bare second-brain command often fails with "Failed to spawn process: No such file or directory".

Claude Code

claude mcp add second-brain -- /absolute/path/to/second-brain

Claude Desktop β€” Settings β†’ Developer β†’ Edit Config, then add:

{
  "mcpServers": {
    "second-brain": {
      "command": "/absolute/path/to/second-brain"
    }
  }
}

ex: "command": "/Users/ravi/Desktop/mcp/second-brain-mcp/.venv/bin/second-brain" in my case

Fully quit (⌘Q) and reopen Claude Desktop β€” the server should show as connected under Settings β†’ Developer.

As a stateless HTTP service (deployable behind any load balancer β€” no sticky sessions, no shared state):

second-brain --http --port 8000

3. Use it

Talk to your assistant:

β€Ί Remember this: https://www.youtube.com/watch?v=8S0FDjFBj8o
β€Ί What have I saved about system design?
β€Ί What did Lex's guest say about AGI timelines? Link me to the moment.
β€Ί Give me a digest of everything I added this week.

Tools

Tool

What it does

remember(url, episode?)

Ingest a YouTube video or podcast episode: fetch transcript, chunk with timestamps, index.

recall(query, limit?)

BM25 full-text search across every transcript; returns passages with deep links to the exact second.

library(limit?)

Everything in the brain, newest first, with stats.

transcript(item_ref, start?, end?)

Read a raw transcript, optionally sliced by time range.

digest(days?)

What you added recently, rolled up.

forget(item_ref)

Delete an item β€” gated by MRTR user confirmation.

Podcast transcription is optional (local faster-whisper):

pip install "second-brain-mcp[whisper]"

Built on the 2026-07-28 stateless spec

This server is a working showcase of MCP's biggest release since remote MCP launched:

sequenceDiagram
    participant U as User
    participant C as Client (Claude)
    participant S as Second Brain
    C->>S: tools/call forget("that crypto video")
    S-->>C: resultType: input_required ("Permanently delete? No undo.")
    C->>U: Asks for approval
    U-->>C: Yes
    C->>S: tools/call retry (inputResponses + requestState)
    S-->>C: "Forgot 'Crypto Explained' (213 chunks removed)."
  • Stateless by construction. No initialize handshake, no Mcp-Session-Id. Every request is self-contained; protocol metadata rides in _meta per request. Run one instance or twenty behind a load balancer β€” nothing breaks, because the only durable state is your local SQLite file, addressed through explicit item ids that clients thread between calls (exactly the application-state pattern the spec prescribes).

  • MRTR instead of server-push. forget returns resultType: "input_required" with an elicitation request; the client gathers your approval and retries with inputResponses. No open streams, no sessions β€” and nothing is ever deleted without a human saying yes.

  • Header-routable. Under the streamable HTTP transport, gateways can rate-limit Mcp-Method: tools/call + Mcp-Name: remember (expensive ingestion) differently from cheap recall reads β€” without parsing a byte of JSON.

  • SDK v2. Built on mcp v2.0.0, released alongside the spec. Type hints are the schema; Resolve() powers the MRTR flow.

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   remember(url)   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Claude /    β”‚ ────────────────► β”‚ ingest.py    β”‚  YouTube captions (no key)
β”‚ any MCP     β”‚                   β”‚              β”‚  RSS + local whisper
β”‚ client      β”‚   recall(query)   β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚             β”‚ ────────────────► β”‚ store.py     β”‚  SQLite + FTS5 (BM25)
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   ◄─ passages +   β”‚ ~/.second-   β”‚  timestamped chunks
                     deep links   β”‚  brain/      β”‚
                                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Transcripts are merged into ~450-character chunks, split on silence gaps (usually topic boundaries), each carrying its start/end timestamps β€” so search hits map back to a playable moment, not just a document.

Troubleshooting

  • "Server disconnected" / "Failed to spawn process: No such file or directory" β€” the client can't find the binary. Use the absolute path from which second-brain (or your venv's .venv/bin/second-brain) in the config, then fully restart the client.

  • macOS: PermissionError: Operation not permitted on a path under ~/Desktop, ~/Documents, or ~/Downloads β€” macOS blocks other apps from reading those folders. Don't point the client at a venv inside them; install outside instead: uv tool install git+https://github.com/ravishu5/second-brain-mcp (lands in ~/.local, which isn't protected). Alternatively grant the client Desktop access under System Settings β†’ Privacy & Security β†’ Files and Folders.

  • "No transcript/captions available" β€” the video has captions disabled; there's nothing to index (yet β€” see roadmap).

  • Podcast ingestion errors about whisper β€” install the optional extra: pip install "second-brain-mcp[whisper]".

  • Where's my data? One SQLite file at ~/.second-brain/brain.db. Override with the SECOND_BRAIN_DB env var. Delete the file to wipe the brain.

Development

git clone https://github.com/ravishu5/second-brain-mcp
cd second-brain-mcp
uv sync --extra dev
uv run pytest
uv run mcp dev src/second_brain_mcp/server.py   # MCP inspector

Roadmap

  • Client-side summaries on ingest via MRTR sampling/createMessage (the client's model writes the summary β€” still zero server keys)

  • Semantic search (local embeddings) alongside BM25

  • Browser extension: one-click "remember this"

  • Whisper speaker diarization for podcasts

PRs welcome β€” especially ingestion sources (lectures, audiobooks, Twitch VODs).

License

MIT Β© Ravi Shankar

Available Tools

6 tools
digestA

Summarize what was added to the brain in the last N days.

Inputs: days. Returns: result

forgetA

Permanently delete an item (by id, URL, or title fragment).

Requires explicit user confirmation via the MRTR elicitation flow β€” nothing is deleted until the user approves.

Inputs: item_ref (required). Returns: result

libraryC

List everything stored in the second brain, newest first.

Inputs: limit. Returns: result

recallA

Search everything ever watched or listened to.

Full-text (BM25) search across all indexed transcripts. Returns the most relevant passages with timestamps and deep links so the exact moment can be replayed. Use this to answer questions like "what did that video say about X?" β€” then answer from the returned passages, citing timestamps.

Inputs: query (required), limit. Returns: result

rememberA

Add a YouTube video or podcast episode to the second brain.

Pass a YouTube URL, or a podcast RSS feed URL (optionally with an episode title filter; defaults to the latest episode). The transcript is fetched, chunked with timestamps, and indexed for search. Returns the stored item's id β€” use it with transcript and forget.

Inputs: url (required), episode. Returns: result

transcriptA

Read the raw transcript of one item (by id, URL, or title fragment).

Optionally slice by start/end seconds to pull just one section.

Inputs: item_ref (required), end, start. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 6 tools

    Disambiguation5/5

    Each tool serves a unique function: remember adds content, recall searches, library lists, transcript retrieves raw text, digest summarizes recent additions, and forget deletes. No two tools overlap in purpose, and their descriptions clarify the distinct use cases.

    Naming Consistency4/5

    Most tool names are single-word imperative verbs (remember, recall, digest, forget), giving a clear action-oriented pattern. However, 'library' and 'transcript' are nouns, breaking the otherwise consistent verb style, though still predictable in context.

    Tool Count5/5

    With six tools, the set is well-scoped for a personal knowledge management server. Each tool addresses a core needβ€”adding, searching, listing, reading, summarizing, and deletingβ€”without unnecessary bloat or overlap.

    Completeness5/5

    The tool surface covers the full lifecycle for stored media: creation (remember), retrieval (recall, library, transcript), summarization (digest), and deletion (forget). There are no obvious gaps or dead ends; the only potential missing operation is update, but it's not essential for this domain.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      An MCP server that enables users to retrieve YouTube transcripts and perform video or channel searches without requiring Google API keys. It supports transcript chunking and provides tools for detailed video content analysis and channel metadata extraction.
      5
      30 npm
      4
      MIT
    • A
      license
      Not graded
      quality
      Not graded
      maintenance
      An MCP server that provides YouTube data access without API keys or quotas. It enables agents to search videos, retrieve transcripts and metadata, and perform full-text search across cached content for AI context retrieval.
      3 npm
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server that extracts YouTube video transcripts (including metadata) as Markdown, enabling AI to summarize and discuss video content without watching it.
      MIT