MCP servers I actually use — review after 6 months
I have 12 MCP servers wired in — Home Assistant, Proxmox, Cloudflare, Vikunja, Gmail, Calendar, n8n. Showing which actually pay off and which sat unused until I unhooked them.

Six months ago I wrote about MCP as a phenomenon. Now I can write about practice: which servers I actually use daily, and which had a great pitch but disappeared from my config. The list shrinks faster than it grows.
Current state: 12 servers
What's wired in:
| Server | Usage frequency | Value |
|---|---|---|
| Vikunja | daily | high |
| Home Assistant | daily | high |
| Proxmox | weekly | medium |
| Cloudflare | weekly | medium |
| Gmail | weekly | high |
| Google Calendar | weekly | high |
| n8n | weekly | medium |
| Obsidian | daily | high |
| Playwright | rare | medium |
| Figma | rare | low |
| ha-mcp (local) | daily | high |
| Drive | rare | low |
Three I removed last month: Slack (don't use it), Notion (moved to Obsidian), GitHub (replaced with gh CLI in bash).
What works best
Vikunja
Local task tracker. The agent adds tasks from conversation directly to the board. Highest-value use case: "break this brief into tasks in project X", the agent grasps structure and creates 5-10 subtasks with the right labels and priorities.
# Command to the agent
> Add tasks to project "kamilkaletka.dev" from today's blog brief.
Dependencies: first post must exist before the draft queue.The agent calls vikunja_create_task 6 times with the right dependency graph. Time: 10 seconds. Without MCP I'd spend 5 minutes in the UI.
Home Assistant + ha-mcp
Two different servers. The official one (REST API) is slow, each query is an HTTP roundtrip. Local ha-mcp runs over WebSocket, response time < 50ms.
Daily uses:
- "turn on the kitchen light" (before dinner, agent driven by Telegram)
- "leave the jacuzzi running until 20:00" (timer setup)
- "show all thermostat temperatures" (heating debug)
Trap: the bathroom thermostat reports temperature × 10. The agent has it as a memory rule, otherwise it would weekly say "bathroom 225 degrees".
Gmail / Calendar
Best as "search and summarize". I ask "what's on today" → the agent calls Calendar list_events and Gmail search_threads, aggregates, returns a brief.
Attachments don't work in Gmail MCP. I have a workaround, a script that calls the raw API with token.json when I need to send a PDF.
What works ok
Proxmox
Valuable when it works. Weekly use case: "snapshot the VM before an update". Works.
Problem: a list of 30+ tools (start_vm, stop_vm, clone_lxc, snapshot...) and the agent sometimes picks the wrong one. Wrong commands can be destructive. Guard: a hook that requires confirmation on proxmox_delete_* and proxmox_stop_*.
Cloudflare
Tunnel + DNS + KV. Easy config, stable. Mostly used to add subdomains for demo sites and debug routing.
> Add a subdomain demo-misiura.kamilkaletka.dev
that tunnels to forge:3052Two tool calls, done. Without MCP, 5 minutes in the panel.
n8n
Workflow generation by prompt. Sometimes hits, sometimes overcomplicates. Best use case: prototyping "if this event came, what would happen", the agent drafts, I clean up by hand.
What I unhooked
Notion
Sounded good, in practice: lazy-loading API returns weak results, the agent burns turns on navigation. Moved all notes to Obsidian.
Slack
I stopped using Slack privately. Left the MCP "just in case", three months later not a single call. Unhooked.
GitHub MCP
Great in theory, in practice gh CLI in bash is faster. Tool calling via MCP adds ~200ms per call latency, gh in cache is < 50ms. For PR review, unhooked.
What I learned
1. Number of MCPs is not a productivity metric. Six months ago I wanted "everything". Now I know each server is a cost, schema loaded, longer prompt cache, more decisions for the model. Less is more.
2. Local MCP > cloud MCP. Latency makes the difference. If I can run an MCP server locally (like local ha-mcp) instead of using a REST API, I pick local.
3. Hook destructive MCPs. Every MCP server that can delete something (Proxmox, Cloudflare, db servers) has a validation hook. Not paranoia, necessity.
4. Measure usage, not config. Each quarter I count how many times each server was called. Zero-call ones, unhook. Brutal audit.
Setup in a nutshell
My .mcp.json (excerpt):
{
"mcpServers": {
"vikunja": { "command": "vikunja-mcp", "args": [...] },
"ha-mcp": { "command": "node", "args": ["~/ha-mcp/dist/index.js"] },
"proxmox": { "command": "proxmox-mcp", "args": [...] },
"cloudflare": { "command": "cloudflare-mcp", "args": [...] }
}
}Note: NO_PROXY, every internal server must be in NO_PROXY, otherwise SOCKS5 breaks Docker DNS. Cost me half a day to debug.
MCP isn't an end in itself. It's a cable between the agent and the world. The shorter and simpler that cable, the better. If you're unsure whether to keep a server, unhook for a week. If you don't notice anything, leave it unhooked.