# mcp-pihole

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/aplaceforallmystuff/mcp-pihole  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/mcp-pihole

## Description
Pi-hole v6 MCP server - manage DNS blocking, stats, whitelists/blacklists

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "mcp-pihole": {
    "command": "npx",
    "args": ["-y","mcp-pihole"]
  }
}
```

## Documentation & README

# MCP Pi-hole Server

[![npm version](https://img.shields.io/npm/v/mcp-pihole-server.svg)](https://www.npmjs.com/package/mcp-pihole-server)
[![CI](https://github.com/aplaceforallmystuff/mcp-pihole/actions/workflows/ci.yml/badge.svg)](https://github.com/aplaceforallmystuff/mcp-pihole/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![MCP](https://img.shields.io/badge/MCP-Compatible-blue)](https://modelcontextprotocol.io)

![Architecture](docs/images/architecture-diagram.png)

An MCP (Model Context Protocol) server that connects AI assistants like Claude to your [Pi-hole](https://pi-hole.net) network-wide ad blocker. Manage DNS blocking, view statistics, control whitelists/blacklists, and more through natural language.

## Why Use This?

If you're running Pi-hole on your network, this MCP server lets you:

- **Monitor DNS traffic** - View query statistics, top blocked domains, and client activity
- **Control blocking** - Enable/disable Pi-hole blocking instantly or with a timer
- **Manage lists** - Add or remove domains from whitelist and blacklist without opening the web UI
- **View query logs** - See recent DNS queries with detailed information
- **Maintain your Pi-hole** - Update gravity (blocklists) and flush DNS cache

## Features

| Category | Tools |
|----------|-------|
| **Statistics** | Query totals, blocking percentage, top domains, top clients |
| **Blocking Control** | Enable, disable (with optional timer), check status |
| **Domain Lists** | Whitelist/blacklist CRUD operations |
| **Query Log** | Recent DNS queries with client, status, response time |
| **Maintenance** | Update gravity, flush cache |
| **Visualizations** | ASCII art dashboards and bar charts with ANSI colors |

## Prerequisites

- Node.js 18+
- [Pi-hole](https://pi-hole.net) v6 with API enabled
- Pi-hole app password (generated in Pi-hole settings)
- Network access to Pi-hole from your machine

## Installation

### Option 1: Install from npm (recommended)

```bash
npx mcp-pihole-server
```

Or install globally:

```bash
npm install -g mcp-pihole-server
```

### Option 2: Clone and Build

```bash
git clone https://github.com/aplaceforallmystuff/mcp-pihole.git
cd mcp-pihole
npm install
npm run build
```

## Configuration

### 1. Get Your Pi-hole App Password

1. Open your Pi-hole web interface
2. Go to Settings > API
3. Generate a new app password
4. Copy the password (it's only shown once)

### 2. Configure Your MCP Client

#### For Claude Desktop

Add to your Claude Desktop config file:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "pihole": {
      "command": "npx",
      "args": ["-y", "mcp-pihole-server"],
      "env": {
        "PIHOLE_URL": "http://your-pihole-address:8080",
        "PIHOLE_PASSWORD": "your-app-password"
      }
    }
  }
}
```

#### For Claude Code

Add to `~/.claude.json`:

```json
{
  "mcpServers": {
    "pihole": {
      "command": "npx",
      "args": ["-y", "mcp-pihole-server"],
      "env": {
        "PIHOLE_URL": "http://your-pihole-address:8080",
        "PIHOLE_PASSWORD": "your-app-password"
      }
    }
  }
}
```

### Environment Variables

| Variable | Description | Example |
|----------|-------------|---------|
| `PIHOLE_URL` | Pi-hole web interface URL | `http://pihole.local:8080` |
| `PIHOLE_PASSWORD` | Pi-hole app password | Your app password from settings |

## Usage Examples

Once configured, you can interact with Pi-hole through natural language:

### View Statistics
> "Show me Pi-hole stats"

> "What are the top blocked domains?"

> "Which clients are making the most queries?"

### Control Blocking
> "Is Pi-hole blocking enabled?"

> "Disable Pi-hole for 5 minutes"

> "Re-enable Pi-hole blocking"

### Manage Domain Lists
> "Add example.com to the whitelist"

> "Block ads.trackersite.com"

> "Show me all whitelisted domains"

### View Query Log
> "Show me the last 50 DNS queries"

> "What domains has my phone been querying?"

### Visual Dashboards
> "Show me Pi-hole stats with visualize: true"

> "Get top blocked domains with visualization"

## Available Tools

### Statistics
- `pihole_get_stats` - Get comprehensive Pi-hole statistics
- `pihole_get_top_blocked` - Get top blocked domains
- `pihole_get_top_permitted` - Get top permitted domains
- `pihole_get_top_clients` - Get top clients by query count
- `pihole_get_query_log` - Get recent DNS queries

### Blocking Control
- `pihole_get_blocking_status` - Check if blocking is enabled
- `pihole_enable_blocking` - Enable DNS blocking
- `pihole_disable_blocking` - Disable blocking (optionally with timer)

### Domain Management
- `pihole_get_whitelist` - List all whitelisted domains
- `pihole_get_blacklist` - List all blacklisted domains
- `pihole_add_to_whitelist` - Add domain to whitelist
- `pihole_add_to_blacklist` - Add domain to blacklist
- `pihole_remove_from_whitelist` - Remove domain from whitelist
- `pihole_remove_from_blacklist` - Remove domain from blacklist

### Maintenance
- `pihole_update_gravity` - Update blocklists (gravity)
- `pihole_flush_cache` - Flush DNS cache

## ASCII Visualizations

This server supports colorful ASCII art visualizations rendered directly in your terminal using ANSI escape codes.

### Supported Tools

The following tools support the optional `visualize: true` parameter:

| Tool | Visualization |
|------|---------------|
| `pihole_get_stats` | Full dashboard with summary stats, top clients, blocked domains, and permitted domains |
| `pihole_get_top_blocked` | Red bar chart of blocked domains |
| `pihole_get_top_permitted` | Green bar chart of permitted domains |
| `pihole_get_top_clients` | Blue bar chart of client activity |

### Usage

Pass `visualize: true` to any supported tool:

```json
{
  "name": "pihole_get_stats",
  "arguments": {
    "visualize": true
  }
}
```

When `visualize` is not set or `false`, tools return JSON data as usual.

### Example Output

```
╔════════════════════════════════════════════════════════════════════════════╗
║                         🛡️  PI-HOLE DASHBOARD                          ║
╠════════════════════════════════════════════════════════════════════════════╣
║                                                                            ║
║ 📊 SUMMARY                                                                 ║
║ ────────────────────────────────────────────────────────────────────────── ║
║ Total Queries:      73K             Domains Blocked:    2.4M               ║
║ Blocked:            22K             Active Clients:     28                 ║
║ Block Rate:         29.7%           Total Clients:      115                ║
╠════════════════════════════════════════════════════════════════════════════╣
║ 🔝 TOP CLIENTS                                                             ║
║ ────────────────────────────────────────────────────────────────────────── ║
║ 192.168.1.52     ████████████████████████████████████████   28K (38%)      ║
║ 192.168.1.51     ███████████████████▋                       14K (19%)      ║
╚════════════════════════════════════════════════════════════════════════════╝
```

(Colors appear in terminals that support ANSI escape codes)

## Development

```bash
# Run in development mode (auto-reloads)
npm run watch

# Build for production
npm run build

# Run the built version
node dist/index.js
```

## Troubleshooting

### "PIHOLE_URL and PIHOLE_PASSWORD environment variables are required"
Ensure both environment variables are set in your MCP config.

### "Authentication failed"
Your app password is invalid or expired. Generate a new one from Pi-hole Settings > API.

### "API request failed: 401"
Session expired. The server will automatically re-authenticate, but if issues persist, check your password.

### Connection refused
Ensure Pi-hole is running and the URL is correct. Check that you can access the Pi-hole web interface from your machine.

## Contributing

Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

## License

MIT License - see [LICENSE](LICENSE) for details.

## Links

- [Pi-hole](https://pi-hole.net)
- [Pi-hole Documentation](https://docs.pi-hole.net)
- [Model Context Protocol](https://modelcontextprotocol.io)
- [MCP Specification](https://modelcontextprotocol.io/specification)

