netatmo energy mcp
Netatmo Energy MCP
English | Français
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
logincommand.Tokens stored securely and refreshed automatically.
doctorchecks 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
At https://dev.netatmo.com/apps, choose Create.
Set the redirect URI to
http://localhost:8977/callback.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 loginlogin 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 doctorRunning from source instead: clone the repository, run
pnpm install && pnpm build, then usenode /path/to/netatmo-energy-mcp/dist/index.jsin place ofnpx -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-mcpClaude 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-mcpSee 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?" |
|
"Is the boiler running right now? Which rooms are asking for heat?" |
|
"How long did my boiler run yesterday?" |
|
"Show the living room temperature for the last 7 days." |
|
"Compare my rooms over the last week. Which one cools down fastest?" |
|
"Did my heating behave unusually last night?" |
|
"Give me yesterday's heating report." | prompt |
"Are any valve batteries low?" |
|
"What does my weekly schedule look like?" |
|
Write mode: "Heat the office to 21 °C for 2 hours." |
|
Write mode: "I'm away until Sunday evening." |
|
Write mode: "Lower the night zone to 17 °C in every bedroom." |
|
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 |
| Homes with Energy devices, room/device counts |
| Home details: heating mode, schedules, rooms, devices |
| Rooms with IDs, types and devices |
| Thermostats, valves, relays: model, room, gateway |
| Current status of every room, boiler state, alerts |
| Current temperature and setpoint of one room |
| Boiler on/off, rooms requesting heat |
| Battery, signal, reachability, firmware |
| Room temperature history with statistics and gaps |
| Room setpoint history and setpoint periods |
| Boiler heat-demand time per hour/day/week |
| Per-room comfort metrics plus boiler time over a period |
| Room metrics and rankings |
| Unusual readings with severity, confidence and evidence |
| Weekly schedules: zones, room setpoints, timetable |
Write mode only. Each change needs your confirmation.
Tool | Description |
| Temporary room setpoint or boost, or back to the schedule |
| Schedule, away or frost-guard mode, optionally until a date |
| Make another weekly schedule active |
| New schedule copied from an existing one, with changes |
| Room setpoints per zone, away/frost temperatures, timetable |
| 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 --writeThis 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=elicitationto allow changes only through a confirmation prompt shown by your client. If your client cancels every change without showing anything, setNETATMO_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_TEMPandNETATMO_MCP_MAX_SETPOINT_HOURS.Kill switch.
NETATMO_MCP_WRITE=0forces read-only mode, even with a write-enabled login.Audit log. Every applied or failed change is appended to
changes.login 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 |
| Tested. API validated on a live installation (2026-10-08) |
Smart Radiator Valve |
| Tested. Same installation (6 valves) |
Thermostat Relay |
| Tested. Same installation |
OpenTherm Modulating Thermostat / Gateway |
| Expected to work, untested |
BTicino Smarther with Netatmo |
| Not supported in v0.1 (probably needs the |
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 |
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.jsonin your user configuration folder, readable only by your account (0600on 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
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
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 toolsnetatmo_compare_roomsCompare roomsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Range end, ISO 8601. Defaults to now when "from" is given. | |
| from | No | Range start, ISO 8601 (e.g. 2026-01-15 or 2026-01-15T07:30). Without an offset it is read in the home time zone. | |
| period | No | Named period in the home time zone. Alternative to from/to. | |
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. |
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| notes | Yes | |
| range | Yes | |
| rooms | Yes | |
| scale | Yes | |
| caveats | Yes | |
| rankings | Yes | |
| requests | Yes |
TDQS
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.
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.
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.
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.
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.
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 behaviourARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Range end, ISO 8601. Defaults to now when "from" is given. | |
| from | No | Range start, ISO 8601 (e.g. 2026-01-15 or 2026-01-15T07:30). Without an offset it is read in the home time zone. | |
| period | No | Named period in the home time zone. Alternative to from/to. | |
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. | |
| room_id | No | Room ID from netatmo_list_rooms. | |
| room_name | No | Limit to one room (default: all rooms) | |
| max_anomalies | No | Maximum findings returned, most severe first (default 30) |
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| notes | Yes | |
| range | Yes | |
| scale | Yes | |
| caveats | Yes | |
| requests | Yes | |
| anomalies | Yes | |
| truncated | Yes | |
| anomaly_count | Yes | |
| rooms_analysed | Yes |
TDQS
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.
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.
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.
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.
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.
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 historyARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Range end, ISO 8601. Defaults to now when "from" is given. | |
| from | No | Range start, ISO 8601 (e.g. 2026-01-15 or 2026-01-15T07:30). Without an offset it is read in the home time zone. | |
| mode | No | summary = statistics only; aggregated (default) = statistics + up to max_points buckets; detailed = raw values (bounded). | |
| scale | No | Resolution. "auto" (default): 1hour up to 2 days, 1day up to 93 days, else 1week. | |
| period | No | Named period in the home time zone. Alternative to from/to. | |
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. | |
| max_points | No | Maximum buckets/points returned (default 48 aggregated, 200 detailed). |
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| mode | Yes | |
| notes | Yes | |
| range | Yes | |
| scale | Yes | |
| buckets | No | |
| caveats | Yes | |
| coverage | Yes | |
| requests | Yes | Netatmo API requests used |
| truncated | Yes | |
| thermostat_type | Yes | |
| heat_demand_fraction | Yes | Share of the covered time with heat demand (0–1) |
| total_heat_demand_minutes | Yes |
TDQS
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.
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.
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.
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.
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.
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 diagnosticsARead-onlyIdempotent
Battery, radio/Wi-Fi signal, reachability, firmware and error codes of all devices of a home, or of one device.
| Name | Required | Description | Default |
|---|---|---|---|
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. | |
| device_id | No | Device ID from netatmo_list_devices. Omit for all devices. |
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| devices | Yes | |
| observed_at | Yes |
TDQS
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.
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.
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.
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.
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.
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 activityARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. |
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| rooms | Yes | |
| caveats | Yes | |
| boiler_on | Yes | Whether the thermostat currently requests heat |
| observed_at | Yes | ISO 8601 date-time with the home UTC offset |
| heating_mode | Yes | |
| boiler_source | Yes | Thermostat type reporting boiler status |
| rooms_requesting_heat | Yes |
TDQS
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.
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.
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.
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.
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.
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 periodARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Range end, ISO 8601. Defaults to now when "from" is given. | |
| from | No | Range start, ISO 8601 (e.g. 2026-01-15 or 2026-01-15T07:30). Without an offset it is read in the home time zone. | |
| period | No | Named period in the home time zone. Alternative to from/to. | |
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. | |
| room_id | No | Room ID from netatmo_list_rooms. | |
| room_name | No | Limit to one room (default: all rooms) |
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| notes | Yes | |
| range | Yes | |
| rooms | Yes | |
| scale | Yes | |
| boiler | Yes | |
| caveats | Yes | |
| overall | Yes | |
| requests | Yes |
TDQS
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.
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.
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.
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.
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.
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 detailsARead-onlyIdempotent
Details of one home: heating mode, schedules, rooms and devices (topology only; use the status tools for live values).
| Name | Required | Description | Default |
|---|---|---|---|
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| rooms | Yes | |
| devices | Yes | |
| timezone | Yes | IANA time zone of the home |
| schedules | Yes | |
| room_count | Yes | |
| device_count | Yes | |
| heating_mode | Yes | schedule | away | hg (frost guard) |
| device_summary | Yes | |
| boiler_history_available | Yes | |
| temperature_control_mode | Yes | |
| default_manual_duration_min | Yes |
TDQS
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.
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.
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.
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.
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.
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 homeBRead-onlyIdempotent
Current temperature, setpoint, mode and heating demand of every room, boiler on/off, and alerts (unreachable devices, low batteries, open windows).
| Name | Required | Description | Default |
|---|---|---|---|
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. |
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| rooms | Yes | |
| alerts | Yes | Unreachable devices, low batteries, open windows |
| boiler_on | Yes | |
| observed_at | Yes | ISO 8601 date-time with the home UTC offset |
| heating_mode | Yes |
TDQS
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.
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.
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.
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.
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.
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 setpointARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. | |
| room_id | No | Room ID from netatmo_list_rooms. | |
| room_name | No | Room name (case- and accent-insensitive). Use room_id or room_name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| room | Yes | |
| observed_at | Yes |
TDQS
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.
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.
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.
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.
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.
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 schedulesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. |
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| schedules | Yes |
TDQS
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.
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.
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.
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.
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.
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 historyARead-onlyIdempotent
Target temperature (setpoint) history of a room, including the periods during which each setpoint applied. Default: last 24 h.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Range end, ISO 8601. Defaults to now when "from" is given. | |
| from | No | Range start, ISO 8601 (e.g. 2026-01-15 or 2026-01-15T07:30). Without an offset it is read in the home time zone. | |
| mode | No | summary = statistics only; aggregated (default) = statistics + up to max_points buckets; detailed = raw values (bounded). | |
| scale | No | Measurement resolution. "auto" (default) picks the finest scale that fits the range. | |
| period | No | Named period in the home time zone. Alternative to from/to. | |
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. | |
| room_id | No | Room ID from netatmo_list_rooms. | |
| room_name | No | Room name (case- and accent-insensitive). Use room_id or room_name. | |
| max_points | No | Maximum buckets/points returned (default 48 aggregated, 200 detailed). |
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| mode | Yes | |
| room | Yes | |
| unit | Yes | |
| notes | Yes | |
| range | Yes | |
| scale | Yes | |
| stats | Yes | |
| points | No | detailed mode |
| buckets | No | aggregated mode |
| changes | No | setpoint only: periods with a constant setpoint |
| measure | Yes | |
| coverage | Yes | |
| requests | Yes | Netatmo API requests used |
| truncated | Yes |
TDQS
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.
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.
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.
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.
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.
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 historyARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Range end, ISO 8601. Defaults to now when "from" is given. | |
| from | No | Range start, ISO 8601 (e.g. 2026-01-15 or 2026-01-15T07:30). Without an offset it is read in the home time zone. | |
| mode | No | summary = statistics only; aggregated (default) = statistics + up to max_points buckets; detailed = raw values (bounded). | |
| scale | No | Measurement resolution. "auto" (default) picks the finest scale that fits the range. | |
| period | No | Named period in the home time zone. Alternative to from/to. | |
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. | |
| room_id | No | Room ID from netatmo_list_rooms. | |
| room_name | No | Room name (case- and accent-insensitive). Use room_id or room_name. | |
| max_points | No | Maximum buckets/points returned (default 48 aggregated, 200 detailed). |
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| mode | Yes | |
| room | Yes | |
| unit | Yes | |
| notes | Yes | |
| range | Yes | |
| scale | Yes | |
| stats | Yes | |
| points | No | detailed mode |
| buckets | No | aggregated mode |
| changes | No | setpoint only: periods with a constant setpoint |
| measure | Yes | |
| coverage | Yes | |
| requests | Yes | Netatmo API requests used |
| truncated | Yes |
TDQS
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.
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.
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.
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.
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.
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 devicesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. |
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| devices | Yes |
TDQS
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.
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.
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.
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.
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.
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 homesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| homes | Yes |
TDQS
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.
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.
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.
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.
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.
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 roomsARead-onlyIdempotent
List the rooms of a home with their IDs, types and the devices installed in each.
| Name | Required | Description | Default |
|---|---|---|---|
| home_id | No | Home ID from netatmo_list_homes. Optional when the account has a single home. |
Output Schema
| Name | Required | Description |
|---|---|---|
| home | Yes | |
| rooms | Yes |
TDQS
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.
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.
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.
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.
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.
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.
15 tool updates
v0.3.2- First observed
netatmo_compare_rooms - First observed
netatmo_detect_anomalies - First observed
netatmo_get_boiler_history - First observed
netatmo_get_device_status - First observed
netatmo_get_heating_status - First observed
netatmo_get_heating_summary - First observed
netatmo_get_home - First observed
netatmo_get_home_status - First observed
netatmo_get_room_status - First observed
netatmo_get_schedules - First observed
netatmo_get_setpoint_history - First observed
netatmo_get_temperature_history - First observed
netatmo_list_devices - First observed
netatmo_list_homes - First observed
netatmo_list_rooms
TDQS
Scored across 15 tools
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.
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.
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.
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
Related MCP Connectors
Home energy for AI assistants: live Power flow, Energy history, solar forecast, and device control.
- mytesla.ioOAuthio.mytesla
Control your Tesla from your AI assistant - climate, charging, access, and security.
Heating, ventilation and energy engineering calculations and diagnostics for AI agents.
- SnapstayOAuthai.snapstay
Connect AI assistants to hotel reservations, availability, rates, guests, and analytics with OAuth.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceSmart 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 npm58Apache 2.0
- AlicenseAqualityCmaintenanceConnects 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.3MIT
- AlicenseNot gradedqualityCmaintenanceAn 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
- AlicenseAqualityAmaintenanceEnables AI assistants to control a Homey Pro smart home hub, create automation flows from natural language, and query device and energy history.3625 npmMIT