MagicMirror MCP服务器
A. 模型上下文协议(MCP)服务器 让AI代理控制 魔镜² 安装,并可选择与集成 家庭助手.AI代理集成: 该服务器从头开始设计用于AI代理控制。通过将MagicMirror和Home Assistant功能作为结构化MCP工具公开,任何兼容的AI代理(包括Claude)都可以通过自然语言发现、推理和操作您的智能显示器和家庭设备。system.schema工具允许代理自动了解哪些模块和实体可用,而无需任何手动配置。插件架构意味着新功能可以作为独立的插件添加,而无需接触核心服务器代码,从而可以直接扩展服务器以用于自定义模块、第三方服务或全新的集成。无论您是希望镜子对家庭助理自动化做出反应,按需显示提醒,还是通过人工智能助理对语音命令做出响应,此服务器都提供了连接层使其工作。
______________________________________________________________________
特性
- 模块控制 --列出、显示和隐藏任何已安装的MagicMirror模块
- 监视器控制 --打开/关闭显示器并查询其电源状态
- 通知和警报 --在镜像上发送通知或显示警报弹出窗口
- 镜像健康 -检查连接并测量API延迟
- 家庭助理集成 --获取实体状态、调用服务、批量查询实体
- 系统发现 --在单个调用中查询已安装的模块和HA实体
- 插件架构 --在不涉及核心代码的情况下添加新工具
______________________________________________________________________
MCP工具
| 工具 | 说明 |
|---|---|
mirror.module.list | 列出所有已安装的模块及其可见性状态 |
mirror.module.show | 按标识符显示隐藏模块 |
mirror.module.hide | 按标识符隐藏可见模块 |
mirror.monitor.on | 打开显示器 |
mirror.monitor.off | 关闭显示器 |
mirror.monitor.status | 获取当前监视器电源状态 |
mirror.restart | 重新启动MagicMirror应用程序 |
mirror.health | 检查镜像是否可访问并测量延迟 |
mirror.notification.send | 发送任何带有可选有效负载的MagicMirror通知 |
mirror.alert.show | 显示警报弹出窗口(标题+消息+可选计时器) |
mirror.alert.hide | 关闭当前警报弹出窗口 |
homeassistant.entity.get | 获取单个HA实体的状态和属性 |
homeassistant.entities.list | 批量获取多个HA实体的状态 |
homeassistant.service.call | 呼叫任何家庭助理服务 |
system.schema | 发现所有可用模块和HA实体 |
______________________________________________________________________
建筑
AI Agent (Claude, etc.)
│
▼
MCP Server (stdio)
│
┌────┴─────────────────┐
│ │
MagicMirror² Home Assistant
(MMM-Remote-Control) (REST API)src/
├── server.ts ← Entry point, MCP server init
├── pluginLoader.ts ← Loads all plugins at startup
├── client/
│ ├── MagicMirrorClient.ts ← HTTP client for MMM-Remote-Control
│ └── HomeAssistantClient.ts ← HTTP client for Home Assistant REST API
├── plugins/
│ ├── plugin.ts ← MCPPlugin interface
│ ├── mirrorPlugin.ts ← Module, monitor, health, and restart tools
│ ├── notificationsPlugin.ts ← Notification and alert tools
│ ├── homeAssistantPlugin.ts ← Home Assistant entity and service tools
│ └── systemPlugin.ts ← System discovery tool
└── services/
├── connectionManager.ts ← Online/offline state tracking
├── discoveryService.ts ← Queries modules and HA entities
├── mirrorObserver.ts ← Polls mirror for visibility changes
└── schemaGenerator.ts ← Builds system capability snapshot______________________________________________________________________
需求
- Node.js 18+
- MagicMirror² MMM远程控制 安装
可选:
- 智能家居集成的家庭助手
______________________________________________________________________
安装
git clone https://github.com/Ragziesoft/magicmirror-mcp.git
cd magicmirror-mcp
npm install
npm run build______________________________________________________________________
配置
复制 .env.example 到 .env 并填写您的值:
cp .env.example .env# MagicMirror connection (required)
MAGICMIRROR_URL=http://mirror.local:8080
MAGICMIRROR_API_KEY=your_api_key
# Home Assistant (optional)
HOMEASSISTANT_URL=http://homeassistant.local:8123
HOMEASSISTANT_TOKEN=your_long_lived_tokenAPI密钥在MagicMirror的MMM-Remote-Control模块设置中配置 config.js.
______________________________________________________________________
跑步
npm start服务器通过以下方式进行通信 标准 并且被设计为由MCP客户端(例如Claude Desktop、Claude Code)启动。
Claude桌面配置示例
将此添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"magicmirror": {
"command": "node",
"args": ["/path/to/magicmirror-mcp/dist/server.js"],
"env": {
"MAGICMIRROR_URL": "http://mirror.local:8080",
"MAGICMIRROR_API_KEY": "your_api_key",
"HOMEASSISTANT_URL": "http://homeassistant.local:8123",
"HOMEASSISTANT_TOKEN": "your_token"
}
}
}
}______________________________________________________________________
AI交互示例
- *“显示天气模块”* →
mirror.module.show - *“睡前关闭显示器”* →
mirror.monitor.off - *“显示提醒:晚餐时间为晚上7点”* →
mirror.alert.show - *“镜子在线吗?”* →
mirror.health - *“打开客厅的灯”* →
homeassistant.service.call - *“安装了哪些模块?”* →
mirror.module.list - *“你能控制什么?”* →
system.schema
______________________________________________________________________
使用插件进行扩展
在中创建新文件 src/plugins/ 实施 MCPPlugin:
import { z } from "zod"
import { MCPPlugin } from "./plugin.js"
const myPlugin: MCPPlugin = {
name: "my-plugin",
async register(server, context) {
server.tool(
"my.tool",
"Description of what this tool does",
{ param: z.string().describe("A parameter") },
async ({ param }) => {
return { content: [{ type: "text", text: `Result: ${param}` }] }
}
)
}
}
export default myPlugin然后将其添加到 src/pluginLoader.ts.
______________________________________________________________________
路线图
- WebSocket支持实时镜像事件流
- Raspberry Pi关机工具
- MagicMirror配置文件编辑
- 摄像头流集成
- 附加插件生态系统
______________________________________________________________________
许可证
麻省理工学院
