Samuel--家庭智能MCP服务器
  
Samuel是一个MCP服务器和网桥,它使Claude能够实时访问示例家庭HA配置和状态。它在专用的Linux机器上运行(samuel)旁边是只读克隆 ha-config.
注: 这是一个经过净化的实时部署副本。个人标识符、设备ID和网络详细信息已被占位符替换。要使用它,请替换您自己的HA主机、令牌和实体ID。 专为 家庭助手不隶属于家庭助理项目或开放家庭基金会,也不受其认可。
与家庭助理的关系
Samuel的设计是为了操作 与现有的家庭助理部署一起.
此存储库包含Samuel MCP服务器 和 REST桥:
- MCP服务器(端口5100)——Claude的工具调用界面;实现配置、状态、文档和运行状况工具组
- REST桥(端口5101)——用于非MCP调用者和健康检查的HTTP接口
塞缪尔 不直接控制设备。所有执行都是通过家庭助理进行的,所有拟议的操作都需要明确的人工确认。
完整的部署包括:
- 集成Samuel的Home Assistant配置仓库
- 这个Samuel服务仓库与HA一起运行
请在此处查看家庭助理配置:
ha-config-public
这种分离是有意的:
- Home Assistant仍然具有确定性和权威性
- 塞缪尔仍然是顾问、可检查和受约束的
快速开始
# On the Samuel box (Ubuntu Server):
cd ~/samuel-system
bash install.sh安装脚本将:
- 查找Python 3.10+(MCP SDK要求)
- 在以下位置创建虚拟环境
.venv - 安装依赖项
- 创建
~/data/为了国家的持久性 - 可选择安装systemd服务(启动时自动启动)
先决条件
- 克隆此仓库:
git clone git@github.com:your-github-user/samuel-system.git ~/samuel-system - 克隆ha配置(只读):
git clone git@github.com:your-github-user/ha-config.git ~/ha-config - 创建
.env从示例中可以看出:cp .env.example .env并填写数值
环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
HA_URL | 是 | 家庭助理URL(例如。 http://YOUR_HA_HOST:8123) |
HA_TOKEN | 是 | HA长期访问令牌 |
REPO_PATH | 是 | ha配置克隆路径(例如。 /home/samuel/ha-config) |
DATA_DIR | 否 | 状态持久性目录(默认值: ~/data) |
SAMUEL_PORT | 无 | MCP服务器端口(默认值: 5100) |
BRIDGE_PORT | 否 | 网桥服务器端口(默认值: 5101) |
SAMUEL_BRIDGE_URL | 否 | 通信工具使用的网桥基础URL(默认值: http://127.0.0.1:5101) |
TELEGRAM_BOT_TOKEN | 否 | Telegram机器人令牌--启用 send_message_to_operator |
TELEGRAM_CHAT_ID | 否 | 出站操作员消息的Telegram聊天ID |
手动运行
source .venv/bin/activate
python -m samuel # MCP server (port 5100)
python -m samuel.bridge # Bridge server (port 5101)连接克劳德代码
claude mcp add --transport http samuel http://samuel.local:5100/mcp连接克劳德桌面
添加 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"samuel": {
"url": "http://samuel.local:5100/mcp"
}
}
}可用工具
工具按域组织。每个工具都注册了风险元数据(通过 tool_metadata.py)这样Samuel就可以在没有批准的情况下自主决定打什么电话。
配置工具-- config_tools.py (从ha配置仓库读取)
| 工具 | 风险 | 它的作用 |
|---|---|---|
read_config | read_only | 读取任何YAML配置文件 |
list_packages | read_only | 列出所有包含内容摘要的包 |
list_automations | read_only | 列出所有带有触发器的自动化 |
list_scripts | read_only | 列出所有带有操作的脚本 |
search_config | 只读 | 在所有配置文件中搜索正则表达式 |
状态工具-- state_tools.py (查询HA API)
| 工具 | 风险 | 它的作用 |
|---|---|---|
get_entity_state | read_only | 获取实体状态(支持模糊搜索) |
get_entities_by_domain | read_only | 列出域的所有实体 |
get_area_state | read_only | 获取房间/区域的所有实体状态 |
文档工具-- doc_tools.py
| 工具 | 风险 | 它的作用 |
|---|---|---|
read_doc | read_only | 从docs/中读取任何文档 |
get_system_map | read_only | 完整系统图的快捷方式 |
健康工具-- health_tools.py
| 工具 | 风险 | 它的作用 |
|---|---|---|
generate_health_report | read_only | 运行带有趋势跟踪的健康诊断 |
简报工具-- briefing_tools.py
| 工具 | 风险 | 它的作用 |
|---|---|---|
generate_status_briefing | read_only | 构建家庭状态摘要(模式、状态、灯光、温度、天气) |
主页基础设施工具-- home_infra_tools.py
需要 home_assistant_bridge, host_bridge,以及 event_pipeline 模块(不在公共仓库中——请参阅文件中的接口契约注释)。
| 工具 | 风险 | 它的作用 |
|---|---|---|
get_system_info | 只读 | HA版本、操作系统、主机名、硬件 |
get_system_health | 只读 | HA组件运行状况 |
list_entities | read_only | 所有实体,可按域筛选 |
get_entity_history | 只读 | 实体的状态历史记录(最多30天) |
get_cache_stats | read_only | 进程中实体状态缓存统计信息 |
get_automations | read_only | 所有具有id和启用状态的自动化 |
get_automation | read_only | 单个自动化的完整配置 |
validate_automations | read_only | 运行HA配置验证 |
list_services | 只读 | 按域列出的可用HA服务 |
call_service | high_risk | 调用HA服务--需要 approved=True |
get_recent_events | read_only | 来自HA WebSocket影子管道的最近事件 |
start_event_shadow_pipeline | low_risk | 启动HA WebSocket事件流 |
stop_event_shadow_pipeline | low_risk | 停止HA WebSocket事件流 |
get_recent_logs | read_only | 最近的HA日志条目,可按级别筛选 |
search_logs | read_only | 在最近的HA日志中进行全文搜索 |
get_failed_automations | read_only | 最近发生错误的自动化 |
get_integration_status | 只读 | 集成运行状况(加载与失败) |
get_host_info | 只读 | 主机操作系统信息(内核、发行版、正常运行时间) |
get_system_metrics | 只读 | 实时CPU、内存、负载 |
check_network | 只读 | 网络可达性检查 |
check_disk_health | 只读 | 磁盘使用率和SMART运行状况 |
get_vm_state | 只读 | 托管VM的状态(例如HA OS VM) |
restart_vm | high_risk | 重新启动虚拟机--需要 approved=True |
通信工具-- comms_tools.py
| 工具 | 风险 | 它的作用 |
|---|---|---|
send_message_to_operator | moderate _ risk | 通过Telegram发送消息(需要内容——空问候语被屏蔽) |
request_approval | low_risk | 通过HA移动通知发送带有批准/拒绝按钮的批准请求 |
poll_approval_response | read_only | 检查待处理审批请求的状态 |
工具元数据-- tool_metadata.py
| 工具 | 风险 | 它的作用 |
|---|---|---|
list_tool_metadata_json | read_only | 以JSON格式返回完整的工具风险目录 |
get_tool_metadata | read_only | 查找特定工具的风险元数据 |
服务管理(systemd)
sudo systemctl status samuel-mcp # Check status
sudo systemctl status samuel-bridge
sudo systemctl restart samuel-mcp # Restart
sudo systemctl restart samuel-bridge
journalctl -u samuel-mcp -f # Follow logs
journalctl -u samuel-bridge -f独立健康报告
这 diagnostics/morning_health.py 脚本可以独立运行(例如通过cron):
source .venv/bin/activate
python diagnostics/morning_health.py --dry-run # Preview
python diagnostics/morning_health.py # Write to DATA_DIR测试
# Start samuel, then in another terminal:
npx @modelcontextprotocol/inspector
# Connect to http://localhost:5100/mcp
# Try calling list_packages, search_config("quiet_hours"), etc.
# Test bridge:
curl http://localhost:5101/ping
curl http://localhost:5101/health建筑
samuel-system (this repo) ha-config (separate repo, read-only clone)
├── samuel/ ├── packages/*.yaml
│ ├── server.py (MCP :5100) ├── scripts.yaml
│ ├── bridge.py (REST :5101) ├── docs/system_map.md
│ ├── config_reader.py ────────→ └── ...
│ ├── ha_client.py ─────────────→ Home Assistant REST API
│ └── tools/
│ ├── config_tools.py (reads ha-config YAML)
│ ├── state_tools.py (queries HA /api/states)
│ ├── doc_tools.py (reads docs/)
│ ├── health_tools.py (HA + Samuel diagnostics)
│ ├── briefing_tools.py (spoken home status summaries)
│ ├── home_infra_tools.py (entity history, services, logs, host)
│ ├── comms_tools.py (Telegram + approval request routing)
│ └── tool_metadata.py (risk registry for all tools)
├── diagnostics/
├── systemd/
│ ├── samuel-mcp.service
│ └── samuel-bridge.service
└── .env风险模型: 每个工具都注册了风险级别(read_only, low_risk, moderate_risk, high_risk),是否需要明确批准,以及自主呼叫是否安全。在运行时通过以下方式查询目录 list_tool_metadata_json.
相关
- ha配置公开 --Samuel读取的家庭助理配置。模块化封装、照明标准、运动感知房间和存在检测。
- 管理层 --Samuel为审批门控执行实施的治理框架:
Propose → Explain → Confirm → Execute → Learn.
需求
- Python 3.10+
- Ubuntu服务器24.04 LTS(或带有systemd的类似Linux)
.env随着HA_URL,HA_TOKEN,以及REPO_PATH- 对HA实例的网络访问(用于状态/健康工具)
- ha-config的本地克隆(用于config/doc工具)
