使用说明
MCP-Servers
A collection of Model Context Protocol (MCP) server implementations (some authored in-house, some vendored third-party frameworks/packages), used for AI-assistant integration with home lab and Steamroller Studios infrastructure.
Overview
| Server | Description | Origin | Security model |
|---|---|---|---|
| proxmox-mcp | Proxmox VE management: nodes, VMs/LXCs, storage, snapshots, cloud-init, exec | In-house | Safety tiers (safe/restricted/critical); critical tools need PROXMOX_ALLOW_DANGER=true + confirmation; TLS fail-closed (PROXMOX_ALLOW_INSECURE_TLS) |
| unifi-mcp | UniFi local controller: clients, devices, firewall policies, port forwards, WLANs, VLANs | In-house | Per-tool confirm=true gates; extra gates for WiFi security downgrade and internet-facing port forwards; RFC1918/port-range input validation |
| zabbix-mcp | Zabbix monitoring: hosts, templates, triggers, items, users, scripts, config import/export | Fork of mhajder/zabbix-mcp | READ_ONLY_MODE toggle (upstream) plus fork-specific confirm=true gates on destructive/privilege-changing tools, incl. dual-flag gate for granting super-admin |
| altaro-mcp | Read-only Altaro VM Backup on STEAMHV1/STEAMHV2: per-VM results and failure streaks (event log), live job progress mapped to VMs and per-VM last/next/offsite status (Altaro REST API), service state; all over SSH | In-house | No mutating tools; dedicated AD account svc-altaro-api (enigma svc-altaro-api, 22304; was svc-altaro-mcp until 2026-10-15) for the API, password passed over SSH stdin, never on a command line; VM name filter validated by regex |
| bconsole-mcp | Real-time Bacula Director access via bconsole over SSH (accurate live job byte counts) |
In-house | confirm=true gates on job/catalog mutations; console() restricted to a read-only verb allowlist; stdin command-injection protection |
| bacularis-mcp | Read-only Bacula/Bareos backup reporting via the Bacularis REST API | In-house | Genuinely read-only, no gating needed |
| unraid-mcp | Unraid GraphQL API: system, array, docker, VMs, plugins, notifications, live telemetry | Third-party (jmagar/unraid-mcp) | Confirm-gated destructive subactions built in upstream; not modified here |
| mcp_youtube_dlp | YouTube video/audio download via yt-dlp | In-house | Personal download tool; no destructive/shared-infrastructure operations |
| weather | Public NWS weather alerts and forecasts | In-house | Public, unauthenticated, read-only API wrapper |
| fastmcp | Vendored reference copy of the FastMCP framework (kept for reading/example purposes when building future in-house servers — not imported by anything in this repo) | Third-party (jlowin/fastmcp) | Framework, not a running server. Refreshed to upstream v3.4.4 on 2026-07-23 (was a stale pre-2.x dev build, source of 8 open Dependabot alerts). No auto-update — re-clone the latest tagged release periodically (pip index versions fastmcp for the current version) so it doesn't drift stale and re-trigger alerts. |
| MCP-Builder-Stuff | Vendored MCP Python SDK reference | Third-party (modelcontextprotocol/python-sdk) | Framework, not a running server |
Security posture
Several of the in-house servers (proxmox-mcp, unifi-mcp, zabbix-mcp, bconsole-mcp) went through a security-hardening pass driven by a CISSP-agent review. The consistent principle applied: make mutating/destructive tools safe by default in code, not by disabling them. Rather than shipping a global read-only toggle as the only safeguard, every destructive or high-impact tool call now requires the caller to pass an explicit confirm=true (or, for the highest-risk actions, two independent flags; see each server's README for its exact gate names). A tool call without confirmation raises an error before any request reaches the underlying API/SSH/subprocess layer. Nothing is silently blocked, but nothing destructive runs by accident either.
Where relevant, additional hardening was layered on top of confirmation gates:
- Input validation: RFC1918/port-range checks on unifi-mcp port forwards; strict ObjectID pattern checks on all UniFi
_idparams; VMID/identifier sanitization in proxmox-mcp - Fail-closed TLS: proxmox-mcp requires a second explicit opt-in (
PROXMOX_ALLOW_INSECURE_TLS) to actually disable certificate verification, rather than silently downgrading onPROXMOX_VERIFY_SSL=false - Command-injection protection: bconsole-mcp rejects any caller-controlled value containing a newline before it can reach bconsole's SSH-piped stdin REPL
- Escape-hatch allowlisting: bconsole-mcp's raw
console()passthrough is restricted to read-only verbs, closing the loophole where it could otherwise bypass every other tool's confirm gate - Privilege-escalation dual-gating: zabbix-mcp's
user_updateand proxmox-mcp'sdelete_instancerequire a second, distinct flag beyondconfirm=truefor their highest-risk case (granting Zabbix super-admin; deleting a VM/container)
See each server's README for its full tool list and exact gate names/parameters.
What is MCP?
The Model Context Protocol (MCP) is an open standard created by Anthropic that provides a universal way to connect AI assistants to external data sources and tools. It uses JSON-RPC 2.0 for communication and supports multiple transport protocols (stdio, HTTP, SSE).
For detailed technical background, see MCP-web-research.md.
Repository
git clone git@github.com:dwpdkp/mcp-servers.git
cd mcp-servers
Each in-house server directory has its own README with setup, environment variables, .mcp.json client config, and a full tool reference. Start there for any given server. fastmcp/ and MCP-Builder-Stuff/ are vendored third-party dependencies, not standalone servers to run directly.
Development
Most servers use uv as the package manager.
cd <server-dir>
uv sync
uv run pytest # where a test suite exists (proxmox-mcp, unifi-mcp, zabbix-mcp)
See CLAUDE.md for repo-wide development guidelines.
Documentation
- CLAUDE.md: development guidelines for Claude Code working in this repo
- MCP-web-research.md: comprehensive MCP technical reference
- Per-server
README.md: setup, tools, and security model for each server
License
- proxmox-mcp, unifi-mcp, bconsole-mcp, bacularis-mcp, weather: MIT
- zabbix-mcp: MIT (fork of mhajder/zabbix-mcp, also MIT)
- unraid-mcp: see upstream project
- mcp_youtube_dlp: GPL-2.0
- fastmcp, MCP-Builder-Stuff: see vendored project license
Resources
Document History
| Date | Author | Changes |
|---|---|---|
| 2026-07-14 | Doug Pearson | Full rewrite: added proxmox-mcp, zabbix-mcp, bconsole-mcp, unraid-mcp to the overview (previously missing); replaced placeholder clone URL with actual origin; added Security posture section summarizing the confirm-gate hardening pass across proxmox-mcp/unifi-mcp/zabbix-mcp/bconsole-mcp |
| 2026-09-24 | Doug Pearson | Added altaro-mcp; tool-search descriptions and instructions= for bacularis-mcp and proxmox-mcp |