HDHomeRun MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@HDHomeRun MCPwhat channels are available on my HDHomeRun?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
HDHomeRun MCP
CLI or API | MCP | Agent
Version: 1.1.0
Documentation — Installation, deployment, usage across the API, CLI, and MCP interfaces, the integrated A2A agent server, and guidance for provisioning the backing platform are maintained in the official documentation.
Related MCP server: whmcs-mcp-server
Table of Contents
Overview
HDHomeRun MCP MCP Server + A2A Agent
A complete client + MCP server + A2A agent for SiliconDust HDHomeRun network TV
tuners, covering all four of SiliconDust's documented interfaces: the HTTP JSON
API (device discovery, channel lineup, scan control), the DVR API
(SiliconDust cloud recording rules + local record-engine operations), the
Discovery API (local UDP broadcast on port 65001 + the cloud discovery
endpoint), and the binary hdhomerun_config control protocol (TCP port
65001 — a different wire protocol from the HTTP API, used for per-tuner
status/vstatus/streaminfo/tuning/filters). Also ships a doctor diagnostic
tool matching this fleet's cm_doctor convention.
This repository is actively maintained - Contributions are welcome!
Key Features
All four HDHomeRun interfaces, one package — HTTP JSON API, DVR API, Discovery API (local UDP + cloud), and the binary hdhomerun_config control protocol, each its own action-routed tool domain.
doctordiagnostics — one call checks device reachability, firmware/model, tuner count vs. a paired Jellyfin instance, per-channel signal strength, DeviceAuth presence/validity, and discovery-cache freshness — pass/fail with an actionable next step per check.Action-routed MCP tools — each domain is exposed as a single MCP tool that routes to many underlying operations via an
actionargument, keeping the tool surface small.Three interfaces, one package — use it as a Python API client, an MCP server (
stdio/streamable-http/sse), or a Pydantic-AI A2A agent.agent-utilitiesnative — built on the shared framework (auth, action router, telemetry, governance) for fleet consistency.Per-tool toggles — enable or disable each tool domain with environment switches.
Enterprise-ready — OTEL/Langfuse telemetry and optional Eunomia access governance.
Available MCP Tools
Each tool is action-routed: pass an action and a JSON params_json payload. Tool
domains can be toggled on or off with the listed environment variable. The table below is
auto-generated from the live server by the mcp-readme-table pre-commit hook
(python -m agent_utilities.mcp.readme_tools) — do not edit it by hand.
Condensed action-routed tools (MCP_TOOL_MODE=condensed)
MCP Tool | Toggle Env Var | Description |
|
| Query/control a tuner via the binary hdhomerun_config TCP control |
|
| Discover HDHomeRun devices on the network — local UDP broadcast |
|
| Diagnose an HDHomeRun deployment: device reachability, firmware/model, |
|
| Manage the SiliconDust cloud DVR recording-rules API and the local |
|
| Query the HDHomeRun device HTTP JSON API — discover.json, channel |
Verbose 1:1 API-mapped tools (MCP_TOOL_MODE=verbose or both)
MCP Tool | Toggle Env Var | Description |
|
| POST /lineup.post?scan=abort — cancel an in-progress channel scan. |
|
| Add a DateTimeOnly-ChannelOnly rule (record one specific airing). |
|
| Add a Series (or Movie) recording rule for a SeriesID. |
|
| Build a record-engine buffered Live TV URL. |
|
| Build a live-stream URL: /{auto|tuner}/{v|ch[-]}. |
|
| Modify a rule, or reprioritize it via |
|
| Invoke the check_device_auth operation. |
|
| Invoke the check_device_reachable operation. |
|
| Invoke the check_discovery_cache_freshness operation. |
|
| Invoke the check_firmware_model operation. |
|
| Briefly tune each channel and sample ss/snq/seq, then release the tuner. |
|
| Invoke the check_tuner_count_vs_jellyfin operation. |
|
| POST cmd=delete[&rerecord=1]. |
|
| Delete a Series/Movie rule (by RecordingRuleID or SeriesID) or a |
|
| Disable the lineup-server connection ( |
|
| |
|
| Broadcast a DISCOVER_REQ on UDP port 65001 and collect DISCOVER_RPY replies. |
|
| Send a DISCOVER_REQ directly to a known IP (works across VLANs). |
|
|
|
|
|
|
|
| GET /discover.json — FriendlyName/ModelNumber/FirmwareVersion/DeviceID/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
| GET /lineup.{json,xml,m3u} — the channel list. |
|
| GET /lineup_status.json — scan state. |
|
|
|
|
|
|
|
| GET /discover.json — FriendlyName/Version/ |
|
| GET ( |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| List all recording rules for the household's DeviceAuth(s). |
|
| Parse a |
|
| POST /recording_events.post?sync. |
|
|
|
|
| Run every check and return the aggregate report. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| POST /lineup.post?scan=start[&source=] — begin a channel scan. |
|
| Set |
5 action-routed tool(s) · 57 verbose 1:1 tool(s). Each is enabled unless its <DOMAIN>TOOL toggle is set false; MCP_TOOL_MODE selects the surface (intent default — the six verb-tools, granular set loaded on demand · condensed action-routed · verbose 1:1 · both). Auto-generated — do not edit.
Installation
Install with uvx (no install — run on demand)
uvx --from "hdhomerun-mcp[mcp]" hdhomerun-mcp # MCP server (slim deps)
uvx --from "hdhomerun-mcp[agent]" hdhomerun-agent # A2A agent server (full runtime)The
[mcp]extra installs only the FastMCP/FastAPI MCP-server tooling (agent-utilities[mcp]) — it excludes the heavy agent runtime (the epistemic-graph engine,pydantic-ai,dspy,llama-index), so it is far smaller. Use[agent]only when you run the integrated agent.
Install with pip
python -m pip install hdhomerun-mcp # core (API client)
python -m pip install "hdhomerun-mcp[all]" # + MCP server + A2A agent + telemetryConsole scripts
After installation the following entry points are available on your PATH:
Command | Description |
| Launch the MCP server |
| Launch the A2A agent server |
Usage
As a Python API client
from hdhomerun_mcp.auth import get_client
client = get_client() # reads HDHOMERUN_URL / HDHOMERUN_DEVICE_AUTH
info = client.get_discover() # device identity + tuner count
lineup = client.get_lineup() # channel list
stream_url = client.build_stream_url("24.1") # http://<device>:5004/auto/v24.1
report = client.run_doctor() # full health-check sweepAs an MCP server (CLI)
# Local stdio (for IDEs)
hdhomerun-mcp
# Networked streamable-http
hdhomerun-mcp --transport streamable-http --host 0.0.0.0 --port 8000Calling an MCP tool
Tools are action-routed — pass an action plus a JSON params_json string:
{
"tool": "http_operations",
"arguments": {
"action": "discover",
"params_json": "{}"
}
}MCP
Using as an MCP Server
The MCP Server can be run in stdio (local), streamable-http (networked), or
sse mode.
Environment Variables
Package environment variables
Variable | Example | Description |
|
| |
|
| |
|
| options: stdio, streamable-http, sse |
|
| |
|
| |
|
| |
|
| options: none, embedded, remote |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
Inherited agent-utilities variables (apply to every connector)
Variable | Example | Description |
| — | Comma-separated tool allow-list |
| — | Comma-separated tool deny-list |
| — | Comma-separated tag allow-list |
| — | Comma-separated tag deny-list |
| — | Outbound MCP child auth: |
| — | OIDC client id (service-account auth) |
|
| Runtime secret reference for the OIDC service account |
| — | HTTP Basic username ( |
|
| Runtime secret reference for HTTP Basic auth ( |
|
| Verbose logging |
|
| Unbuffered stdout (recommended in containers) |
|
| URL of the MCP server the agent connects to |
|
| LLM provider for the agent |
|
| Model id for the agent |
|
| Serve the AG-UI web interface |
18 package + 15 inherited variable(s). Auto-generated from .env.example + the shared agent-utilities set — do not edit.
HDHOMERUN_URL: The HDHomeRun device base URL (e.g.https://hdhomerun-device.example.invalid).HDHOMERUN_DEVICE_AUTH: The device'sDeviceAuthtoken (only needed for SiliconDust cloud DVR calls; rotates on reboot/firmware update — do not hardcode).
MCP Configuration Examples
Install the connector-focused
[mcp]extra. Examples usehdhomerun-mcp[mcp]to add FastMCP / FastAPI throughagent-utilities[mcp]; the required Agent Utilities core still carriesepistemic-graph[full]. The[agent-runtime]extra additionally enables model orchestration.
stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)
{
"mcpServers": {
"hdhomerun-mcp": {
"command": "uvx",
"args": [
"--from",
"hdhomerun-mcp[mcp]",
"hdhomerun-mcp"
],
"env": {
"MCP_TOOL_MODE": "intent",
"CONFIGTOOL": "True",
"DISCOVERYTOOL": "True",
"DOCTORTOOL": "True",
"DVRTOOL": "True",
"HDHOMERUN_DEVICE_AUTH": "your_device_auth_here",
"HDHOMERUN_SSL_VERIFY": "True",
"HDHOMERUN_URL": "http://hdhomerun.local",
"HTTPTOOL": "True"
}
}
}
}Runtime references require an alias-aware launcher such as GraphOS. Other launchers must omit those entries and inject the resolved values through their own runtime secret boundary.
Streamable-HTTP Transport (networked / production)
{
"mcpServers": {
"hdhomerun-mcp": {
"command": "uvx",
"args": [
"--from",
"hdhomerun-mcp[mcp]",
"hdhomerun-mcp",
"--transport",
"streamable-http",
"--port",
"8000"
],
"env": {
"TRANSPORT": "streamable-http",
"HOST": "127.0.0.1",
"PORT": "8000",
"MCP_TOOL_MODE": "intent",
"CONFIGTOOL": "True",
"DISCOVERYTOOL": "True",
"DOCTORTOOL": "True",
"DVRTOOL": "True",
"HDHOMERUN_DEVICE_AUTH": "your_device_auth_here",
"HDHOMERUN_SSL_VERIFY": "True",
"HDHOMERUN_URL": "http://hdhomerun.local",
"HTTPTOOL": "True"
}
}
}
}Alternatively, connect to a pre-deployed Streamable-HTTP instance by url:
{
"mcpServers": {
"hdhomerun-mcp": {
"url": "http://localhost:8000/hdhomerun-mcp/mcp"
}
}
}Run a reviewed container image as a least-privilege stdio child (no listener or published port):
docker run -i --rm \
--read-only \
--cap-drop=ALL \
--security-opt=no-new-privileges \
--pids-limit=256 \
--tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
-e TRANSPORT=stdio \
-e MCP_TOOL_MODE=intent \
-e CONFIGTOOL=True \
-e DISCOVERYTOOL=True \
-e DOCTORTOOL=True \
-e DVRTOOL=True \
-e HDHOMERUN_DEVICE_AUTH=your_device_auth_here \
-e HDHOMERUN_SSL_VERIFY=True \
-e HDHOMERUN_URL=http://hdhomerun.local \
-e HTTPTOOL=True \
registry.example.invalid/hdhomerun-mcp@sha256:<digest> hdhomerun-mcpFor containerized network HTTP, supply an authenticated TLS ingress (or
direct server TLS), exact MCP_ALLOWED_HOSTS, and an exact trusted-proxy
CIDR policy through the operator-owned deployment profile. The generator
does not emit an unauthenticated non-loopback listener.
Auto-generated from the code-read env surface (MCP_TOOL_MODE + package vars) — do not edit.
Additional Deployment Options
hdhomerun-mcp can also run as a local container (Docker / Podman / uv) or be
consumed from a remote deployment. The
Deployment guide has full,
copy-paste mcp_config.json for all four transports — stdio, streamable-http,
local container / uv, and remote URL:
Local container / uv — launch the server from
mcp_config.jsonviauvx,docker run, orpodman run, or point at a local streamable-http container byurl.Remote URL — connect to a server deployed behind Caddy at
https://hdhomerun-mcp.example.invalid/mcpusing the"url"key.
Container images (:mcp vs :agent)
One multi-stage docker/Dockerfile builds two right-sized images, selected by --target:
Image tag | Build target | Contents | Entrypoint |
|
|
|
|
|
|
|
|
docker build --target mcp -t knucklessg1/hdhomerun-mcp:mcp docker/ # slim MCP server
docker build --target agent -t knucklessg1/hdhomerun-mcp:1.1.0 docker/ # full agentKnowledge-graph database (epistemic-graph)
The full agent ([agent] / :1.1.0) embeds the epistemic-graph engine (pulled in via
agent-utilities[agent]). For production — or to share one knowledge graph across multiple
agents — run epistemic-graph as its own database container and point the agent at it.
Deployment recipes (single-node + Raft HA), connection config, and the full database
architecture (with diagrams) are in the
epistemic-graph deployment guide.
The slim [mcp] server does not require the database.
Documentation
Full documentation is published to the GitHub Pages site and mirrored under docs/:
Governed capability contract
This package ships a compact canonical skill surface with specialist procedures
kept as referenced workflows. The current MCP tools, skill metadata,
connector_manifest.yml, ontology, mappings, shapes, fixtures, migrations,
tool-schema fingerprints, and certification metadata form one versioned
capability contract. Validate them together; do not rely on stale tool names or
historical per-task skill wrappers.
Runtime endpoints, credentials, certificate trust, tenant identity, retention, and observability policy are deployment inputs and are never packaged values. See Configuration, trust, and privacy before enabling a network transport, connector ingestion, GraphOS delegation, or trace export.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- -licenseNot gradedqualityDmaintenanceAn MCP server for agents to control MultiViewer, the best way to watch motorsports. Works locally or remotely.19
- AlicenseBqualityBmaintenanceMCP server to help manage a WHMCS installation.623919MIT
- AlicenseAqualityCmaintenanceMCP server for Plex Media Server, focused on media discovery, search, library management, and playback control.25MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for controlling Apple TV, HomePod, and AirPlay devices via pyatv, offering 32 tools for playback, navigation, volume, apps, and more.1MIT
Related MCP Connectors
MCP server for the FFmpeg Micro video transcoding API — create, monitor, download transcodes.
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
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/Knuckles-Team/hdhomerun-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server