miot-mcp
米家 MCP Server
Documentación en chino | English
Un servicio MCP de 米家 con enfoque de producto, basado en mijiaAPI 3.x. Ya no exige que el cliente comprenda primero los detalles del protocolo como did, siid/piid/aiid, sino que prioriza ofrecer capacidades de consulta y control más naturales orientadas a «hogar, habitación, nombre de dispositivo, nombre de escena».
Qué resuelve esta versión
Orientado a clientes de IA: expone primero herramientas estables y claras de nivel producto, en lugar de campos de protocolo de bajo nivel
Orientado a escenarios reales del hogar: primero se ven el hogar y las habitaciones, luego se localiza el dispositivo y después se ejecuta el control
Orientado al estándar MCP: las herramientas devuelven resultados estructurados; el estado del servicio y el estado de inicio de sesión pueden ser consumidos directamente por el cliente
Orientado a la extensión: el schema de capacidades estándar, el control basado en perfiles y el modelo de recursos pueden seguir evolucionando
Related MCP server: Xiaomi smart home MCP server
Capacidades actuales
Servicio e inicio de sesión
get_service_statusprepare_loginreconnect_serviceclear_saved_loginrefresh_devicesget_tool_catalogping
Hogar y dispositivos
get_home_overviewlist_homeslist_devicesget_deviceget_device_statusget_device_capabilities
Control de dispositivos
control_by_intentcontrol_deviceturn_on_deviceturn_off_deviceset_brightnessset_color_temperatureset_target_temperatureset_hvac_modeset_fan_speedset_cover_position
Escenas y consumibles
list_scenesexecute_sceneget_consumable_items
Recursos MCP
mijia://servicemijia://homesmijia://devicesmijia://scenesmijia://capabilitiesmijia://tooling
Instalación
Se recomienda usar Python 3.10+.
poetry installSi no usas Poetry:
pip install -r requirements.txtInicio
poetry run python mcp_server/mcp_server.pyProbar el handshake:
poetry run python mcp_server/mcp_test.pyMétodo de inicio de sesión
mijiaAPI 3.x ha eliminado el inicio de sesión con cuenta y contraseña; solo admite el inicio de sesión con código QR.
Cuando se necesita iniciar sesión por primera vez, el servicio:
Genera una página para el navegador:
~/.miot-mcp/qr.htmlTambién genera una imagen de código QR:
~/.miot-mcp/qr.pngPor defecto, abre
qr.htmlcon el navegador del sistema como primera opciónSolo si el navegador no puede abrirse, recurre al visor de imágenes o al código QR en la terminal
La información de autenticación se guarda en:
~/.miot-mcp/auth_data.jsonRuta principal recomendada para iniciar sesión
Llama a
prepare_loginLlama a
get_service_statusLee
service.qr.page_pathoservice.qr.image_pathTras completar el escaneo, llama a
reconnect_serviceo directamente arefresh_devices
Estado relacionado con el inicio de sesión
Tanto get_service_status como mijia://service devuelven un estado de inicio de sesión estructurado. Los campos más relevantes incluyen:
service.connectedservice.has_saved_loginservice.qr.open_modeservice.qr.page_pathservice.qr.image_pathservice.qr.login_urlassistant_summarynext_steps.should_scan_qr
Variables de entorno
export MIJIA_ENABLE_QR="true"
export MIJIA_QR_OPEN_MODE="browser"
export MIJIA_LOG_LEVEL="INFO"Notas:
MIJIA_ENABLE_QR: si se habilita el inicio de sesión con código QR; por defectotrueMIJIA_QR_OPEN_MODE: configuración avanzada; admitebrowser/viewer/none; por defectobrowserMIJIA_LOG_LEVEL: nivel de registro; admiteDEBUG/INFO/WARNING/ERROR
Ejemplo de configuración para clientes MCP
Se recomienda usar directamente el Python del entorno virtual, en lugar de poetry run.
{
"mcpServers": {
"mijia": {
"command": "/path/to/venv/bin/python",
"args": [
"/path/to/miot-mcp/mcp_server/mcp_server.py"
],
"env": {
"MIJIA_ENABLE_QR": "true",
"MIJIA_QR_OPEN_MODE": "browser",
"MIJIA_LOG_LEVEL": "INFO"
}
}
}
}Rutas de llamada recomendadas
Para la mayoría de los clientes de IA, se recomienda usar preferentemente este flujo:
prepare_loginget_service_statusrefresh_devicesget_home_overviewget_device_statuscontrol_by_intentlist_scenesexecute_scene
Si el cliente necesita un enrutamiento más estable y explícito, añade además:
list_homeslist_devicesget_deviceget_device_capabilitiescontrol_device
Descripción de herramientas habituales
prepare_login
Prepara activamente el inicio de sesión con código QR. Por defecto reutiliza la página QR existente; si necesitas volver a pasar por un ciclo de escaneo, puedes pasar force_reauth=true.
get_service_status
Devuelve el estado de conexión del servicio, la ruta del archivo de autenticación, la ruta de registro, la ruta de la página QR y sugerencias para los siguientes pasos.
get_home_overview
Genera una vista general de los dispositivos por hogar y habitación, adecuada para que el cliente comprenda primero la estructura del hogar.
get_device_status
Consulta el estado actual de un único dispositivo, las operaciones disponibles y el siguiente paso recomendado.
get_device_capabilities
Devuelve el schema de capacidades estándar y los elementos de control basados en perfil, adecuado para clientes que necesitan un enrutamiento estable.
control_by_intent
Entrada de control en lenguaje natural. Adecuada para la mayoría de los escenarios cotidianos, por ejemplo, «sube el brillo de la lámpara de escritorio del dormitorio al 30%».
control_device
Entrada de control estructurada y unificada. Adecuada cuando el cliente ya conoce la operación objetivo y los parámetros.
speaker_say
Hace que 小爱音箱 reproduzca por voz cualquier texto (un «pregón»). Adecuado para avisos de finalización de tareas largas, locuciones tipo alarma o para que un altavoz concreto lea un texto.
{
"name": "speaker_say",
"arguments": {
"text": "任务完成啦,图片已生成",
"speaker_name": "城市之光音响"
}
}Por qué usar play-text en lugar de execute-text-directive:
小爱音箱 tiene dos acciones relacionadas:
execute-text-directive— envía el texto a 小爱 como pregunta/instrucción para que lo interprete → activa su respuesta de IA (por ejemplo, «me has dejado sin respuesta»), no es una locución puraplay-text— reproduce texto puro, con el parámetro único_in=[text], no activa la conversación de IA ←speaker_sayusa este
Advertencia: la ruta genérica
run_actionintroduce los parámetros en el campovalue, lo que hace que la API en la nube devuelva-704220025 Action参数个数不匹配; es obligatorio usar la forma de kwargs_in(device.run_action('play-text', _in=[text])→method['in']=[text]).
Modo de línea de comandos (sin necesidad de cliente MCP, se invoca directamente mediante script):
python speaker_say.py "任务完成啦" --speaker "城市之光音响"
python speaker_say.py "任务完成啦" --speaker "客厅音箱" --quiet # 静默(只执行不播报)Parámetros:
text: el texto que se va a leer (lenguaje natural)--speaker: nombre del altavoz (coincidencia aproximada; si no se pasa, se elige el primer altavoz en línea)--quiet: ejecución silenciosa (sin locución por voz)
Ejemplos de uso
Ver el estado del servicio
{
"name": "get_service_status",
"arguments": {}
}Preparar el inicio de sesión activamente
{
"name": "prepare_login",
"arguments": {
"reopen_qr": true
}
}Actualizar la asignación de dispositivos y habitaciones
{
"name": "refresh_devices",
"arguments": {}
}Ver la vista general del hogar
{
"name": "get_home_overview",
"arguments": {}
}Ver el estado de un único dispositivo
{
"name": "get_device_status",
"arguments": {
"device_name": "吸顶灯",
"room": "客厅"
}
}Ver el schema de capacidades
{
"name": "get_device_capabilities",
"arguments": {
"device_name": "台灯",
"room": "卧室"
}
}Control en lenguaje natural
{
"name": "control_by_intent",
"arguments": {
"query": "把卧室台灯亮度调到30%"
}
}Control estructurado
{
"name": "control_device",
"arguments": {
"operation": "set_color_temperature",
"device_name": "台灯",
"room": "卧室",
"value": 4000
}
}Ejecutar una escena
{
"name": "execute_scene",
"arguments": {
"scene_name": "回家模式"
}
}Límites actuales
Esta versión de MCP se centra en las rutas de control del hogar más comunes:
Exploración de hogares y habitaciones
Localización de dispositivos
Control de capacidades generales
Exposición del schema de capacidades estándar
Ejecución de escenas
Consulta de consumibles
Las capacidades típicas ya cubiertas de forma prioritaria incluyen:
Encendido/apagado
Brillo
Temperatura de color
Temperatura objetivo
Modo
Velocidad del ventilador
Posición de apertura/cierre
Las capacidades de nivel más bajo y con mayor personalización pueden seguir ampliándose hacia control_device, pero ya no se exponen como forma de uso predeterminada.
Estructura del código
El servicio actual se compone internamente de tres capas principales:
adapter/se encarga de la interacción conmijiaAPI, el inicio de sesión, el descubrimiento de dispositivos y la experiencia de inicio de sesión con código QRmcp_server/core/se encarga del encapsulado de resultados, el cálculo de capacidades, el enrutamiento de intenciones y la estandarizaciónmcp_server/device_definitions/ymcp_server/device_resources/se encargan de la definición de capacidades estándar, la definición de intenciones y el modelo de recursos orientado a producto
Las capacidades y rutas actuales no dependen del descubrimiento automático de plugins, sino que importan explícitamente las tablas de definiciones. Así es más claro y más adecuado para que los clientes de IA realicen llamadas estables.
Plugin de integración DSH (DeepSeek Harness)
Además del servicio MCP, este repositorio incluye un plugin de Cordis para DeepSeek Harness (dsh-plugin/dsh-task-notify), que permite al agente DSH avisar activamente mediante 小爱音箱 + notificación de 飞书 (aviso de finalización de tareas largas):
Herramienta | Función |
| Notificación de finalización de tareas largas: envío obligatorio por mensaje privado de 飞书 + decisión de usar 小爱音箱 según el estado de no molestar |
| Hace que el 小爱音箱 especificado lea cualquier texto (reproducción pura, sin activar la conversación de IA de 小爱) |
| Interruptor de no molestar / cambiar el altavoz actual / cambiar el destino de 飞书 (persistente entre sesiones) |
| Consulta el estado actual |
Instalación del plugin DSH
# 1. 复制到 DSH profiles 的 node_modules
cp -r dsh-plugin/dsh-task-notify C:\Users\<you>\.dsh\profiles\node_modules\@oadank\dsh-task-notify
# 2. 注册到 ~/.dsh/profiles/web/cordis.patch.yml 的 insert 列表
- id: dsh-task-notify
name: '@oadank/dsh-task-notify'
# 3. 重启 dsh-web 生效El plugin utiliza speaker_say.py (de este repositorio) para realizar la locución de 小爱. El altavoz predeterminado se puede cambiar con set_notify_state(currentSpeaker, "音箱名"), y el estado se guarda en ~/.dsh/profiles/notify-state.json para persistir entre sesiones.
Para más detalles, consulta dsh-plugin/README.md.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server based on the Mastra framework for controlling Xiaomi Mi Home smart devices. It enables device discovery, property management, action execution, and scene control through the Mi Home cloud service.
- AlicenseAqualityCmaintenancemijia-control A production-ready MCP server that enables AI agents (Claude Code, Claude Desktop, Cursor, Hermes, etc.) to directly control Xiaomi/Mijia smart home devices through natural language. What it does Turns conversations into physical actions — "turn on the desk lamp to 50%" becomes actual device control in real-time.1260MIT
- FlicenseNot gradedqualityCmaintenanceMCP server for controlling Xiaomi/Mi Home smart devices via natural language, supporting device listing, property read/write, action calls, and camera snapshots.11
- AlicenseNot gradedqualityCmaintenanceMCP server that enables AI agents to control Xiaomi Mi Home smart devices through natural language, with support for listing devices, controlling properties, and running scenes.MIT
Related MCP Connectors
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
Markdown-first MCP server for Notion API with 8 composite tools and 39 actions.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/oadank/miot-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server