MCP server
Plug HVAC into Claude, ChatGPT, and any MCP agent.
12 tools to read state, control devices, diagnose faults, and reason about psychrometrics — exposed as native MCP. Production-grade auth and audit. Unlock the spec with one email.
Browse tools →Tools
MCP tools the HVAC agent exposes
Each tool is one function call from your LLM. Same auth and audit model as the REST API — write-tools are scope-gated, every action is logged with caller, before/after, and outcome. Unlock to see input/return shapes and the Claude Desktop config.
12 tools across 4 categories · MCP server URL on unlock
-
list_brandsReadEnumerate supported HVAC, BMS, and home-automation brands
-
get_brand_capabilitiesReadGet what one brand supports — points, families, integration depth
-
list_sitesReadList sites the agent has access to
-
read_device_stateReadCurrent temperature, setpoint, mode, fan, and online status
-
read_device_historyReadSampled historical telemetry over a time window
-
set_device_setpointwrite ControlWrite a new target temperature, with audit log
-
set_device_modewrite ControlSwitch between heat / cool / auto / off / fan
-
list_active_faultsDiagnosticOpen fault alarms across your scope
-
explain_fault_codeDiagnosticGet meaning + suggested action for a brand-specific code
-
acknowledge_faultwrite DiagnosticAcknowledge a fault and silence re-alarming
-
site_energy_summaryAnalyticskWh, peak kW, demand kW over a time window
-
compute_psychrometricsAnalyticsWet-bulb, dew point, enthalpy from temperature + humidity
No tools match — try a different search term.
Tool I/O + connection details
Unlock to see the MCP server URL, the configuration snippet for Claude Desktop and the Anthropic Agent SDK, and full input / return shapes for every tool above. One email unlocks the API reference and the brand pages too.
One email unlocks the whole site.
list_brands Returns every brand the agent can read or control. Useful when a Claude agent is starting fresh and needs to know what equipment it can integrate.
Input
{ category?: "HVAC" | "HomeAutomation" | "BMS"; status?: "supported" | "beta" | "planned" } Returns
{ brands: { slug; name; category; protocols; status }[] } Example
list_brands({ category: "HVAC", status: "supported" }) get_brand_capabilities Resolves a brand slug to its device families, supported points, and protocol matrix. Use it before deciding whether to attempt a control call against a specific brand.
Input
{ slug: string } Returns
{ brand; deviceFamilies; capabilities; protocols } Example
get_brand_capabilities({ slug: "daikin" }) list_sites Each site is a parent scope. Faults, energy roll-ups, and device queries are typically scoped to a site.
Input
{ limit?: number; cursor?: string } Returns
{ sites: Site[]; nextCursor?: string } Example
list_sites({}) read_device_state Normalized across brands. Claude can ask "what is the conference-room VRV doing?" and get a JSON it can reason over without learning per-brand semantics.
Input
{ deviceId: string } Returns
{ temperature; humidity; setpoint; mode; fanSpeed; status; readAt } Example
read_device_state({ deviceId: "site-3-vrv-conf-12" }) read_device_history Returns time-series data for the requested points. Resolution is auto-selected by window size; ask for explicit resolution if you need it.
Input
{ deviceId; points: string[]; from: ISO8601; to: ISO8601; resolution?: "1m"|"5m"|"1h"|"1d" } Returns
{ points: { name; samples: [t, v][] }[] } Example
read_device_history({ deviceId: "rtu-7", points: ["temperature","setpoint"], from: "2026-05-27T00:00:00Z", to: "2026-05-27T23:59:59Z" }) set_device_setpoint
requires devices:write
Gated by per-device write scope AND your site safety interlocks. Every write is recorded with the calling agent, before/after, reason, and outcome.
Input
{ deviceId; value: number; reason?: string } Returns
{ ok; before; after; appliedAt; auditId } Example
set_device_setpoint({ deviceId: "rtu-7", value: 72, reason: "Pre-cool for 9am occupancy" }) set_device_mode
requires devices:write
Bounded by the device's capabilities. The MCP server validates the mode is supported before calling the brand API; on mismatch returns the allowed mode list.
Input
{ deviceId; mode: "heat"|"cool"|"auto"|"off"|"fan"|"dry" } Returns
{ ok; before; after; appliedAt; auditId } Example
set_device_mode({ deviceId: "rtu-7", mode: "cool" }) list_active_faults Same data that powers /technician-copilot. Use it to triage what needs attention right now, or to compose a daily site-summary email.
Input
{ siteId?: string; severity?: "info"|"warning"|"critical" } Returns
{ faults: Fault[]; nextCursor? } Example
list_active_faults({ severity: "critical" }) explain_fault_code Resolves a brand + code to its category, plain-English meaning, severity, and first-checks. The dataset that powers /brands/<slug> fault-code tables, callable from any MCP-aware agent.
Input
{ brand: string; code: string } Returns
{ brand; code; category; meaning; severity; suggestedAction } Example
explain_fault_code({ brand: "daikin", code: "U4" }) acknowledge_fault
requires devices:write
Stops further notifications for the configured cooldown. Acknowledgement is audit-logged with the calling agent.
Input
{ faultId: string; note?: string } Returns
{ ok; acknowledgedAt; by } Example
acknowledge_fault({ faultId: "f-83210", note: "Tech dispatched, ETA 14:00" }) site_energy_summary Aggregates per-device telemetry into a single site energy series. Same series the M&V / IPMVP report generator uses — your numbers and the report's match.
Input
{ siteId; from: ISO8601; to: ISO8601 } Returns
{ kWh; peakKW; demandKW; samples: [t, kW][] } Example
site_energy_summary({ siteId: "store-42", from: "2026-05-01T00:00:00Z", to: "2026-05-31T23:59:59Z" }) compute_psychrometrics Pure-function helper for agents reasoning about HVAC efficiency levers. Saves the LLM from re-deriving the Tetens/Stull approximations every time it wants to talk about enthalpy.
Input
{ tempF: number; rh: number; pressureKPa?: number } Returns
{ wetBulbF; dewPointF; enthalpyBtuPerLb; humidityRatio } Example
compute_psychrometrics({ tempF: 88, rh: 62 }) Claude Desktop config
{
"mcpServers": {
"hvacapi": {
"url": "https://mcp.hvacapi.com",
"headers": { "Authorization": "Bearer $HVACAPI_KEY" }
}
}
} Need more?
Ask about MCP — tools, scopes, or your agent setup.
Bringing this to Claude, ChatGPT, Cursor, or a custom agent? Ask and we'll route you.
Tell us about your agent stack
How it stays out of your way
Secure
Sealed data plane. Per-site auth. Audit log on every setpoint touch.
Runs on the edge
Deploys at the building edge — your data doesn't leave the site to be useful.
BYO LLM
Works with Claude, ChatGPT, and any MCP-compatible client. You pick the brain.