Written in April 2026. The setup has grown since, and the current map is at duncansmith.tech/homelab.
I built three MCP servers so Claude can search my documents, run my n8n workflows and query my notes directly. Before that, anything involving my homelab meant pasting text back and forth, which was tedious and lost detail.
MCP, the Model Context Protocol, is a standard way for an AI assistant to call external tools. The same server works with Claude Desktop, Cursor, Windsurf, Cline and other compatible clients.
The three servers
Paperless-ngx. Seven tools: full-text search across OCR’d content, fetching a document with its metadata, listing recent additions, browsing tags and types, and updating metadata. I ask for “the vendor agreement from last month” and Claude finds it, reads it and answers in context.
n8n. Six tools: listing workflows and their status, reading a workflow’s configuration, triggering a run, enabling or disabling a workflow and viewing execution history. Mid-project I can say “run the document ingestion workflow” and ask for the result when it finishes.
Qdrant. Seven tools: semantic search across collections, adding vectors with metadata, inspecting collections and fetching or deleting points. “What do I know about Docker networking?” searches my notes, documents and wiki by meaning.
How the servers are built
Each server is a standalone Node.js process. It talks to Claude Desktop over stdio and makes HTTP requests to one service on my local network.
TypeScript with Zod validation. Every tool input is checked before it reaches the service API.
Errors as messages. If a service is down, the server returns a description of the problem and the session carries on.
Truncated responses. Large results are cut to 25,000 characters with a note that more is available, so they don’t flood the context window.
Local calls only. The servers contact nothing outside my network and send no telemetry.
That last point has a limit. What Claude reads through a server becomes part of the conversation, and the conversation goes to Claude. The servers decide what the assistant can reach, so I choose what each one exposes.
Setup is a JSON entry in Claude Desktop with the service URL and an API key. After a restart, the tools appear through the MCP handshake.
What Claude can now do
Some requests from one week:
“Find all my tax documents from 2025.” Claude searched Paperless and returned 14 documents with dates and tags.
“What automation workflows are currently failing?” It checked n8n’s execution history and found two with errors.
“Search my notes for anything related to Docker volume management.” Qdrant returned six relevant results from notes and wiki.
“Run the backup verification workflow and tell me if everything passed.” It triggered the workflow, waited and reported.
Each used to take 2 to 5 minutes of switching tabs and reading API output. Now each takes about 10 seconds.
What I would repeat
Read-only tools first. Search, list and get operations are safe. I would add update, delete and execute only after trusting how the assistant uses the others.
Validate every input. Assistants sometimes pass unexpected values. A schema catches them before they reach the service and returns a clear error.
Return less. If a search matches 50 documents, returning the top 10 and saying more exist is enough. The assistant can ask for the rest.
One server per service. Paperless, n8n and Qdrant each have their own. They deploy, test and configure independently.
What came next
When I wrote this I was building servers for BookStack and Uptime Kuma, plus a single overview of the whole homelab.
The aim is an assistant that can read and act across my documents, notes, wiki, services and automations. Most of that already works.