Skip to main content
Glama
MCP-Domotica

MCP Domotica Backend

by MCP-Domotica

🏠 Sistema Domótico MCP

Sistema de gestión domótica basado en el Model Context Protocol (MCP) que permite controlar dispositivos inteligentes en diferentes habitaciones mediante servidores especializados. Implementado como una arquitectura de microservicios MCP para gestión eficiente de espacios residenciales y sus dispositivos asociados.

📋 Descripción General

Este proyecto implementa un sistema domótico completo utilizando el Model Context Protocol (MCP) con dos servidores independientes que operan de forma coordinada:

  • mcp_rooms: Servidor dedicado a la gestión completa de habitaciones (creación, modificación, eliminación y consulta)

  • mcp_devices: Servidor especializado en el control de dispositivos domóticos (luces, termostatos, ventiladores y hornos)

Capacidades del Sistema

El sistema está diseñado para gestionar hasta 6 habitaciones con un máximo de 10 dispositivos por habitación, aplicando reglas de negocio específicas según el tipo de espacio y dispositivo. La persistencia de datos se maneja mediante archivos JSON con sincronización automática entre procesos.

Related MCP server: sinum-mcp

✨ Características Principales

Dispositivos Soportados

El sistema implementa cuatro tipos de dispositivos inteligentes, cada uno con sus propias capacidades de control:

  • 💡 Luces: Control binario de encendido/apagado

  • 🌡️ Termostatos: Regulación de temperatura en rango de 16°C a 32°C

  • 🌀 Ventiladores: Control de velocidad en 6 niveles (0 = apagado, 1-5 = velocidades)

  • 🔥 Hornos: Gestión de temperatura (160°C - 240°C), temporizador (0-240 minutos) y estado activo/inactivo

Tipos de Habitaciones

El sistema reconoce cinco categorías de espacios residenciales:

  • 🍽️ Comedor: Admite todos los tipos de dispositivos

  • 🍳 Cocina: Admite todos los tipos de dispositivos (único espacio donde se permite horno)

  • 🚿 Baño: Restricción de seguridad - únicamente luces

  • 🛋️ Living: Admite todos los dispositivos excepto horno

  • 🛏️ Dormitorio: Admite todos los dispositivos excepto horno

Reglas de Negocio

El sistema implementa las siguientes restricciones para garantizar coherencia y seguridad:

  • Límite máximo de 6 habitaciones en el sistema

  • Límite máximo de 10 dispositivos por habitación

  • Restricción de ubicación: hornos únicamente en cocina

  • Restricción de dispositivos: baños limitados a iluminación

  • Asignación automática de nombres: numeración incremental para habitaciones duplicadas (ej: "dormitorio", "dormitorio 2")

🚀 Instalación y Configuración

Requisitos del Sistema

  • Python: Versión 3.13 o superior

  • uv: Gestor de paquetes y entornos virtuales para Python (Astral uv)

Instalación de uv

El proyecto utiliza uv como gestor de dependencias por su velocidad y eficiencia. Si aún no lo tiene instalado:

Windows (PowerShell):

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

macOS/Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Configuración del Proyecto

1. Clonar el repositorio:

git clone https://github.com/CrisDeCrisis/mcp-domotica-backend.git
cd mcp-domotica-backend

2. Sincronizar dependencias:

uv sync

Nota: Este comando lee automáticamente el archivo pyproject.toml, crea el entorno virtual .venv e instala todas las dependencias necesarias. No es necesario activar manualmente el entorno virtual al utilizar uv run.

🎮 Ejecución de Servidores

Iniciar Servidores MCP

Cada servidor puede ejecutarse de forma independiente utilizando uv run:

Servidor de Gestión de Habitaciones:

uv run servers/mcp_rooms.py

Servidor de Gestión de Dispositivos:

uv run servers/mcp_devices.py

Nota: El comando uv run ejecuta automáticamente los scripts en el entorno virtual del proyecto, eliminando la necesidad de activación manual del entorno.

📚 Arquitectura del Proyecto

Estructura de Directorios

backend/
├── servers/
│   ├── mcp_rooms.py       # Servidor MCP para gestión de habitaciones
│   └── mcp_devices.py     # Servidor MCP para gestión de dispositivos
├── models.py              # Definición de modelos de datos (Device, Room)
├── storage.py             # Capa de persistencia y almacenamiento
├── domotica_data.json     # Base de datos JSON para persistencia
├── pyproject.toml         # Configuración de proyecto y dependencias
└── README.md              # Documentación del proyecto

Componentes del Sistema

  • Servidores MCP: Implementan los endpoints del Model Context Protocol para cada dominio (habitaciones y dispositivos)

  • Modelos: Clases Python que definen la estructura de datos de habitaciones y dispositivos

  • Capa de Almacenamiento: Gestiona la persistencia en JSON con sincronización automática

  • Archivo de Datos: Almacenamiento persistente en formato JSON con estado del sistema completo

🔌 API de Herramientas MCP

Servidor de Habitaciones (mcp_rooms)

Proporciona operaciones CRUD completas para la gestión de espacios:

Herramienta

Descripción

consultar_habitaciones()

Retorna lista completa de habitaciones

consultar_habitacion(room_name)

Obtiene información detallada de una habitación

agregar_habitacion(room_type)

Crea una nueva habitación del tipo especificado

modificar_habitacion(old_name, new_name)

Actualiza el nombre de una habitación existente

eliminar_habitacion(room_name)

Elimina una habitación (debe estar vacía)

Servidor de Dispositivos (mcp_devices)

Proporciona control granular sobre dispositivos inteligentes:

Operaciones Generales

  • consultar_dispositivos(room_name?) - Obtiene lista de dispositivos (opcional: filtrar por habitación)

  • consultar_dispositivo(device_id) - Obtiene información detallada de un dispositivo específico

  • agregar_dispositivo(room_name, device_type, initial_state?) - Crea un nuevo dispositivo

  • modificar_dispositivo(device_id, room?, state?) - Actualiza ubicación o estado de un dispositivo

  • eliminar_dispositivo(device_id) - Elimina un dispositivo del sistema

Control de Iluminación

  • alternar_luz(device_id) - Cambia el estado actual (encendido ↔ apagado)

  • encender_luz(device_id) - Activa la iluminación

  • apagar_luz(device_id) - Desactiva la iluminación

Control de Climatización (Termostatos)

  • ajustar_termostato(device_id, temperature) - Establece temperatura específica (16°C - 32°C)

  • subir_temperatura(device_id, grados?) - Incrementa temperatura (predeterminado: 1°C)

  • bajar_temperatura(device_id, grados?) - Reduce temperatura (predeterminado: 1°C)

Control de Ventilación

  • ajustar_ventilador(device_id, speed) - Establece velocidad (0: apagado, 1-5: velocidades)

  • apagar_ventilador(device_id) - Detiene el ventilador (velocidad 0)

Control de Hornos

  • ajustar_horno(device_id, temperature?, timer?, active?) - Configuración completa del horno

  • encender_horno(device_id) - Activa el horno con temperatura configurada

  • apagar_horno(device_id) - Desactiva el horno completamente

  • configurar_temporizador_horno(device_id, minutos) - Establece temporizador (0-240 minutos)

📦 Dependencias del Proyecto

El proyecto utiliza las siguientes tecnologías y bibliotecas, definidas en pyproject.toml:

Dependencias Principales

  • fastapi - Framework web moderno y de alto rendimiento para construcción de APIs

  • uvicorn - Servidor ASGI de alto rendimiento para aplicaciones Python asíncronas

  • mcp[cli] - Implementación del Model Context Protocol con herramientas CLI

  • langchain - Framework para desarrollo de aplicaciones con modelos de lenguaje

  • langchain-mcp-adapters - Adaptadores de integración entre LangChain y MCP

  • langchain-ollama - Integración de LangChain con modelos Ollama locales

  • httpx - Cliente HTTP asíncrono de próxima generación

  • python-dotenv - Gestión de variables de entorno desde archivos .env

💾 Sistema de Persistencia

Mecanismo de Almacenamiento

El sistema implementa persistencia automática mediante archivo JSON (domotica_data.json) con las siguientes características:

  • Guardado Automático: Cada modificación del estado se persiste inmediatamente

  • Carga al Inicio: El sistema recupera el estado previo al iniciar los servidores

  • Estado Inicial: Si no existe archivo de datos, se crea una configuración predeterminada (1 living con 1 luz y 1 termostato)

  • Sincronización Multi-proceso: La función reload() permite sincronizar el estado entre múltiples instancias

Formato de Datos

El archivo JSON mantiene un registro estructurado de:

  • Colección completa de habitaciones con sus metadatos

  • Inventario de dispositivos con sus configuraciones y estados actuales

  • Relaciones entre habitaciones y dispositivos asignados


👨‍💻 Desarrolladores

  • González, Cristian David - GitHub

  • Vega, Tobías Joaquín - GitHub


🎓 Contexto Académico

Proyecto: Trabajo Práctico Integrador - Sistema Domótico con MCP

Asignatura: Modelos de Aplicación de la Inteligencia Artificial

Docentes:

  • Acosta Gabriel

  • Flavian Dante

Institución: Instituto Politécnico Formosa

Programa Académico: Tecnicatura Superior en Desarrollo de Software Multiplataforma

Available Tools

5 tools
agregar_habitacionA

Crea una nueva habitación en el sistema.

Args: room_type: tipo de habitación (comedor, cocina, baño, living, dormitorio)

Returns: Confirmación de creación con el nombre generado de la habitación.

Restricciones: - Máximo 6 habitaciones en el sistema - Solo tipos permitidos: comedor, cocina, baño, living, dormitorio - El sistema numera automáticamente (ej: si ya existe "dormitorio", crea "dormitorio 2")

ParametersJSON Schema
NameRequiredDescriptionDefault
room_typeYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it creates a new room, enforces a maximum of 6 rooms, restricts to specific room types, and automatically numbers rooms (e.g., 'dormitorio 2'). It also mentions the return confirmation with generated name. This covers mutation effects, constraints, and output behavior well for a tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Args, Returns, Restricciones) and front-loaded purpose. Each sentence adds value: the first states the action, and subsequent sections explain parameters, output, and constraints without redundancy. It could be slightly more concise by integrating sections, but overall it's efficient and organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (creation with constraints), no annotations, no output schema, and low schema coverage, the description does a good job of providing context. It covers purpose, parameters, returns, and behavioral restrictions. However, it lacks details on error conditions (e.g., what happens if max rooms exceeded) or system interactions, leaving minor gaps for full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 1 parameter with 0% description coverage, so the description must compensate. It adds significant meaning: it explains that 'room_type' is the type of room, lists allowed values (comedor, cocina, baño, living, dormitorio), and implies it's required for creation. This provides clear semantics beyond the bare schema, though it doesn't detail format or validation beyond the list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Crea una nueva habitación en el sistema' (Creates a new room in the system), which is a specific verb+resource combination. It distinguishes from siblings like consultar_habitacion (query), eliminar_habitacion (delete), and modificar_habitacion (modify) by focusing on creation. However, it doesn't explicitly differentiate from other potential creation tools beyond the room context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the creation purpose and lists restrictions like maximum 6 rooms and allowed types, which provide some context for when to use it. However, it doesn't explicitly state when to use this tool versus alternatives (e.g., modificar_habitacion for updates) or mention prerequisites like system state. The guidelines are present but not comprehensive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

consultar_habitacionB

Obtiene información detallada de una habitación específica.

Args: room_name: nombre de la habitación

Returns: Información completa de la habitación incluyendo todos sus dispositivos.

ParametersJSON Schema
NameRequiredDescriptionDefault
room_nameYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states this is a read operation ('obtiene información') and mentions the return includes 'todos sus dispositivos' (all its devices), which adds useful context about what information is returned. However, it doesn't disclose important behavioral traits like authentication needs, rate limits, error conditions, or whether this is a real-time query versus cached data. For a read tool with zero annotation coverage, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly structured and concise: one sentence stating the purpose, followed by clearly labeled Args and Returns sections. Every sentence earns its place - the purpose statement is essential, the Args explains the parameter, and the Returns clarifies what information is included. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (single parameter read operation) with no annotations and no output schema, the description is minimally adequate. It explains the purpose, parameter, and return content, but doesn't provide enough context about the tool's behavior, error handling, or relationship to sibling tools. The Returns section mentions 'información completa' but doesn't specify the format or structure of the returned data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explicitly documents the single parameter 'room_name' in the Args section, providing semantic meaning ('nombre de la habitación' - name of the room). Since schema description coverage is 0% (the schema has no descriptions), the description fully compensates by explaining what this parameter represents. With only one parameter clearly documented, this is above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Obtiene información detallada de una habitación específica' (Gets detailed information of a specific room). It specifies the verb (obtiene/gets) and resource (habitación/room), but doesn't explicitly distinguish it from its sibling 'consultar_habitaciones' (which likely lists multiple rooms). The purpose is clear but lacks sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention the sibling tools (agregar_habitacion, consultar_habitaciones, eliminar_habitacion, modificar_habitacion) or explain when this specific room query is appropriate versus listing all rooms or modifying rooms. There's no context about prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

consultar_habitacionesB

Obtiene la lista completa de habitaciones con su información.

Returns: Lista de habitaciones con nombre y cantidad de dispositivos por tipo.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves a list but doesn't mention whether it's read-only, if it requires specific permissions, or if there are rate limits. The 'Returns' section adds some context about output format, but overall behavioral traits are underspecified for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise with two sentences: one stating the purpose and one detailing the return format. It's front-loaded with the main action. There's no wasted text, though it could be slightly more structured with bullet points for the return details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, output schema exists), the description is minimally adequate. It explains what the tool does and the return format, but lacks context on usage versus siblings and behavioral details like safety or permissions. With no annotations, it should do more to compensate, but the output schema reduces the burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and the input schema has 100% description coverage (though empty). The description doesn't need to explain parameters, so it appropriately focuses on output. The 'Returns' section adds semantic value by specifying the output includes room names and device counts by type, which is helpful beyond what the output schema might provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Obtiene la lista completa de habitaciones con su información' (Gets the complete list of rooms with their information). It specifies the verb 'obtiene' (gets) and the resource 'habitaciones' (rooms). However, it doesn't explicitly differentiate from its sibling 'consultar_habitacion' (consult room), which likely retrieves a single room rather than the complete list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention the sibling tools like 'consultar_habitacion' for single-room queries or 'agregar_habitacion' for adding rooms. There's no context about prerequisites, such as authentication or system state requirements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eliminar_habitacionA

Elimina una habitación del sistema.

Args: room_name: nombre de la habitación a eliminar

Returns: Confirmación de eliminación.

Restricciones: - La habitación debe estar vacía (sin dispositivos) - Primero deben eliminarse todos los dispositivos de la habitación

ParametersJSON Schema
NameRequiredDescriptionDefault
room_nameYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates this is a destructive operation ('Elimina') and specifies important constraints about room emptiness. However, it doesn't mention authentication requirements, potential side effects beyond deletion confirmation, error conditions, or rate limits. The description adds value beyond what structured fields would provide but doesn't fully compensate for the lack of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Args, Returns, Restricciones) and front-loaded with the core purpose. Every sentence earns its place: the opening statement defines the action, the Args section explains the parameter, Returns indicates the outcome, and Restricciones provides crucial usage constraints. No wasted words or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive operation with no annotations and no output schema, the description does well by specifying the action, parameter meaning, return confirmation, and important constraints. It covers the essential context needed to understand this tool's purpose and limitations. The main gap is the lack of detailed behavioral information about authentication, error handling, or what the confirmation actually contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and only one parameter, the description provides essential semantic context: 'room_name' is 'nombre de la habitación a eliminar' (name of the room to delete). This clearly explains what the parameter represents. While it doesn't specify format constraints or examples, it successfully compensates for the complete lack of schema documentation for this single parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Elimina' - deletes) and the resource ('una habitación del sistema'), making the purpose immediately understandable. It distinguishes from siblings like 'agregar_habitacion' (add), 'consultar_habitacion' (query), and 'modificar_habitacion' (modify) by specifying deletion rather than creation, retrieval, or updating. However, it doesn't explicitly contrast with these alternatives in the description text itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Restricciones' section provides clear contextual guidance on when to use this tool: only when the room is empty (without devices) and after all devices have been removed first. This establishes important prerequisites for successful invocation. However, it doesn't explicitly mention when NOT to use it or name specific alternative tools for related operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modificar_habitacionB

Modifica el nombre de una habitación existente. Actualiza automáticamente todos los dispositivos asociados.

Args: old_name: nombre actual de la habitación new_name: nuevo nombre para la habitación

Returns: Confirmación con ambos nombres (antiguo y nuevo).

ParametersJSON Schema
NameRequiredDescriptionDefault
old_nameYes
new_nameYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool modifies an existing room's name and automatically updates associated devices, which is useful behavioral context. However, it doesn't mention permissions needed, whether the operation is reversible, error conditions (e.g., if old_name doesn't exist or new_name conflicts), or rate limits. The description adds value but leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured: a clear purpose statement, followed by a behavioral note (automatic device updates), then separate Args and Returns sections. Every sentence adds value, with no redundant or vague language. It's appropriately sized for a simple update tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description does a decent job: it explains the tool's purpose, parameters, and return confirmation. However, for a mutation tool, it lacks details on permissions, error handling, and the format of the return confirmation. It's minimally viable but has clear gaps in behavioral context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explicitly documents both parameters (old_name, new_name) with clear semantics in the Args section, despite 0% schema description coverage. It explains what each parameter represents, compensating fully for the schema's lack of descriptions. Since there are only 2 parameters and both are well-explained, this earns a high score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Modifica el nombre de una habitación existente' (Modifies the name of an existing room). It specifies the verb (modify/update) and resource (room name), but doesn't explicitly differentiate from sibling tools like 'agregar_habitacion' (add room) or 'eliminar_habitacion' (delete room) beyond the different action verbs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., room must exist), exclusions, or compare it to sibling tools like 'consultar_habitacion' (query room) or 'eliminar_habitacion' (delete room). The agent must infer usage from the tool name and description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv1.0.0
    • Changedagregar_habitacion1 field changed
      • addedInput schema / title
        Added value: +"agregar_habitacionArguments"
    • Changedconsultar_habitacion1 field changed
      • addedInput schema / title
        Added value: +"consultar_habitacionArguments"
    • Changedconsultar_habitaciones1 field changed
      • addedInput schema / title
        Added value: +"consultar_habitacionesArguments"
    • Changedeliminar_habitacion1 field changed
      • addedInput schema / title
        Added value: +"eliminar_habitacionArguments"
    • Changedmodificar_habitacion1 field changed
      • addedInput schema / title
        Added value: +"modificar_habitacionArguments"
  2. 5 tool updates
    • First observedagregar_habitacion
    • First observedconsultar_habitacion
    • First observedconsultar_habitaciones
    • First observedeliminar_habitacion
    • First observedmodificar_habitacion

TDQS

A3.8/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: agregar_habitacion (create), consultar_habitacion (get one), consultar_habitaciones (list all), eliminar_habitacion (delete), and modificar_habitacion (update). The descriptions reinforce these distinct roles, making tool selection unambiguous.

Naming Consistency5/5

All tool names follow a consistent Spanish verb_noun pattern (e.g., agregar_habitacion, consultar_habitacion, eliminar_habitacion, modificar_habitacion). The naming is uniform and predictable, with no deviations in style or convention.

Tool Count5/5

With 5 tools, this server is well-scoped for managing rooms in a home automation system. Each tool serves a specific CRUD operation (create, read, update, delete, and list), making the count appropriate and efficient for the domain without being too sparse or bloated.

Completeness5/5

The tool set provides complete CRUD coverage for room management: create (agregar_habitacion), read (consultar_habitacion and consultar_habitaciones), update (modificar_habitacion), and delete (eliminar_habitacion). There are no obvious gaps, and the tools support a full lifecycle for rooms within the system's constraints.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/MCP-Domotica/mcp-domotica-backend'

If you have feedback or need assistance with the MCP directory API, please join our Discord server