HomeOps MCP Server

A Model Context Protocol server for home infrastructure management.

README.md

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 -d

The server will be available at http://localhost:8000.

Option B -- Run locally

# Requires Python 3.11+ and Poetry
poetry install
bash scripts/run_local.sh

Configuration

All configuration is via environment variables. Copy .env.example to .env and edit as needed.

Variable Required Default Description
MCP_ADMIN_KEY Yes changeme-to-a-strong-random-key API key for admin endpoints
LOG_LEVEL No INFO Logging level (DEBUG, INFO, WARNING, ERROR)
EMBY_URL No (mock data) Emby server URL, e.g. http://192.168.1.100:8096
EMBY_API_KEY No (mock data) Emby API key for authentication
DOCKER_SOCKET No unix:///var/run/docker.sock Path to Docker socket

API Endpoints

Method Path Auth Description
GET /health No Health check -- returns {"status": "ok"}
GET /v1/docker/containers API Key List Docker containers
GET /v1/docker/containers/{id}/stats API Key Container resource stats
GET /v1/emby/sessions API Key List active Emby sessions
GET /v1/emby/search?q=term API Key Search Emby library
POST /v1/actions/execute 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 .env file 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:

  1. Lives in homeops_mcp/adapters/<name>_adapter.py
  2. Implements a common interface (BaseAdapter)
  3. Returns mock/demo data when the upstream service is not configured
  4. 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.

**Browse Issues →**

License

MIT -- see LICENSE.

Tools 4

list_docker_containersList all active Docker containers
get_container_statsGet resource usage statistics for a specific Docker container
list_emby_sessionsList all active Emby media sessions
search_emby_librarySearch the Emby media library

Environment Variables

MCP_ADMIN_KEYrequiredAPI key for admin endpoints
LOG_LEVELLogging level (DEBUG, INFO, WARNING, ERROR)
EMBY_URLEmby server URL
EMBY_API_KEYEmby API key for authentication
DOCKER_SOCKETPath to Docker socket

Try it

List all my running Docker containers and tell me which ones are using the most CPU.
Are there any active streams on my Emby server right now?
Search my Emby library for movies directed by Christopher Nolan.
Check the health status of my home infrastructure server.

Frequently Asked Questions

What are the key features of HomeOps MCP Server?

Unified API for Docker and Emby management. Extensible adapter-based architecture for future integrations. Secure API key authentication for all endpoints. Read-only Docker socket mounting for security. Non-root container execution.

What can I use HomeOps MCP Server for?

Monitoring container resource usage via natural language queries. Quickly searching media libraries without leaving the Claude interface. Automating infrastructure health checks and status reporting. Managing home media server sessions through AI-assisted commands.

How do I install HomeOps MCP Server?

Install HomeOps MCP Server by running: cp .env.example .env && docker compose up -d

What MCP clients work with HomeOps MCP Server?

HomeOps MCP Server works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Turn this server into reusable context

Keep HomeOps MCP Server docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Open Conare