Skip to main content
Glama
519Green

IoTaWatt MCP Server

by 519Green

IoTaWatt MCP Server

A Model Context Protocol server for the IoTaWatt open-source energy monitor. It lets an MCP client such as Claude Code or Claude Desktop read live power, query the on-device history log, inspect the device configuration, and look at the shape of the current on a circuit.

All tools are read-only. The server talks to the IoTaWatt's local HTTP API and needs no cloud account.

This project is not affiliated with or endorsed by IoTaWatt, Inc.

Requirements

  • Node.js 18 or newer

  • An IoTaWatt reachable over HTTP from the machine running the server

Related MCP server: Network Monitor MCP Server

Install

git clone https://github.com/519Green/IotaWattMCP.git
cd IotaWattMCP
npm install

Configure

The device address is given with --host or the IOTAWATT_HOST environment variable. Use an IP address or hostname, for example 192.168.1.50 or iotawatt.local. A full URL such as https://iotawatt.example.net also works if the device sits behind a proxy.

Claude Code

Add to .mcp.json in your project, or to your user configuration:

{
  "mcpServers": {
    "iotawatt": {
      "command": "node",
      "args": ["/path/to/IotaWattMCP/index.js", "--host", "192.168.1.50"]
    }
  }
}

Claude Desktop

Add the same iotawatt block under mcpServers in claude_desktop_config.json.

Password-protected devices

If the IoTaWatt has passwords set, give the server one through the environment:

{
  "mcpServers": {
    "iotawatt": {
      "command": "node",
      "args": ["/path/to/IotaWattMCP/index.js", "--host", "192.168.1.50"],
      "env": { "IOTAWATT_PASSWORD": "your-admin-password" }
    }
  }
}
  • The account defaults to admin. Set IOTAWATT_USER to user to use the device's restricted account instead. That account can do everything except sample_waveform.

  • --user and --password flags also work, but command-line arguments are visible to other processes on the machine. Prefer the environment.

  • The device uses HTTP Digest authentication, so the password is not sent in the clear. The data itself still travels over plain HTTP.

Tools

Tool

What it does

discover

Lists input channels (CTs and VTs) and calculated outputs with their units. Call this first.

status

Device status: firmware version, uptime, Wi-Fi, per-input readings, and data log ranges.

get_config

Returns the device's config.txt: input definitions, calibration, and output scripts.

snapshot

Average power over the last 5 minutes for all outputs or for named channels.

query

Time-series query against the on-device log.

energy_by_interval

Energy in Wh per interval for all outputs or for named channels.

watch

Live readings once a second for up to two minutes, for catching something as it switches.

sample_waveform

One AC cycle of raw voltage and current from a CT, with harmonics, distortion and phase lag.

Query notes

query passes its arguments to the IoTaWatt query API.

  • select is a list of series. Put time.local.iso first to get timestamps.

  • Add a unit suffix to a channel name to change what is returned: .watts, .wh, .amps, .va, .var, .varh or .pf for power channels, .volts or .hz for voltage. Add .d2 for two decimal places.

  • begin and end accept relative times (d for today at midnight, s for now, d-7d, s-3600s) or absolute times such as 2026-02-17T06:00. Leave the seconds off absolute times.

  • group is the aggregation interval. Seconds must be a multiple of 5 (5s, 10s, 30s); then 1m, 1h, 1d and so on, or all for one row.

  • The device returns at most 1,000 rows unless you pass limit. When a result is cut short, the tool adds a note saying where the data stops.

  • Results come back one row per line. format: "csv" is the more compact of the two.

Waveform notes

sample_waveform describes the shape of the current, which says what kind of load is running:

  • A heater or kettle draws a clean sine wave in step with the voltage: low distortion, crest factor near 1.4, lag near zero.

  • A motor or compressor lags the voltage.

  • Electronics draw a narrow, peaky current: high crest factor and a large 3rd harmonic.

The numbers are raw ADC counts, not amps, and the capture is everything on that CT at that instant, not a single appliance. Compare a capture with the appliance on against one with it off.

Example prompts

Once the server is connected, ask in plain language. The assistant picks the tools. It helps to tell it what you already know, for example which appliances are on which circuit.

Getting oriented

  • "What channels does my IoTaWatt have, and what does each one measure?"

  • "Is the device healthy? Check the firmware version, uptime, Wi-Fi signal and how far back the logs go."

  • "What is the house drawing right now, by circuit?"

Energy use

  • "How many kWh did each circuit use yesterday? Rank them."

  • "Show hourly energy for the water heater over the last 7 days. When does it run most?"

  • "Compare this week with last week, circuit by circuit."

  • "What is my always-on load? Find the quietest hour of the past week and break it down by circuit."

Finding appliances

  • "Did the dryer run today? Look for a 240 V load of about 5 kW that cycles on and off."

  • "Find the fridge's defrost cycles on the kitchen circuit over the last 3 days. How often do they happen and how long do they last?"

  • "Something drew about 1.5 kW for a few minutes around 3 pm. Which circuit was it on, and does the power factor look like a heater or a motor?"

  • "How many times did the well pump run today, and how long was each run?"

  • "Watch all circuits for the next 60 seconds. I am going to switch the space heater on, then off. Tell me which circuit it is on and how much it draws."

  • "Sample the waveform on the office circuit. Is that load mostly electronics, motors or heating?"

Checking the installation

  • "Compare each subpanel's total against the mains that feed it. Do any CTs look reversed, mislabelled or on the wrong leg?"

  • "Read my output formulas. Does anything get counted twice or left out?"

Tips

  • For short events, ask for fine resolution over a short window, such as 5 second data for one hour. The device keeps 5 second data for about a year and 1 minute data for longer.

  • A 240 V appliance shows up on two CTs at once, one per leg. A 120 V appliance shows up on one.

  • Ask for a summary, not the raw rows. Long, fine-grained queries return a lot of data.

Things to know

  • get_config returns the whole config file. If you have uploaders configured (InfluxDB, Emoncms, PVoutput), that file can contain their URLs and credentials, and they will be passed to the MCP client.

  • Queries pause sampling. The IoTaWatt documentation notes that the device does not sample power while it is answering a query. Prefer a few well-scoped queries over many large ones. watch is light by comparison: one small request a second.

  • Channel names are cached. Call discover after changing inputs or outputs on the device.

  • Password support is tested against a mock, built from the IoTaWatt firmware source, not against a real password-protected unit. Please open an issue if it fails on yours.

Development

npm test

The tests start the server over stdio against a small mock IoTaWatt in test/mock-iotawatt.js, so they need no device.

License

ISC. See LICENSE.

Available Tools

8 tools
discoverA
Read-only

List all IoTaWatt inputs (physical CTs/VTs) and calculated outputs with their units. Always call this first to learn what channels are available before querying.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that results carry units and that this is a prerequisite step, but says nothing about ordering, size, or failure modes when no CTs are configured.

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, zero filler, and the what-it-returns statement is front-loaded ahead of the call-ordering advice. 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 no output schema, the description carries the return-value burden and does name the returned content (inputs, outputs, units). It could note the likely key/name field an agent needs to feed into 'query', but for a simple discovery call it is sufficient.

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

Parameters4/5

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

The tool takes zero parameters, so there is no argument semantics to explain and no schema text needed. Baseline for a parameterless tool is 4.

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?

'List' plus a precise resource ('IoTaWatt inputs (physical CTs/VTs) and calculated outputs with their units') tells the agent exactly what comes back. It implicitly separates itself from 'query' by being the channel-enumeration step, though it never names a sibling explicitly.

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?

'Always call this first ... before querying' gives clear sequencing and the condition that selects this tool over the query/energy tools. It stops short of stating exclusions versus get_config, which could plausibly overlap in exposing configuration.

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

energy_by_intervalB
Read-only

Energy consumption (Wh) broken down by interval for all or selected output channels. Use for today's hourly breakdown, daily totals, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNos
beginNoStart time: d=today, d-30d=30 days ago, d-7d=last weekd
groupNoInterval: 15m, 30m, 1h, 1d, 1w1h
channelsNoChannels to include (without .wh, which is appended automatically). Defaults to all discovered outputs.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description usefully adds the unit (Wh) and that output channels default to all discovered outputs, but says nothing about return shape, pagination, or data freshness.

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, front-loaded with the resource and its unit, with the usage hint placed after. No filler, though the trailing 'etc.' is slightly loose.

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

Completeness3/5

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

For a 4-parameter, zero-required read-only tool with no output schema, the description covers intent and units but omits the meaning of the 'end' default ('s') and any indication of return format or time-range limits. Adequate but with clear gaps.

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 75%, so the schema already documents begin, group, and channels. The description reinforces interval grouping and channel selection but adds no syntax or default behavior beyond the schema, and the undocumented 'end' parameter (default 's') is left unaddressed. Baseline 3 fits.

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 gives a specific verb+resource ('Energy consumption (Wh) broken down by interval') and names the scoping option (all or selected output channels), so an agent knows exactly what it retrieves. It does not explicitly contrast itself with siblings like query or snapshot, which keeps it from 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?

'Use for today's hourly breakdown, daily totals, etc.' provides concrete usage examples that imply when the tool fits. However, it gives no exclusions and never names an alternative (e.g., query or sample_waveform) for cases where interval energy isn't the right call.

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

get_configB
Read-only

Get the full IoTaWatt device configuration from /config.txt: input channel definitions (names, CT models, calibration factors) and output scripts showing how calculated values are derived.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that the data comes from /config.txt, which tells the agent this is a local static-file read rather than a live device probe. It says nothing about freshness, whether the config is cached, or error behavior when the file is missing.

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 dense sentence that front-loads the verb and resource before listing the returned contents. Every clause earns its place by describing the payload. It is slightly list-heavy, 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 no output schema, the description usefully compensates by enumerating what the configuration contains (input channels, CT models, calibration factors, output scripts). With zero parameters and read-only annotations, there is little else an agent needs before calling it; only the missing sibling-routing guidance keeps it from a 5.

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

Parameters4/5

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

The tool takes zero parameters, so per the rubric the baseline is 4. The description cannot add parameter meaning because there is nothing to parameterize, and it correctly avoids inventing any.

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 (Get) and resource (full IoTaWatt device configuration), then enumerates the concrete payload: input channel definitions with names, CT models and calibration factors, plus output scripts. That is far more than a restatement of the name. It stops short of naming which sibling to use instead (e.g. discover or status), so it is clear but not explicitly differentiated.

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

Usage Guidelines2/5

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

The description never says when to reach for this tool versus status, discover, snapshot or query. There is no mention of prerequisites or exclusions, so the agent must infer usage from the resource name alone. The source path (/config.txt) hints at a static-config read, but that is inference, not guidance.

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

queryA
Read-only

Flexible IoTaWatt time-series query against the on-device log. Use discover first to know valid channel names. Results come back one row per line. The device stops sampling while it answers, so prefer a few well-scoped queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoEnd time: s=now, d+1d=end of todays
beginNoStart time: d=today midnight, d-7d=7 days ago, s-3600s=1hr ago, 2026-02-17T06:00 (no seconds: firmware bug)d
groupNoAggregation interval: seconds in multiples of 5 (5s, 10s, 30s), then 1m, 5m, 15m, 1h, 1d, 1w, 1M, 1y, "auto", or "all" for a single row. 5 second data is kept for about a year, 1 minute data for longer.1h
limitNoMaximum rows. The device default is 1000. A result cut short at the limit is flagged with a note.
formatNocsv is more compact for long results.json
selectYesSeries to return. Put "time.local.iso" first for timestamps. A bare channel name returns its default unit (Watts for power channels, Volts for voltage). Append a unit to change it: .watts .wh .amps .va .var .varh .pf for power channels, .volts .hz for voltage. Append .d2 (or another digit) to set decimal places, e.g. Mains.pf.d3.
missingNonull

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior beyond that: the device stops sampling while it answers, and results are one row per line. This is exactly the kind of side-effect disclosure annotations cannot convey.

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?

Three short sentences, purpose front-loaded, then prerequisite, then output shape and performance caveat. Every sentence carries information; nothing is padded.

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?

There is no output schema, and the description partially compensates by noting the one-row-per-line result shape and the sampling stall. Combined with a high-coverage input schema, an agent has enough to call this correctly, though return fields beyond row structure are unspecified.

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 86%, so the schema already documents begin/end/group/limit/select/format/missing in detail, including units, ranges and defaults. The description adds no parameter-level information, so the 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 and resource ("time-series query against the on-device log") and names the device, which is unambiguous. It does not, however, differentiate itself from the sibling energy_by_interval, which is also a time-series retrieval tool, so the agent must infer the boundary.

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?

Gives a clear prerequisite ("Use discover first to know valid channel names") and practical guidance ("prefer a few well-scoped queries"). No explicit when-not condition or direct comparison to alternative retrieval siblings, so it stops short of a 5.

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

sample_waveformA
Read-only

Capture one AC cycle of raw voltage and current samples (about 640 pairs) from a single CT input and describe the shape of the current: crest factor, 3rd/5th/7th harmonics, distortion and phase lag. This shows what kind of load is on the circuit right now: a heater draws a clean sine in phase with voltage, a motor lags, electronics draw a peaky current rich in harmonics. It is a snapshot of everything on that CT, not of one appliance. Values are raw ADC counts, not amps or volts, and have no CT/VT phase correction, so angles are approximate. Needs the admin user on a password-protected device.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYesInput name from discover, or the input's channel number.
include_samplesNoInclude the raw V,I sample pairs after the summary.

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 (readOnlyHint, non-destructive), but the description adds substantial context beyond them: values are raw ADC counts not engineering units, there is no CT/VT phase correction so angles are approximate, and it requires the admin user on a password-protected device. The auth requirement and data caveats are exactly the behavioral disclosures annotations cannot 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?

The core action and scope are front-loaded in the first sentence, with interpretation and caveats following. It runs to several sentences, and the load-interpretation examples are somewhat illustrative padding, but each sentence still contributes practical context for reading the 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?

There is no output schema, so the description carries the burden of describing the return, and it does list the returned shape metrics (crest factor, harmonics, distortion, phase lag) plus the optional raw sample pairs. It stops short of stating framing, ordering, or an example envelope, but it is largely sufficient for correct invocation and interpretation.

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 parameters are already documented in the schema. The description reinforces the 'single CT input' notion and the pair count (~640) that maps loosely to include_samples, but adds little syntax or format detail beyond the schema. 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.

Purpose5/5

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

The description states a specific verb and resource: 'Capture one AC cycle of raw voltage and current samples... from a single CT input' and enumerates the derived metrics. It sharply distinguishes this from siblings like snapshot by clarifying it is 'a snapshot of everything on that CT, not of one appliance.' An agent can identify what it does without opening the schema.

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 explains what the readings reveal (heater vs motor vs electronics) and tacitly implies when it is useful, but it never explicitly names when to use it versus siblings (snapshot, query, watch). Usage is inferable rather than stated, and no alternatives or exclusions are given.

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

snapshotA
Read-only

Latest instantaneous power: a single averaged value over the last 5 minutes. Defaults to all discovered output channels. Optionally restrict to specific channels.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelsNoSpecific channel names to include. If omitted, all calculated outputs are returned.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, destructiveHint=false and a closed-world scope, so the safety profile is covered. The description adds useful temporal context (a 5-minute averaging window, default to all discovered outputs) beyond the annotations, but says nothing about refresh cadence, staleness guarantees, or failure behavior.

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 terse sentences that front-load the core semantic (what value is returned) before the optional filtering behavior. No filler wording; slightly clipped grammar but nothing wasteful.

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

Completeness4/5

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

For a single-optional-parameter read tool with annotations covering safety and no output schema required, the description supplies what an agent needs: the value definition, the time window, and the default scope. Only unit/return-format detail is absent, which is acceptable given the schema coverage.

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 'channels' parameter and its omission default are already documented. The description restates the default behavior and adds the nuance that outputs are 'discovered', which is marginal added value on top of the schema.

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 a concrete resource and semantics ('latest instantaneous power, a single averaged value over the last 5 minutes'), which clarifies the otherwise opaque tool name 'snapshot'. It does not, however, explicitly distinguish itself from siblings like energy_by_interval, query, or watch, so an agent must infer the routing.

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 implied ('latest instantaneous power') and the optional channel restriction is described, but there is no explicit when-to-use guidance or exclusion relative to query, energy_by_interval, or sample_waveform. The agent must infer that this is the lightweight current-reading tool.

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

statusA
Read-only

IoTaWatt device status: firmware version, uptime, WiFi SSID/RSSI/IP, heap memory, AC frequency, and data log ranges.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds substantive behavioral context by listing exactly what status information is returned (firmware version, uptime, WiFi SSID/RSSI/IP, heap memory, AC frequency, data log ranges), which is valuable because there is no 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?

The description is a single, front-loaded sentence with no filler. Every phrase names a concrete piece of status information, so no words are wasted.

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 parameterless read-only status tool with no output schema, the description provides the necessary return-value detail by listing the status fields. Annotations cover the safety profile, and no parameter or return explanation is missing.

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

Parameters4/5

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

The tool has zero parameters, so the baseline of 4 applies per the scoring rules. The description does not need to explain parameter semantics, and it correctly avoids irrelevant parameter discussion.

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 identifies a specific resource (IoTaWatt device status) and enumerates the exact fields returned (firmware, uptime, WiFi, heap, AC frequency, log ranges), making the purpose clear. However, it uses a noun phrase without an explicit verb and does not differentiate itself from siblings like get_config or snapshot.

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?

There is no explicit guidance on when to use this tool versus alternatives such as get_config, snapshot, or query. The usage is implied by the name and field list (check device health/status), but no conditions or exclusions are stated.

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

watchA
Read-only

Live view at 1 second resolution, finer than the stored log. Polls the device once a second for the given number of seconds and returns one CSV row per second with the watts on each input (volts for a voltage input). Use it to catch an appliance being switched on or off right now. The call takes as long as the duration asked for.

ParametersJSON Schema
NameRequiredDescriptionDefault
pfNoAlso return the power factor of each power input, as <name>.pf columns.
secondsNoHow long to watch, 1 to 120 seconds.
channelsNoInput names to include. Defaults to all inputs.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare read-only/non-destructive safety; the description adds substantial non-obvious behavior: poll rate (once per second), output shape (one CSV row per second with watts/volts), and critically that 'the call takes as long as the duration asked for' — a blocking-duration characteristic an agent must know before invoking. This is genuine value beyond annotations.

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?

Four sentences, front-loaded with the core capability and resolution, then output, then use case, then the duration caveat. Efficient with little waste, though the output and use-case sentences could be tightened.

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

Completeness4/5

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

For a 3-param, no-output-schema read tool, the description covers resolution, output format, blocking duration, and intent. It omits error/limit handling and interaction with the 'channels' default, but is largely complete for correct invocation.

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 schema already documents pf, seconds, and channels thoroughly. The description nonetheless reinforces the time semantics ('given number of seconds', 1s resolution) and the watts-vs-volts per input type, adding light value without redundancy.

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 (live view/polling) and resource (device inputs over a duration), and crisply differentiates from the stored-log sibling 'query' by noting it is 'finer than the stored log' at 1-second resolution. An agent can distinguish it from snapshot or energy_by_interval 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?

Gives a clear use case ('catch an appliance being switched on or off right now') that tells the agent when this tool is appropriate. It does not explicitly name when to avoid it or which sibling to prefer for historical data, so it stops short of the top band.

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. 8 tool updatesv1.3.0
    • First observeddiscover
    • First observedenergy_by_interval
    • First observedget_config
    • First observedquery
    • First observedsample_waveform
    • First observedsnapshot
    • First observedstatus
    • First observedwatch

TDQS

A3.8/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct access mode or temporal resolution: device status, channel discovery, configuration, instantaneous snapshot, flexible historical query, aggregated energy, live 1-second polling, and raw waveform capture. Although all are read operations, the scopes are clearly differentiated in the descriptions.

Naming Consistency3/5

Mixed conventions are present: single-word nouns/verbs (status, discover, snapshot, query, watch) alongside verb_noun (get_config, sample_waveform) and noun_prep_noun (energy_by_interval). All names are lowercase snake_case and readable, but there is no single predictable pattern.

Tool Count5/5

Eight tools is well-scoped for an IoTaWatt device monitoring server. Each tool covers a distinct access pattern—status/config discovery, historical query, aggregated energy, live monitoring, and waveform analysis—with no obvious filler.

Completeness4/5

The surface covers device status, channel discovery, configuration read, raw and aggregated historical queries, live monitoring, and detailed waveform analysis, which is strong for a monitoring-oriented server. Minor gap: there are no tools to modify configuration, reboot the device, or manage firmware/logs, though these may be intentionally out of scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Local MCP server for reading temperature/humidity sensors from Tuya/SmartLife devices, exposing tools to list devices, get capabilities, and read sensor data.
    -
  • F
    license
    A
    quality
    C
    maintenance
    Read-only MCP server for querying solar generation, consumption, and DER telemetry from SolarNetwork via the SolarQuery API. Zero-config against a public demo node.
    5
    -