Skip to main content
Glama
pre170

VoltWise MCP Server

by pre170

VoltWise — Energy-Aware Physical Outcome Verification

Amazon Developer Hackathon Submission
Your smart home says it's ON. VoltWise checks if it actually happened.


Overview: The "Beyond ON" Problem

In contemporary smart-home platforms, commanding a device to turn on returns a simple acknowledgement: "Living room heater is ON". However, this acknowledgement answers only one question: did the device accept the radio command?

It does not prove that the expected physical or electrical response occurred:

  • A heater can acknowledge ON while stuck in an idle standby draw (~7 W instead of ~1,500 W).

  • A malfunctioning appliance can draw hazardous, abnormal current (~2,200 W exceeding safety thresholds).

  • A household can experience unexplained bill spikes without transparent, non-hallucinatory attribution of which appliances contributed and what remained unattributed.

VoltWise bridges this gap. Built for an intelligent conversational assistant experience, VoltWise treats the command, the reported state, physical electrical observations, safety policy decisions, and verified outcomes as distinct, verifiable layers of evidence.


Related MCP server: domoai-mcp

Real Architecture vs. Simulated Demonstration Boundaries

To ensure complete technical honesty and transparency for hackathon evaluation, VoltWise strictly delineates what is real software and what is a simulated test fixture:

┌────────────────────────────────────────────────────────────────────────┐
│                   SIMULATED JUDGING SURFACE (BROWSER)                  │
│  React 19 + TypeScript + Vite Interactive "Digital Home" & Chat UI     │
│  (Simulated Alexa-style conversational interaction; NOT native Alexa+) │
└───────────────────────────────────┬────────────────────────────────────┘
                                    │ HTTP POST /api/sim/chat
                                    ▼
┌────────────────────────────────────────────────────────────────────────┐
│                   REAL FASTAPI SIMULATOR GATEWAY                       │
│  - Parses natural language intent (e.g. "Alexa, what's causing...")   │
│  - Deterministically selects matching tool and typed arguments         │
│  - Opens official MCP ClientSession over Streamable HTTP               │
│  - NO backdoor/direct application fallback if MCP is unavailable       │
└───────────────────────────────────┬────────────────────────────────────┘
                                    │ Real MCP ClientSession
                                    │ Streamable HTTP (Port 8001 / /mcp)
                                    │ Protocol 2025-11-25
                                    ▼
┌────────────────────────────────────────────────────────────────────────┐
│                 REAL MODEL CONTEXT PROTOCOL (MCP) SERVER               │
│  Official Python SDK 2.3.0 Streamable HTTP Transport                  │
│  Full 9-Tool Registry (Verification, Diagnostics, Energy & Tariffs)    │
└───────────────────────────────────┬────────────────────────────────────┘
                                    │ Typed Function Calls
                                    ▼
┌────────────────────────────────────────────────────────────────────────┐
│                 REAL APPLICATION ENGINES & LOGIC                       │
│  - VerificationService: Compares expected vs observed electrical draw  │
│  - DiagnosticEngine: Classifies behavior (offline, standby, abnormal)  │
│  - SafetyEngine: Zero-retry cutoff if draw exceeds safe threshold      │
│  - EnergyUsageEngine & TariffEngine: Decimal slab & run-rate analytics │
│  - SQLiteEventRepository & TraceRepository: Full persisted audit trail │
└───────────────────────────────────┬────────────────────────────────────┘
                                    │ Telemetry & State Polling
                                    ▼
┌────────────────────────────────────────────────────────────────────────┐
│            SIMULATED ELECTRICAL TELEMETRY & APPLIANCE FIXTURES         │
│  - Deterministic resistive heater, AC, TV, fan, and light profiles     │
│  - Standby (7 W), operating (1,500 W), and high-draw (2,200 W) faults  │
│  - Deterministic 30-day billing cycle historical telemetry fixtures   │
└────────────────────────────────────────────────────────────────────────┘

What is 100% Real

  1. Model Context Protocol (MCP) Server & Client: Built on the official Python mcp SDK (2.3.0). Exposes tools over standard stdio and real Streamable HTTP transports. The client negotiates protocol version 2025-11-25 over live network connections.

  2. Simulator Gateway: The FastAPI backend communicates with the MCP server exclusively through the official mcp.client.session.ClientSession and streamable_http_client. There is zero in-process bypass or direct application fallback.

  3. Verification & Diagnostic Engines: Full deterministic physics rules, range checks, transient peak detection, safe retry bounds, and safety stop orchestration.

  4. Energy & Tariff Intelligence: Exact timestamp boundary comparisons, run-rate projections, non-hallucinatory attribution accounting (measuring vs estimating vs preserving unattributed kWh), and Decimal slab tariff math.

  5. Audit Trails: Real SQLite database persistence for application events and MCP traces.

What is Simulated (Explicit Disclosures)

  • Simulated Alexa-Style UI: The judge-facing browser UI simulates how an Alexa+ conversational agent would present this data. It is not a native Alexa+ deployment, Alexa Skill, or certified Amazon device package.

  • Simulated Electrical Telemetry: Smart plugs, household meters, appliance states, and electrical wattages are deterministic software fixtures. There is no physical smart-plug hardware or physical IoT bench connected.

  • Simulated Electrical Cutoff: The safety cutoff is an immediate software state change (0 W, state OFF, zero retries). It does not represent a certified physical circuit breaker, relay hardware, or UL/CE production electrical safety certification.

  • Illustrative Tariff: The configured 300 kWh threshold slab tariff is an illustrative model for demonstration purposes, not live utility tariff data.


The 9 Actual MCP Tools

VoltWise exposes nine tools in a unified registry accessible via stdio and Streamable HTTP (/mcp):

#

MCP Tool Name

Arguments

Description & Return Contract

1

power_turn_on_and_verify

device: str

Turns on a device and checks whether observed electrical power settles within expected operational bounds. Returns VerificationResult.

2

power_run_diagnostic

device: str

Executes full verification, diagnoses electrical failure modes, enforces safe retry policies, and returns DiagnosticWorkflowResult with technician handoff copy.

3

power_compare_periods

none

Compares current-cycle energy with the equivalent elapsed period from the previous billing cycle. Returns PeriodComparisonResult.

4

power_explain_usage_change

none

Ranks observed appliance contributors, estimates runtime impacts, and preserves unattributed consumption. Returns UsageChangeExplanation.

5

power_get_tariff_status

none

Computes current slab position, projected end-of-month consumption, marginal rates, and threshold crossing dates. Returns TariffStatus.

6

power_forecast_bill

none

Itemizes current energy charges and forecasts billing cycle totals using exact Decimal calculations. Returns BillForecast.

7

power_estimate_load_impact

device: str

Projects incremental kWh and financial impact of running a specific appliance cycle (e.g. dishwasher). Returns LoadImpactResult.

8

power_suggest_actions

target_kwh: float | null

Evaluates target consumption feasibility and ranks evidence-based actions without demanding lifestyle compromises. Returns ActionSuggestions.

9

power_control_device

device: str, command: str

Supporting tool for ordinary simulated-home appliances (living room light, ceiling fan, TV, AC). Returns DeviceControlResult.


Installation & Local Startup

Prerequisites

  • Operating System: Windows 10/11 (with PowerShell 5.1+) or Linux / macOS

  • Python: Version 3.12

  • Node.js: Version 24 (requires Node 24.15 or later)

  • Docker: Optional (for single-port container packaging)


  1. Clone or extract the repository:

    cd VoltWise
  2. Initialize Python virtual environment and frontend dependencies:

    py -3.12 -m venv .venv
    .\.venv\Scripts\python -m pip install -e ".[dev]"
    cd frontend
    npm.cmd ci
    cd ..
  3. Run the automated launcher:

    .\start-voltwise.bat

    The launcher verifies port availability, starts the MCP Streamable HTTP server on port 8001, validates official client readiness across all tools, starts the FastAPI REST gateway on port 8000, starts the Vite frontend on port 5173, resets the demo state, and opens your default browser.

  4. To stop all background demo processes cleanly:

    .\stop-voltwise.bat

Method B: Manual Multi-Terminal Startup

Terminal 1 — Real MCP Server (Port 8001)

$env:VOLTWISE_MCP_PORT = "8001"
.\.venv\Scripts\voltwise-mcp-http.exe

Terminal 2 — FastAPI REST API & Simulator Gateway (Port 8000)

$env:VOLTWISE_MCP_URL = "http://127.0.0.1:8001/mcp"
.\.venv\Scripts\voltwise-api.exe

Terminal 3 — Vite Frontend (Port 5173)

cd frontend
npm.cmd run dev

Open http://127.0.0.1:5173 in any modern web browser.


Method C: Single-Port Production Container (Docker)

VoltWise includes a self-contained multi-stage Dockerfile that packages the compiled React frontend, FastAPI backend, and MCP server into a single non-root container running on port 8080:

docker build -t voltwise .
docker run --rm -p 8080:8080 -v voltwise-data:/data voltwise

Open http://127.0.0.1:8080. Health check is available at /health, REST API at /api/..., and MCP at /mcp.


The Five Canonical Demo Scenarios

Use the Demo setup preset selector in the judge UI (or command the simulated assistant) to reproduce all 5 core demonstration flows:

Scenario 1: Heater Electrical Response Failure (NO_DRAW)

  • Initial Setup: Select No draw fault preset (or click Reset demo).

  • User Action: Type "Turn the heater on" or click the Turn on heater quick action.

  • Observed Behavior:

    • The living room heater UI reports ON.

    • Electrical telemetry observation detects only ~7 W (idle standby power) instead of the nominal ~1,500 W.

    • VoltWise flags the failure: "Not verified: Living room heater acknowledged ON, but electrical draw is only 7 W".

    • The floorplan tile highlights the device in an unverified warning state.

Scenario 2: Diagnostic Telemetry & Technician Handoff Copy

  • Initial Setup: Follows Scenario 1 while the heater is in the unverified state.

  • User Action: Type "Check what's wrong with the heater" or click Diagnose heater.

  • Observed Behavior:

    • VoltWise invokes the MCP power_run_diagnostic tool.

    • The diagnostic engine analyzes power history, identifies standby-only draw without mechanical heat generation, and classifies the root fault.

    • Generates clear, field-ready Technician Handoff Copy (component checks, element resistance, relay continuity) without human speculation.

Scenario 3: Bounded Recovery After Single Safe Retry (NO_DRAW_THEN_RECOVER)

  • Initial Setup: Select Recovery demo preset in the Demo setup dropdown.

  • User Action: Type "Check what's wrong with the heater".

  • Observed Behavior:

    • Initial electrical verification fails at ~7 W.

    • Safety policy confirms the failure is non-hazardous and authorizes exactly one safe retry.

    • VoltWise cycles the simulated control and re-verifies electrical response.

    • Re-verification detects ~1,500 W normal operating draw.

    • Status updates to "Physically Verified: Living Room Heater is drawing 1,500 W", successfully recovering without human intervention.

Scenario 4: High-Draw Safety Cutoff (HIGH_DRAW)

  • Initial Setup: Select High draw fault preset.

  • User Action: Type "Turn the heater on".

  • Observed Behavior:

    • Telemetry detects an unsafe surge to ~2,200 W (exceeding nominal 1,500 W and the 1,900 W safety ceiling).

    • Safety engine executes an immediate software safety cutoff:

      • Simulated power cut to 0 W.

      • Device forced to OFF.

      • Zero retries permitted by safety policy.

    • Display alerts the user with an urgent safety stoppage warning and preserves the triggering electrical evidence in the audit log.

Scenario 5: Conversational Natural-Language Energy Intelligence

  • Initial Setup: Click Reset demo to restore the canonical NORMAL_CURRENT_CYCLE scenario.

  • User Action: Type:

    "Alexa, what's causing my electricity usage to increase?"
    (Also accepts natural variants: "Why is my electricity bill going up?", "What's using more electricity?", "Why did my energy usage increase?")

  • Observed Behavior:

    • Routed through MCP power_explain_usage_change.

    • Transparent accounting explains:

      • Current period usage: 142.0 kWh vs previous equivalent period: 118.0 kWh (+24.0 kWh / +20.34% increase).

      • Ranked primary contributor: Air Conditioner (+21 hours runtime = 15.75 kWh estimated contribution).

      • Other auxiliary loads: 3.60 kWh.

      • Unattributed consumption: 4.65 kWh (honestly reported as unexplained household variation rather than hallucinating fake appliance IDs).


Verification & Test Suites

VoltWise maintains thorough test coverage across backend engines, REST APIs, MCP transports, and frontend components.

Backend Validation (169 Tests Passing)

Run pytest from the repository root:

.\.venv\Scripts\python -m pytest

Tests cover: physical verification rules, safety engine cutoff triggers, one-retry boundary limits, tariff slab quantization, billing run-rate forecasting, MCP Streamable HTTP protocol negotiation (2025-11-25), and simulator gateway routing.

Frontend Validation (74 Tests Passing)

Run Vitest from the frontend/ directory:

cd frontend
npm.cmd test -- --run

Tests cover: judge UI interactions, appliance control, high-draw safety presentation, energy explanation cards, live MCP technical traces, and keyboard accessibility.

Production Build Validation

Verify TypeScript types and Vite production bundling:

cd frontend
npm.cmd run build

Configuration & Environment Variables

Default development settings operate out of the box on localhost without requiring any .env file. To customize, copy .env.example to .env or set environment variables:

Variable

Default

Purpose

VOLTWISE_MODE

SIMULATION

Runtime mode (SIMULATION or PRODUCTION).

VOLTWISE_DB_PATH

data/voltwise.db

Path to the SQLite event and trace database.

VOLTWISE_MCP_HOST

127.0.0.1

Bind address for the MCP Streamable HTTP server.

VOLTWISE_MCP_PORT

8001

Port for the standalone MCP HTTP server.

VOLTWISE_MCP_URL

http://127.0.0.1:8001/mcp

URL used by the REST gateway to reach MCP.

VOLTWISE_CORS_ORIGINS

http://localhost:5173,http://127.0.0.1:5173

Permitted browser origins.

VOLTWISE_PUBLIC_DEMO

false

Enables HTTP Basic challenge and bearer tokens for public demo staging.


Security & Privacy Hygiene

This release distribution is prepared for public GitHub publication:

  • No private keys, API secrets, or passwords: Authentication tokens in .env.example are blank placeholders.

  • No runtime databases committed: .db files are strictly excluded; the database directory is initialized automatically at startup.

  • No machine-specific paths: All paths in scripts and configuration are relative to project root.

  • Sanitized release tree: node_modules, .venv, .pytest_cache, temporary video artifacts, screen captures, and build caches are purged from the repository.


License

This project is licensed under the terms of the MIT License. See the LICENSE file for full details.

Available Tools

9 tools
power_compare_periodsB

Compare current-cycle energy with the equivalent previous-cycle period.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
projectionYes
current_kwhYes
elapsed_daysYes
change_percentYes
difference_kwhYes
evidence_sourceYes
speakable_summaryYes
previous_equivalent_kwhYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full behavioral burden. It never states that this is a read-only analysis (no side effects), what defines a 'cycle', or how missing previous-cycle data is handled — all things an agent would want before calling a comparison tool.

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

Conciseness5/5

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

A single, front-loaded sentence with zero filler. The comparison scope is stated in the first few words, so the agent's decision is immediate.

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?

An output schema exists so return values needn't be explained, and the zero-param signature keeps the surface small. Still, with no annotations and no mention of what constitutes a cycle or whether the comparison is read-only, the description leaves a few gaps for an analysis tool.

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 nothing for the description to explain beyond what the schema already conveys. Baseline 4 applies; the description adds no param detail because none is needed.

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 pairs the verb 'compare' with a well-defined resource ('current-cycle energy' vs 'equivalent previous-cycle period'), so an agent immediately knows this is a period-over-period delta tool. It stops short of naming why it differs from near neighbors like power_explain_usage_change, which also touches usage changes.

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

Usage Guidelines2/5

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

There is no statement of when to reach for this tool versus power_explain_usage_change, power_forecast_bill, or power_estimate_load_impact. No prerequisites or exclusions are given; the agent must infer usage from the name and sibling list alone.

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

power_control_deviceC

Control a simulated household device (light, fan, TV, AC, dishwasher).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes
commandNoTURN_ON

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
deviceYes
commandYes
successNo
reported_stateYes
speakable_summaryYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden. It does add one useful fact — that devices are 'simulated', not real hardware — but says nothing about what commands are valid, whether state persists, whether actions are reversible, or what errors look like.

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 sentence with the resource and its device scope front-loaded and no wasted words. It is efficient, though its brevity reflects under-specification rather than tight editing of richer content.

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

Completeness2/5

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

An output schema exists, so return values need not be explained, but the agent still lacks the two things it needs most: the accepted command vocabulary and the boundary against power_turn_on_and_verify. For a state-changing control tool with no annotations, this is a significant gap.

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

Parameters2/5

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

Schema coverage is 0%, so the description must compensate. It lists plausible device values (light, fan, TV, AC, dishwasher), partially covering the 'device' parameter, but gives no hint at all about valid 'command' values beyond the schema's default of TURN_ON, leaving half the parameters semantically undefined.

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 ('Control') and resource ('simulated household device') and enumerates the device types, so the scope is clear. However, it does not differentiate from the sibling power_turn_on_and_verify, which also appears to control device power, leaving real overlap unresolved.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as power_turn_on_and_verify despite the obvious overlap in controlling a device. The agent must infer usage entirely.

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

power_estimate_load_impactC

Estimate a configured appliance operation's energy and incremental charge.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
deviceYes
device_idYes
after_slabYes
before_slabYes
after_usage_kwhYes
before_usage_kwhYes
informative_onlyYes
speakable_summaryYes
threshold_crossedYes
energy_impact_typeYes
after_energy_chargeYes
before_energy_chargeYes
crossed_thresholds_kwhYes
estimated_operation_kwhYes
estimated_incremental_energy_chargeYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries the full burden, and it does not say whether this is a pure calculation with no side effects, what permissions it needs, or what 'incremental charge' is relative to. Only the estimate framing implies a read-only simulation, which is inference rather than disclosure.

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

Conciseness4/5

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

One tight sentence with the verb and outcome front-loaded and no filler. It is efficient, though its brevity is also the source of the missing context noted elsewhere.

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?

An output schema exists, so return values need not be explained, but the description still leaves the sole required parameter's meaning and the tool's side-effect profile unspecified. For a one-parameter tool this is minimally adequate but has clear gaps.

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

Parameters2/5

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

The single required parameter 'device' has 0% schema coverage and no description text, and the prose says 'configured appliance operation,' creating ambiguity about whether the argument is a device identifier or an operation reference. The description does not compensate for the coverage gap at all.

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 ('Estimate') and resource ('load impact' / energy and incremental charge), which is clearer than the bare name. It does not explicitly differentiate itself from siblings like power_forecast_bill or power_compare_periods, so it stops short of a 5.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no named alternative. The phrase 'configured appliance operation' hints at a precondition but never states it, leaving the agent to infer when this beats power_forecast_bill or power_compare_periods.

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

power_explain_usage_changeC

Rank observed contributors and preserve unattributed household usage.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
current_kwhNo
limitationsYes
contributorsYes
unattributed_kwhYes
speakable_summaryYes
household_change_kwhYes
known_contribution_kwhYes
attribution_overage_kwhYes
previous_equivalent_kwhNo
household_change_percentYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, and it discloses only one trait: that unattributed usage is preserved rather than dropped. It says nothing about required inputs, data sources, timeframe assumptions, or how contributors are ranked, which matters for a no-parameter analysis tool.

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

Conciseness4/5

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

A single tight sentence with no filler, and the two key behaviors (ranking, preserving unattributed usage) are front-loaded. It is efficient, though the terseness trades away clarity rather than genuinely earning it.

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

Completeness2/5

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

An output schema exists, so return values need not be explained, but the description still leaves the tool's purpose and selection context ambiguous against eight power siblings. For a zero-parameter analytical tool with no annotations, this is too thin to guide 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?

The tool takes zero parameters, so there is no parameter surface for the description to compensate for. Baseline 4 applies; nothing is misleading about how inputs are described.

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

Purpose3/5

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

The description gestures at the tool's job — ranking contributors to a usage change and retaining unattributed household usage — but never states plainly that it explains why household power usage changed. The resource is inferable from the name, not from the text, and it does not distinguish itself from siblings like power_compare_periods.

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

Usage Guidelines2/5

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

There is no indication of when to call this versus power_compare_periods, power_run_diagnostic, or power_forecast_bill. Usage is only loosely implied by the phrase 'explain usage change'; no prerequisites, triggers, 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.

power_forecast_billB

Estimate current and projected energy charges, not a complete utility bill.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
currentYes
is_demoYes
projectedYes
tariff_idYes
assumptionsYes
projection_methodYes
speakable_summaryYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses only the scope limitation; there is no mention of auth requirements, data freshness, assumptions behind the projection, or failure modes. For a zero-annotation estimation tool this is thin.

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

Conciseness5/5

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

A single front-loaded sentence that states the estimate and immediately bounds its scope. No filler or redundancy.

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

Completeness3/5

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

With zero parameters and an output schema present, return values are already covered, so the description's main job is the scope caveat, which it delivers. However, with no annotations it should do more to explain the basis of the estimate and its limitations.

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 no parameters, so the baseline is 4. The description adds nothing about parameterization because there is none to document.

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 ('Estimate') and resource ('current and projected energy charges'), and clarifies scope with 'not a complete utility bill.' It does not, however, distinguish itself from siblings like power_estimate_load_impact or power_compare_periods, leaving some ambiguity about overlap.

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 phrase 'not a complete utility bill' implies a when-not condition, warning the agent that this is a partial estimate. But no explicit alternative tool is named for when a full bill or a different projection is needed, so routing guidance is only implied.

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

power_get_tariff_statusB

Return current and projected position under the illustrative demo tariff.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
sourceYes
is_demoYes
currencyYes
tariff_idYes
tariff_nameYes
tariff_typeYes
current_slabYes
projected_slabYes
current_usage_kwhYes
speakable_summaryYes
threshold_warningYes
next_marginal_rateYes
next_threshold_kwhYes
current_marginal_rateYes
projected_month_end_kwhYes
units_until_next_thresholdYes
expected_threshold_crossingsYes
current_estimated_energy_chargeYes
projected_estimated_energy_chargeYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It adds the useful context that the tariff is an 'illustrative demo' rather than real billing data, and 'Return' implies a non-mutating read, but it says nothing about permissions, data freshness, or scope limits. Adequate for a zero-parameter read, but not rich.

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 front-loaded sentence with no filler, correctly leading with the action and resource. It is tight, though the term 'position' is left unqualified and does no extra work.

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

Completeness4/5

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

An output schema exists, so the description need not enumerate return values, and with zero parameters the surface is small. It is complete enough to invoke, though the ambiguous word 'position' (tier? rate? standing?) means the description relies entirely on the output schema to explain what is actually returned.

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 no parameters, so there is nothing for the description to disambiguate and the baseline is 4. No syntax or format detail is needed.

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 (return) and resource (tariff status / current and projected position), so the agent knows this is a read of tariff standing rather than a device or billing action. It does not explicitly contrast itself with siblings like power_forecast_bill or power_compare_periods, which could plausibly overlap in the tariff/billing space, so it stops short of a 5.

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

Usage Guidelines2/5

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

There is no statement of when to reach for this tool versus power_forecast_bill or power_compare_periods, and no prerequisites or exclusions. The agent is left to infer the use case purely from the tool name.

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

power_run_diagnosticB

Verify, diagnose, safely retry when permitted, and re-verify a device.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
deviceYes
attemptsYes
evidenceYes
resolvedYes
confidenceYes
audit_eventsYes
final_statusYes
retries_usedYes
safety_actionYes
requested_actionYes
speakable_summaryYes
initial_verificationYes
diagnostic_classificationYes

TDQS

B3/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose a multi-phase process and that retries happen conditionally ('safely retry when permitted'), which is useful sequencing context, but it says nothing about whether the diagnostic is disruptive, what permissions are required, or what changes are made to the device.

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 front-loaded sentence with no filler or repeated content. The phrase 'safely retry when permitted' is vague and slightly hollow, but overall the sentence earns its place.

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?

An output schema exists, so return values need not be explained. However, for a no-annotation tool with a required, completely undocumented parameter and no statement of side effects or permission requirements, the description leaves meaningful gaps an agent would need filled before invoking it.

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

Parameters2/5

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

Schema description coverage is 0% for the single required 'device' parameter, and the description adds no format or naming guidance (device ID, name, or type). The description does nothing to compensate for the completely undocumented input.

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

Purpose4/5

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

The description names a recognizable operation (run a diagnostic on a device) and enumerates the sequence of verify → diagnose → retry → re-verify. It does not, however, distinguish this tool from siblings like power_turn_on_and_verify, which also verifies a device, so an agent must guess at 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 Guidelines2/5

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

There is no statement of when to use this tool versus the seven siblings (power_control_device, power_turn_on_and_verify, etc.), nor any prerequisites or triggers. 'When permitted' is asserted but never defined, so the agent has no way to know what conditions gate the retry path.

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

power_suggest_actionsC

Return evidence-based actions and optional target-consumption guidance.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_kwhNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
target_kwhYes
target_statusYes
remaining_daysYes
recommendationsYes
current_usage_kwhYes
speakable_summaryYes
projected_usage_kwhYes
remaining_kwh_budgetYes
current_daily_run_rate_kwhYes
required_average_daily_kwhYes

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full burden. The word 'suggest' implies a non-mutating advisory call, but the description never confirms it takes no real action (critical given the sibling set includes power_control_device and power_turn_on_and_verify), nor does it mention permissions, cost, 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.

Conciseness3/5

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

A single clean sentence with no filler, so it is not padded. However, its brevity comes at the cost of substance rather than from tight editing, so it reads as under-specified rather than efficient.

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

Completeness2/5

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

An output schema exists, so return-value detail is not required. Yet with zero annotations, 0% parameter coverage, and eight sibling tools, the description leaves the agent without enough to know what the tool produces, when it applies, or how the lone parameter changes the result.

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

Parameters2/5

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

Schema description coverage is 0% with one non-trivial parameter. 'Optional target-consumption guidance' hints that target_kwh influences output, but the description never states the parameter's units, format, or effect, and the schema itself only supplies the name 'Target Kwh' and a null default.

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

Purpose3/5

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

The description names a verb ('Return') and loosely a resource ('actions'), plus optional 'target-consumption guidance', so the general shape is inferable. But it never states what domain of action these are (energy-saving? device control?) or what 'evidence' is drawn from, leaving it distinguishable from siblings like power_control_device or power_explain_usage_change only by guesswork.

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

Usage Guidelines2/5

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

No when-to-use, when-not-to-use, or alternative tool is named. The only contextual cue is the phrase 'optional target-consumption guidance', which weakly implies the target_kwh parameter triggers extra behavior, but no condition for reaching for this tool over power_forecast_bill or power_estimate_load_impact is given.

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

power_turn_on_and_verifyC

Turn on a simulated device and verify its direct electrical response.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
deviceYes
reasonYes
commandYes
confidenceYes
verificationYes
reported_stateYes
evidence_sourceYes
confidence_levelYes
speakable_summaryYes
telemetry_availableYes
expected_power_wattsYes
observed_power_wattsYes
diagnostic_classificationYes
observed_power_delta_wattsYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It implies a mutation (turning a device on) plus a verification step, but never says what happens on failure, whether the operation is idempotent or reversible, what permissions are needed, or what the verification result contains.

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 front-loaded sentence with no wasted words. It is appropriately sized for the payload, though the terseness is part of why other dimensions are thin.

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

Completeness2/5

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

An output schema exists, so return values need not be explained, but for a mutation tool with zero annotations and an undocumented parameter the description is too thin. It omits side effects, failure behavior, and the device identifier format an agent needs to call it correctly.

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

Parameters2/5

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

Schema description coverage is 0% for the single required 'device' parameter, so the description must compensate and does not. It never indicates whether 'device' expects an ID, a name, or a constrained set of values.

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 specific compound verb+resource: turn on a simulated device and verify its direct electrical response. It is clear what the tool does, but it does not distinguish itself from the sibling power_control_device, which plausibly also switches devices on, leaving the agent to guess which one to pick.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of prerequisites, and no reference to any alternative such as power_control_device. The only contextual hint is the word 'simulated', which does not route the agent between siblings.

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. 9 tool updatesv0.1.0
    • First observedpower_compare_periods
    • First observedpower_control_device
    • First observedpower_estimate_load_impact
    • First observedpower_explain_usage_change
    • First observedpower_forecast_bill
    • First observedpower_get_tariff_status
    • First observedpower_run_diagnostic
    • First observedpower_suggest_actions
    • First observedpower_turn_on_and_verify

TDQS

B3.2/5.0

Scored across 9 tools

Disambiguation3/5

Most tools target distinct analytical tasks, but three tools cluster around device control/verification: power_control_device, power_turn_on_and_verify, and power_run_diagnostic all involve turning on and validating a device, with the latter two appearing as narrower subsets of the first. An agent may struggle to pick between them, though the tariff/forecast/explain tools are clearly separated.

Naming Consistency5/5

Every tool uses the same power_ prefix followed by a snake_case verb_noun phrase (power_control_device, power_compare_periods, power_forecast_bill), giving a highly predictable, uniform pattern.

Tool Count5/5

Nine tools is well within the ideal range and each maps to a distinct energy-management capability (control, diagnostics, comparison, explanation, tariff, forecast, load impact, suggestions). The set is scoped tightly with no filler.

Completeness4/5

The surface covers the full monitoring-to-action lifecycle including control, diagnostics, analysis, billing projection, and recommendations. Minor gaps exist, such as no explicit device discovery/listing or standalone scheduling tool, but core workflows are reachable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects AI assistants to physical devices via MCP, enabling LLMs to reason about sensor data, perform cross-device correlation, and interpret anomalies.
    4
    Apache 2.0
  • A
    license
    B
    quality
    B
    maintenance
    Provides a unified MCP interface for smart home automation, enabling device discovery, state management, energy optimization, and policy-aware plan validation across multiple home automation protocols.
    20
    Mozilla Public 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables smart home automation via MCP with human-in-the-loop approval gates, providing device discovery, state queries, policy checks, and proposal-based execution of actions and scenes that only proceed after explicit user confirmation, with full audit logging.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables safe, step-by-step troubleshooting of home technology issues, with reversible checks, safety validation, and personalized support plans over MCP.
    MIT