家庭实验室监控服务器

一个基于模型上下文协议(MCP)的家庭实验室基础设施监控服务器,提供AI助手实时访问服务器健康指标、网络统计、容器状态和路由器信息。

  • by spencewood
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 spencewood/home-mcp

使用说明

家庭MCP服务器

A. 模型上下文协议(MCP) 用于家庭实验室基础设施监控的服务器。为AI助手提供对服务器健康指标、网络统计数据、容器状态和路由器信息的实时访问。

特性

网络数据集成

  • 多服务器监控:查询多个运行Netdata的家庭实验室服务器
  • 系统度量:CPU、RAM、磁盘使用率和历史数据
  • 网络统计:接口带宽、数据包、错误和绑定信息
  • 集装箱监控:Docker容器发现和资源跟踪

MikroTik路由器集成

  • 系统资源:CPU、内存、正常运行时间和温度
  • 网络接口:状态、流量统计和绑定配置
  • dhcp租约:查看所有活动的DHCP分配
  • 流量统计:接口级流量监控

Dozzle日志监控

  • 多主机容器日志:跨所有受监视主机查询容器
  • 集中式日志访问:分布式容器日志的单个API终结点
  • 历史日志检索:从任何容器中获取完整的日志历史记录
  • 高级过滤:时间范围查询、正则表达式模式匹配、日志级过滤
  • 容器发现:列出所有包含运行状况和状态信息的容器

自定义网络数据插件

包括专门服务的监控插件:

  • reth_monitor:以太坊执行客户端监控
  • 灯塔_监视器:以太坊共识客户端监控
  • 八位字节监视器:Tezos节点监控
  • 氦监测仪:氦气网络监测
  • earnings_monitor:加密货币收益跟踪

先决条件

  • Python 3.11+
  • Docker和Docker Compose(用于容器化部署)
  • 在受监控的服务器上运行的Netdata
  • 具有API访问权限的MikroTik路由器(可选)
  • 用于容器日志监控的Dozzle实例(可选)

安装

1.克隆存储库

git clone <repository-url>
cd home-mcp

2.配置服务器

复制示例配置并对其进行自定义:

cp config.example.json config.json

编辑 config.json 您的服务器详细信息:

{
  "servers": {
    "your-server": {
      "netdata_url": "http://your-server.local:19999",
      "role": "compute",
      "description": "Your server description",
      "hardware_notes": "Hardware specs"
    }
  },
  "mikrotik": {
    "enabled": true,
    "model": "RouterBoard Model",
    "host": "192.168.x.x",
    "port": 8728,
    "username": "mcp-read",
    "password": "YOUR_PASSWORD_HERE"
  },
  "dozzle": {
    "enabled": true,
    "url": "http://your-server.local:8080",
    "description": "Dozzle master instance for container log monitoring"
  }
}

3.使用Docker进行部署

docker-compose up -d

或者手动构建并运行:

docker build -t home-mcp .
docker run -d \
  --name home-mcp \
  --network host \
  -v $(pwd)/config.json:/app/config.json:ro \
  home-mcp

4.地方发展

pip install -r requirements.txt
python server.py

可用工具

服务器监控

  • get_all_servers_overview:所有已配置服务器的运行状况概述
  • get_server_health:特定服务器(CPU、RAM、磁盘)的详细运行状况统计数据
  • get_network_stats:具有可配置时间范围的网络接口统计
  • list_containers:列出服务器上的所有Docker容器
  • get_container_stats:容器的CPU和内存统计信息

路由器监控(MikroTik)

  • get_mikrotik_interfaces:所有具有状态和流量的网络接口
  • get_mikrotik_resources:系统资源(CPU、内存、正常运行时间、温度)
  • get_mikrotik_dhcp_leases:所有DHCP租约信息
  • get_mikrotik_traffic:接口流量统计和绑定信息

集装箱日志监控(Dozzle)

  • get_dozzle_hosts:列出Dozzle监控的所有主机及其容器计数
  • get_dozzle_containers:列出主机上的所有容器及其状态和运行状况
  • get_dozzle_container_logs:使用高级筛选获取历史日志:
    • 时间范围查询(RFC3339格式的从/到时间戳)
    • 正则表达式模式匹配(特定于过滤器的日志内容)
    • 日志级过滤(错误、警告、信息等)
    • 可配置尾部(要返回的最新行数)

MCP客户端配置

克劳德桌面

添加到您的Claude Desktop配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):

{
  "mcpServers": {
    "home-mcp": {
      "command": "docker",
      "args": [
        "exec",
        "-i",
        "home-mcp",
        "python",
        "server.py"
      ]
    }
  }
}

其他MCP客户端

通过stdio传输连接。服务器使用MCP协议通过标准输入/输出进行通信。

Netdata插件安装

要在受监控的服务器上安装自定义Netdata插件,请执行以下操作:

cd netdata-plugins
sudo ./install.sh

这将把插件复制到 /usr/libexec/netdata/python.d/ 并重新启动Netdata。

安全考虑

  • 只读访问:建议对MikroTik API使用只读凭据
  • 网络隔离:考虑在专用监控网络上运行
  • 配置文件权限:保护 config.json 包含凭据
  • 防火墙规则:确保Netdata(端口19999)只能从受信任的网络访问

故障排除

连接问题

如果MCP服务器无法访问Netdata实例:

  • 验证Netdata是否正在运行: http://server:19999
  • 检查受监控服务器上的防火墙规则
  • 测试连接性: curl http://server:19999/api/v1/info

MikroTik API问题

  • 确保在路由器上启用API服务
  • 验证凭据和网络连接
  • 检查端口(默认8728为普通端口,8729为SSL端口)

Dozzle连接问题

  • 验证Dozzle是否可用: http://your-server:8080
  • 对于代理模式,确保代理在远程主机上运行(默认端口7007)
  • 测试SSE端点: curl http://your-server:8080/api/events/stream
  • 检查Docker是否正在捕获容器日志

Docker问题

查看日志:

docker logs home-mcp

重新启动容器:

docker-compose restart

建筑

+-------------------+
|   MCP Client      |
|  (Claude, etc.)   |
+--------+----------+
         |
         | stdio
         |
+--------v----------+
|   Home MCP        |
|    Server         |
+----+--------+-----+
     |        |     |
     |        |     |
     v        v     v
+----+----+  +--+---+---+  +--------+
| Netdata |  | MikroTik |  | Dozzle |
| Servers |  |  Router  |  | Master |
+---------+  +----------+  +----+---+
                                |
                         +------+------+
                         |             |
                     +---v---+     +---v---+
                     | Agent |     | Agent |
                     | Host1 |     | Host2 |
                     +-------+     +-------+