家庭实验室监控控制面板

一个为Claude等MCP兼容客户端提供只读访问家庭实验室基础设施的监控控制面板,支持实时容器状态、Prometheus指标、日志和API查询。

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

使用说明

labops mcp

一个个人项目,灵感来自观看NetworkChuck演示MCP与Claude的集成。我已经在用Claude、Obsidian和其他工具记录我的家庭实验室了——他的视频让我意识到,我可以构建自己的MCP,让Claude直接访问我的家庭实验基础设施。

事实证明你可以。此MCP服务器允许Claude(或任何兼容MCP的客户端)以只读方式访问您的homeab-实时容器状态、Prometheus指标、日志、API查询-所有这些都无需离开对话。

之前的工作流程:提问→ 被告知运行命令→ 复制输出→ 将其粘贴回去→ 等待分析。

现在的工作流程:提问→ 克劳德自己去找答案。

在构建时考虑了安全性:受限制的shell用户、SSH密钥认证、设计为只读。模块化配置意味着添加新的主机或API只需要几行YAML。

这是版本2,我试图让它在所有事情上都保持精简和高效。如果您有任何问题或反馈,请随时提出问题或联系我们。

特性

  • 配置驱动:所有主机、API和身份验证都在一个YAML文件中
  • 自动发现:便利工具按类型查找服务(Prometheus、Ollama、Glances)
  • 设计安全:通过rbash+sudoers进行操作系统级限制,而不是代码逻辑
  • 优雅的失败:缺少的服务返回有用的消息,而不是崩溃

支持服务列表

这些服务具有专用身份验证处理或便利工具的原生支持:

服务 身份验证类型 便利工具
普罗米修斯 - prom_query(), homelab_alerts()
正常运行时间Kuma basic homelab_alerts()
Ollama - ollama_models()
一瞥 - system_stats()
Synology DSM synology nas_info(), nas_storage(), nas_disks(), nas_utilisation()
NUT(UPS) - 自动发现 homelab_status()
声纳/雷达/Prowlarr api_key -
Jellyfin/Emby emby -
伊米奇 immich -
Proxmox pve -
家庭助理 bearer -
伯爵 bearer -
Portainer api_key -

任何其他REST API都可以添加 auth_type: bearer, api_key,或 custom.

工具

核心

工具 目的
ssh_exec(host, command) 在Linux主机上运行只读命令
api_get(service, endpoint, filter?) 使用可选的jq过滤查询REST API
health() 检查与所有已配置主机/服务的连接
homelab_status() 快速仪表板:主机、UPS、API一目了然

容器

工具 目的
container_logs(host, container, lines?) 从容器中获取最近的日志
search_logs(host, pattern, lines?) 在主机上的所有容器中搜索日志
container_mounts(host, container) 显示容器的体积/绑定安装
container_status(host, container) 健康检查:运行状态、正常运行时间、重启
containers_recent_restarts(host, hours?) 列出最近重新启动的容器

诊断

工具 目的
trigger_diagnostic(name) 触发预定义的n8n诊断webhook

监控(按类型自动发现)

工具 目的 需要
prom_query(query) 执行PromQL查询 type: prometheus
homelab_alerts() 普罗米修斯+正常运行时间Kuma发出警报 type: prometheus 和 type: uptime-kuma
ollama_models(host?) 列出型号+VRAM使用情况 type: ollama
system_stats(host?) Glances的CPU/内存/磁盘/GPU type: glances

NAS(按类型自动发现)

工具 目的 需要
nas_info(host?) Synology DSM系统信息 type: synology
nas_storage(host?) 卷状态和使用情况 type: synology
nas_disks(host?) 磁盘运行状况和SMART状态 type: synology
nas_utilisation(host?) CPU、内存、网络利用率 type: synology

系统

工具 目的
get_paths() 显示清单中配置的文件系统路径
disk_usage(host) 出现高使用率警告的磁盘使用率(>85%)
top_processes(host, n?) CPU和内存消耗最高的进程
service_status(host, service) 带有最近日记账分录的系统服务状态

安全

工具 目的
security_audit(host?) 审计安全态势和风险

快速开始

1.克隆并生成SSH密钥

git clone https://github.com/brenflakes/labops-mcp
cd labops-mcp
./setup/setup-mcp.sh

2.设置每个Linux主机

./setup/setup-host.sh 'ssh-ed25519 AAAA... your-public-key'

3.配置

cp config/inventory.example.yml config/inventory.yml
cp .env.example .env
# Edit both files with your hosts and API tokens

4.部署

docker-compose up -d

5.身份验证(可选但推荐)

labops-mcp支持承载令牌身份验证。启用后,所有MCP请求都必须包含有效的 Authorization: Bearer <token> 头球认证是 默认情况下禁用 --如果 MCP_AUTH_TOKEN 如果未设置,则允许所有请求。

生成令牌:

openssl rand -hex 32

添加到您的 .env:

MCP_AUTH_TOKEN=your-generated-token

重建:

docker-compose up -d --build

克劳德桌面版 (通过mcp远程):

{
  "mcpServers": {
    "labops": {
      "command": "npx",
      "args": [
        "mcp-remote", "http://YOUR-MCP-IP:8100/sse",
        "--allow-http",
        "--header", "Authorization:Bearer ${MCP_AUTH_TOKEN}"
      ],
      "env": {
        "MCP_AUTH_TOKEN": "your-generated-token"
      }
    }
  }
}

Windows用户: mcp遥控器 --header 旗帜以素色断裂 npx 由于空间 C:\Program Files.使用 cmd /c 作为命令包装器:

{
  "command": "cmd",
  "args": ["/c", "npx", "mcp-remote", "http://YOUR-MCP-IP:8100/sse", "--allow-http", "--header", "Authorization:Bearer YOUR-TOKEN"]
}

克劳德代码:

claude mcp add --transport sse labops http://YOUR-MCP-IP:8100/sse --header "Authorization: Bearer your-generated-token"

无身份验证 (不建议用于生产):

{
  "mcpServers": {
    "labops": {
      "command": "npx",
      "args": ["mcp-remote", "http://YOUR-MCP-IP:8100/sse", "--allow-http"]
    }
  }
}

重要提示:

  • 认证是在MCP协议级别强制执行的,而不是HTTP。这 /sse 端点接受连接而不管——在工具调用和列表操作上检查auth。
  • 更换后务必重新启动容器 MCP_AUTH_TOKEN现有的上交所会议不受影响 .env 更改直到重新启动。

配置

身份验证类型

这 auth_type 字段决定如何发送令牌:

auth_type 标头格式 服务
bearer Authorization: Bearer {token} 家庭助理,Grafana
api_key X-Api-Key: {token} 索纳尔、拉达、普罗瓦尔、波提纳
emby X-Emby-Token: {token} 埃姆比,杰利芬
pve Authorization: PVEAPIToken={token} Proxmox
immich x-api-key: {token} 伊米奇
basic Authorization: Basic base64({token}) 正常运行时间Kuma
synology 基于会话(SYNO.API.Auth) Synology DSM
custom {auth_header}: {token} 还有别的吗

服务类型

这 type 字段允许自动发现方便的工具:

类型 启用 命名约定
prometheus prom_query(), homelab_alerts() 任何名字
uptime-kuma homelab_alerts() 任何名字
ollama ollama_models(host) ollama-{hostname}
glances system_stats(host) glances-{hostname}
synology nas_info(), nas_storage(), nas_disks(), nas_utilisation() synology-{hostname}

例子:

ollama-host1:
  url: http://192.168.1.100:11434
  auth: false
  type: ollama

glances-host2:
  url: http://192.168.1.100:61208
  auth: false
  type: glances

uptime-kuma:
  url: http://192.168.1.100:3002
  auth: true
  auth_type: basic
  token_env: KUMA_TOKEN    # Format in .env: username:password
  type: uptime-kuma

然后拨打: ollama_models(host="host1") 或 system_stats(host="host2")

⚠️ 安全通知

此工具公开了对基础架构的只读访问。 docker inspect 将揭示容器环境变量(密码、API密钥等)。

重要提示: 确保所有 .env 主机上的文件是 chmod 600 (仅限所有者)。没有这个,SSH用户可以读取主机上的每个凭据。

chmod 600 /path/to/your/.env

阅读 安全.md 在部署之前。

文档

许可证

麻省理工学院