VoltWise MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@VoltWise MCP ServerDid my living room heater actually turn on, or is it just in standby?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
ONwhile 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
Model Context Protocol (MCP) Server & Client: Built on the official Python
mcpSDK (2.3.0). Exposes tools over standardstdioand realStreamable HTTPtransports. The client negotiates protocol version2025-11-25over live network connections.Simulator Gateway: The FastAPI backend communicates with the MCP server exclusively through the official
mcp.client.session.ClientSessionandstreamable_http_client. There is zero in-process bypass or direct application fallback.Verification & Diagnostic Engines: Full deterministic physics rules, range checks, transient peak detection, safe retry bounds, and safety stop orchestration.
Energy & Tariff Intelligence: Exact timestamp boundary comparisons, run-rate projections, non-hallucinatory attribution accounting (measuring vs estimating vs preserving unattributed kWh), and
Decimalslab tariff math.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, stateOFF, 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 |
|
| Turns on a device and checks whether observed electrical power settles within expected operational bounds. Returns |
2 |
|
| Executes full verification, diagnoses electrical failure modes, enforces safe retry policies, and returns |
3 |
| none | Compares current-cycle energy with the equivalent elapsed period from the previous billing cycle. Returns |
4 |
| none | Ranks observed appliance contributors, estimates runtime impacts, and preserves unattributed consumption. Returns |
5 |
| none | Computes current slab position, projected end-of-month consumption, marginal rates, and threshold crossing dates. Returns |
6 |
| none | Itemizes current energy charges and forecasts billing cycle totals using exact Decimal calculations. Returns |
7 |
|
| Projects incremental kWh and financial impact of running a specific appliance cycle (e.g. dishwasher). Returns |
8 |
|
| Evaluates target consumption feasibility and ranks evidence-based actions without demanding lifestyle compromises. Returns |
9 |
|
| Supporting tool for ordinary simulated-home appliances (living room light, ceiling fan, TV, AC). Returns |
Installation & Local Startup
Prerequisites
Operating System: Windows 10/11 (with PowerShell 5.1+) or Linux / macOS
Python: Version
3.12Node.js: Version
24(requires Node 24.15 or later)Docker: Optional (for single-port container packaging)
Method A: One-Click Windows Launcher (Recommended)
Clone or extract the repository:
cd VoltWiseInitialize 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 ..Run the automated launcher:
.\start-voltwise.batThe 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.
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.exeTerminal 2 — FastAPI REST API & Simulator Gateway (Port 8000)
$env:VOLTWISE_MCP_URL = "http://127.0.0.1:8001/mcp"
.\.venv\Scripts\voltwise-api.exeTerminal 3 — Vite Frontend (Port 5173)
cd frontend
npm.cmd run devOpen 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 voltwiseOpen 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_diagnostictool.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_CYCLEscenario.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 pytestTests 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 -- --runTests 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 buildConfiguration & 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 |
|
| Runtime mode ( |
|
| Path to the SQLite event and trace database. |
|
| Bind address for the MCP Streamable HTTP server. |
|
| Port for the standalone MCP HTTP server. |
|
| URL used by the REST gateway to reach MCP. |
|
| Permitted browser origins. |
|
| 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.exampleare blank placeholders.No runtime databases committed:
.dbfiles 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 toolspower_compare_periodsB
Compare current-cycle energy with the equivalent previous-cycle period.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| projection | Yes | |
| current_kwh | Yes | |
| elapsed_days | Yes | |
| change_percent | Yes | |
| difference_kwh | Yes | |
| evidence_source | Yes | |
| speakable_summary | Yes | |
| previous_equivalent_kwh | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| command | No | TURN_ON |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| device | Yes | |
| command | Yes | |
| success | No | |
| reported_state | Yes | |
| speakable_summary | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| device | Yes | |
| device_id | Yes | |
| after_slab | Yes | |
| before_slab | Yes | |
| after_usage_kwh | Yes | |
| before_usage_kwh | Yes | |
| informative_only | Yes | |
| speakable_summary | Yes | |
| threshold_crossed | Yes | |
| energy_impact_type | Yes | |
| after_energy_charge | Yes | |
| before_energy_charge | Yes | |
| crossed_thresholds_kwh | Yes | |
| estimated_operation_kwh | Yes | |
| estimated_incremental_energy_charge | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| current_kwh | No | |
| limitations | Yes | |
| contributors | Yes | |
| unattributed_kwh | Yes | |
| speakable_summary | Yes | |
| household_change_kwh | Yes | |
| known_contribution_kwh | Yes | |
| attribution_overage_kwh | Yes | |
| previous_equivalent_kwh | No | |
| household_change_percent | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| current | Yes | |
| is_demo | Yes | |
| projected | Yes | |
| tariff_id | Yes | |
| assumptions | Yes | |
| projection_method | Yes | |
| speakable_summary | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| is_demo | Yes | |
| currency | Yes | |
| tariff_id | Yes | |
| tariff_name | Yes | |
| tariff_type | Yes | |
| current_slab | Yes | |
| projected_slab | Yes | |
| current_usage_kwh | Yes | |
| speakable_summary | Yes | |
| threshold_warning | Yes | |
| next_marginal_rate | Yes | |
| next_threshold_kwh | Yes | |
| current_marginal_rate | Yes | |
| projected_month_end_kwh | Yes | |
| units_until_next_threshold | Yes | |
| expected_threshold_crossings | Yes | |
| current_estimated_energy_charge | Yes | |
| projected_estimated_energy_charge | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| device | Yes | |
| attempts | Yes | |
| evidence | Yes | |
| resolved | Yes | |
| confidence | Yes | |
| audit_events | Yes | |
| final_status | Yes | |
| retries_used | Yes | |
| safety_action | Yes | |
| requested_action | Yes | |
| speakable_summary | Yes | |
| initial_verification | Yes | |
| diagnostic_classification | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_kwh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| target_kwh | Yes | |
| target_status | Yes | |
| remaining_days | Yes | |
| recommendations | Yes | |
| current_usage_kwh | Yes | |
| speakable_summary | Yes | |
| projected_usage_kwh | Yes | |
| remaining_kwh_budget | Yes | |
| current_daily_run_rate_kwh | Yes | |
| required_average_daily_kwh | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| device | Yes | |
| reason | Yes | |
| command | Yes | |
| confidence | Yes | |
| verification | Yes | |
| reported_state | Yes | |
| evidence_source | Yes | |
| confidence_level | Yes | |
| speakable_summary | Yes | |
| telemetry_available | Yes | |
| expected_power_watts | Yes | |
| observed_power_watts | Yes | |
| diagnostic_classification | Yes | |
| observed_power_delta_watts | Yes |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v0.1.0- First observed
power_compare_periods - First observed
power_control_device - First observed
power_estimate_load_impact - First observed
power_explain_usage_change - First observed
power_forecast_bill - First observed
power_get_tariff_status - First observed
power_run_diagnostic - First observed
power_suggest_actions - First observed
power_turn_on_and_verify
TDQS
Scored across 9 tools
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.
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.
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.
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
Related MCP Connectors
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Home energy for AI assistants: live Power flow, Energy history, solar forecast, and device control.
Indian electricity tariff and bill-verification MCP with fail-closed regulatory execution.
Built-environment forecasts, public benchmarks, and permit or zoning readiness through remote MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to physical devices via MCP, enabling LLMs to reason about sensor data, perform cross-device correlation, and interpret anomalies.4Apache 2.0
- AlicenseBqualityBmaintenanceProvides 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.20Mozilla Public 2.0
- AlicenseNot gradedqualityBmaintenanceEnables 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
- AlicenseNot gradedqualityBmaintenanceEnables safe, step-by-step troubleshooting of home technology issues, with reversible checks, safety validation, and personalized support plans over MCP.MIT