HomeOps MCP Server
HomeOps MCP Server
Note: This project was developed with and is supported exclusively by AI. There is no human support — issues and PRs are triaged and responded to by AI agents. If AI-assisted software isn't for you, no hard feelings — but you might want to reconsider, since so is most of the software you already use.
A Model Context Protocol (MCP) server for home infrastructure management. Provides a unified API for Docker, Emby, and future Servarr/UniFi/CrowdSec integrations. Built with FastAPI and Python 3.11 for homelab automation with Claude.
Roadmap
Phase | Scope | Status |
Phase 0 | Skeleton -- project structure, CI, Docker build, health endpoint | Done |
Phase 1 | Docker + Emby adapters, API-key auth middleware, full CI pipeline | Planned |
Phase 2 | Servarr (Sonarr/Radarr/Prowlarr), WordPress, Synology, UniFi, CrowdSec adapters | Planned |
Phase 3 | UI dashboard, audit logs, secrets management (Vault/SOPS), production hardening | Planned |
Quick Start
Option A -- Docker Compose (recommended)
cp .env.example .env
# Edit .env with your real values
docker compose up -dThe server will be available at http://localhost:8000.
Option B -- Run locally
# Requires Python 3.11+ and Poetry
poetry install
bash scripts/run_local.shConfiguration
All configuration is via environment variables. Copy .env.example to .env and edit as needed.
Variable | Required | Default | Description |
| Yes |
| API key for admin endpoints |
| No |
| Logging level ( |
| No | (mock data) | Emby server URL, e.g. |
| No | (mock data) | Emby API key for authentication |
| No |
| Path to Docker socket |
API Endpoints
Method | Path | Auth | Description |
|
| No | Health check -- returns |
|
| API Key | List Docker containers |
|
| API Key | Container resource stats |
|
| API Key | List active Emby sessions |
|
| API Key | Search Emby library |
|
| API Key | Log action (non-destructive) |
All authenticated endpoints require the X-API-Key header set to the value of MCP_ADMIN_KEY.
Security
Never commit real API keys or secrets. The
.envfile is git-ignored.Only placeholder values appear in
.env.example.The Docker socket is mounted read-only in
docker-compose.yml.The container runs as a non-root user (
appuser).All adapter API keys are loaded from environment variables at startup and are never logged.
Architecture
HomeOps MCP uses an adapter pattern to integrate with external services:
Client Request
|
v
FastAPI Router
|
v
Auth Middleware (validates X-API-Key)
|
v
Adapter Layer
|
+---> DockerAdapter --> Docker Engine API (socket)
+---> EmbyAdapter --> Emby REST API
+---> ServarrAdapter --> Sonarr / Radarr / Prowlarr APIs (Phase 2)
+---> UniFiAdapter --> UniFi Controller API (Phase 2)
+---> CrowdSecAdapter --> CrowdSec LAPI (Phase 2)Each adapter:
Lives in
homeops_mcp/adapters/<name>_adapter.pyImplements a common interface (
BaseAdapter)Returns mock/demo data when the upstream service is not configured
Has its own unit tests in
tests/
Development
# Install all dependencies (including dev)
poetry install
# Run linter
poetry run ruff check .
# Run tests
poetry run pytest -v
# Build Docker image
docker build -t homeops-mcp .Contributing
Every issue in this repo is AI-Ready — structured with full context, file paths, implementation guides, and a ready-to-use AI prompt.
License
MIT -- see LICENSE.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/wolffcatskyy/homeops-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server