Skip to main content
Glama
christophe77

netatmo energy mcp

Netatmo Energy MCP

English | Français

CI License: Apache-2.0 Node.js >= 22.19 Glama score

Netatmo Energy MCP server on mcprush

A Netatmo MCP server for Netatmo smart thermostats and smart radiator valves. It gives AI assistants structured access to your heating:

  • room temperatures and setpoints

  • heating demand and boiler activity

  • temperature history

  • deterministic heating analytics

  • weekly heating schedules

  • optional heating control: room setpoints, away / frost-guard mode and schedules, with every change confirmed by you

It runs on your machine and talks only to the official Netatmo Energy API. It is read-only by default: it can change your heating only if you enable write mode at login.

It works with any Model Context Protocol client that runs local servers, whatever the model:

  • Claude: Claude Desktop, Claude Code

  • GPT / OpenAI: Codex CLI, VS Code + GitHub Copilot, Cursor

  • Gemini: Gemini CLI, VS Code + GitHub Copilot

  • Mistral and others through multi-model clients

  • Local LLMs (Llama, Qwen, Mistral, DeepSeek, …): LM Studio, and Ollama via Goose, Continue, Cline, AnythingLLM, LibreChat or Open WebUI

It also works in Windsurf / Devin Desktop, Zed, Roo Code, Kilo Code, JetBrains AI Assistant, Kiro and Warp. See all compatible clients.

ChatGPT and Claude on the web and on mobile only accept remote servers. For them, deploy the optional remote server to your own Cloudflare account (free plan).

Status: early release (0.3.2). The Netatmo API integration has been validated on a real installation; feedback and device reports are welcome.

Why this project?

A Netatmo heating system records useful data:

  • the temperature and setpoint of every room

  • what each radiator valve is asking for

  • when the boiler is asked to heat

That data is locked in the Netatmo app, where you can look at it but not ask questions about it.

This project is a small bridge between the Netatmo Energy API and any MCP-compatible AI assistant. Ask in plain language: "Which room was coldest last night?" The assistant calls a precise tool and answers from your data. It doesn't guess. With write mode enabled, you can also say "Set the bedroom to 19 °C until 7 am", then confirm the change.

The few other Netatmo MCP servers target Netatmo weather stations. This one is built for thermostats, radiator valves and heating history. See docs/research.md for the comparison.

Related MCP server: Loxone MCP Server

Features

  • Discovery: homes, rooms, thermostats, smart radiator valves, relays and gateways.

  • Current status

    • Per room: temperature, setpoint, setpoint mode and heating demand.

    • Boiler on/off and open-window detection.

    • Device health: battery, radio/Wi-Fi signal, reachability.

  • History

    • Room temperature and setpoint history at 30 min to 1 month resolution.

    • Boiler activity history (installations with a Netatmo thermostat).

    • Long ranges are fetched in chunks and summarised, so answers stay small.

    • Gaps are reported, never filled in.

  • Heating analytics. These are deterministic calculations; no AI model computes the numbers.

    • Per-room statistics.

    • Time below, within or above the setpoint.

    • Largest temperature drop and cool-down rates.

    • Room rankings.

    • Rule-based detection of unusual readings, each with severity and confidence.

  • Weekly schedules: zones (Comfort, Night, Eco…), room setpoints per zone and the timetable, as readable days and times.

  • Heating control (opt-in write mode)

    • Temporary room setpoints that always end (3 h by default, at most 24 h), or a return to the schedule.

    • Home mode: schedule, away or frost guard, optionally until a date.

    • Switch, create, edit and rename weekly schedules.

    • Every change is previewed and needs your explicit confirmation. Temperatures are limited to 7–28 °C by default.

  • 15 read-only MCP tools, 6 heating-control tools, 4 resources and 4 prompts (daily report, anomaly review, room comparison, heating pattern review).

  • Simple setup

    • OAuth2 browser login with a single login command.

    • Tokens stored securely and refreshed automatically.

    • doctor checks your setup.

Quick start

You need Node.js 22.19 or later and a Netatmo account with Energy devices.

1. Create a free Netatmo developer app

  1. At https://dev.netatmo.com/apps, choose Create.

  2. Set the redirect URI to http://localhost:8977/callback.

  3. Keep the client ID and client secret for step 2.

Step-by-step guide: docs/authentication.md.

2. Log in

npx -y netatmo-energy-mcp login

login asks for the client ID and secret, then opens your browser so you can sign in on netatmo.com and approve read-only access. To let the assistant change your heating, run login --write instead (see write mode). Then check the setup:

npx -y netatmo-energy-mcp doctor

Running from source instead: clone the repository, run pnpm install && pnpm build, then use node /path/to/netatmo-energy-mcp/dist/index.js in place of npx -y netatmo-energy-mcp.

3. Connect your AI assistant

Most clients use the same mcpServers JSON block. This works for Claude Desktop, Cursor, Windsurf / Devin Desktop, Cline, Roo Code, Kiro, LM Studio, JetBrains AI Assistant, AnythingLLM, Warp and Gemini CLI:

{
  "mcpServers": {
    "netatmo-energy": {
      "command": "npx",
      "args": ["-y", "netatmo-energy-mcp"]
    }
  }
}

Command-line clients:

# Claude Code
claude mcp add --transport stdio --scope user netatmo-energy -- npx -y netatmo-energy-mcp
# OpenAI Codex CLI
codex mcp add netatmo-energy -- npx -y netatmo-energy-mcp
# GitHub Copilot CLI
copilot mcp add netatmo-energy -- npx -y netatmo-energy-mcp

Claude Code plugin. Instead of claude mcp add, install the plugin: it adds the server plus a skill that teaches Claude how to diagnose a cold room, write heating reports and change the heating safely. Inside Claude Code:

/plugin marketplace add christophe77/netatmo-energy-mcp
/plugin install netatmo-energy@netatmo-energy-mcp

See examples/claude-code.

VS Code + GitHub Copilot. Add this to .vscode/mcp.json; note the servers key:

{
  "servers": {
    "netatmo-energy": { "type": "stdio", "command": "npx", "args": ["-y", "netatmo-energy-mcp"] }
  }
}

No secrets go in any of these files: login stored them in your user configuration folder. File locations for each client, plus Zed, Continue, Goose, LibreChat, Kilo Code, Msty and Open WebUI, are in examples/.

4. Ask

"What's the temperature in each room right now?"

Example questions

These are the kinds of questions the tools are built for. The assistant chooses the tools; the table shows which ones answer each question.

Question

Tools used

"What's the temperature in my bedroom, and is it at its target?"

netatmo_get_room_status

"Is the boiler running right now? Which rooms are asking for heat?"

netatmo_get_heating_status

"How long did my boiler run yesterday?"

netatmo_get_boiler_history

"Show the living room temperature for the last 7 days."

netatmo_get_temperature_history

"Compare my rooms over the last week. Which one cools down fastest?"

netatmo_compare_rooms

"Did my heating behave unusually last night?"

netatmo_detect_anomalies

"Give me yesterday's heating report."

prompt heating_daily_report → netatmo_get_heating_summary

"Are any valve batteries low?"

netatmo_get_device_status

"What does my weekly schedule look like?"

netatmo_get_schedules

Write mode: "Heat the office to 21 °C for 2 hours."

netatmo_set_room_setpoint

Write mode: "I'm away until Sunday evening."

netatmo_set_home_mode

Write mode: "Lower the night zone to 17 °C in every bedroom."

netatmo_get_schedules → netatmo_update_schedule

Boiler "run time" is the time the thermostat requested heat. Netatmo does not measure gas or energy consumption, so this project never reports it.

Available MCP tools

The read-only tools need only the read_thermostat OAuth scope. The full reference, with arguments and outputs, is generated from the server itself: docs/tools.md.

Tool

Description

netatmo_list_homes

Homes with Energy devices, room/device counts

netatmo_get_home

Home details: heating mode, schedules, rooms, devices

netatmo_list_rooms

Rooms with IDs, types and devices

netatmo_list_devices

Thermostats, valves, relays: model, room, gateway

netatmo_get_home_status

Current status of every room, boiler state, alerts

netatmo_get_room_status

Current temperature and setpoint of one room

netatmo_get_heating_status

Boiler on/off, rooms requesting heat

netatmo_get_device_status

Battery, signal, reachability, firmware

netatmo_get_temperature_history

Room temperature history with statistics and gaps

netatmo_get_setpoint_history

Room setpoint history and setpoint periods

netatmo_get_boiler_history

Boiler heat-demand time per hour/day/week

netatmo_get_heating_summary

Per-room comfort metrics plus boiler time over a period

netatmo_compare_rooms

Room metrics and rankings

netatmo_detect_anomalies

Unusual readings with severity, confidence and evidence

netatmo_get_schedules

Weekly schedules: zones, room setpoints, timetable

Write mode only. Each change needs your confirmation.

Tool

Description

netatmo_set_room_setpoint

Temporary room setpoint or boost, or back to the schedule

netatmo_set_home_mode

Schedule, away or frost-guard mode, optionally until a date

netatmo_switch_schedule

Make another weekly schedule active

netatmo_create_schedule

New schedule copied from an existing one, with changes

netatmo_update_schedule

Room setpoints per zone, away/frost temperatures, timetable

netatmo_rename_schedule

Rename a schedule (experimental: undocumented endpoint)

Resources: netatmo://homes and netatmo://homes/{homeId}/rooms, …/devices and …/status.

Write mode (heating control)

Write mode is off by default. To enable it, log in again with:

npx -y netatmo-energy-mcp login --write

This also requests the write_thermostat OAuth scope. The heating control tools appear after you restart your MCP client.

Safeguards:

  • You confirm every change. Clients that support MCP elicitation ask you directly. With other clients, the first call only returns a preview and a one-time token. The assistant must show you the preview and get your agreement before calling again. Nothing is sent to Netatmo before that. This second flow relies on the assistant following its instructions; set NETATMO_MCP_CONFIRM=elicitation to allow changes only through a confirmation prompt shown by your client. If your client cancels every change without showing anything, set NETATMO_MCP_CONFIRM=token.

  • Limits. Temperatures must stay between 7 and 28 °C. Manual setpoints end after 3 h by default and 24 h at most. Change these with NETATMO_MCP_MIN_TEMP, NETATMO_MCP_MAX_TEMP and NETATMO_MCP_MAX_SETPOINT_HOURS.

  • Kill switch. NETATMO_MCP_WRITE=0 forces read-only mode, even with a write-enabled login.

  • Audit log. Every applied or failed change is appended to changes.log in your configuration folder.

  • No automatic retries. A failed write is never resent blindly.

Netatmo has no API to delete a schedule: schedules created here can only be deleted in the Netatmo app. Renaming a schedule and choosing a schedule with home mode "schedule" use undocumented Netatmo parameters, so they are marked experimental. Details: docs/configuration.md.

Web and mobile (remote server)

The local server is the simplest and most private option. To use your heating from ChatGPT or Claude on the web and on your phone, deploy the same tools as a remote server on your own Cloudflare account (free plan): remote/README.md.

  • Same tools and safeguards. Read-only by default; write mode with previews, confirmations and the same limits.

  • Your secrets stay in your account. Your Netatmo app credentials and tokens are encrypted at rest in your Cloudflare account.

  • Assistants sign in with OAuth. You approve each one on a consent page with your owner password, and you can revoke it.

  • One command to link your home: npx netatmo-energy-mcp remote setup <your-worker-url>.

  • Optional: let family or friends connect their own Netatmo account with an invite code (ONBOARDING=invite). Each account only sees its own home.

The sign-in flow was validated with ChatGPT (desktop and mobile) and Claude (web, desktop and mobile). Design: ADR-0013, ADR-0014.

Supported devices

Device

Netatmo type

Status

Smart Thermostat

NATherm1

Tested. API validated on a live installation (2026-10-08)

Smart Radiator Valve

NRV

Tested. Same installation (6 valves)

Thermostat Relay

NAPlug

Tested. Same installation

OpenTherm Modulating Thermostat / Gateway

OTM / OTH

Expected to work, untested

BTicino Smarther with Netatmo

BNS

Not supported in v0.1 (probably needs the read_smarther scope)

Run netatmo-energy-mcp probe and open a device compatibility report to help extend this table. The probe output is sanitized.

Compatible AI assistants and MCP clients

This is a standard local (stdio) MCP server, so it is not tied to one AI vendor. Any MCP client that can start local servers can use it, with whatever model that client runs.

Client

Models

Claude Desktop, Claude Code

Claude

OpenAI Codex CLI

OpenAI GPT models

Gemini CLI

Google Gemini

VS Code + GitHub Copilot (agent mode), GitHub Copilot CLI

GPT, Claude, Gemini and other Copilot models

Cursor, Windsurf / Devin Desktop, Zed, Warp, Kiro, JetBrains AI Assistant

multiple hosted models

Cline, Roo Code, Kilo Code, Continue

multiple, including local models (Ollama, LM Studio)

LM Studio

local open models: Llama, Qwen, Mistral, DeepSeek, …

Goose, AnythingLLM, LibreChat, Msty Studio

many providers, including Ollama

Open WebUI

Ollama and others, through the mcpo proxy

Configuration for each client, checked against official documentation: examples/.

Web and mobile assistants (ChatGPT apps and connectors, Claude.ai and the Claude and ChatGPT mobile apps) only accept remote MCP servers. Use the remote server for them. Mistral Le Chat has not been tested.

Testing. The server is tested with the official MCP SDK client and the MCP Inspector. Tool-calling quality with small local models varies by model. Please report any client-specific problem.

Authentication

This project uses Netatmo's OAuth2 authorization code flow. You sign in on netatmo.com; your Netatmo password is never seen by this tool.

Scope. By default only read_thermostat is requested, so a leaked token couldn't change your heating. login --write also requests write_thermostat.

Your own app. Each user registers a free Netatmo developer app. The client secret cannot be shipped in open-source code.

Refresh. Access tokens are refreshed automatically. Several MCP clients running at once coordinate through a lock file, so they don't invalidate each other's tokens.

Details: docs/authentication.md.

Privacy & security

What leaves your machine. Only HTTPS requests to api.netatmo.com. In read-only mode they only reach 4 read endpoints: the client refuses any write before it touches the network, and tests enforce this. In write mode, a change is sent only after you confirm it.

What stays local.

  • Credentials live in credentials.json in your user configuration folder, readable only by your account (0600 on macOS/Linux; a restricted ACL on Windows).

  • No telemetry, no analytics and no third-party services.

  • The server talks to your MCP client over stdio and opens no network port.

Your AI provider. Data that tools return is read by the assistant you use, so it is processed by that model provider.

No account data or location. Your email and home coordinates are never returned.

Read more:

Architecture

Architecture: an AI assistant talks over stdio to the local server, which calls the Netatmo API (read-only by default)

The Netatmo client and the analytics are independent of MCP. Design decisions are recorded as ADRs, and docs/architecture.md describes the layers.

Limitations

These come from the Netatmo Energy API; details are in docs/api-capabilities.md.

  • No energy or gas consumption. Boiler activity is heat-demand time. With aggregated data, the number of burner cycles cannot be known.

  • No history of valve heating demand. It is only available as a current value. A future opt-in collector may record it (ADR-0011).

  • No outdoor temperature in the Energy API. Weather context is planned for v0.4.

  • History resolution is 30 minutes at best. Each request returns at most 1024 values, so long ranges use coarser scales.

  • The documentation doesn't match the API in places. Live data shows that boiler measures are in seconds, not the documented minutes. This project converts them.

  • Rate limits. Netatmo limits requests per user and per app. The server throttles itself and caches topology and current status.

Roadmap

Version

Focus

v0.1

Read-only MCP server

v0.2

Schedules, opt-in heating control

v0.3

Remote server for web and mobile (current)

v0.3.x

Richer diagnostics

v0.4

Weather context (Open-Meteo)

v0.5–v0.7

Thermal modelling, predictions, digital twin

v1.0

A stable interface

Write mode will never be enabled by default. See docs/roadmap.md.

Contributing

Bug reports, device compatibility reports and pull requests are welcome. See CONTRIBUTING.md to set up the project, which runs on mocked API responses: no Netatmo account needed. Please follow the Code of Conduct.

License

Apache-2.0

Disclaimer

This is an independent open-source project. It is not affiliated with, endorsed by or sponsored by Netatmo or Legrand. "Netatmo" is a trademark of its owner and is used here only to describe compatibility. Use at your own risk; heating safety must never depend on an AI assistant.

Available Tools

15 tools
netatmo_compare_roomsCompare roomsA
Read-onlyIdempotent

Compare all rooms over a period (default: last 7 days): warmest/coolest, most variable, most time below target, largest drop and fastest cool-down after setpoint decreases. Returns per-room metrics and rankings.

NameRequiredDescriptionDefault
toNoRange end, ISO 8601. Defaults to now when "from" is given.
fromNoRange start, ISO 8601 (e.g. 2026-01-15 or 2026-01-15T07:30). Without an offset it is read in the home time zone.
periodNoNamed period in the home time zone. Alternative to from/to.
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.

Output Schema

NameRequiredDescription
homeYes
notesYes
rangeYes
roomsYes
scaleYes
caveatsYes
rankingsYes
requestsYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is fully covered. The description adds that output consists of per-room metrics plus rankings, but says nothing about prerequisites (rooms actually having thermostats/valves), data gaps, or cost of a 30-day window. Useful framing, no deeper behavioral disclosure.

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, no filler. The core action and the default window are front-loaded, followed by the concrete metric list and the return shape.

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

Completeness4/5

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

With full schema coverage, a present output schema, and read-only annotations, the description carries the remaining burden well by naming the derived metrics and rankings. It could still mention that rooms lacking thermostat data are omitted or reported as insufficient, which matters for interpreting a comparison across all rooms.

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 100%, so the baseline is 3, but the description contributes something the schema does not state: that the default period is the last 7 days. It still adds nothing about the from/to vs period interaction or home_id resolution beyond the schema text.

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?

States a specific verb and resource ('Compare all rooms over a period') and then enumerates the exact comparisons produced: warmest/coolest, most variable, most time below target, largest drop, fastest cool-down. This cross-room ranking scope cleanly separates it from the single-room status tools and the home-level heating summary siblings.

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 makes clear the tool is for period-based cross-room comparison and discloses the default window (last 7 days), which tells an agent when it is safe to call with no time arguments. It does not explicitly say when to prefer a sibling (e.g. netatmo_get_temperature_history for one room), so there is no exclusion guidance, but usage context is unambiguous.

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

netatmo_detect_anomaliesDetect unusual heating behaviourA
Read-onlyIdempotent

Rule-based detection of unusual readings in 30-minute room data (default: last 24 h, at most 14 days): implausible values or jumps, constant readings, missing data, rapid drops at a constant setpoint, sustained deviation from the setpoint. Each finding has severity, confidence, evidence and an explanation; findings are observations, not diagnoses.

NameRequiredDescriptionDefault
toNoRange end, ISO 8601. Defaults to now when "from" is given.
fromNoRange start, ISO 8601 (e.g. 2026-01-15 or 2026-01-15T07:30). Without an offset it is read in the home time zone.
periodNoNamed period in the home time zone. Alternative to from/to.
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.
room_idNoRoom ID from netatmo_list_rooms.
room_nameNoLimit to one room (default: all rooms)
max_anomaliesNoMaximum findings returned, most severe first (default 30)

Output Schema

NameRequiredDescription
homeYes
notesYes
rangeYes
scaleYes
caveatsYes
requestsYes
anomaliesYes
truncatedYes
anomaly_countYes
rooms_analysedYes

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already establish that the tool is read-only, idempotent, and non-destructive, and the description adds substantial behavioral context: the detection is rule-based, operates on 30-minute readings, has a bounded default and maximum range, and returns findings with severity, confidence, evidence, and explanation. It also clarifies that findings are observations, not diagnoses.

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 compact and front-loaded: it leads with the detection method and data scope, then enumerates anomaly types, then describes findings. Every sentence contributes useful information without redundancy.

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?

With read-only annotations, full schema coverage, and an output schema present, the description supplies everything the agent needs: the detection scope, time bounds, anomaly categories, and the structure and interpretive limits of findings. No critical behavioral or output information is missing.

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 100%, so the input schema fully documents the seven parameters. The description adds only indirect parameter context through the default window and maximum 14-day range, which is consistent with the baseline of 3 when the schema carries the main documentation burden.

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 names a specific operation, rule-based detection of unusual readings, and scopes it to 30-minute room data with a bounded time window. This clearly distinguishes it from sibling tools that retrieve summaries, statuses, or histories rather than detecting anomalies.

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 gives useful context such as the default last 24 hours and maximum 14-day window, but it does not explicitly state when to choose this tool over siblings like netatmo_get_temperature_history or netatmo_get_heating_summary. Usage is implied by the anomaly-detection purpose rather than spelled out.

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

netatmo_get_boiler_historyGet boiler activity historyA
Read-onlyIdempotent

How long the thermostat requested heat from the boiler over a period (minutes and share of time), per bucket. Requires a Netatmo thermostat. This is heat-demand time, not gas or energy consumption. Default: yesterday.

NameRequiredDescriptionDefault
toNoRange end, ISO 8601. Defaults to now when "from" is given.
fromNoRange start, ISO 8601 (e.g. 2026-01-15 or 2026-01-15T07:30). Without an offset it is read in the home time zone.
modeNosummary = statistics only; aggregated (default) = statistics + up to max_points buckets; detailed = raw values (bounded).
scaleNoResolution. "auto" (default): 1hour up to 2 days, 1day up to 93 days, else 1week.
periodNoNamed period in the home time zone. Alternative to from/to.
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.
max_pointsNoMaximum buckets/points returned (default 48 aggregated, 200 detailed).

Output Schema

NameRequiredDescription
homeYes
modeYes
notesYes
rangeYes
scaleYes
bucketsNo
caveatsYes
coverageYes
requestsYesNetatmo API requests used
truncatedYes
thermostat_typeYes
heat_demand_fractionYesShare of the covered time with heat demand (0–1)
total_heat_demand_minutesYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description earns credit for adding semantics annotations cannot express: the metric is heat-demand duration, not energy, and a thermostat is required. It stops short of describing bucket edge cases or gaps in data.

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?

Three short sentences, front-loaded with what the number means and the prerequisite, then the semantic caveat, then the default. No filler.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and annotations cover safety; the description supplies prerequisites, unit semantics, and default range. What is missing is explicit positioning against the many sibling history tools.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds one genuine fact not present in the schema: the default range is yesterday. It does not explain mode/scale interplay (that lives in the schema), which is acceptable given full coverage.

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

Purpose4/5

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

States a specific verb and resource (boiler heat-request history) plus the unit of measure (minutes and share of time, per bucket), and explicitly excludes a likely misreading by saying it is heat-demand time, not gas or energy consumption. It does not name a sibling such as netatmo_get_temperature_history to sharpen the boundary, so it falls just short of 5.

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?

'Requires a Netatmo thermostat' is a useful prerequisite and 'Default: yesterday' sets a default context. However, there is no explicit when-to-use / when-not guidance relative to siblings like netatmo_get_heating_summary or netatmo_get_setpoint_history, leaving the choice to inference.

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

netatmo_get_device_statusGet device diagnosticsA
Read-onlyIdempotent

Battery, radio/Wi-Fi signal, reachability, firmware and error codes of all devices of a home, or of one device.

NameRequiredDescriptionDefault
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.
device_idNoDevice ID from netatmo_list_devices. Omit for all devices.

Output Schema

NameRequiredDescription
homeYes
devicesYes
observed_atYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld, so the safety profile is covered. The description adds the diagnostic content returned (battery, signal, firmware, error codes), which is useful, but says nothing about permissions, freshness of diagnostics or rate limits.

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

Conciseness5/5

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

A single front-loaded sentence that names the diagnostic fields first and the scope last. No redundant clauses or filler.

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

Completeness4/5

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

An output schema exists, so return structure need not be explained, and the annotations cover the safety profile. The description is sufficient for a 2-param read tool, with only minor missing context about prerequisites or data freshness.

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 100%, so both home_id and device_id are already documented, including the 'omit for all devices' semantics. The description's 'or of one device' merely echoes that; no additional format or dependency details are added.

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

Purpose4/5

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

States a specific resource (device diagnostics) and enumerates the exact data returned: battery, radio/Wi-Fi signal, reachability, firmware and error codes. Scope is clear (all devices of a home or one device), which differentiates it from sibling status tools like netatmo_get_home_status or netatmo_get_heating_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?

The scope 'all devices of a home, or of one device' implies usage, but there is no explicit when-to-use guidance, no mention of prerequisites (e.g. call netatmo_list_devices first), and no named alternatives. Usage is inferable rather than stated.

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

netatmo_get_heating_statusGet heating activityA
Read-onlyIdempotent

Whether the boiler is currently requested to heat, which rooms request heat (heating demand %), and anticipation. Demand is not boiler power or energy use.

NameRequiredDescriptionDefault
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.

Output Schema

NameRequiredDescription
homeYes
roomsYes
caveatsYes
boiler_onYesWhether the thermostat currently requests heat
observed_atYesISO 8601 date-time with the home UTC offset
heating_modeYes
boiler_sourceYesThermostat type reporting boiler status
rooms_requesting_heatYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, non-destructive, and openWorld behavior. The description adds semantic context that prevents conflating heating demand with boiler power/energy use, which is useful beyond the annotations. It does not need to explain return values because an output schema exists.

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 tightly written sentences front-load the tool's output content and immediately follow with a clarifying exclusion. Every sentence carries useful information with no waste.

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

Completeness4/5

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

With rich annotations, a full output schema, and complete parameter documentation, the description is nearly complete for calling the tool. The main omission is any pointer to the closely related netatmo_get_heating_summary sibling, which would help an agent choose correctly among many status tools.

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 100%, and the single home_id parameter is fully documented in the schema, including its optionality and reference to netatmo_list_homes. The description adds no parameter-specific meaning beyond that, so the baseline 3 is appropriate.

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

Purpose4/5

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

The description states concrete content: boiler heating request status, per-room heating demand percentages, and anticipation. It also rules out a likely misinterpretation ('Demand is not boiler power or energy use'). However, it does not differentiate this tool from the sibling netatmo_get_heating_summary, leaving overlap ambiguous.

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

Usage Guidelines3/5

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

Usage is only implied. The caveat that demand is not boiler power or energy use hints that other tools (e.g., history tools) should be used for energy data, but no alternative is named and there is no explicit when-to-use/when-not-to-use guidance.

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

netatmo_get_heating_summarySummarise heating over a periodA
Read-onlyIdempotent

Per-room temperature statistics, mean setpoint, time below / within / above target, largest temperature drop and cool-down rate, plus total boiler heat-demand time. Default: yesterday. Deterministic calculations; no energy or gas figures.

NameRequiredDescriptionDefault
toNoRange end, ISO 8601. Defaults to now when "from" is given.
fromNoRange start, ISO 8601 (e.g. 2026-01-15 or 2026-01-15T07:30). Without an offset it is read in the home time zone.
periodNoNamed period in the home time zone. Alternative to from/to.
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.
room_idNoRoom ID from netatmo_list_rooms.
room_nameNoLimit to one room (default: all rooms)

Output Schema

NameRequiredDescription
homeYes
notesYes
rangeYes
roomsYes
scaleYes
boilerYes
caveatsYes
overallYes
requestsYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), so the bar is lower. The description adds two useful behavioral facts beyond them: the calculations are deterministic/reproducible, and energy or gas figures are not included. Pagination, cost and rate-limit behavior remain unmentioned, but they are less central here.

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

Conciseness4/5

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

Two compact sentences: the output content is front-loaded, the default and the exclusion follow. No repetition or filler. Slight density in the first sentence's list, but it earns its place by defining the tool's output.

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

Completeness4/5

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

An output schema exists, so the description need not explain return shape, yet it still enumerates the headline metrics, and it covers defaulting and the data it refuses to produce. The one missing piece for a read-only analytics tool surrounded by history/status siblings is explicit disambiguation from them.

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 100%, so the baseline is 3, and the description earns one step above it by disclosing the default window ("yesterday") that the schema does not state for the period/from/to trio. It adds no further detail on room_id vs room_name resolution, which the schema handles.

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 names the specific resource (per-room temperature statistics, mean setpoint, time below/within/above target, cool-down rate, boiler heat-demand time) so the agent knows exactly what is computed. It also states what is deliberately excluded ("no energy or gas figures"). It stops short of naming which sibling (e.g. netatmo_get_temperature_history or netatmo_compare_rooms) to prefer over it.

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?

"Default: yesterday" supplies the no-argument behavior, which is genuine usage guidance, and the exclusion of energy/gas figures implicitly steers an agent away from this tool for consumption data. However, there is no explicit statement of when to choose this over the many heating-oriented siblings such as netatmo_get_heating_status or netatmo_compare_rooms.

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

netatmo_get_homeGet Netatmo home detailsA
Read-onlyIdempotent

Details of one home: heating mode, schedules, rooms and devices (topology only; use the status tools for live values).

NameRequiredDescriptionDefault
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.

Output Schema

NameRequiredDescription
idYes
nameYes
roomsYes
devicesYes
timezoneYesIANA time zone of the home
schedulesYes
room_countYes
device_countYes
heating_modeYesschedule | away | hg (frost guard)
device_summaryYes
boiler_history_availableYes
temperature_control_modeYes
default_manual_duration_minYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description contributes the genuinely useful caveat that results are topology only (not live values), which prevents misuse; it says nothing about auth requirements or error behavior, but with annotations present that gap is minor.

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

Conciseness5/5

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

A single sentence with the scope front-loaded and the disambiguating caveat in parentheses. Nothing is padded or repeated from structured fields.

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

Completeness4/5

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

With an output schema present and annotations covering safety, the description only needs to frame scope, and it does so well. The one gap is that listing 'schedules' alongside a netatmo_get_schedules sibling leaves it unclear whether schedule definitions or merely schedule references are returned.

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 100% and the schema text already explains that home_id comes from netatmo_list_homes and is optional for single-home accounts. The description says 'one home' but adds no format, fallback, or resolution detail beyond what the schema provides, so the baseline 3 applies.

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?

States a specific verb and resource ('Details of one home') and enumerates the payload scope: heating mode, schedules, rooms, devices. It explicitly distinguishes itself from the status family, so an agent can separate it from netatmo_get_home_status or netatmo_list_rooms without opening a schema.

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 parenthetical 'use the status tools for live values' gives an explicit when-not-to-use rule and points at an alternative tool family. It stops short of naming the exact sibling (netatmo_get_home_status) and doesn't clarify the overlap with netatmo_get_schedules, which it also claims to cover.

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

netatmo_get_home_statusGet current heating status of a homeB
Read-onlyIdempotent

Current temperature, setpoint, mode and heating demand of every room, boiler on/off, and alerts (unreachable devices, low batteries, open windows).

NameRequiredDescriptionDefault
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.

Output Schema

NameRequiredDescription
homeYes
roomsYes
alertsYesUnreachable devices, low batteries, open windows
boiler_onYes
observed_atYesISO 8601 date-time with the home UTC offset
heating_modeYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already establish readOnly, idempotent, non-destructive, and the description correctly does not contradict them. It adds useful payload visibility (boiler state, unreachable devices, low batteries, open windows), but says nothing about freshness/latency, single-home defaulting, or error behavior for unreachable devices — which is what an agent most needs here.

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

Conciseness4/5

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

A single tight sentence with no filler, and the most salient content (current temperature/setpoint/mode) comes first. The structure is a noun phrase rather than a verb-led statement, which slightly weakens front-loading of intent.

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?

Output schema exists, so re-listing return fields is redundant rather than harmful, and the parameter is fully documented by the schema. What is missing is the ambiguous-case handling: when to pick this over the heating summary, room status, or room comparison siblings, and whether it covers one home or all homes.

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?

With one parameter at 100% schema description coverage, the schema already explains home_id and even points at netatmo_list_homes and the single-home default. The description adds nothing about the parameter, so baseline 3 applies.

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 enumerates what the tool reports (per-room temperature/setpoint/mode/demand, boiler on/off, alerts), which makes the resource scope clear even though it omits an explicit verb. It does not distinguish itself from close siblings such as netatmo_get_room_status, netatmo_get_heating_status, or netatmo_get_heating_summary, so an agent cannot route on the text alone.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of alternatives, despite four deployed siblings that return overlapping room/heating data. The only implicit cue is the word 'every room', which hints at whole-home scope but is never stated as a selection rule.

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

netatmo_get_room_statusGet current room temperature and setpointA
Read-onlyIdempotent

Current measured temperature and target temperature (setpoint) of one room, with setpoint mode, heating demand and open-window state. Identify the room by room_id or room_name.

NameRequiredDescriptionDefault
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.
room_idNoRoom ID from netatmo_list_rooms.
room_nameNoRoom name (case- and accent-insensitive). Use room_id or room_name.

Output Schema

NameRequiredDescription
homeYes
roomYes
observed_atYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already establish this as a safe, idempotent, read-only call, so the burden is lower. The description adds value by disclosing the data payload (mode, heating demand, open-window state) and the dual identification paths, but says nothing about data freshness, behavior when a room is not found, or the multi-home fallback.

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

Conciseness4/5

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

Two tightly written sentences with no filler; the returned payload leads and the identification rule follows. Slightly more front-loading of identification (a prerequisite for calling) would be ideal, but nothing is wasted.

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

Completeness4/5

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

With an output schema present and annotations covering the safety profile, the description only needs to scope the call and preview the payload, which it does. Minor gaps remain around freshness of 'current' readings and the single-home default for home_id, but neither blocks correct invocation.

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 100%, so the schema already documents home_id, room_id and room_name, including the 'Use room_id or room_name' either/or rule. The description restates that identification choice without adding format, precedence, or ambiguity-resolution detail, so baseline 3 applies.

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 names the resource precisely — one room — and enumerates the returned values (measured temperature, setpoint, setpoint mode, heating demand, open-window state). The phrase 'of one room' implicitly separates it from home-level siblings like netatmo_get_home_status, but no sibling is named explicitly.

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

Usage Guidelines3/5

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

Usage is only implied by scope: 'one room' suggests this is the per-room read rather than the aggregate views offered by netatmo_get_heating_summary or netatmo_compare_rooms. There is no explicit when-to-use or when-not statement, and no guidance on handling multiple rooms or cross-referencing siblings.

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

netatmo_get_schedulesGet heating schedulesA
Read-onlyIdempotent

Weekly heating schedules of a home: zones (e.g. Comfort, Night, Eco) with the setpoint of each room, away/frost-guard temperatures, and the timetable as day + time + zone. Shows which schedule is active.

NameRequiredDescriptionDefault
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.

Output Schema

NameRequiredDescription
homeYes
schedulesYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds only that the payload includes the active schedule indicator, which is useful selection context but is largely restating return content already covered by the output schema. No mention of payload size, rate limits, or auth requirements.

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

Conciseness4/5

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

Two tight sentences with no filler, and the core resource is front-loaded. The inline enumeration is dense but each item carries informational value for judging tool fit; only the 'day + time + zone' phrasing is slightly cryptic.

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?

Annotations cover the safety profile, the schema covers the lone optional parameter, and an output schema exists to describe return structure. The description supplies the conceptual shape of the schedule data (zones, setpoints, timetable, active schedule) which is enough for correct selection and invocation.

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?

With a single optional home_id at 100% schema description coverage, the schema already explains that the ID comes from netatmo_list_homes and is defaulted for single-home accounts. The description contributes no additional parameter meaning, so the baseline of 3 applies.

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 noun phrase 'Weekly heating schedules of a home' plus the enumerated contents (zones, setpoints, away/frost-guard temperatures, timetable, active schedule) makes the resource concrete and distinguishes it implicitly from siblings like netatmo_get_heating_summary and netatmo_get_heating_status. It lacks a leading verb ('Retrieve...') but an agent can still identify it as a read of schedule configuration rather than live 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?

Usage is only implied — an agent infers this is the tool for static weekly programming as opposed to current heating status, but nothing in the description states when to prefer it over netatmo_get_heating_status or netatmo_get_heating_summary. No prerequisites, exclusions, or alternatives are named.

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

netatmo_get_setpoint_historyGet room setpoint historyA
Read-onlyIdempotent

Target temperature (setpoint) history of a room, including the periods during which each setpoint applied. Default: last 24 h.

NameRequiredDescriptionDefault
toNoRange end, ISO 8601. Defaults to now when "from" is given.
fromNoRange start, ISO 8601 (e.g. 2026-01-15 or 2026-01-15T07:30). Without an offset it is read in the home time zone.
modeNosummary = statistics only; aggregated (default) = statistics + up to max_points buckets; detailed = raw values (bounded).
scaleNoMeasurement resolution. "auto" (default) picks the finest scale that fits the range.
periodNoNamed period in the home time zone. Alternative to from/to.
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.
room_idNoRoom ID from netatmo_list_rooms.
room_nameNoRoom name (case- and accent-insensitive). Use room_id or room_name.
max_pointsNoMaximum buckets/points returned (default 48 aggregated, 200 detailed).

Output Schema

NameRequiredDescription
homeYes
modeYes
roomYes
unitYes
notesYes
rangeYes
scaleYes
statsYes
pointsNodetailed mode
bucketsNoaggregated mode
changesNosetpoint only: periods with a constant setpoint
measureYes
coverageYes
requestsYesNetatmo API requests used
truncatedYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive safety, so the bar is lower, and the description still adds value: the returned data includes the periods during which each setpoint applied, and it states the default range. It does not discuss pagination or bounded-detail behavior, hence not a 5.

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 with no waste, and the content type plus default time window are front-loaded. 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?

With an output schema present, return values needn't be explained, and the description gives the resource scope plus default window for a 9-parameter tool. It falls slightly short by not clarifying that a room must be selected via room_id or room_name despite zero required params in the schema.

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 100%, so all nine parameters (including from/to, mode, scale, period, max_points) are already documented in the schema. The description adds only the default range, not the syntax or format of any parameter, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource: setpoint (target temperature) history of a room, and adds that it includes the periods each setpoint applied. It implicitly distinguishes from netatmo_get_temperature_history (actual vs. target temperature) but never names a sibling explicitly, keeping it just shy of a 5.

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

Usage Guidelines3/5

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

The default of 'last 24 h' is conveyed, but there is no statement of when to choose this over alternatives like netatmo_get_temperature_history or netatmo_get_heating_status, nor any prerequisites or exclusions. Usage is only implied through the resource wording.

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

netatmo_get_temperature_historyGet room temperature historyA
Read-onlyIdempotent

Measured temperature history of a room with statistics (min, max, mean, variability) and coverage/gaps. Default: last 24 h, aggregated. Missing data is reported, never filled in.

NameRequiredDescriptionDefault
toNoRange end, ISO 8601. Defaults to now when "from" is given.
fromNoRange start, ISO 8601 (e.g. 2026-01-15 or 2026-01-15T07:30). Without an offset it is read in the home time zone.
modeNosummary = statistics only; aggregated (default) = statistics + up to max_points buckets; detailed = raw values (bounded).
scaleNoMeasurement resolution. "auto" (default) picks the finest scale that fits the range.
periodNoNamed period in the home time zone. Alternative to from/to.
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.
room_idNoRoom ID from netatmo_list_rooms.
room_nameNoRoom name (case- and accent-insensitive). Use room_id or room_name.
max_pointsNoMaximum buckets/points returned (default 48 aggregated, 200 detailed).

Output Schema

NameRequiredDescription
homeYes
modeYes
roomYes
unitYes
notesYes
rangeYes
scaleYes
statsYes
pointsNodetailed mode
bucketsNoaggregated mode
changesNosetpoint only: periods with a constant setpoint
measureYes
coverageYes
requestsYesNetatmo API requests used
truncatedYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description still adds genuine behavioral context that the annotations cannot: the aggregation default and the guarantee that 'missing data is reported, never filled in', which tells the agent to expect gaps rather than interpolated values. It does not mention response size limits or paging beyond what max_points already implies.

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?

Three short clauses, each earning its place: what is returned, what the defaults are, and the data-quality guarantee. The most decision-relevant facts (content and default window) are front-loaded with zero filler.

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

Completeness4/5

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

With an output schema present, nine richly documented parameters and complete annotations, the description only needs to add the defaults and any surprising behavior, which it does. The one gap is that it never states that a room identifier (room_id or room_name) is effectively required, even though the schema lists zero required parameters — an agent could call it unscoped and be confused by the result.

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 100%, so all nine parameters — including the mode, scale and period enums — are already fully documented in the schema. The description only restates the default ('last 24 h, aggregated') and adds no extra meaning about how period and from/to combine or which of room_id/room_name to prefer. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific resource (measured room temperature history) plus the exact payload (min/max/mean/variability statistics and coverage/gaps), which separates it from status-style siblings like netatmo_get_room_status. It does not explicitly name the siblings it should be preferred over (compare_rooms, detect_anomalies), so the differentiation is implied by the word 'history' rather than stated.

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 'Default: last 24 h, aggregated' clause tells the agent what happens when it supplies nothing, and the schema explains how period/from-to and mode interact. However the description gives no explicit when-to-use guidance — nothing says to use this for trends/coverage vs. netatmo_get_room_status for the current reading, or vs. netatmo_get_setpoint_history for targets.

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

netatmo_list_devicesList devicesA
Read-onlyIdempotent

List thermostats, radiator valves and relays/gateways of a home with their model, room and gateway. Use netatmo_get_device_status for battery, signal and reachability.

NameRequiredDescriptionDefault
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.

Output Schema

NameRequiredDescription
homeYes
devicesYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and non-destructive behavior, so the safety profile is covered. The description adds value by stating the content of the result set (model, room, gateway) and by carving off status-type data to a sibling. It does not mention auth or rate-limit behavior, but those gaps are minor given the annotation coverage and the existing output schema.

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, no filler. The scope statement is front-loaded and the sibling routing follows immediately, which is the correct order for an agent scanning for selection signals.

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?

For a one-optional-parameter read tool with a rich annotation set and an output schema, the description supplies everything an agent needs: what comes back, the scope of the listing, and where to go for adjacent data.

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 100% and the single parameter is fully documented in the schema, including the 'optional when the account has a single home' rule. The description's phrase 'of a home' echoes rather than extends that, so the baseline 3 is appropriate.

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?

Names a specific verb ('List') and enumerates exactly which resources are returned (thermostats, radiator valves, relays/gateways) plus the fields attached to each. This distinguishes it cleanly from netatmo_get_device_status, which the description explicitly routes elsewhere.

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

Usage Guidelines5/5

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

Explicitly names the alternative (netatmo_get_device_status) and the condition that selects it: battery, signal and reachability queries. The scope 'of a home' combined with the schema's note that home_id is optional for single-home accounts leaves little inference required.

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

netatmo_list_homesList Netatmo homesA
Read-onlyIdempotent

List the homes in the Netatmo account that have Energy devices (thermostats, radiator valves), with room and device counts and whether boiler history is available.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
homesYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds the filtering behavior (homes without Energy devices are excluded), which is genuine value, but the rest of the sentence largely restates what an output schema would carry.

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

Conciseness4/5

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

A single tight sentence with the resource front-loaded and no filler. Slightly dense with multiple clauses (scope, device types, counts, boiler history) but every element informs the caller.

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

Completeness4/5

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

Given zero params, an output schema covering return values, and annotations covering safety, the description only needs to establish scope — which it does. The one remaining gap is routing versus netatmo_get_home, which is not addressed.

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?

Zero parameters, so the baseline of 4 applies; there is nothing parameter-related the description could or should explain.

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?

Specific verb+resource (list homes) plus a meaningful scope qualifier (only homes with Energy devices) and a preview of the returned fields (room/device counts, boiler history). It does not, however, differentiate from the close sibling netatmo_get_home, so an agent could hesitate between the two.

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

Usage Guidelines3/5

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

Usage is only implied: the filter on Energy devices hints that this is the entry point for heating workflows, but there is no explicit 'use this before X' instruction and no mention of netatmo_get_home or netatmo_list_devices as alternatives.

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

netatmo_list_roomsList roomsA
Read-onlyIdempotent

List the rooms of a home with their IDs, types and the devices installed in each.

NameRequiredDescriptionDefault
home_idNoHome ID from netatmo_list_homes. Optional when the account has a single home.

Output Schema

NameRequiredDescription
homeYes
roomsYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world behavior, so the safety profile needs no restating. The description adds only that devices are included per room; it discloses nothing about pagination, missing homes, or permission requirements. That is acceptable against rich annotations but not generous.

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

Conciseness5/5

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

One front-loaded sentence with the verb and resource first and the return content after, with zero boilerplate or filler. Nothing to cut.

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

Completeness4/5

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

An output schema exists and annotations cover the safety profile, so the description needn't explain returns or side effects. With only one optional parameter fully documented, the definition is callable as-is; only the sibling routing is left implicit.

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 100% and the single home_id parameter is already documented with its source (netatmo_list_homes) and its optionality for single-home accounts. The description adds no parameter meaning beyond that, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb (List) plus the resource (rooms of a home) and enumerates the payload fields (IDs, types, installed devices). This separates it from netatmo_get_room_status and netatmo_compare_rooms at a glance, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

The 'list' framing implies a discovery/browse step, and the schema note pointing to netatmo_list_homes implies the ordering of calls. However, no explicit when-to-use or when-not-to-use guidance versus netatmo_get_room_status or netatmo_compare_rooms is given anywhere in the description.

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. 15 tool updatesv0.3.2
    • First observednetatmo_compare_rooms
    • First observednetatmo_detect_anomalies
    • First observednetatmo_get_boiler_history
    • First observednetatmo_get_device_status
    • First observednetatmo_get_heating_status
    • First observednetatmo_get_heating_summary
    • First observednetatmo_get_home
    • First observednetatmo_get_home_status
    • First observednetatmo_get_room_status
    • First observednetatmo_get_schedules
    • First observednetatmo_get_setpoint_history
    • First observednetatmo_get_temperature_history
    • First observednetatmo_list_devices
    • First observednetatmo_list_homes
    • First observednetatmo_list_rooms

TDQS

A3.8/5.0

Scored across 15 tools

Disambiguation4/5

Most tools have clearly distinct scopes, especially around homes, rooms, devices, histories, and schedules. However, netatmo_get_home_status and netatmo_get_heating_status overlap on boiler/heating-demand information, and netatmo_get_heating_summary overlaps with netatmo_compare_rooms and netatmo_get_boiler_history.

Naming Consistency5/5

All tools consistently use the netatmo_ prefix plus snake_case verb_noun naming such as netatmo_list_rooms, netatmo_get_room_status, and netatmo_detect_anomalies. The pattern is predictable throughout the set.

Tool Count5/5

Fifteen tools is well scoped for a heating/energy monitoring server, covering discovery, live status, history, schedules, and analytics without obvious padding. Each tool has a plausible role in the workflow.

Completeness3/5

The read-only monitoring surface is broad and covers discovery, status, history, schedules, and anomaly detection. However, there are no control operations for setting room setpoints, changing heating modes, editing schedules, or away/boost modes, which is a notable gap if energy management is in scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Smart Device Control 🎮 💡 Lights: Brightness, color, RGB 🌡️ Climate: Temperature, HVAC, humidity 🚪 Covers: Position and tilt 🔌 Switches: On/off 🚨 Sensors: State monitoring Intelligent Organization 🏠 Grouping with context awareness. Robust Architecture 🛠️ Error handling, state validation ...
    226 npm
    58
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Connects AI assistants to Loxone smart home systems for controlling devices, managing scenes, and monitoring real-time states through natural language. Supports lights, blinds, climate control, and automation with secure PIN-protected commands.
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that connects AI assistants to the ZONT heating system via the official REST API. It enables users to monitor device states, control heating modes, and perform diagnostics using natural language.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI assistants to control a Homey Pro smart home hub, create automation flows from natural language, and query device and energy history.
    36
    25 npm
    MIT