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.sh2.设置每个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 tokens4.部署
docker-compose up -d5.身份验证(可选但推荐)
labops-mcp支持承载令牌身份验证。启用后,所有MCP请求都必须包含有效的 Authorization: Bearer 头球认证是 默认情况下禁用 --如果 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作为命令包装器: ``json { "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 在部署之前。
文档
许可证
麻省理工学院
