Agentic
AI Hub

Claude Code is where I work. Around it sits the layer I wired myself: an MCP server over my own notes, the MCP servers of the tools I use, and n8n pipelines on my own server that run without me.

second-brain→9 tools I wrote. Claude searches, reads and writes my Obsidian vault.

Claude Codeagent runtime

tools in my own MCP server
0
third-party MCP servers wired in
0
n8n pipelines on my VPS
0

MCPModel Context Protocol

One plug for every tool

A server lists its tools, the client calls them by name. My own vault server and every third-party one plug in the same way.

Click a server to see what it plugs in.

Claude Codemy client
any other
MCP client
MCPone plug
second-brainbuilt by me

reaches my Obsidian vault

  1. initializeshake hands over stdio
  2. tools/listanswers with its 9 tools
  3. tools/callClaude calls one by name
vault_searchvault_recallvault_readvault_writevault_updatevault_queryvault_contextvault_linkvault_skill
built by methird-party, wired into my configsame plug, any client

second-brain + wired-in serversstdio · http

Tool router

One request, there and back: Claude picks the tool, the call goes to the server that owns it, the result comes back.

Pick a request to send it.

Claude Code

Why is vault_recall my default search?

servers

second-brain
Notion
Asana
Linear
GitHub
Figma
Stitch
Excalidraw
21st.dev Magic
NotebookLM
Atlassian

tools on second-brain

vault_search
vault_recall
vault_read
vault_write
vault_update
vault_query
vault_context
vault_link
vault_skill
  1. 1Claude picks a tool
  2. 2the call goes to its server
  3. 3the server runs the tool
  4. 4the result comes back

The vault answer is a real recall; the other calls show their shape with IDs left out. A tool is a name, a description, a typed schema and a function. This is the one that answered.

second-brain/.mcp-server/src/index.tsexcerpt
server.tool(
  'vault_recall',
  'Task-aware Retrieval: Findet die relevantesten Notes …',
  {
    task: z.string().describe('Beschreibung der aktuellen Aufgabe in natuerlicher Sprache'),
    project: z.string().optional().describe('Optionaler Projekt-Filter'),
    limit: z.number().optional().describe('Max Ergebnisse (Standard: 5)'),
  },
  async ({ task, project, limit: rawLimit }) => {
    const limit = rawLimit ?? 5;
    // …
      // Semantic search
      const queryEmb = await ollama.embed(task);
      const semanticResults = findTopK(queryEmb, embeddingsCache, limit * 2, { project });
      // Keyword search
      const keywordResults = keywordSearch(task, allNotes)
        // … project filter
        .slice(0, limit * 2);
      // Hybrid merge
      results = hybridSearch(semanticResults, keywordResults, limit);
    // …
  }
);

n8nself-hosted on my VPS

Pipeline visualizer

My phone, a schedule or a Notion poll starts them. They end in Notion, Asana, YouTube, Supabase or my vault, and share 3 sub-workflows.

All of them side by side. Hover or tap a step for what it hands on.

  1. Idea Catcher

    7 nodes · 5 steps

    iOS Shortcut
    Decode audio
    Whisperwhisper-1
    Structure ideaGPT-4o mini
    Build blocks
    Create pageNotion
    Notion
  2. Quick Research

    10 nodes · 6 steps

    iOS Shortcut
    Decode audio
    Whisperwhisper-1
    Detect mode
    Web searchSonnet 4.6
    Build blocks
    Create pageNotion
    Notion
  3. URL Save

    21 nodes · 6 steps

    iOS Share Sheet
    Detect URL type
    Get textarticleYouTubePDFSonnet 4.6
    Read topic list
    Classify topicHaiku 4.5
    HypothesisSonnet 4.6
    Markdown note
    Vault
  4. Book Add

    26 nodes · 6 steps

    iOS Shortcut
    Read titlephotovoiceHaiku 4.5
    Look upOpen LibraryGoogle Books
    TagsHaiku 4.5
    HypothesisSonnet 4.6
    Markdown note
    Create pageNotion
    Vault + Notion
  5. Discovery Call Prep

    7 nodes · 6 steps

    Notion pollevery minute
    Filter
    Website URL
    Scrape website
    Prepare callSonnet 4.6
    Parse JSON
    Create pageNotion
    Notion
    I review
  6. YouTube Upload

    12 nodes · 6 steps

    I plan
    Scheduledaily 06:00 UTC
    Due videosNotion
    Wait for slot
    Load videoGoogle Drive
    UploadYouTube API
    Set thumbnailif there is one
    Mark publishedNotion
    YouTube + Notion
  7. Idea to Asana

    4 nodes · 2 steps

    iOS Shortcut
    Create taskAsana
    Move to BacklogAsana
    Asana
  8. Workout Ingest

    4 nodes · 2 steps

    Health Auto Exportvia iOS Shortcut
    Build rows
    UpsertSupabase
    Supabase
triggercodemodel callserviceone of severallands inwhere I come in

second-brainvault_recall · local embeddings

Knowledge graph

A map of notes from my Obsidian vault. Type a query and the graph lights the notes that match. This is where the agent looks before it answers anything that needs project memory.

Type "automation", "search" or "pipeline".

vault_search
>
idle
decisionRecall as defaultlearningn8n sandbox limitsskillMCP Tool Routingprojectluccafaust.devdecisionQuick ResearchskillYouTube PipelineprojectRemotion Pipeline
7 notes · 8 links
results
awaiting query…
decision
learning
skill
project
before it answers
callvault_recall
args{ "task": "why vault_recall is the default search" }
resultvault_recall (Hybrid Search) als task-aware Default · decision · 1.00
resultVault Data-Management Iteration · decision · 0.56
noteanswers from what I actually wrote
2 notes returned

When I ask Claude why I made a past decision, it runs vault_recall first and answers from what I wrote. The ranking weighs meaning at 0.7 and exact words at 0.3, so a note still turns up when I phrased it differently.

Claude Codemain agent + sub-agents

Agent orchestration

The main agent plans, hands independent work to sub-agents and merges what they report. Sequential work stays in one context.

Pick a run. Lines show who hands work to whom.

>Rework the content, finance and practice pages

main agent
content
finance
practice
vault_querydecisions · luccafaust-dev
Agent × 3one brief per page
Readpage + parts
Readpage + parts
Readpage + parts
Editbody sections
Editstatement
Edithero
Bashtsc + eslint
Bashtsc + eslint
Bashscreenshots
↩ report
↩ report
↩ report
Bashgit diff
MCP toolspawns sub-agentsbuilt-in toolreports backexample runs, tool names as Claude Code uses them

Why it's wired this way

Stack

TypeScriptMCP SDKn8nObsidianClaude CodeNode.js

MCP for every integration

One protocol on both sides: my own server and the third-party ones plug into Claude Code the same way, and any other MCP client could use them unchanged.

Self-hosted n8n on a VPS

My own n8n instance means unlimited runs, endpoints under my domain and the data on my own server.

Pipelines stop where my judgment starts

YouTube Upload publishes only the videos I planned in Notion. Discovery Call Prep ends at a page with a review link for me.

Obsidian as the knowledge layer

Plain Markdown with frontmatter stays git-friendly and editor-agnostic. If the AI layer disappears tomorrow, the notes still work.

Local embeddings, hybrid recall

The vault is embedded on my machine with nomic-embed-text via Ollama. Recall weighs meaning at 0.7 and exact words at 0.3, so names and tool names still hit.

Atomic notes

One decision, learning or skill per file, so the agent pulls exactly the context it needs.

Sub-agents for parallel work, one context for sequential

Independent work goes to sub-agents with their own brief; sequential reasoning stays in one context that sees everything.