Agentic AI
Hub
Chatting with AI is the easy part. I built the layer underneath — the servers and pipelines that let Claude trigger real automations, search my own notes, and write back into the tools I work in. Custom-built, self-hosted, and mine to change.
USB for AI
MCP — Model Context Protocol — is one standard plug that lets any AI client talk to any tool, without writing glue code per pairing. An MCP server exposes named tools with typed inputs; the AI calls them like functions.
Concretely, in my stack: two custom MCP servers I built from scratch — one that lets Claude drive Make.com, one that gives it read/write access to my Obsidian vault — plus self-hosted n8n workflows on a VPS for the event-driven stuff. Every chip below is a real MCP tool Claude can call while I work — the Make and Vault ones I built, the rest are third-party MCPs wired into my Claude config.
16 of the 28 tools — click through to see what each one does
MCP Tool Router
22 tools across 4 groups. Claude Code sends a request, the MCP server routes it to the right tool, Zod validates the inputs at runtime, and the upstream API returns the response.
Click a tool to inspect its schema, request, and response.
z.object({ task: z.string().describe("Natural language task or query"), project: z.string().optional(), types: z.array(z.string()).optional(), })
One server, not 22 separate processes. Add a tool and the router picks it up — the client never changes. Zod checks every input before it runs, so a bad call fails here, not three hops upstream.
Pipeline Visualizer
Three event-driven pipelines running on a self-hosted n8n instance — voice-to-Notion capture, lead handling with discovery-call generation, and a YouTube production line — each with explicit human gates where judgment can't be automated.
Hover a node for details. Gates mark the points where I step in.
Idea Catcher
LIVE1 gateLead Pipeline
PARTIAL1 gateYouTube Pipeline
STAGING2 gatesThese run without me — a webhook fires at 3am, a transcript needs filing, a lead comes in. n8n handles each in the background and pauses at a gate wherever publishing something is irreversible and needs my eyes first.
Knowledge Graph
A semantic map of my Obsidian vault. Type a query, the graph highlights the notes that match by meaning — not by keyword. This is how the agent finds context before answering anything that needs project memory.
Type "automation", "mcp", or "pipeline" into the search.
When I ask Claude why I made some past decision, it runs a hybrid vault_recall first and answers from what I actually wrote, not invented history. Pure keyword search would miss it whenever I phrased the note differently.
Agent Orchestration
What agentic work actually looks like in practice. A main agent reads a goal, plans a sequence of tool calls, spawns sub-agents to parallelize independent work, and reports back. This is execution, not chat.
Three workflows cycle: Deploy, Research, Bug Fix.
You give it a goal — “deploy to staging” — and it works out the steps itself, spawning sub-agents only for genuinely parallel work. Every action in the timeline is an MCP tool call; that's all the orchestration needs.
server.tool("list-scenarios", {
teamId: z.number().describe("Make.com team ID"),
folderId: z.number().optional(),
}, async ({ teamId, folderId }) => {
const scenarios = await makeApi.get("/scenarios", {
params: { teamId, folderId }
});
return { content: scenarios.data };
});Why it's wired this way
- 01MCP over REST wrappers
A REST client per integration ships faster but locks me in. MCP decouples at the protocol level, so any agent client — Claude Code now, Cursor later — uses my tools with no bespoke glue.
- 02Self-hosted n8n on a VPS, not a SaaS automation platform
Make and Zapier are convenient until you hit operation limits and vendor-owned webhooks. My own n8n on a VPS means unlimited runs, endpoints under my domain, and the data on my disk.
- 03Obsidian as the knowledge layer, not a custom database
A custom database with a schema and admin UI would just be a silo nobody touches. Plain Markdown with frontmatter stays git-friendly and editor-agnostic — if the AI layer disappears tomorrow, the notes still work.
- 04Atomic notes over mega-docs
One decision, learning, or skill per file. Big docs read fine for humans but bury the signal for an agent; atomic notes let it pull exactly the context it needs and score relevance cleanly.
- 05Human gates inside automation, not around it
Each pipeline runs mostly on its own and stops only at deliberate gates — is this idea worth a task, is this video ready to publish — where a mistake would be hard to undo.
- 06Sub-agents for parallel work, single context for sequential
Spawning sub-agents for everything just adds coordination cost. I use them only for genuinely independent work, like running tests while editing; the sequential reasoning stays in one context that sees everything.
- 07Plain TypeScript instead of a framework
LangChain, AutoGen, CrewAI mostly solve problems that vanish once you have MCP and a capable runtime. So the stack stays small — TypeScript servers, Claude Code, n8n, Obsidian — with fewer layers to learn, upgrade, and break.