Skip to main content
Glama
pikerr

SprutHub MCP Server

by pikerr

SprutHub MCP & CLI Server

Высокоуровневая интеграция SprutHub для LLM-ассистентов (Antigravity, Claude Desktop, Cursor, Claude Code, Cline и др.).

Предоставляет два формата работы в одном пакете:

  1. MCP Server (spruthub-mcp) — стандартный сервер протокола Model Context Protocol (для клиентов без доступа к терминалу, например Claude Desktop).

  2. On-Demand CLI (spruthub-cli) + Skill — ультралегковесный запуск по требованию для терминальных агентов (Antigravity, Claude Code) с нулевым оверхедом по RAM и контекстному окну.


Ключевые особенности

  • ⚡ Прямой локальный WebSocket: прямое подключение к хабу в локальной сети (ws://<IP>/spruthub), нулевые задержки (< 5 мс), полная автономность без зависимости от облака.

  • 🧠 Семантический фасад вместо сырого RPC: сервер берет на себя нормализацию данных, фильтрацию служебного мусора и разрешение сервисов, позволяя LLM работать за 1 шаг.

  • 🛡️ Автоматическая нормализация типов: упаковка базовых типов (bool, int, float, str) в структуры SprutHub (boolValue, intValue и др.).

  • 💡 Умное переключение (sprut_set_switch / cli switch): вам не нужно знать точный service_id или characteristic_id реле — система автоматически найдёт целевую службу Switch/Lightbulb/Outlet.

  • 🔒 Безопасная аутентификация: работа по локальному паролю (токену) без необходимости хранить мастер-пароль от аккаунта.

  • 🚀 Нулевой оверхед (Hybrid Architecture): поддержка работы как в виде фонового MCP-сервера, так и через легковесный CLI (~80 мс на выполнение запроса).


Related MCP server: MCP-HASS

Архитектурный подход: Семантический фасад vs Generic RPC-шлюз

При интеграции SprutHub с большими языковыми моделями возможны два подхода:

  1. Сырой generic-прокси (Raw RPC Gateway): когда все методы контроллера транслируются в MCP «как есть», а LLM сначала ищет метод через list_methods, затем запрашивает его схему и пытается вручную собрать сложный JSON-RPC payload.
    Недостатки: на каждое действие уходит 3–4 шага диалога, сотни килобайт сырых схем забивают контекст LLM, а сложная вложенность структур SprutHub приводит к частым галлюцинациям модели.

  2. Семантический фасад (подход данного проекта): сервер агрегирует рутинную логику внутри себя. Он очищает списки устройств от сервисных метаданных (AccessoryInformation, Identify, C_Online), распаковывает типизированные структуры и предоставляет компактные, понятные функции.
    Результат: модель решает задачу пользователя за один шаг, не тратит лишние токены и работает стабильно даже на лёгких и быстрых моделях.

Архитектура: Двойной интерфейс (MCP + CLI)

flowchart TD
    subgraph Clients["Клиенты и Ассистенты"]
        Claude["Claude Desktop / Cursor<br/>(клиенты без терминала)"]
        Terminal["Antigravity / Claude Code<br/>(терминальные агенты)"]
    end

    subgraph Package["Пакет spruthub-mcp"]
        MCP["MCP Server (server.py)<br/>Stdio JSON-RPC daemon"]
        CLI["CLI & Skill (cli.py)<br/>On-Demand (80ms, 0 RAM)"]
        Core["SprutHubClient<br/>Семантический фасад & нормализация типов"]
    end

    Hub[("SprutHub Controller<br/>ws://IP/spruthub")]

    Claude -->|MCP Protocol| MCP
    Terminal -->|uvx / CLI| CLI
    MCP --> Core
    CLI --> Core
    Core -->|Локальный WebSocket| Hub

Инструменты и команды

Категория

Команда CLI

MCP Tool

Описание

Хаб и система

spruthub-cli summary

sprut_get_summary

Комплексная сводка: статус хаба, аккаунт, комнаты с устройствами, расширения, статистика.

spruthub-cli info

sprut_get_hub_info

Краткая информация о контроллере (имя, модель, серийник, версия ПО, онлайн-статус).

spruthub-cli restart [--yes]

sprut_restart_hub

Перезагрузка контроллера / службы SprutHub.

Комнаты

spruthub-cli rooms

sprut_list_rooms

Список комнат со сводкой датчиков в реальном времени.

spruthub-cli room create <name>

sprut_create_room

Создание новой комнаты.

spruthub-cli room rename <id> <name>

sprut_update_room

Переименование существующей комнаты.

spruthub-cli room delete <id> [--yes]

sprut_delete_room

Удаление комнаты (с подтверждением).

Устройства

spruthub-cli devices [--room ID] [-s query]

sprut_list_devices

Список устройств и их текущих состояний (с фильтрацией).

spruthub-cli device <ID>

sprut_get_device

Полная развернутая структура аксессуара (сервисы, характеристики, метаданные).

spruthub-cli switch <ID> <on/off>

sprut_set_switch

Быстрое включение/выключение любого реле, выключателя, розетки или лампы.

spruthub-cli set <aId> <sId> <cId> <val>

sprut_set_characteristic

Установка любого значения характеристики (яркость, температура, режим).

История и датчики

spruthub-cli history <ID> [char] [--days N]

sprut_get_history

Выгрузка временных рядов, расчет аналитики (min/max/avg/delta) и дневных сводок.

Сценарии

spruthub-cli scenarios [-s query]

sprut_list_scenarios

Список настроенных сценариев автоматизации и их статус.

spruthub-cli scenario run <name_or_idx>

sprut_run_scenario

Запуск сценария автоматизации по имени или индексу.

Диагностика

spruthub-cli logs [--count N] [--level LVL]

sprut_get_logs

Просмотр системных логов контроллера и ошибок драйверов.

spruthub-cli extensions

sprut_list_extensions

Статус всех протокольных расширений (Zigbee, BLE, HomeKit, MQTT и др.).

Каталог шаблонов

spruthub-cli catalog list [-s query]

sprut_list_catalog

Поиск и просмотр шаблонов поддерживаемых устройств в каталоге.

spruthub-cli catalog get <model_or_file>

sprut_get_catalog_template

Получение схемы и маппинга сервисов конкретного шаблона оборудования.

📖 Полная документация низкоуровневого протокола: docs/SPRUTHUB_API.md — карта всех 18 модулей и 62 RPC-методов ядра SprutHub.


Где взять токен (локальный пароль)?

Всё настраивается за 10 секунд прямо из веб-интерфейса SprutHub:

  1. В браузере откройте веб-интерфейс хаба (http://<IP_ХАБА>).

  2. Перейдите в Настройки → Пользователи → откройте карточку вашего пользователя (Владелец).

  3. Скопируйте значение из поля «Локальный пароль» (при необходимости можно сгенерировать новый кнопкой «Сгенерировать новый пароль»).


Конфигурация

Для работы требуется всего два параметра: IP-адрес (или хост) хаба и локальный пароль.

Конфигурация автоматически определяется по цепочке:

  1. Переменные окружения (SPRUTHUB_HOST и SPRUTHUB_TOKEN).

  2. Системный файл конфигурации:

    • Linux / macOS: ~/.config/spruthub/config.json

    • Windows: %APPDATA%\spruthub\config.json

  3. Локальный файл ./config.json в рабочей директории.

Пример config.json:

{
  "host": "192.168.1.100",
  "token": "ВАШ_ЛОКАЛЬНЫЙ_ПАРОЛЬ"
}

(Также поддерживается указание домена, например "host": "spruthub.local" или полного WebSocket URL, если у вас нестандартный порт или реверс-прокси).


Варианты использования

Режим 1: Skill для Antigravity / Claude Code (Рекомендуется)

Идеальный режим: 0 байт RAM в простое, 0 лишних токенов в контексте.

Ничего вручную копировать не нужно! Выберите любой удобный вариант:

Вариант А: Через промпт вашему AI-агенту (в 1 клик)

Просто отправьте вашему ассистенту в чат сообщение:

«Установи скилл SprutHub из репозитория pikerr/spruthub-mcp. Мой хост: 192.168.1.100, локальный пароль: ВАШ_ПАРОЛЬ»

Агент сам вызовет команду установки, сохранит конфиг и настроит скилл.

Вариант Б: Одной командой в терминале (Self-install)

uvx --from git+https://github.com/pikerr/spruthub-mcp spruthub-cli install --host 192.168.1.100 --token ВАШ_ПАРОЛЬ

Команда автоматически:

  1. Сохранит данные в ~/.config/spruthub/config.json с правами доступа 600.

  2. Установит скилл в ~/.gemini/config/skills/spruthub/ (и ~/.claude/skills/).

  3. Проверит соединение с вашим хабом.

После этого агент готов к управлению («выключи свет в спальне», «какая температура в кабинете»).


Режим 2: MCP Server (для Claude Desktop / Cursor)

Автоматическая регистрация (Рекомендуется):

Одной командой зарегистрирует сервер в Claude Desktop и/или Cursor (с сохранением резервной копии старого конфига):

uvx --from git+https://github.com/pikerr/spruthub-mcp spruthub-cli install-mcp --host 192.168.1.100 --token ВАШ_ПАРОЛЬ

(Либо передайте флаг --mcp при первой установке: spruthub-cli install --mcp, и утилита настроит и Skill, и Claude Desktop сразу).

Ручная настройка:

Если вы предпочитаете прописать конфиг вручную в claude_desktop_config.json:

{
  "mcpServers": {
    "spruthub": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/pikerr/spruthub-mcp", "spruthub-mcp"],
      "env": {
        "SPRUTHUB_HOST": "192.168.1.100",
        "SPRUTHUB_TOKEN": "ВАШ_ЛОКАЛЬНЫЙ_ПАРОЛЬ"
      }
    }
  }
}

Лицензия

MIT

Available Tools

18 tools
sprut_create_roomC

Create a new room in the smart home.

Args: name: Name for the new room.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/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 behavioral burden, yet it says nothing about required permissions, what happens when a room name already exists, whether the operation is idempotent, or what state the new room starts in. An output schema exists, so return format is partially covered, but the mutation semantics remain undisclosed.

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 purpose sentence is front-loaded and the 'Args' block is compact. The argument line is largely redundant with the schema title 'Name', but it costs little and the overall definition is not bloated.

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

Completeness2/5

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

For a no-annotation mutation tool that is part of a CRUD room family, the description omits prerequisites, duplicate-name behavior, and any linkage to update/delete/list siblings. The presence of an output schema excuses it from describing return values, but the gaps elsewhere leave it thin.

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

Parameters2/5

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

Schema description coverage is 0% and there is one parameter, so the description is the only source of parameter meaning. It merely restates the field ('name: Name for the new room') without adding constraints such as uniqueness, length, or whether the name is free-form or must be unique across rooms.

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?

States a specific verb and resource ('Create a new room'), so an agent immediately knows this is a creation operation. It does not, however, distinguish itself in the description from siblings like sprut_update_room or sprut_delete_room, leaving that differentiation to the tool name alone.

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 offers no when-to-use guidance and never references the closely related siblings (sprut_list_rooms, sprut_update_room, sprut_delete_room). An agent must infer that this is the create branch of a CRUD set with no explicit routing help.

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

sprut_delete_roomC

Delete a room from the smart home.

Args: room_id: ID of the room to delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
room_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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. It says 'Delete' but never discloses whether the operation is irreversible, what happens to devices still assigned to the room, or what permissions are required — significant gaps for a destructive mutation.

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?

Front-loaded with the action and resource, followed by a brief Args section. No filler, though the 'Args:' boilerplate is slightly redundant for a single obvious parameter.

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

Completeness2/5

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

For a destructive tool with zero annotations, the definition omits cascading effects, reversibility, and permission requirements. Output schema existence excuses explaining return values, but the behavioral gaps leave it materially incomplete.

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

Parameters3/5

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

Schema description coverage is 0%, so the description is the only source of parameter meaning; it correctly identifies room_id as the ID of the room to delete. However, it adds nothing about format, how to obtain the ID (e.g., via sprut_list_rooms), or type expectations beyond the schema.

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 states a specific verb ('Delete') and resource ('a room from the smart home'), making it clearly distinguishable from siblings like sprut_create_room and sprut_update_room. It stops short of explicitly naming those alternatives, but the action is unambiguous.

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?

There is no guidance on when to use this versus sprut_update_room, nor any prerequisites, exclusions, or confirmation semantics. The agent must infer usage entirely from the tool name.

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

sprut_get_catalog_templateB

Get full device template and definition from catalog.

Args: file_or_model: Template file path or model name. store: Optional catalog store (default MAIN). controller: Optional controller (e.g. zigbee).

ParametersJSON Schema
NameRequiredDescriptionDefault
storeNo
controllerNo
file_or_modelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. The verb 'Get' plus 'full device template and definition' makes the read-only nature clear, and the defaults for store/controller are disclosed. However, it says nothing about failure behavior when a template is not found, whether lookups are cached or hit live hardware, or any auth requirement.

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 purpose sentence is front-loaded and the Args block is terse and scannable. The only minor inefficiency is rendering parameter documentation as a literal 'Args:' block inside prose rather than as structured fields.

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?

An output schema exists, so return values need not be explained, and all three parameters are documented in the description despite 0% schema coverage. What is missing is only edge-case behavior (missing template, invalid store/controller values), which is acceptable for a simple read tool.

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?

Schema description coverage is 0%, so the description must compensate, and it does: it defines file_or_model as a 'template file path or model name,' marks store as optional with a default of MAIN, and gives a concrete example value for controller ('e.g. zigbee'). The only weakness is that the stated MAIN default does not match the schema's null default.

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 first sentence gives a specific verb+resource: 'Get full device template and definition from catalog.' That distinguishes it from list-style siblings (sprut_list_catalog, sprut_list_devices) and from sprut_get_device, since the object is a catalog template. It stops short of explicitly naming the sibling it differs from, so it lands at 4 rather than 5.

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?

There is no statement of when to use this tool versus sprut_list_catalog (to discover templates) or sprut_get_device (to read a paired device). The only contextual hint is 'Optional catalog store (default MAIN),' which describes a parameter rather than a usage condition. Usage must be inferred entirely from the name.

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

sprut_get_deviceC

Get complete details and all characteristics of a specific accessory.

Args: accessory_id: The ID of the accessory (e.g. 1155).

ParametersJSON Schema
NameRequiredDescriptionDefault
accessory_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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 behavioral burden. 'Get' implies a read, but it says nothing about permissions, error behavior for an invalid ID, or what 'all characteristics' concretely includes.

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?

Front-loaded single sentence stating purpose, followed by a compact Args block. No filler, though the Args section restates the one parameter already in the schema.

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?

An output schema exists, so return values need not be explained, and the single parameter is identified. Still missing how to obtain the accessory_id and failure behavior, which matters for a lookup tool.

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

Parameters3/5

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

Schema coverage is 0% and the schema only has the title 'Accessory Id', so the description must compensate. It does add a concrete example (1155) and clarifies the ID identifies an accessory, but gives no format or source for obtaining the ID.

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?

States a specific verb (Get) and resource (details/characteristics of a specific accessory), which implicitly distinguishes it from the sibling sprut_list_devices by scoping to a single device. However, it never names the sibling or contrasts explicitly.

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?

No when-to-use or when-not-to-use guidance, and no mention of alternatives such as sprut_list_devices for discovering IDs. Usage is only inferable from the phrase 'specific accessory'.

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

sprut_get_historyC

Retrieve historical telemetry data and statistics for sensor or accessory characteristics.

Args: accessory_id: ID of the accessory. service_id: Optional Service ID (sId). characteristic_id: Optional Characteristic ID (cId). days: Optional time window in days (e.g. 7). hours: Optional time window in hours (e.g. 24). limit: Optional maximum number of records to retrieve.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
hoursNo
limitNo
service_idNo
accessory_idYes
characteristic_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It implies a read-only fetch, but discloses nothing about pagination, default windows, ordering, whether 'statistics' are computed server-side, or what happens when days and hours are both supplied. An output schema exists, but the description still omits operational constraints an agent needs.

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

Conciseness3/5

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

The one-line summary is front-loaded and effective, but the Args list largely restates the input schema's property names and titles with minimal added value, padding the description without resolving the open questions.

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?

An output schema is present, so return-value explanation is not required. Still, for a 6-parameter tool with zero schema coverage, the description should clarify the days/hours relationship and default fetch behavior; it is adequate but leaves gaps an agent would have to guess around.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate, and it does provide per-parameter meaning plus the useful sId/cId mapping for service_id and characteristic_id. However, it leaves key ambiguities unresolved: the interaction between days and hours, default limit/window behavior, and accepted units beyond the examples.

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 states a specific verb (Retrieve) and resource (historical telemetry data and statistics) scoped to sensor/accessory characteristics. That distinguishes it from catalog/scene siblings like sprut_list_devices or sprut_run_scenario, though it does not explicitly contrast with sprut_get_logs, which could plausibly overlap.

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?

There is no statement of when to choose this tool over alternatives such as sprut_get_logs or sprut_get_summary, nor any prerequisite context (e.g., needing an accessory discovery step first). Usage must be inferred entirely from the name and args list.

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

sprut_get_hub_infoA

Get general information about the SprutHub controller (name, model, firmware version, online status).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. 'Get' implies a safe read with no side effects, which is reasonable for a zero-parameter tool, but it does not explicitly state read-only behavior, permission requirements, or whether the call hits the network/hub synchronously.

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?

A single front-loaded sentence with the verb, resource, and payload all in the first clause. No filler or redundancy.

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?

With an output schema present, the description need not explain return structure, and the enumerated fields are a helpful preview rather than a substitute. For a no-param read tool this is nearly complete; only the hub-vs-summary distinction is left implicit.

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 takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The field list in parentheses describes the response rather than inputs, adding no parameter meaning because none is needed.

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?

Names a specific verb (get) and resource (SprutHub controller info) and enumerates the returned fields (name, model, firmware, online status). It is distinguishable from device-level siblings like sprut_get_device, though it does not clarify its boundary against sprut_get_summary, which likely overlaps.

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?

No when-to-use guidance, no conditions, and no reference to alternatives such as sprut_get_summary. The agent is left to infer that this is the hub-level status lookup rather than the aggregate summary.

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

sprut_get_logsC

Get recent system and driver logs from SprutHub.

Args: count: Number of log entries to retrieve (default 50). level: Optional filter by log level (e.g. ERROR, WARN, INFO).

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
levelNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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 behavioral burden. 'Get recent' implies a safe read and a recency window, but nothing is said about ordering, pagination, whether logs are truncated, retention limits, or auth/permission requirements.

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 core purpose is front-loaded in one clean sentence, followed by a compact Args block. The Args section largely restates what the schema already exposes, which is mild redundancy but not bloat.

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?

An output schema exists, so return values need not be explained. With only two optional params and no annotations, the definition is close to adequate, but the absence of any behavioral or usage context leaves an agent under-informed about filtering and result behavior.

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

Parameters3/5

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

Schema description coverage is 0%, so the description is the only source of parameter meaning, and it does document both params: count (entries to retrieve, default 50) and level (filter by level, with examples ERROR/WARN/INFO). The level parameter has no enum in the schema and the description gives only illustrative values, so the semantics of arbitrary strings remain unclear.

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 states a specific verb and resource: 'Get recent system and driver logs from SprutHub,' which is unambiguous. It does not, however, differentiate itself from any sibling tool or explain the scope of the logs (e.g. system vs driver only, time window).

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?

There is no explicit when-to-use guidance, no prerequisites, and no alternatives named. Usage is only implied by the tool name and the 'recent logs' phrasing; an agent gets no help deciding between this and, say, sprut_get_history or sprut_get_summary.

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

sprut_get_summaryB

Get a comprehensive smart home dashboard summary (hub info, users, room counts, device breakdown, extensions, scenarios).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/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. 'Get' implies a read operation, but the description does not explicitly state that it is read-only, nor does it mention any permission requirements, rate limits, or freshness/caching behavior. It adds content categories but no behavioral traits beyond what the verb suggests.

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 definition is a single, efficiently worded sentence. The verb and resource are front-loaded, followed by a parenthetical list of contents, with no wasted words.

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 zero parameters, no annotations, and a present output schema, the description is largely complete for an agent to understand what data the summary provides. The main gap is the absence of usage guidance, but for a parameterless getter with a documented return shape, this is a minor omission.

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 takes zero parameters, which is the baseline for a score of 4. The empty schema is fully documented, and no parameter meaning is needed.

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 states a specific verb (Get) and resource (comprehensive smart home dashboard summary), then enumerates the components (hub info, users, room counts, device breakdown, extensions, scenarios). This clearly differentiates it from individual getter/list siblings by scope and aggregation, though it does not explicitly name those alternatives.

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?

There is no guidance on when to use this tool versus the many sibling tools that return the same underlying data piecemeal (e.g., sprut_get_hub_info, sprut_list_rooms). The description only lists what the summary contains, leaving the agent to infer that it is for a dashboard overview.

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

sprut_list_catalogA

List or search device templates in the SprutHub catalog.

Args: search: Optional query to search by model or manufacturer (e.g. Aubess, TS000F). limit: Max number of templates to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
searchNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/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, but it never states that this is a read-only, non-mutating operation and says nothing about pagination, ordering, or result count behavior. For a low-risk catalog read the gap is modest, and the output schema covers return shape, but the absence of any behavioral statement keeps it at a minimum-viable level.

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?

Two sentences plus a compact Args block, front-loaded with the core purpose. Every line carries information and nothing is padded.

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 simple two-parameter read tool with an output schema that covers return values, the description supplies enough to call it correctly. It lacks behavioral notes such as pagination limits or whether limit caps results, which is a minor but real gap given there are no annotations.

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?

Schema description coverage is 0%, so the description must compensate, and it does: search is explained as a model/manufacturer query with concrete examples (Aubess, TS000F) and limit as the max templates returned. It adds real meaning beyond the bare 'search'/'limit' titles, though it omits default values and search-matching semantics.

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?

States a specific verb pair (list/search) and resource (device templates in the SprutHub catalog), which is clearly distinct from sprut_list_devices, sprut_list_rooms, and sprut_list_extensions. It doesn't explicitly name a sibling alternative, but the 'catalog' noun plus the paired sprut_get_catalog_template makes the boundary easy to infer.

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?

Usage is only implied: the search parameter hints that this is the discovery tool for finding templates by model/manufacturer. There is no explicit statement of when to use this versus sprut_list_devices or sprut_get_catalog_template, and no exclusions or preconditions given.

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

sprut_list_devicesA

List smart home accessories / devices with their controllable services and current values.

Args: room_id: Optional filter to list devices only in a specific room.

ParametersJSON Schema
NameRequiredDescriptionDefault
room_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/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. It discloses what is returned (services and current values) but does not confirm this is a read-only operation, whether results are paginated, or any permission requirements.

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?

Short and front-loaded: purpose in sentence one, the single argument documented immediately after. No filler, though the Args block is slightly formulaic.

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?

With an output schema present, return-value detail is not required, and the description covers purpose plus the sole argument. The main gap is the absence of any behavioral or safety context for a no-annotation tool.

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?

Schema coverage is 0% and room_id has no schema description, but the description compensates by defining it as an optional filter restricting results to a specific room. It adds real meaning beyond the bare 'Room Id' title.

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?

States a specific verb (list) and resource (smart home accessories/devices) plus the payload detail (controllable services and current values). Distinguishable from sprut_get_device by implying a collection, though no sibling is named explicitly.

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?

Usage is only implied through the room_id filter note; there is no statement of when to prefer this over sprut_get_device (single device) or sprut_list_catalog (catalog templates), nor any exclusions. Adequate but leaves routing to inference.

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

sprut_list_extensionsA

List installed protocols and extensions (Zigbee, BLE, HomeKit, MQTT, etc.) and their status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/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. 'List' implies a non-mutating read, which is the key behavioral signal, but there is no mention of permissions, whether status values are live or cached, or any rate/scope constraints.

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?

One sentence, front-loaded with the verb and resource, with examples and the status qualifier appended. Every element earns its place and nothing is padded.

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 parameterless read-only listing tool with an output schema and no annotations, the description covers what the tool returns at a high level. It is nearly complete; only the absence of any routing guidance against the many sibling list/get tools is a minor gap.

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 takes zero parameters, so there are no parameter semantics to document; the baseline for a parameterless tool is 4. Nothing in the description misrepresents or omits parameter behavior.

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?

States a specific verb (List) and a distinct resource (installed protocols/extensions) with concrete examples (Zigbee, BLE, HomeKit, MQTT) and their status. This clearly separates it from sibling resources like devices, rooms, catalog, and scenarios, though it never names an alternative explicitly.

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 says what is listed but gives no when-to-use guidance, no prerequisites, and does not point to any sibling such as sprut_list_devices or sprut_get_hub_info for related queries. Usage is left entirely to inference.

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

sprut_list_roomsA

List all rooms in the smart home with their IDs, names, and sensor summary.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it only partially discharges it. 'List all rooms' implies a non-destructive read over the entire room set, which is useful, but it says nothing about pagination, ordering, size limits, or the freshness of the returned sensor summary.

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?

A single front-loaded sentence with zero filler; the verb, scope, and returned fields are all packed into one line. Nothing in it is redundant or padded.

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 parameterless read tool with an output schema already defining the return shape, the description covers what the agent needs to call it correctly. The only gap is the lack of any routing signal against the many sibling list/get tools.

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 takes zero parameters, so there is no parameter semantics to convey. The baseline for a parameterless tool applies, and the description correctly avoids inventing filter syntax that the schema does not support.

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 states a specific verb and resource ('List all rooms in the smart home') plus the fields returned, so the agent immediately knows what the tool produces. It does not, however, distinguish itself from overlapping siblings such as sprut_get_summary or sprut_list_devices, which could also surface room/sensor data.

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?

There is no when-to-use, when-not-to-use, or alternative named. The exhaustive scope ('all rooms') is mentioned, but nothing tells the agent how this differs from sprut_get_summary or when listing rooms is preferable to fetching a device or room individually.

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

sprut_list_scenariosA

List all automation scenarios configured in SprutHub.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden; 'List' implies a safe read operation but this is not stated outright. It does not disclose pagination, filtering, or permission requirements. The risk is limited because the tool takes no parameters and has an output schema, but the disclosure is thin for an annotation-free tool.

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?

A single front-loaded sentence with no filler. Every word earns its place.

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 zero-parameter read tool with an output schema, the description is sufficient to call it correctly. It could add a note that the listing is unfiltered and returns all scenarios, but nothing essential is missing.

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 takes zero parameters, which is the baseline-4 case; there is nothing for the description to clarify beyond what the empty schema already shows.

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 gives a specific verb (List) and resource (automation scenarios configured in SprutHub), so the agent knows exactly what is returned. It does not explicitly distinguish itself from sibling list tools such as sprut_list_devices or sprut_list_rooms, but the resource noun alone makes the target unambiguous.

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?

There is no guidance on when to use this tool versus alternatives like sprut_run_scenario or sprut_get_summary, and no mention of prerequisites or ordering. Usage is only implied by the name and description.

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

sprut_restart_hubB

Restart the SprutHub controller service.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/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, and it offers almost none. For a disruptive operation it never states the expected downtime, whether connected devices/scenarios are affected, whether authentication is required, or whether the restart is graceful — all things an agent should know before triggering it.

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?

A single front-loaded sentence with zero filler; it identifies the action and the target immediately.

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?

An output schema exists, so return values need not be explained, and the empty parameter set means the schema is self-sufficient. However, for a restart of the controller that all sibling tools depend on, the description omits any warning about service interruption or the conditions under which this should be invoked, leaving a meaningful behavioral gap.

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 takes zero parameters, which is the baseline-4 case under the rubric. There is nothing for the description to clarify beyond the schema.

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 states a specific verb ('Restart') and a specific resource ('the SprutHub controller service'), and 'restart' is unique among the sibling tools (all list/get/set/create/update/delete). It does not explicitly name a sibling it differs from, but the action itself is unambiguous.

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?

There is no explicit when-to-use statement such as 'use when the hub is unresponsive', but usage is strongly implied by the single-purpose verb and the absence of any sibling that could be confused with it. No exclusions or prerequisites are given.

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

sprut_run_scenarioB

Trigger / execute an automation scenario by index.

Args: index: The index of the scenario (from sprut_list_scenarios).

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 the full burden. 'Trigger / execute' implies a state-changing action, but nothing is said about side effects on devices/rooms, permissions required, whether execution is synchronous or fire-and-forget, or whether it can be aborted. For a mutation tool with zero annotation coverage this is a significant gap.

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?

Two short lines, verb and resource front-loaded, with the parameter note immediately following. The 'Args:' docstring boilerplate is slightly formal for a single parameter but costs nothing.

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?

An output schema exists, so return values need not be described. The remaining gap is behavioral: a no-annotation mutation tool should disclose side effects or preconditions, and the description stops at how to address the scenario rather than what invoking it does.

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

Parameters3/5

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

Schema coverage is 0% and the only parameter is titled just 'Index'. The description supplies meaningful semantics — that index identifies a scenario and originates from sprut_list_scenarios — which the schema does not. It still omits format/type expectations (the schema types it as a string despite being an 'index'), so it partially but not fully compensates.

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?

States a specific verb ('Trigger / execute') and resource ('automation scenario'), and the qualifier 'by index' pins down the addressing mode. It implicitly distinguishes itself from the read-only sprut_list_scenarios sibling by naming it as the index source, though it never explicitly contrasts the two.

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 parenthetical '(from sprut_list_scenarios)' gives a real usage pointer — the agent knows to call the lister first to obtain the index. However, there is no guidance on when to run a scenario, what preconditions must hold, or any exclusions.

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

sprut_set_characteristicC

Set any characteristic on an accessory (brightness, temperature, mode, etc.).

Args: accessory_id: The ID of the accessory. service_id: The ID of the service (sId). characteristic_id: The ID of the characteristic (cId). value: The target value to set (boolean, integer, float, or string).

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYes
service_idYes
accessory_idYes
characteristic_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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 never states whether this requires specific permissions, whether the change is reversible, what happens on an invalid characteristic, or what confirmation/error is returned. Only the accepted value types are surfaced, which is thin for a mutation tool.

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?

Front-loads the purpose in one sentence followed by an Args block that mirrors the required parameters. The structure is clean and each element is relevant, though the Args list is somewhat boilerplate.

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?

An output schema exists so return values need not be described. However, for a no-annotation mutation tool with a generic sibling, the definition omits usage routing and behavioral expectations, leaving it only partially complete.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate, and it does document all four parameters including the helpful sId/cId hints. However, the descriptions are shallow: value format, valid ranges, and how to obtain accessory/service/characteristic IDs are not explained.

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?

States a specific verb (set) and resource (any characteristic on an accessory) with concrete examples like brightness, temperature, and mode. It does not distinguish itself from the sibling sprut_set_switch, which is likely a specialized setter for the same domain.

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?

No when-to-use guidance, prerequisites, or alternatives are given. The sibling sprut_set_switch is an obvious alternative for switch-type characteristics, yet the description never explains when to prefer this generic setter over it or what IDs must be resolved first.

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

sprut_set_switchB

Turn a switch, light, or relay ON or OFF.

Args: accessory_id: The ID of the accessory (e.g. 1155). on: True to turn ON, False to turn OFF. service_id: Optional service ID if the accessory has multiple switches. If omitted, the first Switch service is used automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
onYes
service_idNo
accessory_idYes

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 behavioral burden, yet it says nothing about permissions, idempotency, or what happens on an invalid accessory_id. The one behavioral fact it does disclose, the automatic fallback to the first Switch service when service_id is omitted, is genuinely helpful.

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?

A single purpose sentence followed by a compact, front-loaded Args block; every line carries information. The trailing newline/formatting is slightly rough but nothing is wasted.

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?

An output schema exists, so return values need not be described, and all three parameters are covered. However, for a state-mutating tool with zero annotations, the absence of any error/failure or permission context leaves a real gap.

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?

Schema description coverage is 0%, so the description must compensate, and it largely does: accessory_id gets an example value, on is defined as True=ON/False=OFF, and service_id's optionality and default-resolution behavior are explained. It does not state the valid range/format of service_id beyond 'optional service ID'.

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?

States a specific verb (turn ON/OFF) and specific resources (switch, light, relay), so the agent can immediately tell what changes. It does not differentiate itself from the sibling sprut_set_characteristic, which could plausibly overlap, so it stops short of a 5.

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 explains how to target the right service when an accessory has multiple switches, which is useful, but never says when to use this tool instead of sprut_set_characteristic or what prerequisites exist. No exclusions or alternative-routing guidance is given.

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

sprut_update_roomC

Update or rename an existing room.

Args: room_id: ID of the room to update. name: Optional new name for the room.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
room_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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. It says nothing about permissions required, reversibility, whether omitting 'name' is a no-op or a valid partial update, or what happens to the room's devices. For a mutation tool with zero annotation coverage this is a real gap.

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?

Front-loaded with the core action in one line, followed by a compact args list. No filler, though the args block largely restates the schema property names.

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?

An output schema exists so return values need not be described, and both params are at least named. But with no annotations and a mutation surface, the omission of permissions and partial-update semantics leaves the agent under-informed.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate, and it does document both parameters (room_id as the target, name as an optional new name). However it adds no format or type detail (e.g., integer ID) and does not clarify the null/default behavior visible in the schema.

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?

States a specific verb (update/rename) and resource (existing room), so an agent can distinguish this from sprut_create_room, sprut_delete_room, and sprut_list_rooms by verb alone. It does not explicitly name those siblings, but the purpose is unambiguous.

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?

There is no guidance on when to use this versus sprut_create_room or sprut_delete_room, nor any prerequisites (e.g., does the room need to exist, must it be empty). Usage is only implied by the verb.

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.

  1. 18 tool updatesv0.1.0
    • First observedsprut_create_room
    • First observedsprut_delete_room
    • First observedsprut_get_catalog_template
    • First observedsprut_get_device
    • First observedsprut_get_history
    • First observedsprut_get_hub_info
    • First observedsprut_get_logs
    • First observedsprut_get_summary
    • First observedsprut_list_catalog
    • First observedsprut_list_devices
    • First observedsprut_list_extensions
    • First observedsprut_list_rooms
    • First observedsprut_list_scenarios
    • First observedsprut_restart_hub
    • First observedsprut_run_scenario
    • First observedsprut_set_characteristic
    • First observedsprut_set_switch
    • First observedsprut_update_room

TDQS

B3.4/5.0

Scored across 18 tools

Disambiguation4/5

Most tools target a distinct resource+action (list_rooms, get_device, set_characteristic, restart_hub, etc.), so an agent can pick the right one. Minor overlap exists: sprut_get_summary aggregates hub info, rooms, devices, extensions, and scenarios already covered by dedicated list tools, and sprut_set_switch is a convenience wrapper over sprut_set_characteristic for switch services.

Naming Consistency5/5

Every tool uses the sprut_ prefix followed by a consistent verb_noun pattern (list_catalog, get_device, set_switch, run_scenario, create_room, update_room, delete_room). Naming is uniform and predictable across the whole set.

Tool Count4/5

18 tools is slightly on the heavy side but each maps to a real smart-home operation, so it is not bloated. It earns most of its places, with only sprut_get_summary arguably redundant against the individual list tools.

Completeness4/5

Rooms have full CRUD, devices have list/get/set coverage, and telemetry, logs, catalog, scenarios, and extensions are all reachable. Gaps remain around scenario lifecycle (list/run only, no create/update/delete) and extensions (read-only), but agents can cover the core workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with Home Assistant smart home devices through natural language. Control devices, manage automations, query entity states, and retrieve historical data across your home automation system.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects AI assistants to Home Assistant, enabling them to discover and control smart home entities, services, areas, devices, and cameras via the Model Context Protocol.
    4
    BSD 3-Clause
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to control Home Assistant devices, including lights, switches, and climate devices, through natural language commands.
    -