adguardctrl
ActiveTuning DNS filtering means the AdGuard Home dashboard, one box at a time, and hoping you clicked the right client. adguard-mcp hands the whole control surface to your agent: status, stats, query logs, filter lists, and gated changes, across every AdGuard Home instance you run, in plain language over stdio.
See it work
one question, the tools it calls, the answer
Representative session. Illustrative values, RFC 5737 addresses. Credentials stay in memory and are redacted from logs; nothing leaves your box.
What it does
Point any MCP client at adguard-mcp and your self-hosted AdGuard Home becomes tools the agent can call: read status, stats, the DNS query log, filter lists, named clients, DNS config, and a check_host lookup that shows exactly what AdGuard would do with a hostname. The reason it exists is that the raw AdGuard Home API has no agent-safety layer, so every endpoint (including the ones that disable all blocking or wipe your rules) is one hallucinated call away. adguard-mcp differs by encoding those endpoints as typed tools behind a three-tier gate, keeping reads open, requiring confirm: true on writes, and requiring both confirm: true and destructive: true on destructive ops, while resolving any number of instances from env vars so one tool call can target a non-default box or drive AdGuardHome Sync.
Capabilities
33 tools across three gating tiers
Set it up
Set per-instance ADGUARD_PRIMARY_URL, ADGUARD_PRIMARY_USERNAME, ADGUARD_PRIMARY_PASSWORD (at least one instance required); add ADGUARD_<NAME>_* for more boxes and optional ADGUARDHOME_SYNC_URL for Sync.
MCP client config
{ "mcpServers": { "adguard": { "command": "npx", "args": ["-y", "@solomonneas/adguard-mcp"], "env": { "ADGUARD_PRIMARY_URL": "http://192.0.2.10", "ADGUARD_PRIMARY_USERNAME": "admin", "ADGUARD_PRIMARY_PASSWORD": "your-password" } } } }Three write-gate tiers: reads are open, safe writes require an explicit confirm: true, and destructive ops (toggle protection, replace the rules block, delete a client, wipe the query log) additionally require destructive: true, so an agent cannot disable filtering or wipe rules on a hallucinated call. Credentials live only in memory after env-load and are redacted from logs and error messages. It runs no daemon, stores no DNS traffic, and targets only self-hosted AdGuard Home boxes you run.