Pihole Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Pihole Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
An MCP (Model Context Protocol) server that gives AI assistants like Claude full control over your Pi-hole v6 DNS ad-blocker - query logs, allow/deny lists, group management, gravity reload, and stats. Designed from day one for multi-instance deployments: manage one or many Pi-hole instances from a single MCP endpoint.
Pi-hole's admin API is powerful but cumbersome to script against. This MCP server turns every Pi-hole API action into a tool that any MCP-compatible AI assistant can call directly. Instead of clicking through the admin UI or writing curl commands, just ask your AI to check what's being blocked, allowlist a domain, or compare stats across instances.
Perfect for homelabbers running multiple Pi-holes (primary + secondary, or per-VLAN), network admins managing DNS filtering at scale, and anyone who wants AI-assisted DNS management.
/run/secrets/ filesgit clone https://github.com/ranklancer/pihole-mcp.git
cd pihole-mcp
cp .env.example .env
# Edit .env with your Pi-hole URL(s) and password(s)
mkdir -p secrets
echo "your-pihole-password" > secrets/pihole_password
chmod 600 secrets/pihole_password
cp docker-compose.example.yml docker-compose.yml
docker compose up -dnpm install
npm run build
export PIHOLE_INSTANCES=pihole
export PIHOLE_BASE_URL=http://pihole.example.com
export PIHOLE_PASSWORD=your-password
npm startAll configuration is via environment variables. See .env.example for the full reference.
PIHOLE_INSTANCES=pihole
PIHOLE_BASE_URL=http://192.0.2.100
PIHOLE_PASSWORD=your-passwordPIHOLE_INSTANCES=primary,secondary
PRIMARY_BASE_URL=http://192.0.2.100
PRIMARY_PASSWORD=password1
SECONDARY_BASE_URL=https://198.51.100.101
SECONDARY_PASSWORD=password2
SECONDARY_INSECURE_TLS=trueFor each instance name in PIHOLE_INSTANCES, provide:
| Variable | Required | Description |
|---|---|---|
<NAME>_BASE_URL | Yes | Pi-hole base URL (e.g. http://pihole.local) |
<NAME>_PASSWORD | Yes | Pi-hole API password (or use Docker secrets) |
<NAME>_INSECURE_TLS | No | Set true for self-signed certs (default: false) |
Docker secrets are supported as a fallback: /run/secrets/<name>_password (lowercase).
| Tool | Description |
|---|---|
pihole_query_log | Fetch query log with filters (limit, time range, client, domain, status) |
pihole_allow_domain | Add to allowlist (auto-detects exact vs regex) |
pihole_deny_domain | Add to denylist (auto-detects exact vs regex) |
pihole_list_allowlist | List all allowlist entries (exact + regex merged) |
pihole_list_denylist | List all denylist entries (exact + regex merged) |
pihole_stats_summary | Get Pi-hole statistics summary |
pihole_reload_lists | Trigger gravity reload |
pihole_group_management | CRUD operations on Pi-hole groups |
pihole_check_regex_types | Detect miscategorized regex in deny-exact list |
Every tool accepts an optional instance parameter to target a specific Pi-hole. Defaults to the first configured instance.
The server listens on http://HOST:PORT/mcp (default: http://localhost:3000/mcp).
Add to your MCP settings:
{
"mcpServers": {
"pihole": {
"url": "http://localhost:3031/mcp"
}
}
}If your MCP client only supports stdio transport, use supergateway:
npx -y supergateway --streamableHttp http://localhost:3031/mcpcurl http://localhost:3031/health
# {"ok":true,"service":"pihole-mcp","version":"0.2.0"}npm install
npm run dev # Watch mode — recompiles on save
npm start # Run the serverMIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.