AgenticHub
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.Tap a server to see what it plugs in.
MCP client
reaches my Obsidian vault
initializeshake hands over stdiotools/listanswers with its 9 toolstools/callClaude calls one by name
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.
Why is vault_recall my default search?
servers
tools on second-brain
- 1Claude picks a tool
- 2the call goes to its server
- 3the server runs the tool
- 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.
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.One below the other. Tap a step for what it hands on.
- iOS ShortcutDecode audioWhisperwhisper-1Structure ideaGPT-4o miniBuild blocksCreate pageNotionNotion
- iOS ShortcutDecode audioWhisperwhisper-1Detect modeWeb searchSonnet 4.6Build blocksCreate pageNotionNotion
- iOS Share SheetDetect URL typeGet textarticleYouTubePDFSonnet 4.6Read topic listClassify topicHaiku 4.5HypothesisSonnet 4.6Markdown noteVault
- iOS ShortcutRead titlephotovoiceHaiku 4.5Look upOpen LibraryGoogle BooksTagsHaiku 4.5HypothesisSonnet 4.6Markdown noteCreate pageNotionVault + Notion
- Notion pollevery minuteFilterWebsite URLScrape websitePrepare callSonnet 4.6Parse JSONCreate pageNotionNotionI review
- I planScheduledaily 06:00 UTCDue videosNotionWait for slotLoad videoGoogle DriveUploadYouTube APISet thumbnailif there is oneMark publishedNotionYouTube + Notion
- iOS ShortcutCreate taskAsanaMove to BacklogAsanaAsana
- Health Auto Exportvia iOS ShortcutBuild rowsUpsertSupabaseSupabase
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".
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
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.