Back to MCP directory
publicPublicdnsLocal runtime

mcp-pihole

一个MCP服务器,可将AI助手连接到Pi-hole网络广告拦截器,实现通过自然语言管理DNS拦截、查看统计、控制黑白名单等功能。

article

README

🚀 MCP Pi-hole 服务器

MCP(模型上下文协议)服务器,可将 Claude 等 AI 助手连接到你的 Pi-hole 全网广告拦截器。通过自然语言管理 DNS 拦截、查看统计信息、控制白名单/黑名单等。

🚀 快速开始

如果你在网络中运行 Pi-hole,此 MCP 服务器允许你:

  • 监控 DNS 流量:查看查询统计信息、顶级被拦截域名和客户端活动。
  • 控制拦截:立即启用/禁用 Pi-hole 拦截,或设置定时器。
  • 管理列表:无需打开 Web 界面,即可在白名单和黑名单中添加或删除域名。
  • 查看查询日志:查看包含详细信息的近期 DNS 查询。
  • 维护 Pi-hole:更新重力(拦截列表)并刷新 DNS 缓存。

✨ 主要特性

| 类别 | 工具 | |------|------| | 统计信息 | 查询总数、拦截百分比、顶级域名、顶级客户端 | | 拦截控制 | 启用、禁用(可选定时器)、检查状态 | | 域名列表 | 白名单/黑名单的增删改查操作 | | 查询日志 | 包含客户端、状态、响应时间的近期 DNS 查询 | | 维护 | 更新重力、刷新缓存 | | 可视化 | 带有 ANSI 颜色的 ASCII 艺术仪表盘和条形图 |

📦 安装指南

选项 1:从 npm 安装(推荐)

npx mcp-pihole-server

或者全局安装:

npm install -g mcp-pihole-server

选项 2:克隆并构建

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

📚 详细文档

配置

1. 获取你的 Pi-hole 应用密码

  1. 打开你的 Pi-hole Web 界面。
  2. 转到设置 > API。
  3. 生成新的应用密码。
  4. 复制密码(仅显示一次)。

2. 配置你的 MCP 客户端

对于 Claude 桌面版

添加到你的 Claude 桌面版配置文件:

  • macOS~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows%APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "pihole": {
      "command": "npx",
      "args": ["-y", "mcp-pihole-server"],
      "env": {
        "PIHOLE_URL": "http://your-pihole-address:8080",
        "PIHOLE_PASSWORD": "your-app-password"
      }
    }
  }
}
对于 Claude 代码版

添加到 ~/.claude.json

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

环境变量

| 变量 | 描述 | 示例 | |------|------|------| | PIHOLE_URL | Pi-hole Web 界面 URL | http://pihole.local:8080 | | PIHOLE_PASSWORD | Pi-hole 应用密码 | 你从设置中获取的应用密码 |

可用工具

统计信息

  • pihole_get_stats - 获取全面的 Pi-hole 统计信息。
  • pihole_get_top_blocked - 获取顶级被拦截域名。
  • pihole_get_top_permitted - 获取顶级允许域名。
  • pihole_get_top_clients - 按查询数量获取顶级客户端。
  • pihole_get_query_log - 获取近期 DNS 查询。

拦截控制

  • pihole_get_blocking_status - 检查拦截是否启用。
  • pihole_enable_blocking - 启用 DNS 拦截。
  • pihole_disable_blocking - 禁用拦截(可选定时器)。

域名管理

  • pihole_get_whitelist - 列出所有白名单域名。
  • pihole_get_blacklist - 列出所有黑名单域名。
  • pihole_add_to_whitelist - 将域名添加到白名单。
  • pihole_add_to_blacklist - 将域名添加到黑名单。
  • pihole_remove_from_whitelist - 从白名单中移除域名。
  • pihole_remove_from_blacklist - 从黑名单中移除域名。

维护

  • pihole_update_gravity - 更新拦截列表(重力)。
  • pihole_flush_cache - 刷新 DNS 缓存。

ASCII 可视化

此服务器支持使用 ANSI 转义码直接在终端中渲染彩色 ASCII 艺术可视化效果。

支持的工具

以下工具支持可选的 visualize: true 参数: | 工具 | 可视化效果 | |------|------| | pihole_get_stats | 包含摘要统计信息、顶级客户端、被拦截域名和允许域名的完整仪表盘。 | | pihole_get_top_blocked | 被拦截域名的红色条形图。 | | pihole_get_top_permitted | 允许域名的绿色条形图。 | | pihole_get_top_clients | 客户端活动的蓝色条形图。 |

使用方法

visualize: true 传递给任何支持的工具:

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

visualize 未设置或为 false 时,工具像往常一样返回 JSON 数据。

示例输出

╔════════════════════════════════════════════════════════════════════════════╗
║                         🛡️  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%)      ║
╚════════════════════════════════════════════════════════════════════════════╝

(颜色会在支持 ANSI 转义码的终端中显示)

开发

# 在开发模式下运行(自动重新加载)
npm run watch

# 为生产环境构建
npm run build

# 运行构建后的版本
node dist/index.js

故障排除

"PIHOLE_URL 和 PIHOLE_PASSWORD 环境变量是必需的"

确保在你的 MCP 配置中设置了这两个环境变量。

"身份验证失败"

你的应用密码无效或已过期。从 Pi-hole 设置 > API 生成新的密码。

"API 请求失败:401"

会话已过期。服务器将自动重新进行身份验证,但如果问题仍然存在,请检查你的密码。

连接被拒绝

确保 Pi-hole 正在运行,并且 URL 正确。检查你是否可以从你的机器访问 Pi-hole Web 界面。

💻 使用示例

配置完成后,你可以通过自然语言与 Pi-hole 进行交互:

查看统计信息

"显示 Pi-hole 统计信息"

"顶级被拦截域名有哪些?"

"哪些客户端发起的查询最多?"

控制拦截

"Pi-hole 拦截是否已启用?"

"禁用 Pi-hole 5 分钟"

"重新启用 Pi-hole 拦截"

管理域名列表

"将 example.com 添加到白名单"

"阻止 ads.trackersite.com"

"显示所有白名单域名"

查看查询日志

"显示最后 50 条 DNS 查询"

"我的手机查询了哪些域名?"

可视化仪表盘

"显示带有可视化的 Pi-hole 统计信息"

"获取带有可视化的顶级被拦截域名"

📄 许可证

本项目采用 MIT 许可证,详情请参阅 LICENSE

🔗 链接

help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client