Skip to main content
Glama
norman2112

bhyve-mcp

by norman2112

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://devices and bhyve://device/{device_id}/zones

  • Transport: stdio (local MCP)

Requirements

  • Python 3.10+

  • uv (recommended) or pip

  • Orbit B-Hyve account

Setup

  1. Clone this repo and install dependencies:

cd bhyve-mcp
uv sync
  1. Copy credentials:

cp .env.example .env
# Edit .env with your BHYVE_EMAIL and BHYVE_PASSWORD

Cursor / 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.py

Architecture

  • FastMCP (mcp Python SDK) — MCP tool/resource server over stdio

  • Vendored 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_watering defaults to a 30-minute max unless allow_extended_runtime=true

  • Rain delay capped at 168 hours (7 days)

  • Watering duration capped at 120 minutes

License

MIT

Available Tools

12 tools
disable_rain_delayA

Cancel an active rain delay.

Args:
    device_id: Device ID from list_devices.
ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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).
ParametersJSON Schema
NameRequiredDescriptionDefault
hoursYes
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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).
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
per_pageNo
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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".
ParametersJSON Schema
NameRequiredDescriptionDefault
modeYes
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
zoneYes
minutesYes
device_idYes
allow_extended_runtimeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
zoneYes
enabledYes
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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

Given the tool's simplicity 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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).
ParametersJSON Schema
NameRequiredDescriptionDefault
budgetNo
device_idYes
frequencyNo
program_idYes
start_timesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 12 tool updatesv0.1.0
    • First observeddisable_rain_delay
    • First observedenable_rain_delay
    • First observedget_device_status
    • First observedget_programs
    • First observedget_watering_history
    • First observedget_zone_details
    • First observedlist_devices
    • First observedset_device_mode
    • First observedstart_watering
    • First observedstop_watering
    • First observedtoggle_smart_watering
    • First observedupdate_program

TDQS

A3.9/5.0

Scored across 12 tools

Disambiguation5/5

Each tool has a clear, distinct purpose: listing devices, getting status, controlling watering, rain delays, programs, etc. There is no overlap between tool functionalities.

Naming Consistency5/5

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.

Tool Count5/5

12 tools cover the essential operations for a smart irrigation controller without being overwhelming or too sparse. The count is appropriate for the domain.

Completeness4/5

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

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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.
    1
    MIT
  • F
    license
    Not graded
    quality
    F
    maintenance
    Enables managing OpenSprinkler irrigation controllers via Claude Desktop, including starting/stopping stations, setting rain delays, and viewing controller status.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for Hunter Hydrawise irrigation controllers, exposing the Hydrawise REST API as tools for AI agents to manage watering schedules and controller settings.
    -
  • A
    license
    A
    quality
    C
    maintenance
    MCP 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.
    24
    7
    MIT