SprutHub MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SprutHub MCP Serverturn off the lights in the living room"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SprutHub MCP & CLI Server
Высокоуровневая интеграция SprutHub для LLM-ассистентов (Antigravity, Claude Desktop, Cursor, Claude Code, Cline и др.).
Предоставляет два формата работы в одном пакете:
MCP Server (
spruthub-mcp) — стандартный сервер протокола Model Context Protocol (для клиентов без доступа к терминалу, например Claude Desktop).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 с большими языковыми моделями возможны два подхода:
Сырой generic-прокси (Raw RPC Gateway): когда все методы контроллера транслируются в MCP «как есть», а LLM сначала ищет метод через
list_methods, затем запрашивает его схему и пытается вручную собрать сложный JSON-RPC payload.
Недостатки: на каждое действие уходит 3–4 шага диалога, сотни килобайт сырых схем забивают контекст LLM, а сложная вложенность структур SprutHub приводит к частым галлюцинациям модели.Семантический фасад (подход данного проекта): сервер агрегирует рутинную логику внутри себя. Он очищает списки устройств от сервисных метаданных (
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. | |
Комнаты |
|
| Список комнат со сводкой датчиков в реальном времени. |
|
| Создание новой комнаты. | |
|
| Переименование существующей комнаты. | |
|
| Удаление комнаты (с подтверждением). | |
Устройства |
|
| Список устройств и их текущих состояний (с фильтрацией). |
|
| Полная развернутая структура аксессуара (сервисы, характеристики, метаданные). | |
|
| Быстрое включение/выключение любого реле, выключателя, розетки или лампы. | |
|
| Установка любого значения характеристики (яркость, температура, режим). | |
История и датчики |
|
| Выгрузка временных рядов, расчет аналитики (min/max/avg/delta) и дневных сводок. |
Сценарии |
|
| Список настроенных сценариев автоматизации и их статус. |
|
| Запуск сценария автоматизации по имени или индексу. | |
Диагностика |
|
| Просмотр системных логов контроллера и ошибок драйверов. |
|
| Статус всех протокольных расширений (Zigbee, BLE, HomeKit, MQTT и др.). | |
Каталог шаблонов |
|
| Поиск и просмотр шаблонов поддерживаемых устройств в каталоге. |
|
| Получение схемы и маппинга сервисов конкретного шаблона оборудования. |
📖 Полная документация низкоуровневого протокола: docs/SPRUTHUB_API.md — карта всех 18 модулей и 62 RPC-методов ядра SprutHub.
Где взять токен (локальный пароль)?
Всё настраивается за 10 секунд прямо из веб-интерфейса SprutHub:
В браузере откройте веб-интерфейс хаба (
http://<IP_ХАБА>).Перейдите в Настройки → Пользователи → откройте карточку вашего пользователя (Владелец).
Скопируйте значение из поля «Локальный пароль» (при необходимости можно сгенерировать новый кнопкой «Сгенерировать новый пароль»).
Конфигурация
Для работы требуется всего два параметра: IP-адрес (или хост) хаба и локальный пароль.
Конфигурация автоматически определяется по цепочке:
Переменные окружения (
SPRUTHUB_HOSTиSPRUTHUB_TOKEN).Системный файл конфигурации:
Linux / macOS:
~/.config/spruthub/config.jsonWindows:
%APPDATA%\spruthub\config.json
Локальный файл
./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 ВАШ_ПАРОЛЬКоманда автоматически:
Сохранит данные в
~/.config/spruthub/config.jsonс правами доступа600.Установит скилл в
~/.gemini/config/skills/spruthub/(и~/.claude/skills/).Проверит соединение с вашим хабом.
После этого агент готов к управлению («выключи свет в спальне», «какая температура в кабинете»).
Режим 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": "ВАШ_ЛОКАЛЬНЫЙ_ПАРОЛЬ"
}
}
}
}Лицензия
Available Tools
18 toolssprut_create_roomC
Create a new room in the smart home.
Args: name: Name for the new room.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| room_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| store | No | ||
| controller | No | ||
| file_or_model | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| accessory_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| hours | No | ||
| limit | No | ||
| service_id | No | ||
| accessory_id | Yes | ||
| characteristic_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| level | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| search | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| room_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| service_id | Yes | ||
| accessory_id | Yes | ||
| characteristic_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| on | Yes | ||
| service_id | No | ||
| accessory_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| room_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
18 tool updates
v0.1.0- First observed
sprut_create_room - First observed
sprut_delete_room - First observed
sprut_get_catalog_template - First observed
sprut_get_device - First observed
sprut_get_history - First observed
sprut_get_hub_info - First observed
sprut_get_logs - First observed
sprut_get_summary - First observed
sprut_list_catalog - First observed
sprut_list_devices - First observed
sprut_list_extensions - First observed
sprut_list_rooms - First observed
sprut_list_scenarios - First observed
sprut_restart_hub - First observed
sprut_run_scenario - First observed
sprut_set_characteristic - First observed
sprut_set_switch - First observed
sprut_update_room
TDQS
Scored across 18 tools
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.
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.
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.
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
Related MCP Connectors
- mytesla.ioOAuthio.mytesla
Control your Tesla from your AI assistant - climate, charging, access, and security.
Control a Loxone Miniserver smart home: lights, blinds, climate, scenes and energy.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables 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.1MIT
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to Home Assistant, enabling them to discover and control smart home entities, services, areas, devices, and cameras via the Model Context Protocol.4BSD 3-Clause
- AlicenseAqualityDmaintenanceEnables control of Sprut.hub smart home devices through dynamic API discovery and schema validation.319 npm3MIT
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to control Home Assistant devices, including lights, switches, and climate devices, through natural language commands.-