mcpField
P
Pi-hole MCP Server

Pi-hole MCP Server

本地服务
github.com/ranklancer安全31 周前更新

关于 Pi-hole MCP Server

Pi-hole MCP Server 将 MCP 兼容助手连接到 Pi-hole v6,适用于家庭实验室用户和网络管理员。它通过单个端点管理多个实例,并提供 DNS 过滤、分组、客户端、本地 DNS 和统计功能。

主要功能

  1. 01管理多个 Pi-hole 实例
  2. 02查看查询日志和统计数据
  3. 03创建和编辑允许或拒绝列表
  4. 04管理分组、客户端和 DNS 记录
  5. 05控制拦截并重新加载 gravity
  6. 06检测可能分类错误的正则规则

适用场景

  1. 01查看多个实例拦截的查询
  2. 02通过助手允许或拒绝域名
  3. 03管理 DNS 分组和客户端分配
  4. 04比较 Pi-hole 统计数据

MCP 相关

它将 Pi-hole v6 操作作为 MCP 工具提供,包括日志、列表、分组、客户端、拦截、本地 DNS 和统计数据。支持 stdio 和 Streamable HTTP 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"ranklancer-pihole": {
"command": "npx",
"args": [
"-y",
"@ranklancer/pihole-mcp"
],
"env": {
"PIHOLE_INSTANCES": "<PIHOLE_INSTANCES>",
"PIHOLE_BASE_URL": "<PIHOLE_BASE_URL>",
"PIHOLE_PASSWORD": "<PIHOLE_PASSWORD>"
}
}
}
}
启动命令npx -y @ranklancer/pihole-mcp
需要配置的环境变量
PIHOLE_INSTANCESComma-separated list of Pi-hole instance names (e.g. 'pihole' or 'primary,secondary')
PIHOLE_BASE_URLBase URL of your first Pi-hole instance (e.g. 'http://192.168.1.100')
PIHOLE_PASSWORD密钥API password for your first Pi-hole instance

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@ranklancer/pihole-mcp0.2.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

pihole-mcp

License: MIT Node.js Pi-hole v6 MCP

一个 MCP(Model Context Protocol) 服务,可让 Claude 等 AI 助手全面控制你的 Pi-hole v6 DNS 广告拦截器,包括查询日志、允许/拒绝列表、分组管理、Gravity 重新加载和统计信息。本项目从一开始就针对多实例部署设计:通过单个 MCP 端点管理一个或多个 Pi-hole 实例。

为什么使用它?

Pi-hole 的管理 API 功能强大,但不便于编写脚本。本 MCP 服务将每项 Pi-hole API 操作都封装为工具,任何兼容 MCP 的 AI 助手都可以直接调用。无需在管理界面中逐项点击或编写 curl 命令,只需让 AI 检查拦截情况、将域名加入允许列表,或比较多个实例的统计信息。

非常适合运行多个 Pi-hole(主用 + 备用,或按 VLAN 划分)的 homelab 玩家、大规模管理 DNS 过滤的网络管理员,以及希望借助 AI 管理 DNS 的任何人。

功能特性

  • 多实例支持 - 通过环境变量配置 1 到 N 个 Pi-hole 实例
  • 全面覆盖 Pi-hole v6 API - 查询日志、允许/拒绝列表(完整 CRUD)、分组和客户端管理、拦截控制、本地 DNS(A + CNAME)记录、Gravity 重新加载、统计信息
  • 智能正则表达式检测 - 根据元字符分析,自动将域名路由至精确匹配列表或正则表达式列表
  • 正则表达式隐患检测器 - 查找看起来应该使用正则表达式的精确拒绝条目(分类错误的规则)
  • 支持 Docker - 多阶段 Dockerfile,包含非 root 用户、健康检查和安全加固
  • Streamable HTTP 或 stdio 传输 - 可作为长期运行的 HTTP 服务,也可由 MCP 客户端按需启动
  • 支持 Docker secrets - 可通过环境变量或 /run/secrets/ 文件提供密码

快速开始

Docker(推荐)
git 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 -d
Node.js
npm install
npm run build
export PIHOLE_INSTANCES=pihole
export PIHOLE_BASE_URL=http://pihole.example.com
export PIHOLE_PASSWORD=your-password
npm start
本地按需启动(stdio,无需 Docker)

MCP 客户端需要时会将服务作为子进程启动,并通过 stdin/stdout 与其通信。不会开放端口,也不会有程序在后台持续运行。

npm ci
npm run build
cp .env.example .env
chmod 600 .env
# Edit .env with your Pi-hole URL(s) and password(s)

将其注册到 Claude Code(用户范围):

claude mcp add --scope user pihole -- bash -c \
  'set -a; . ~/path/to/pihole-mcp/.env; set +a; MCP_TRANSPORT=stdio exec node ~/path/to/pihole-mcp/dist/index.js'

或者手动添加到 MCP 客户端配置中:

{
  "mcpServers": {
    "pihole": {
      "type": "stdio",
      "command": "bash",
      "args": ["-c", "set -a; . ~/path/to/pihole-mcp/.env; set +a; MCP_TRANSPORT=stdio exec node ~/path/to/pihole-mcp/dist/index.js"]
    }
  }
}

stdio 模式下会忽略 .env 中的 HOST 和 PORT。

配置

所有配置均通过环境变量完成。完整参考请参见 .env.example。

单实例
PIHOLE_INSTANCES=pihole
PIHOLE_BASE_URL=http://192.0.2.100
PIHOLE_PASSWORD=your-password
多实例
PIHOLE_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=true

对于 PIHOLE_INSTANCES 中的每个实例名称,请提供:

变量必填描述
<NAME>_BASE_URL是Pi-hole 基础 URL(例如 http://pihole.local)
<NAME>_PASSWORD是Pi-hole API 密码(也可使用 Docker secrets)
<NAME>_INSECURE_TLS否自签名证书设为 true(默认:false)

支持将 Docker secrets 作为备用方式:/run/secrets/<name>_password(小写)。

可用的 MCP 工具

工具描述
pihole_query_log获取带筛选条件的查询日志(数量上限、时间范围、客户端 IP 或名称、域名、状态)
pihole_allow_domain添加到允许列表(自动检测精确匹配或正则表达式)
pihole_deny_domain添加到拒绝列表(自动检测精确匹配或正则表达式)
pihole_list_allowlist列出所有允许列表条目(合并精确匹配和正则表达式)
pihole_list_denylist列出所有拒绝列表条目(合并精确匹配和正则表达式)
pihole_stats_summary获取 Pi-hole 统计摘要
pihole_reload_lists触发 gravity 重新加载
pihole_group_management对 Pi-hole 分组执行 CRUD 操作
pihole_client_management对 Pi-hole 客户端及其分组分配执行 CRUD 操作
pihole_check_regex_types检测拒绝列表精确匹配项中分类错误的正则表达式
pihole_set_blocking启用/禁用拦截,可选自动恢复计时器
pihole_domain_management更新或删除允许/拒绝域名(补全 CRUD)
pihole_local_dns列出/添加/删除本地 DNS A 记录
pihole_local_cname列出/添加/删除本地 CNAME 记录

每个工具都接受可选的 instance 参数,用于指定目标 Pi-hole。默认使用第一个已配置的实例。

连接到 MCP 客户端

本节适用于 HTTP 传输(Docker 或 npm start)。关于 stdio,请参阅按需本地运行。

服务监听 http://HOST:PORT/mcp(默认:http://localhost:3000/mcp)。HTTP 端点没有身份验证,因此请确保它仅绑定到 localhost 或受信任的网络。

Claude Desktop / Claude Code

将以下内容添加到 MCP 设置中:

{
  "mcpServers": {
    "pihole": {
      "url": "http://localhost:3031/mcp"
    }
  }
}

健康检查

curl http://localhost:3031/health
# {"ok":true,"service":"pihole-mcp","version":"0.3.0"}

开发

npm install
npm run dev     # Watch mode — recompiles on save
npm start       # Run the server

要求

  • Node.js >= 20
  • Pi-hole v6,并已启用 API 访问
  • 可连接到 Pi-hole 实例的网络

相关项目

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。