关于 🍓 pihole-mcp-serer
pihole-mcp-serer 通过 MCP 向 AI 助手提供 Pi-hole DNS 配置和查询信息,并支持配置多个 Pi-hole 实例。它还提供实例信息及工具类别相关资源。
主要功能
- 01列出并编辑本地 DNS 记录
- 02读取近期 DNS 查询和活动数据
- 03支持主 Pi-hole 与次级实例
- 04提供实例和工具类别资源
适用场景
- 01查看多个 Pi-hole 实例的本地 DNS 记录
- 02添加或删除本地 A 和 CNAME 记录
- 03检查近期 DNS 查询活动
MCP 相关
它通过 MCP 向客户端提供 Pi-hole 资源和工具,包括本地 DNS 配置与查询指标。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
🍓 pihole-mcp-serer
Pi-hole 的模型上下文协议(MCP)服务。此服务将 Pi-hole 功能作为工具提供,供 AI 助手使用。
依赖项
Docker
uv(可选,用于开发)
如果要在本地运行应用,请使用 uv。使用你选择的包管理器安装它。
环境
在项目根目录中创建一个 .env 文件,填写 Pi-hole 凭据:
# Primary Pi-hole (required)
PIHOLE_URL=https://your-pihole.local/
PIHOLE_PASSWORD=your-admin-password
#PIHOLE_NAME=Primary # optional, defaults to URL if unset
# Secondary Pi-hole (optional)
#PIHOLE2_URL=https://secondary-pihole.local/
#PIHOLE2_PASSWORD=password2
#PIHOLE2_NAME=Secondary # optional
# Up to 4 Pi-holes:
#PIHOLE3_URL=...
#PIHOLE3_PASSWORD=...
#PIHOLE3_NAME=...
#PIHOLE4_URL=...
#PIHOLE4_PASSWORD=...
#PIHOLE4_NAME=...
项目结构
项目采用模块化组织,以便更好地维护:
/
├── main.py # Main application entry point
├── tools/ # Pi-hole tools organized by functionality
│ ├── __init__.py
│ ├── config.py # Configuration-related tools (DNS settings)
│ └── metrics.py # Metrics and query-related tools
├── resources/ # MCP resources
│ ├── __init__.py
│ └── common.py # Common resources (piholes://, version://)
├── docker-compose.yml # Docker Compose configuration for production
├── docker-compose.dev.yml # Docker Compose for development with volume mounts
└── Dockerfile # Docker build configuration
这种结构将代码拆分为逻辑组件,同时保持与所有运行模式的兼容性。
运行服务
有几种方式可以运行 Pi-hole MCP 服务:
使用 Docker(生产环境推荐)
# Standard deployment
docker-compose up -d
服务将在 http://localhost:8383 上提供
使用 Docker 的开发模式
开发时,使用会在本地构建的 dev compose 文件:
docker-compose -f docker-compose.dev.yml up
MCP Inspector
你可以使用 uv 和 mcp CLI 运行 MCP Inspector:
uv run mcp dev main.py
这将在 http://localhost:6274 启动一个交互式界面,你可以在其中测试工具和资源。
API
此 MCP 服务提供以下资源和工具:
资源
piholes://:返回所有已配置 Pi-hole 的信息version://:返回 MCP 服务版本list-tools://:返回工具类别列表list-tools://{category}:返回指定类别中的工具列表
工具
每次工具调用都会以字典列表的形式返回结果,结构如下:
[
{
"pihole": "Pi-hole Name",
"data": [...] # Result data from this Pi-hole
},
...
]
配置
list_local_dns:列出所有 Pi-hole 中的本地 DNS 设置add_local_a_record:向 Pi-hole 添加本地 A 记录。add_local_cname_record:向 Pi-hole 添加本地 CNAME 记录。remove_local_a_record:移除某个主机名的所有 A 记录。remove_local_cname_record:移除某个主机名的所有 CNAME 记录。
指标
list_queries:获取 Pi-hole 中最近的 DNS 查询历史记录list_query_suggestions:获取查询筛选建议list_query_history:获取一段时间内查询活动图表的数据
在 goose 中测试
Goose 是一个适用于测试和开发的 CLI 大模型客户端。请按照这里的安装说明操作。
以下内容假设你已通过 goose configure 完成初始设置。
配置扩展
- 输入
goose configure打开配置菜单。 - 选择 Add Extension
- 选择 Remote Extension
- 系统会要求输入名称。名称随意。我将它命名为
pihole-mcp。 - 当系统询问 "What is the SSE endpoint URI?" 时,输入
http://localhost:8383/sse。 - 输入超时时间。
- 如有需要,添加描述。
- 当系统询问环境变量时,选择 No。

开始会话
安装服务后,启动一个聊天会话。
goose session
试着询问它:"我的本地 DNS 记录有哪些?"

……或者告诉它:"显示我最近的 DNS 查询。"

Claude Desktop
Claude 桌面客户端目前仅支持 STDIO 协议,但你可以使用代理与 SSE 端点通信。
将以下内容添加到你的 claude_desktop_config.json 文件中。
{
"mcpServers": {
"pihole": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8383/sse"
]
}
}
}
如果要连接本地网络上的其他主机,并且使用未加密的连接,则需要通过 --allow-http 参数显式允许。例如:
{
"mcpServers": {
"pihole": {
"command": "npx",
"args": [
"mcp-remote",
"http://192.168.1.255:8383/sse",
"--allow-http"
]
}
}
}
之后,完全重启应用并试用。


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