Pi-hole MCP Server
A production-grade MCP server for Pi-hole v6 that gives AI assistants full control over DNS blocking, domain management, query analysis, statistics, network devices, DHCP, and system administration. It supports multi-instance sync, read-only mode, and toolsets, covering roughly 95% of the Pi-hole v6 REST API with 82 tools.
Package and access
Local package with source-attributed installation metadata. Koskamo does not execute packages during review.
Checks and signals
Each line is separate evidence, not a trust score.
- Popularity 10 GitHub stars
What you can do with it
- Check if Pi-hole is blocking and for how long
- Pause DNS blocking for a specific duration
- Identify which lists block a specific domain
- Analyze top blocked domains and query logs
Source and maintenance
- Last repository push
- Latest release
- v0.10.0
- Maintenance checked
Packages and installation
Source-provided package data. Koskamo has not executed or live-probed this package.
ghcr.io/hexamatic/pihole-mcp:0.9.0
{
"transport": "stdio",
"identifier": "ghcr.io/hexamatic/pihole-mcp:0.9.0",
"registryType": "oci",
"environmentVariables": [
{
"name": "PIHOLE_URL",
"format": "string",
"isRequired": true,
"description": "Base URL of your Pi-hole web interface. For multiple Pi-holes use PIHOLE_1_URL, PIHOLE_2_URL, ... instead.",
"placeholder": "http://192.168.1.2"
},
{
"name": "PIHOLE_PASSWORD",
"format": "string",
"isRequired": true,
"description": "Pi-hole admin password, or an application password (recommended — bypasses TOTP 2FA)"
},
{
"name": "TZ",
"format": "string",
"description": "IANA timezone for rendered timestamps, e.g. Australia/Adelaide. Defaults to UTC in the container."
},
{
"name": "PIHOLE_READ_ONLY",
"format": "boolean",
"default": "false",
"description": "Expose only inspection tools. Every tool that can change Pi-hole is hidden and rejected if called."
},
{
"name": "PIHOLE_TLS_SKIP_VERIFY",
"format": "boolean",
"default": "false",
"description": "Set to true only for a Pi-hole serving a self-signed HTTPS certificate. A trusted certificate is the better fix."
},
{
"name": "PIHOLE_REQUEST_TIMEOUT",
"format": "string",
"default": "30s",
"description": "HTTP request timeout as a Go duration, e.g. 30s or 1m"
},
{
"name": "PIHOLE_MAX_RETRIES",
"format": "number",
"default": "3",
"description": "Retries after a transient Pi-hole API failure; 0 disables retrying"
},
{
"name": "PIHOLE_RETRY_MAX_DELAY",
"format": "string",
"default": "8s",
"description": "Upper bound on a single exponential-backoff wait, as a Go duration"
}
]
}Tools
Reported by the attributed source; not independently observed by Koskamo.
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · repository · passed · metadata changed · updated
- · backfill · recorded · Pre-expansion baseline; unobserved rich metadata remains unknown
Connect from your client
Each snippet configures the same source-provided package; replace placeholders before use.
Cursor
{
"mcpServers": {
"pi-hole-mcp-server-0-9-0": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"PIHOLE_URL=<YOUR_PIHOLE_URL>",
"-e",
"PIHOLE_PASSWORD=<YOUR_PIHOLE_PASSWORD>",
"-e",
"TZ=<YOUR_TZ>",
"-e",
"PIHOLE_READ_ONLY=<YOUR_PIHOLE_READ_ONLY>",
"-e",
"PIHOLE_TLS_SKIP_VERIFY=<YOUR_PIHOLE_TLS_SKIP_VERIFY>",
"-e",
"PIHOLE_REQUEST_TIMEOUT=<YOUR_PIHOLE_REQUEST_TIMEOUT>",
"-e",
"PIHOLE_MAX_RETRIES=<YOUR_PIHOLE_MAX_RETRIES>",
"-e",
"PIHOLE_RETRY_MAX_DELAY=<YOUR_PIHOLE_RETRY_MAX_DELAY>",
"ghcr.io/hexamatic/pihole-mcp:0.9.0"
],
"env": {
"PIHOLE_URL": "<YOUR_PIHOLE_URL>",
"PIHOLE_PASSWORD": "<YOUR_PIHOLE_PASSWORD>",
"TZ": "<YOUR_TZ>",
"PIHOLE_READ_ONLY": "<YOUR_PIHOLE_READ_ONLY>",
"PIHOLE_TLS_SKIP_VERIFY": "<YOUR_PIHOLE_TLS_SKIP_VERIFY>",
"PIHOLE_REQUEST_TIMEOUT": "<YOUR_PIHOLE_REQUEST_TIMEOUT>",
"PIHOLE_MAX_RETRIES": "<YOUR_PIHOLE_MAX_RETRIES>",
"PIHOLE_RETRY_MAX_DELAY": "<YOUR_PIHOLE_RETRY_MAX_DELAY>"
}
}
}
}Cline
{
"mcpServers": {
"pi-hole-mcp-server-0-9-0": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"PIHOLE_URL=<YOUR_PIHOLE_URL>",
"-e",
"PIHOLE_PASSWORD=<YOUR_PIHOLE_PASSWORD>",
"-e",
"TZ=<YOUR_TZ>",
"-e",
"PIHOLE_READ_ONLY=<YOUR_PIHOLE_READ_ONLY>",
"-e",
"PIHOLE_TLS_SKIP_VERIFY=<YOUR_PIHOLE_TLS_SKIP_VERIFY>",
"-e",
"PIHOLE_REQUEST_TIMEOUT=<YOUR_PIHOLE_REQUEST_TIMEOUT>",
"-e",
"PIHOLE_MAX_RETRIES=<YOUR_PIHOLE_MAX_RETRIES>",
"-e",
"PIHOLE_RETRY_MAX_DELAY=<YOUR_PIHOLE_RETRY_MAX_DELAY>",
"ghcr.io/hexamatic/pihole-mcp:0.9.0"
],
"env": {
"PIHOLE_URL": "<YOUR_PIHOLE_URL>",
"PIHOLE_PASSWORD": "<YOUR_PIHOLE_PASSWORD>",
"TZ": "<YOUR_TZ>",
"PIHOLE_READ_ONLY": "<YOUR_PIHOLE_READ_ONLY>",
"PIHOLE_TLS_SKIP_VERIFY": "<YOUR_PIHOLE_TLS_SKIP_VERIFY>",
"PIHOLE_REQUEST_TIMEOUT": "<YOUR_PIHOLE_REQUEST_TIMEOUT>",
"PIHOLE_MAX_RETRIES": "<YOUR_PIHOLE_MAX_RETRIES>",
"PIHOLE_RETRY_MAX_DELAY": "<YOUR_PIHOLE_RETRY_MAX_DELAY>"
}
}
}
}VS Code
{
"servers": {
"pi-hole-mcp-server-0-9-0": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"PIHOLE_URL=<YOUR_PIHOLE_URL>",
"-e",
"PIHOLE_PASSWORD=<YOUR_PIHOLE_PASSWORD>",
"-e",
"TZ=<YOUR_TZ>",
"-e",
"PIHOLE_READ_ONLY=<YOUR_PIHOLE_READ_ONLY>",
"-e",
"PIHOLE_TLS_SKIP_VERIFY=<YOUR_PIHOLE_TLS_SKIP_VERIFY>",
"-e",
"PIHOLE_REQUEST_TIMEOUT=<YOUR_PIHOLE_REQUEST_TIMEOUT>",
"-e",
"PIHOLE_MAX_RETRIES=<YOUR_PIHOLE_MAX_RETRIES>",
"-e",
"PIHOLE_RETRY_MAX_DELAY=<YOUR_PIHOLE_RETRY_MAX_DELAY>",
"ghcr.io/hexamatic/pihole-mcp:0.9.0"
],
"env": {
"PIHOLE_URL": "<YOUR_PIHOLE_URL>",
"PIHOLE_PASSWORD": "<YOUR_PIHOLE_PASSWORD>",
"TZ": "<YOUR_TZ>",
"PIHOLE_READ_ONLY": "<YOUR_PIHOLE_READ_ONLY>",
"PIHOLE_TLS_SKIP_VERIFY": "<YOUR_PIHOLE_TLS_SKIP_VERIFY>",
"PIHOLE_REQUEST_TIMEOUT": "<YOUR_PIHOLE_REQUEST_TIMEOUT>",
"PIHOLE_MAX_RETRIES": "<YOUR_PIHOLE_MAX_RETRIES>",
"PIHOLE_RETRY_MAX_DELAY": "<YOUR_PIHOLE_RETRY_MAX_DELAY>"
}
}
}
}Claude Desktop
{
"mcpServers": {
"pi-hole-mcp-server-0-9-0": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"PIHOLE_URL=<YOUR_PIHOLE_URL>",
"-e",
"PIHOLE_PASSWORD=<YOUR_PIHOLE_PASSWORD>",
"-e",
"TZ=<YOUR_TZ>",
"-e",
"PIHOLE_READ_ONLY=<YOUR_PIHOLE_READ_ONLY>",
"-e",
"PIHOLE_TLS_SKIP_VERIFY=<YOUR_PIHOLE_TLS_SKIP_VERIFY>",
"-e",
"PIHOLE_REQUEST_TIMEOUT=<YOUR_PIHOLE_REQUEST_TIMEOUT>",
"-e",
"PIHOLE_MAX_RETRIES=<YOUR_PIHOLE_MAX_RETRIES>",
"-e",
"PIHOLE_RETRY_MAX_DELAY=<YOUR_PIHOLE_RETRY_MAX_DELAY>",
"ghcr.io/hexamatic/pihole-mcp:0.9.0"
],
"env": {
"PIHOLE_URL": "<YOUR_PIHOLE_URL>",
"PIHOLE_PASSWORD": "<YOUR_PIHOLE_PASSWORD>",
"TZ": "<YOUR_TZ>",
"PIHOLE_READ_ONLY": "<YOUR_PIHOLE_READ_ONLY>",
"PIHOLE_TLS_SKIP_VERIFY": "<YOUR_PIHOLE_TLS_SKIP_VERIFY>",
"PIHOLE_REQUEST_TIMEOUT": "<YOUR_PIHOLE_REQUEST_TIMEOUT>",
"PIHOLE_MAX_RETRIES": "<YOUR_PIHOLE_MAX_RETRIES>",
"PIHOLE_RETRY_MAX_DELAY": "<YOUR_PIHOLE_RETRY_MAX_DELAY>"
}
}
}
}Let your agent find its tools
Find servers like Pi-hole MCP Server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.