mcpField
🍓
🍓 pihole-mcp-serer

🍓 pihole-mcp-serer

本地服务
modelcontextprotocol.io安全1067 周前更新

关于 🍓 pihole-mcp-serer

pihole-mcp-serer 通过 MCP 向 AI 助手提供 Pi-hole DNS 配置和查询信息,并支持配置多个 Pi-hole 实例。它还提供实例信息及工具类别相关资源。

主要功能

  1. 01列出并编辑本地 DNS 记录
  2. 02读取近期 DNS 查询和活动数据
  3. 03支持主 Pi-hole 与次级实例
  4. 04提供实例和工具类别资源

适用场景

  1. 01查看多个 Pi-hole 实例的本地 DNS 记录
  2. 02添加或删除本地 A 和 CNAME 记录
  3. 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 完成初始设置。

配置扩展
  1. 输入 goose configure 打开配置菜单。
  2. 选择 Add Extension
  3. 选择 Remote Extension
  4. 系统会要求输入名称。名称随意。我将它命名为 pihole-mcp。
  5. 当系统询问 "What is the SSE endpoint URI?" 时,输入 http://localhost:8383/sse。
  6. 输入超时时间。
  7. 如有需要,添加描述。
  8. 当系统询问环境变量时,选择 No。 配置截图
开始会话

安装服务后,启动一个聊天会话。

goose session

试着询问它:"我的本地 DNS 记录有哪些?"

本地 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"
      ]
    }
  }
}

之后,完全重启应用并试用。

Claude DNS 信息

Claude 查询信息

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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