Skip to main content
Glama
yasunorioi

uecs-ccm-mcp

by yasunorioi

uecs-ccm-mcp

MCP server for UECS-CCM greenhouse monitoring and control.

Directly participates in UECS (Ubiquitous Environment Control System) CCM multicast network to read sensor data and send actuator commands — no MQTT broker required.

What is UECS-CCM?

UECS is the Japanese standard protocol for greenhouse environment control, using UDP multicast (224.0.0.1:16520) with XML payloads. CCM (Communication Control Module) packets carry sensor readings (temperature, humidity, CO2, etc.) and actuator commands (irrigation, ventilation, curtain, etc.).

Related MCP server: HueMCP

Features

  • 5 MCP tools for LLM-driven greenhouse control

  • Zero-config networking: joins UDP multicast automatically

  • Safety guardrails: actuator allowlist, rate limiting, max irrigation duration

  • No MQTT dependency: talks CCM directly

  • Standalone test scripts: scp to RPi and run with zero dependencies

Quick Start

Install

pip install uecs-ccm-mcp

Run as MCP Server

uecs-ccm-mcp

Claude Desktop / Claude Code

Add to your MCP config:

{
  "mcpServers": {
    "greenhouse": {
      "command": "uecs-ccm-mcp"
    }
  }
}

MCP Tools

Tool

Description

get_sensor_data

Indoor sensors (temp, humidity, CO2, soil temp, etc.)

get_actuator_status

Actuator states (irrigation, ventilation, curtain)

set_actuator

Control actuators with safety guardrails

get_weather_summary

Outdoor weather station data

list_nodes

Active UECS nodes on the network

Field Test Scripts

Standalone scripts (Python standard library only) for testing on RPi:

# Receive CCM packets
python3 scripts/ccm_receive_test.py
python3 scripts/ccm_receive_test.py --filter InAirTemp

# Send control packets (confirm before sending)
python3 scripts/ccm_send_test.py Irri 1      # Irrigation ON
python3 scripts/ccm_send_test.py Irri 0      # Irrigation OFF
python3 scripts/ccm_send_test.py VenRfWin 50 # Roof window 50%

Supported Hardware

Tested with:

  • ArSprout greenhouse controller (sensor/actuator nodes)

  • Raspberry Pi as CCM participant

  • Any UECS-compliant node

Safety

  • Only allowlisted actuator types can be controlled

  • Minimum 1 second between commands (rate limiting)

  • Maximum 3600 second irrigation duration

  • Auto-OFF timer support

License

MIT

Available Tools

5 tools
get_actuator_statusC

Get current actuator states (irrigation, ventilation, curtain, etc.).

Args: house_id: House identifier (e.g., "h1").

ParametersJSON Schema
NameRequiredDescriptionDefault
house_idNoh1

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It does not explicitly state that it is read-only or describe any side effects, caching, or error behavior. The simple 'Get' implies read but lacks explicit disclosure.

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

Conciseness4/5

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

The description is brief and front-loaded with the purpose. The Args section is slightly redundant given the schema but does not add unnecessary verbosity.

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 1-parameter, read-only tool with an output schema, the description provides the essential purpose and parameter guidance. However, it lacks mention of output nature or any usage constraints, which could improve completeness.

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?

The description adds meaning over the input schema by explaining 'house_id: House identifier (e.g., "h1")'. The schema only provides a title and default, so the description clarifies the parameter's role and gives an example.

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

Purpose4/5

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

The description clearly states 'Get current actuator states' and lists examples like irrigation, ventilation, curtain. This is a specific verb-resource pair that distinguishes it from sibling tools like get_sensor_data or set_actuator.

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 (e.g., vs get_sensor_data for sensors or set_actuator for writing). The description does not mention prerequisites or context.

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

get_sensor_dataA

Get latest greenhouse sensor data (temperature, humidity, CO2, etc.).

Args: house_id: House identifier (e.g., "h1"). Derived from CCM room number. sensor_types: Filter by sensor types. None or ["all"] returns all sensors.

ParametersJSON Schema
NameRequiredDescriptionDefault
house_idNoh1
sensor_typesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It states 'latest' data and filtering options but does not disclose if the operation is read-only, idempotent, or any side effects. Basic transparency is present but incomplete.

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 single sentence summarizing the purpose followed by structured Args. No extraneous text; each part serves a clear function.

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

Completeness4/5

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

For a simple tool with two optional parameters and an output schema, the description covers the essential usage. It could briefly mention the output shape, but the output schema likely handles that. Minor gaps like performance or error handling are acceptable.

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 coverage is 0%, so the description fully compensates. It explains that house_id is derived from CCM room number and that sensor_types can be None or ['all'] to return all sensors, adding crucial 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 the tool gets latest greenhouse sensor data, listing examples like temperature, humidity, CO2. It distinguishes itself from sibling tools which focus on actuators, weather, or node listing.

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 explicit guidance on when to use this tool versus alternatives. While the purpose is clear, there is no mention of when not to use it or which other tools might be more appropriate for related tasks.

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

get_weather_summaryB

Get outdoor weather station data (temperature, humidity, wind, rainfall).

Data comes from ArSprout external weather sensors (e.g., Misol WH65) via UECS-CCM multicast.

Args: house_id: House identifier (e.g., "h1").

ParametersJSON Schema
NameRequiredDescriptionDefault
house_idNoh1

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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

The description discloses that data comes from external sensors via multicast, providing some behavioral context. However, with no annotations, it fails to explicitly state that the operation is read-only, idempotent, or if any permissions are needed. The description is adequate but not fully transparent.

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 for purpose and one for the parameter. No redundant information. Front-loaded with the key purpose. Every word 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?

Given the presence of an output schema, return values need not be described. However, the missing usage guidelines and behavioral transparency gaps make the description less complete than it could be for a tool with no annotations. It covers core purpose but not context of use.

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

Parameters2/5

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

The parameter house_id has no description in the schema (0% coverage). The description adds only an example ('h1') and states it's a house identifier, but does not explain how to obtain valid IDs, the default behavior, or what happens if omitted. This adds minimal value beyond the parameter name.

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

Purpose4/5

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

The description clearly states the tool retrieves outdoor weather data including temperature, humidity, wind, and rainfall. It names the specific sensor type and protocol, but does not explicitly differentiate from sibling tools like get_sensor_data, which may also return weather-related measurements.

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 such as get_sensor_data. No mention of prerequisites, constraints, or situations where this tool is inappropriate. The description only states what it does without context for selection.

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

list_nodesA

List UECS nodes detected on the network.

Nodes are tracked by their source IP address and the CCM data types they broadcast.

Args: active_only: If True, only show nodes seen in the last 5 minutes.

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description must disclose behavioral traits. It indicates a read-like operation (List) and explains node tracking criteria. However, it does not mention any side effects, permissions, rate limits, or whether results are cached, which are important for safe invocation.

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: two sentences and one argument doc. It is front-loaded with the core purpose, then provides parameter details. No unnecessary 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 the tool's simplicity (one optional param, output schema exists), the description adequately covers what the tool does and the parameter behavior. It could mention output structure or pagination, but the existence of an output schema reduces the need. The description is sufficiently complete for an agent to invoke the tool correctly.

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%, but the description adds meaning to the only parameter, active_only, explaining its effect (showing nodes seen in last 5 minutes when True). This compensates for the schema deficiency and provides useful context beyond the default 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?

The description clearly states the tool lists UECS nodes on the network, specifying tracking by source IP and CCM data types. This distinguishes it from siblings (e.g., get_actuator_status, get_sensor_data) which retrieve specific data, not node lists.

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

Usage Guidelines3/5

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

The description implies use when needing a list of nodes, but does not explicitly state when to use this tool versus alternatives or provide exclusion criteria. The active_only argument is explained, but no guidance on when to set it vs not.

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

set_actuatorA

Control a greenhouse actuator via CCM packet.

SAFETY: Only allowed actuator types can be controlled. Irrigation has a maximum duration of 3600 seconds. Minimum 1 second between commands.

Args: actuator: CCM actuator type (e.g., "Irri", "VenFan", "VenRfWin", "ThCrtn"). state: True=ON/OPEN, False=OFF/CLOSE. priority: CCM priority (1=emergency, 10=normal, 30=low). duration_seconds: Auto-OFF timer in seconds. If set, actuator turns OFF automatically after this duration. house_id: House identifier (e.g., "h1").

ParametersJSON Schema
NameRequiredDescriptionDefault
stateYes
actuatorYes
house_idNoh1
priorityNo
duration_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses safety limits and parameter effects but omits error handling, authentication needs, or side effects. Partial but not comprehensive.

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

Conciseness4/5

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

Description is well-structured with a clear purpose sentence followed by safety notes and parameter details. Every sentence is relevant, though could be slightly more concise.

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?

Covers parameters and safety well, but given no annotations and an output schema, it lacks explanation of return values or error scenarios, leaving some incompleteness.

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%, yet the description explains all 5 parameters with purpose, examples, and allowed values, adding significant value 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 the tool controls a greenhouse actuator via CCM packet, with specific verb and resource. It implicitly distinguishes from sibling read-only tools like get_actuator_status.

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?

While safety constraints (allowed types, max duration, min interval) are provided, there is no explicit guidance on when to use this tool versus alternatives or when not to use it. Context makes it clear it's for actuation, but lacks formal direction.

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. 5 tool updatesv0.1.0
    • First observedget_actuator_status
    • First observedget_sensor_data
    • First observedget_weather_summary
    • First observedlist_nodes
    • First observedset_actuator

TDQS

A3.7/5.0

Scored across 5 tools

Disambiguation5/5

Each tool serves a distinct purpose: reading sensor data, weather, actuator status, listing network nodes, and controlling actuators. No overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case (get_, list_, set_), making them predictable and easy to understand.

Tool Count5/5

Five tools is well-scoped for greenhouse monitoring and control, covering essential operations without unnecessary duplication or gaps.

Completeness4/5

The set covers core CRUD-like operations (read sensor data, control actuator) but lacks historical data retrieval or detailed node diagnostics, which are minor gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers