homelib
Homelab库存服务从多个来源收集基础设施数据,并通过web UI、JSON API和MCP服务器提供统一的视图。
Homelib将Proxmox、Tailscale、Hetzner Cloud、Komodo和UniFi的主机、服务、网络和容量数据聚合到一个SQLite数据库中。它通过以下方式作为Tailscale节点运行 终端交换网络 --不需要反向代理或身份验证层。
注: 这是一个为我自己的家庭实验室建立的个人副项目。它按原样发布,可能看不到定期更新或主动维护。
Claude using homelib's MCP tools for capacity planning
特性
- 多源采集 -Proxmox(SSH)、Tailscale(本地+控制平面API)、Hetzner Cloud、Komodo、UniFi
- MCP服务器 --通过以下方式集成AI/代理的13个工具 模型上下文协议,可从Claude、Claude Code或任何MCP客户端使用
- 网页用户界面 --仪表板、主机浏览器、服务、网络、Tailscale ACL查看器、容量规划器
- 应用程序接口 -具有过滤和搜索功能的完整REST API
- 主机合并 --对从多个来源发现的主机进行重复数据消除和合并
- 交叉引用 --验证跨源的区域分配,生成不匹配的发现
- 产能规划 --使用可用容量和区域聚合进行每节点CPU/内存分配跟踪
- 角色充实 --通过配置为主机标记基础设施角色和应用程序类别
- 插件系统 --使用输出JSON的自定义脚本(本地或SSH)扩展集合
- 预定收款 --基于Cron的可配置保留
- 优雅降级 --失败的收集器不会阻止其他收集器
截图
| 主机 | 容量 | 尾标ACL |
|---|---|---|
| Hosts | Capacity | Tailscale ACL Dataflows |
MCP服务器
Homelib公开了一个 模型上下文协议 服务器在 /mcp (流式HTTP)。这让人工智能助手可以直接查询您的基础设施——询问容量、查找主机、在库存中搜索或触发集合。
| 工具 | 说明 |
|---|---|
list_hosts | 列出具有筛选功能的主机 |
get_host | 按名称列出的主机详细信息 |
list_services | Docker服务,按主机/堆栈过滤 |
list_networks | UniFi网络/VLAN |
get_acl_policy | Tailscale ACL策略 |
get_dns_config | 尾标DNS配置 |
get_routes | 尾标子网路由和出口节点 |
list_findings | 按来源/严重程度列出的基础设施调查结果 |
get_summary | 高级库存统计 |
search_inventory | 所有数据的自由文本搜索 |
get_collection_status | 当前/最新收款状态 |
trigger_collection | 启动新收藏 |
get_capacity | 按节点/区域列出的容量报告 |
与克劳德一起使用
要将homelib的MCP服务器与Claude.ai或其他远程MCP客户端一起使用,请参阅 tsmcp --一个网关,通过OAuth身份验证在互联网上公开基于tsnet的MCP服务器(如homelib)。
对于您Tailscale网络上的Claude Code或其他本地MCP客户端,请直接指向 https://.your-tailnet.ts.net/mcp.
设置
Homelib通过tsnet作为自己的节点加入您的Tailscale网络。在第一次开始时,它需要一个 尾标认证密钥 注册。之后,tsnet将保持其状态并自动重新连接。
1.创建Tailscale身份验证密钥
在中生成可重用的身份验证密钥 Tailscale管理控制台.将其设置为 ts_auth_key 在您的配置中或作为 HOMELIB_TS_AUTH_KEY 环境变量。
2.创建配置
cp config.example.yaml config.yaml编辑 config.yaml --启用所需的收集器,并为其API配置机密。看 配置 了解详情。
3.跑步
Docker Compose(推荐)
services:
homelib:
image: meltforce/homelib:latest
restart: unless-stopped
volumes:
- ./data:/data
environment:
- HOMELIB_TS_AUTH_KEY=tskey-auth-xxxxx # only needed on first start放置您的 config.yaml 在 ./data/config.yaml那么:
docker compose up -d一旦homelib在Tailscale注册,您就可以删除 HOMELIB_TS_AUTH_KEY 变量。
Docker运行
docker run -d \
--name homelib \
--restart unless-stopped \
-v $(pwd)/data:/data \
-e HOMELIB_TS_AUTH_KEY=tskey-auth-xxxxx \
meltforce/homelib:latest二进制
go build -o homelib .
# Development (localhost:8080, no Tailscale)
./homelib --local --config config.yaml
# Production (tsnet)
export HOMELIB_TS_AUTH_KEY=tskey-auth-xxxxx
./homelib --config config.yaml4.访问权限
运行后,homelib可在 https://.your-tailnet.ts.net (默认为配置中的主机名 homelib).无需端口转发或反向代理——访问由您的Tailscale ACL控制。
配置
复制 config.example.yaml 并编辑以匹配您的环境。所有的秘密都通过一个链来解决:
- 环境变量
HOMELIB_(例如。HOMELIB_HETZNER_API_TOKEN) - 在首尔贸易中心 秘密商店(如果
secret_backend.type: setec) - 1Password命令行界面
op://引用(如果值以开头op://) - 字面值
收集器
| 收集器 | 来源 | 收集的数据 |
|---|---|---|
| 尾鳞 | tsnet本地API+控制平面API | 设备,联机状态,ACL,DNS配置,子网路由 |
| Proxmox | 通过Tailscale进行SSH | 节点、VM、LXC容器、CPU/内存/磁盘、状态 |
| 赫茨纳 | 云API | 服务器、规格、定价、防火墙 |
| 科莫多 | API | Docker堆栈、容器、图像 |
| 统一的 | 控制器API | VLAN、子网、DHCP、网络设备 |
Tailscale收集器始终处于活动状态-homelib通过tsnet在Tailscale上运行,并使用本地API作为其主要数据源。其他收集器可以独立启用/禁用。所有收集器同时运行。
角色
通过以下方式用应用程序和类别元数据丰富发现的主机 roles 部分。应用程序和类别显示在主机表、容量页面和主机详细信息视图中。
roles:
application_categories:
jellyfin: media-server
immich: photos
vaultwarden: security
guest_overrides:
my-vm: homeassistant # when hostname != application name
tailscale_devices:
my-nas:
role: fileserver
application: truenas
proxmox_nodes:
my-node:
infrastructure_role: hypervisor
workload_specialization: general插件
使用返回JSON的脚本扩展homelib。插件在本地或通过SSH运行,可以贡献主机、发现和指标。
plugins:
- name: my-plugin
enabled: true
type: ssh # or "local"
host: my-server
user: root
command: /usr/local/bin/my-script --json
timeout: 30s
schedule: default插件输出架构:
{
"plugin": "my-plugin",
"version": "1.0",
"hosts": [
{ "name": "host1", "host_type": "vm", "details": {} }
],
"metrics": { "metric_name": "value" },
"findings": [
{ "severity": "warning", "host_name": "host1", "message": "High memory usage" }
]
}REST API
所有端点都在 /api/v1/。响应是JSON。
| 方法 | 端点 | 描述 |
|---|---|---|
| 得到 | /api/v1/hosts | 列出主机(筛选器: source, zone, status, type, q) |
| 得到 | /api/v1/hosts/{name} | 主机详细信息及相关服务 |
| 得到 | /api/v1/services | 列出服务(筛选器: host, stack) |
| 得到 | /api/v1/networks | 列出网络/VLAN |
| 得到 | /api/v1/findings | 列出调查结果(筛选器: source, severity) |
| 得到 | /api/v1/summary | 库存统计 |
| 得到 | /api/v1/capacity | 容量规划报告 |
| 得到 | /api/v1/collections | 收藏运行历史记录 |
| 职位 | /api/v1/collections/trigger | 触发收集运行 |
建筑
config.yaml
|
v
main.go
|-- Store (SQLite, WAL mode)
|-- Orchestrator
| |-- Collectors (Proxmox, Tailscale, Hetzner, Komodo, UniFi)
| |-- Plugins (custom scripts)
| |-- Merge (deduplicate hosts across sources)
| |-- Crossref (validate zones, enrich roles)
| '-- Persist results
|-- Scheduler (cron)
|-- HTTP Server
| |-- Web UI (embedded templates)
| '-- JSON API
'-- MCP Server (/mcp)项目结构
main.go Entry point, tsnet, HTTP server, scheduler
internal/
config/ YAML config, secret resolution
model/ Data types (Host, Service, Network, Finding, etc.)
collector/ Collector interface + implementations
crossref/ Zone validation, role enrichment
store/ SQLite persistence (WAL mode)
capacity/ Capacity planning calculations
scheduler/ Cron scheduling
server/ HTTP handlers (Web UI + JSON API)
mcp/ MCP server (Streamable HTTP)
web/ Embedded templates + static assets