jmagar
服务介绍
Google Home MCP 服务器
一个通过 Smart Home API 控制 Google Home 智能插座的MCP服务器实现。
功能
- 列出所有可用的智能插座及其状态
- 控制智能插座(开关)
- 获取特定智能插座的实时状态
- 自动刷新设备状态
- 通过Smart Home API进行OAuth2认证
前提条件
- 启用了Smart Home API的Google Cloud项目
- Actions on Google Smart Home Action项目
- Smart Home Action的OAuth 2.0客户端凭证
- Node.js 18或更高版本
- 访问Google Home智能插座
设置
-
创建一个Smart Home Action:
- 转到Actions on Google控制台
- 创建新项目
- 选择"Smart Home"作为项目类型
- 配置账户链接:
- OAuth Client ID
- OAuth Client Secret
- 授权URL
- Token URL
-
设置OAuth 2.0:
- 配置您的OAuth服务器端点
- 设置用户身份验证流程
- 实现令牌生成/验证
-
安装依赖项:
bash
pnpm install -
配置服务器:
- 将
config.json.example复制为config.json - 填写您的:
- OAuth Client ID
- OAuth Client Secret
- 将
-
构建服务器:
bash
pnpm build -
启动服务器:
bash
pnpm start
可用工具
1. 列出智能插座
typescript
{
name: "list_smart_plugs",
description: "列出所有可用的智能插座及其当前状态",
response: Array<{
id: string;
name: string;
state: {
on: boolean;
online: boolean;
}
}>
}
2. 控制智能插座
typescript
{
name: "control_smart_plug",
description: "打开或关闭智能插座",
parameters: {
deviceId: string; // 来自list_smart_plugs的设备ID
state: boolean; // true表示开,false表示关
},
response: {
success: boolean;
device: {
id: string;
name: string;
state: {
on: boolean;
online: boolean;
}
}
}
}
3. 获取智能插座状态
typescript
{
name: "get_smart_plug_state",
description: "获取特定智能插座的当前状态",
parameters: {
deviceId: string; // 来自list_smart_plugs的设备ID
},
response: {
id: string;
name: string;
state: {
on: boolean;
online: boolean;
}
}
}
API详情
该服务器实现了Smart Home API意图:
-
SYNC意图
- 当用户链接其帐户时调用
- 报告可用设备和功能
- 处理设备发现
-
QUERY意图
- 报告设备的当前状态
- 处理来自Google Assistant的状态查询
- 返回在线/离线状态
-
EXECUTE意图
- 处理设备控制命令
- 执行开/关操作
- 报告命令成功/失败
错误处理
服务器实现了全面的错误处理,并具有特定的错误代码:
CONFIG_ERROR: 配置加载或验证错误API_ERROR: 来自Smart Home API的错误DEVICE_NOT_FOUND: 在可用设备中找不到设备IDCOMMAND_ERROR: 执行设备命令时发生错误
每个错误包括:
- 错误消息
- 错误代码
- 如有提供,详细的错误信息
安全性
- OAuth 2.0认证流程
- 安全的令牌处理
- 请求验证
- 命令授权
- HTTPS通信
- 输入清理
开发
-
以开发模式启动:
bash
pnpm dev -
运行测试:
bash
pnpm test -
调试日志:
- 所有API调用都被记录
- 捕获错误详情
- 跟踪设备状态变化
贡献
- 分叉仓库
- 创建特性分支
- 提交更改
- 推送到分支
- 创建拉取请求
许可证
MIT