bhyve-mcp
This MCP server lets you monitor and control Orbit B-Hyve smart irrigation systems from any MCP-compatible client (e.g., Claude Code, Cursor).
Read / Query
List all devices — retrieve all B-Hyve devices (controllers, hubs, hose timers, flood sensors), including IDs, names, types, firmware, and connectivity
Get device status — check current watering state, rain delays, and real-time status
Get zone details — view detailed information for all zones/stations on a device
Get watering programs — list all scheduled watering programs for a device
Get watering history — retrieve recent watering history for a device
Write / Control
Start watering — begin watering a specific zone for a set duration (1–120 min); durations over 30 min require explicit override
Stop watering — immediately stop all active watering on a device
Enable rain delay — pause all scheduled watering for 1–168 hours (up to 7 days)
Disable rain delay — cancel an active rain delay early
Set device mode — switch a device between
autoandoffoperating modesUpdate a watering program — modify start times, frequency, and watering budget percentage
Toggle Smart Watering — enable or disable the Smart Watering feature for a specific zone
Resources
bhyve://devices— browse all devicesbhyve://device/{device_id}/zones— browse zones for a specific device
Authentication uses your B-Hyve account credentials (email + password) via environment variables.
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., "@bhyve-mcpstart watering zone 1 for 20 minutes"
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.
bhyve-mcp
An MCP server for Orbit B-Hyve smart irrigation systems. Query device status, zones, and watering history — or start/stop watering, set rain delays, and manage programs — from Claude Code, Cursor, or any MCP-compatible client.
Why This Exists
I built this to control my sprinkler system from the same AI tools I use for everything else. Instead of opening the B-Hyve app to check zone status or adjust a rain delay, I can do it from a Claude conversation or a Cursor terminal.
It's also a good example of an MCP server that bridges REST (reads) and WebSocket (writes) APIs under a single interface — a different integration pattern than my other MCP servers which are pure REST or REST+SOAP.
Related MCP server: opensprinkler-mcp
Features
Read tools: list devices, device status, zones, programs, watering history
Write tools: start/stop watering, rain delay, device mode, program updates, smart watering toggle
Resources:
bhyve://devicesandbhyve://device/{device_id}/zonesTransport: stdio (local MCP)
Requirements
Python 3.10+
uv (recommended) or pip
Orbit B-Hyve account
Setup
Clone this repo and install dependencies:
cd bhyve-mcp
uv syncCopy credentials:
cp .env.example .env
# Edit .env with your BHYVE_EMAIL and BHYVE_PASSWORDCursor / Claude Code configuration
Add to ~/.cursor/mcp.json or your project's .mcp.json:
{
"mcpServers": {
"bhyve": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/bhyve-mcp",
"python",
"-m",
"bhyve_mcp.server"
],
"env": {
"BHYVE_EMAIL": "your-email@example.com",
"BHYVE_PASSWORD": "your-password"
}
}
}
}Replace /path/to/bhyve-mcp with the absolute path to this directory.
Development
# Run tests
uv run pytest
# Interactive MCP testing
uv run mcp dev src/bhyve_mcp/server.pyArchitecture
FastMCP (
mcpPython SDK) — MCP tool/resource server over stdioVendored pybhyve — B-Hyve REST + WebSocket client (from sebr/bhyve-home-assistant)
Session wrapper — lazy auth, token refresh on 401/403, structured errors
Write operations (start watering, rain delay, etc.) use the B-Hyve WebSocket API. Read operations use REST polling.
Safety
start_wateringdefaults to a 30-minute max unlessallow_extended_runtime=trueRain delay capped at 168 hours (7 days)
Watering duration capped at 120 minutes
License
MIT
Available Tools
12 toolsdisable_rain_delayA
Cancel an active rain delay.
Args:
device_id: Device ID from list_devices.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes |
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 must disclose behavioral traits. It only states the action without mentioning error states (e.g., if no rain delay is active), side effects, or idempotency. This is insufficient for an agent to understand the tool's behavior.
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 description is extremely concise with no fluff. It front-loads the purpose and includes a parameter note. Every sentence adds value.
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 single-parameter tool with an output schema, the description adequately states the action but lacks detail on return values, error handling, or behavior when no rain delay is active. It is minimally complete given the low complexity.
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 parameter 'device_id' is explained as 'Device ID from list_devices', which adds useful sourcing context beyond the schema. Schema coverage is 0%, and this justification helps the agent retrieve the correct value.
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?
Description clearly states it cancels an active rain delay, using a specific verb-resource pair. It implicitly distinguishes from the sibling 'enable_rain_delay' by being its inverse.
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 guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The phrase 'active rain delay' implies a condition, but no explicit context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_rain_delayA
Enable rain delay (pauses all scheduled watering).
Args:
device_id: Device ID from list_devices.
hours: Hours to delay (1-168, max 7 days).
| Name | Required | Description | Default |
|---|---|---|---|
| hours | Yes | ||
| device_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 present, so the description must fully disclose behavioral traits. It states the effect ('pauses all scheduled watering'), but lacks details on whether it is destructive, if reversion is needed, or any error states. The parameter constraints are given but minimal.
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 description is two sentences followed by a concise bullet list for args. Every word serves a purpose, no redundancy. It is front-loaded with the core action.
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?
The tool is simple with two params, but given 11 siblings and no annotations, the description is minimal. It doesn't explain what happens if already enabled, error conditions, or differentiate strongly from 'disable_rain_delay'. Completeness is adequate but not thorough.
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%, so the description must add meaning. It explains device_id as 'Device ID from list_devices' and hours as 'Hours to delay (1-168, max 7 days).' This adds needed context and constraints beyond the schema types.
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 clearly states 'Enable rain delay (pauses all scheduled watering).' This is a specific verb ('enable') on a resource ('rain delay'), and it distinguishes from the sibling 'disable_rain_delay' by name and action.
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 explicit when-to-use or when-not-to-use guidance is provided. While the name implies usage during rain to pause watering, there is no mention of alternatives or prerequisites. Usage is implied but not directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_statusA
Get current status of a specific device including watering state and rain delays.
Args:
device_id: Device ID from list_devices.
| Name | Required | Description | Default |
|---|---|---|---|
| device_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, and the description only states that the tool returns watering state and rain delays. It does not disclose whether the status includes additional fields, whether there are side effects, authentication requirements, or rate limits. Minimal behavioral context beyond the basic purpose.
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 description is extremely concise with two sentences, front-loaded, and no wasteful text. Every sentence 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?
The tool has one required parameter and an output schema exists. The description covers the main functionality (watering state, rain delays) but is not exhaustive. Given the simplicity of the tool, it provides sufficient context for an agent to select and invoke it correctly.
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%, but the description provides meaningful context for the parameter: 'device_id: Device ID from list_devices.' This tells the agent where to obtain the ID, adding value beyond the schema alone. Baseline 3 is appropriate as it partially compensates for the gap.
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?
Description clearly states 'Get current status of a specific device including watering state and rain delays.' The verb 'Get' indicates a read operation, and the resource 'status of a specific device' is precisely defined. This distinguishes it from sibling tools like enable_rain_delay or start_watering, which are mutations.
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 explicit guidance on when to use this tool versus alternatives. The description implies it's for reading device status, but does not compare to other getters like get_zone_details or list_devices. Usage context is inferred from the tool name and sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_programsB
List watering programs configured for a device.
Args:
device_id: Device ID from list_devices.
| Name | Required | Description | Default |
|---|---|---|---|
| device_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 provided, but description only says 'list' without disclosing read-only behavior, caching, or side effects. Insufficient transparency for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded purpose, no fluff. Efficient and easy to scan.
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 output schema present, return values are covered. But missing behavioral details (safety, real-time) that annotations would provide. Adequate for a simple list tool but not comprehensive.
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%, so description must compensate. It explains device_id source ('from list_devices') but lacks format, validation, or constraints. Marginal value added.
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?
Clearly states the tool lists watering programs for a device, using specific verb+resource. Distinguishes from sibling tools like get_watering_history and get_zone_details.
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 guidance on when to use vs alternatives. The parameter hint 'from list_devices' implies a prerequisite but no explicit when-not or usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watering_historyA
Get recent watering history for a device.
Args:
device_id: Device ID from list_devices.
page: Page number (default 1).
per_page: Results per page (default 10).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| per_page | No | ||
| device_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 indicates a read operation ('Get') but lacks details on pagination behavior, recency definition, or data ordering. The description is adequate but minimal.
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 description is extremely concise with one sentence and a parameter list. Every part is necessary and front-loaded.
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?
The description covers the basic purpose and parameters, but lacks context on time range, sorting, or data freshness. With an output schema present, return values are not needed, but overall completeness is average.
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?
Despite 0% schema description coverage, the description adds value by stating that device_id comes from list_devices, providing cross-reference context that the schema does not capture. Page and per_page are explained with defaults.
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 uses a specific verb and resource: 'Get recent watering history for a device'. It clearly distinguishes from sibling tools like get_device_status (status) and get_zone_details (zone details).
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 does not provide guidance on when to use this tool versus alternatives, nor does it mention when not to use it. It only states its basic function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_zone_detailsB
Get detailed info for all zones on a device.
Args:
device_id: Device ID from list_devices.
| Name | Required | Description | Default |
|---|---|---|---|
| device_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 provided, so the description must disclose behavior. It only states the action without mentioning read-only nature, side effects, permissions, or rate limits. The description adds minimal transparency beyond the tool name.
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 description is extremely concise: one sentence plus a docstring. Every word is necessary and there is no redundancy or wasted space.
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 tool with one parameter and an output schema, the description is minimally adequate. It states the core purpose but lacks additional context that would help an agent, such as the nature of the output or any prerequisites beyond device_id.
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% for parameters, but the description adds the context 'Device ID from list_devices', which provides a source hint. This adds some meaning beyond the schema, but does not fully explain the parameter's role.
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 clearly states the verb 'Get' and the resource 'detailed info for all zones on a device', which is specific and distinct from sibling tools like get_device_status or get_programs.
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 guidance on when to use this tool versus alternatives like get_device_status. The only hint is the device_id source from list_devices, but no exclusionary or comparative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesA
List all B-Hyve devices (controllers, hubs, hose timers, flood sensors) on the account.
Returns device id, name, type, status, firmware, station count, battery, and connectivity. Use device IDs from this response with all other tools.
| 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 full burden for behavioral disclosure. It describes the listing operation but does not explicitly state it is read-only or safe, nor mention side effects, authorization needs, or rate limits. For a parameterless list tool, the description is adequate but minimal.
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 concise sentences: the first states the purpose, and the second lists return fields and provides usage guidance. Every sentence is valuable 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 0 parameters and no annotations, the description provides complete context: what the tool does, what it returns (including specific fields), and how to use the output (device IDs for other tools). The presence of an output schema further supports completeness.
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 has 0 parameters, and schema description coverage is 100% (no params to describe). The baseline for 0 parameters is 4. The description adds no parameter information, but 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?
The description clearly states the tool lists all B-Hyve devices on the account, enumerating device types (controllers, hubs, etc.). It specifies the verb 'list' and the resource 'devices', distinguishing it from sibling tools like get_device_status which focus on individual devices.
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 explicitly says 'Use device IDs from this response with all other tools,' providing clear guidance on when to use this tool as a first step. It does not explicitly mention when not to use it or name alternative tools, but the context from siblings implies specific use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_device_modeA
Set device operating mode.
Args:
device_id: Device ID from list_devices.
mode: Operating mode — "auto" or "off".
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| device_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 provided, and description does not disclose behavioral traits such as reversibility, impact on active operations, or required permissions 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?
Extremely concise with two sentences and clear parameter list; no unnecessary information.
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?
Minimally adequate for a simple setter, but lacks description of return value or side effects; output schema exists but description doesn't reference it.
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?
Adds meaning beyond schema by explaining device_id source and mode allowed values ('auto' or 'off'), despite 0% schema coverage.
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 clearly states the action ('Set device operating mode') and the resource, distinguishing it from sibling tools that are read-only or control specific functions.
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 guidance on when to use this tool vs alternatives like start_watering or stop_watering; lacks context about prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_wateringA
Start watering a specific zone for a given duration.
Safety: durations over 30 minutes require allow_extended_runtime=true.
Args:
device_id: Device ID from list_devices.
zone: Zone/station number (1-indexed).
minutes: Duration in minutes (1-120).
allow_extended_runtime: Set true to allow watering longer than 30 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| zone | Yes | ||
| minutes | Yes | ||
| device_id | Yes | ||
| allow_extended_runtime | 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 the initiation of watering, a safety restriction, and parameter meanings. However, it does not state whether the action is destructive, if it overrides existing schedules, or what the response contains. Additional behavioral context would be beneficial.
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 description is concise with a title, safety note, and structured args list. Every sentence serves a purpose. 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 that an output schema exists (context signal), return values are likely covered. The description adequately explains the action, safety, and parameters. It could mention if it returns success/failure, but the output schema fulfills that role.
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 schema has 0% description coverage, but the description compensates fully by explaining each parameter: 'device_id' from list_devices, 'zone' is 1-indexed, 'minutes' is duration, and 'allow_extended_runtime' allows >30 min. This adds significant meaning beyond the raw 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 clearly states 'Start watering a specific zone for a given duration.' The verb 'start' and resource 'watering a zone' make the purpose specific. It distinguishes from sibling tools like 'stop_watering' by focusing on initiation.
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 provides a clear use case and a safety note about extended runtimes requiring 'allow_extended_runtime=true'. It does not explicitly mention when not to use the tool (e.g., if the device is already watering) or suggest alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_wateringB
Stop all active watering on a device.
Args:
device_id: Device ID from list_devices.
| Name | Required | Description | Default |
|---|---|---|---|
| device_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 exist; the description only states the action without disclosing side effects, required permissions, or device state assumptions (e.g., whether the device must be currently watering).
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 description is extremely concise with two sentences, front-loading the main action and immediately clarifying the parameter source. No redundant information.
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?
The tool is simple (one parameter) and has an output schema (not shown), reducing the burden. Still, missing context like reversibility, device state requirements, or cancellation 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 coverage is 0%, but the description adds value by specifying that 'device_id' comes from 'list_devices,' guiding the agent on data sourcing. However, no format or constraints beyond schema are given.
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 clearly states the verb 'stop' and resource 'active watering on a device,' making the tool's purpose unambiguous. It is distinct from sibling tools like 'start_watering'.
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 guidance on when to use this tool versus alternatives (e.g., 'toggle_smart_watering' or 'disable_rain_delay'). No prerequisites or contextual hints provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_smart_wateringA
Enable or disable Smart Watering for a zone (device-wide water_sense_mode).
Args:
device_id: Device ID from list_devices.
zone: Zone/station number.
enabled: True to enable, false to disable.
| Name | Required | Description | Default |
|---|---|---|---|
| zone | Yes | ||
| enabled | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description should disclose behavioral traits. It only states the action (enable/disable) but does not mention persistence, permission requirements, side effects, or error scenarios.
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 description is extremely concise: one sentence for purpose and a simple args list. Every sentence adds value, no fluff.
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 the tool's simplicity and existence of an output schema (not shown), the description covers basic usage. However, it lacks details on return values or error handling, making it minimally adequate.
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?
With 0% schema coverage, the description adds necessary meaning: explains device_id comes from list_devices, zone is a number, and enabled maps to boolean. This compensates for the schema's lack of descriptions.
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 explicitly states the verb 'Enable or disable' and the resource 'Smart Watering for a zone', also clarifying the context 'device-wide water_sense_mode'. This clearly differentiates from sibling tools like start_watering or stop_watering.
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 guidance on when to use this tool versus alternatives like enable_rain_delay or set_device_mode. The description lacks context for when Smart Watering should be toggled or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_programA
Update an existing watering program's configuration.
Programs must be created in the B-Hyve app first. Only modifies existing programs.
Args:
device_id: Device ID from list_devices.
program_id: Program ID from get_programs.
start_times: Watering start times in HH:MM format.
frequency: Frequency config with type (days|interval), days [0-6], interval int.
budget: Watering budget percentage (0-200, 100 = default).
| Name | Required | Description | Default |
|---|---|---|---|
| budget | No | ||
| device_id | Yes | ||
| frequency | No | ||
| program_id | Yes | ||
| start_times | 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 full burden. It does not disclose whether updates are partial or full, side effects, authorization needs, or return behavior. The output schema exists but is not referenced.
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 description is concise with two sections: a purpose sentence plus a note, followed by an Args list. It is front-loaded with the core action and wastes no 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 the output schema exists, return values are not required. However, the description omits update semantics (e.g., partial vs full update) and does not mention what happens if optional parameters are omitted. It is moderately complete but could be clearer.
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%, but the description compensates fully by explaining each parameter: device_id and program_id sources, start_times format, frequency configuration with type and days/interval, and budget range. This adds significant meaning beyond the bare 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 clearly states it updates an existing watering program's configuration, specifying the resource (program) and action (update). This distinguishes it from sibling tools like get_programs (read) and start_watering (action).
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 explicitly says programs must be created in the B-Hyve app first and only modifies existing programs, providing clear when-to-use guidance. However, it does not mention alternatives among siblings or explicitly state when not to use it.
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.
12 tool updates
v0.1.0- First observed
disable_rain_delay - First observed
enable_rain_delay - First observed
get_device_status - First observed
get_programs - First observed
get_watering_history - First observed
get_zone_details - First observed
list_devices - First observed
set_device_mode - First observed
start_watering - First observed
stop_watering - First observed
toggle_smart_watering - First observed
update_program
TDQS
Scored across 12 tools
Each tool has a clear, distinct purpose: listing devices, getting status, controlling watering, rain delays, programs, etc. There is no overlap between tool functionalities.
All tools follow a consistent verb_noun pattern with lowercase and underscores (e.g., enable_rain_delay, get_device_status, start_watering). No mixing of conventions.
12 tools cover the essential operations for a smart irrigation controller without being overwhelming or too sparse. The count is appropriate for the domain.
The tool set covers most key actions (device management, watering, rain delays, programs, history). A minor gap is the inability to create or delete programs, which is noted as requiring the app. Otherwise complete.
Maintenance
Related MCP Connectors
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Marketo MCP server for AI. 130 tools to operate Marketo from Claude, Cursor, or ChatGPT.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that wraps the Ambient Weather REST API. Query your personal weather stations conversationally from Claude Code, Claude.ai, or any MCP-compatible client.1MIT
- FlicenseNot gradedqualityFmaintenanceEnables managing OpenSprinkler irrigation controllers via Claude Desktop, including starting/stopping stations, setting rain delays, and viewing controller status.-
- FlicenseNot gradedqualityDmaintenanceMCP server for Hunter Hydrawise irrigation controllers, exposing the Hydrawise REST API as tools for AI agents to manage watering schedules and controller settings.-
- AlicenseAqualityCmaintenanceMCP server for full control of Rachio sprinkler controllers via the reverse-engineered internal gRPC API, enabling schedule management, manual zone runs, rain delays, and weather data retrieval.247MIT