Skip to main content

Data tools

SolarSENS MCP exposes the read-only tools below. The assistant selects a tool from your question. Every read uses the access scope of the connected account.

Tool catalog​

ToolTitleParameters
get_profileConnected Account ProfileNone.
list_accessible_plantsList Accessible PlantsNone.
search_plantsSearch Plantsquery (string, required, 1-120 characters)
get_plant_overviewGet Plant OverviewplantId (UUID, required)
list_devicesList DevicesplantId (UUID, required), deviceType (string, optional, 1-64 characters), nameQuery (string, optional, 1-120 characters)
get_plant_daily_performanceGet Plant Daily PerformanceplantId (UUID, required), start (string, required), end (string, required), timezone (string, optional)
query_plant_5minQuery Plant Five-minute ValuesplantId (UUID, required), start (string, required), end (string, required), timezone (string, optional), metrics (array of string, required)
query_plant_dailyQuery Plant Daily ValuesplantId (UUID, required), start (string, required), end (string, required), timezone (string, optional), metrics (array of string, required)
list_alarmsList AlarmsplantId (UUID, required), status (active or cleared or all, optional), start (string, required), end (string, required), page (integer, optional)
get_alarmGet AlarmplantId (UUID, required), alarmId (UUID, required)
query_string_5minQuery String Five-minute ValuesplantId (UUID, required), start (string, required), end (string, required), timezone (string, optional), inverterIds (array of string, optional), resolution (5min or 15min or 30min or 60min, required), metrics (array of string, required)
query_inverter_dailyQuery Inverter Daily ValuesplantId (UUID, required), start (string, required), end (string, required), timezone (string, optional), inverterIds (array of string, optional), metrics (array of string, required)
get_plant_dashboardGet Plant DashboardplantId (UUID, required), view (production_status or production_status_asset_owner or device_status or devices_detail or devices_simple or disconnected_strings, required), deviceType (string, optional, 1-64 characters), parentDeviceId (UUID, optional), parentDeviceType (string, optional, 1-64 characters), faultType (string, optional, 1-64 characters), page (integer, optional), pageSize (integer, optional)
get_portfolio_dashboardGet Portfolio Dashboardview (site_overview or last_7_days_yield or last_7_days_yield_agg or devices_status_summary or alarm_status or string_health, required), date (string, required), plantIds (array of string, optional), alarmDays (integer, optional)
get_plant_chartGet Plant ChartplantId (UUID, required), chart (power or power_asset_owner or yield or yield_agg or yield_agg_asset_owner or performance, required), date (string, required), resolution (1m or 5m or 15m or 30m or 60m, optional)
query_device_telemetryQuery Device TelemetryplantId (UUID, required), deviceId (UUID, required), metrics (array of string, required), date (string, required), resolution (1m or 5m or 15m or 30m or 60m, optional)
get_string_daily_analyticsGet String Daily AnalyticsplantId (UUID, required), view (latest or for_date, required), date (string, optional)

No other tool is available. The tools read Plant and portfolio dashboards, day charts, device catalogs, device telemetry, string analytics, and alarms. list_alarms and get_alarm read live alarm state and alarm history for one Plant. Tool details below gives their inputs, paging, and alarm fields. If a question needs work orders, generic metric catalogs, or DataHub exports, the assistant cannot answer it through this connector today.

get_plant_daily_performance parameters​

ParameterTypeRequiredNotes
plantIdUUIDYesUse the canonical Plant ID returned by discovery.
startDate or date-time (see below)YesStart of the window.
endDate or date-time (see below)YesMust be after start.
timezoneIANA time zone nameNoDefaults to the Plant's own time zone. Required when the Plant record has none; the call fails with INVALID_QUERY otherwise.

This tool reads daily values only. It has no interval input.

start and end accept three formats, all read in the timezone field:

  • an ISO 8601 date-time with a UTC offset, for example 2026-09-22T00:00:00+08:00;
  • a date-time with no offset, for example 2026-09-22T00:00:00;
  • a plain date, for example 2026-09-22.

A plain-date start begins at 00:00:00. A plain-date end covers the whole day, through 23:59:59.

Example request:

{
"plantId": "00000000-0000-0000-0000-000000000000",
"start": "2026-09-01T00:00:00+07:00",
"end": "2026-09-08T00:00:00+07:00",
"timezone": "Asia/Ho_Chi_Minh"
}

Each returned row carries date, yieldKwh, performanceRatio, availability, and irradiationKwhM2. Any of the value fields can be null when the source has no reading for that date; a null value is not the same as zero production.

The demo Plant DEMO-AI-P001 has no telemetry. A get_plant_daily_performance call for it returns a response with no populated rows for the requested window. Do not treat that empty result as evidence that a real Plant produced nothing; check the response coverage and warnings first.

Response fields​

Every successful response can include:

  • a request ID;
  • the Plant or other entities used by the result;
  • the resolved date window and timezone, when the tool accepts one;
  • metric definitions, when relevant; and
  • coverage, warnings, and truncation metadata. See Limits & errors for when each value is set.

Missing values remain missing. An unavailable upstream is not reported as a successful empty result.

Shared limits​

  • A query accepts at most 1,000 returned rows and 1 MB of serialized data.
  • Use the canonical Plant ID returned by discovery for later reads. A Plant name is a search input, not an authorization method.

See Limits & errors for the full table and error codes.

Read-only boundary​

The connector does not provide tools to:

  • read work orders;
  • create, edit, assign, resolve, or delete anything;
  • list portfolios or read management summaries, metric catalogs, or DataHub values;
  • control a Plant or device;
  • run arbitrary SQL, HTTP, storage, or backend requests; or
  • start export jobs.

These capabilities are absent from the connector today, not merely non-mutating. Calling a tool never changes SolarSENS data.

Tool details​

The docs build makes this section from the tools/list response of the production server. Each argument shows its JSON Schema type, whether it is required, and its constraints. A tool shows an output schema only when it advertises one.

get_profile​

Connected Account Profile

Return the email address for the SolarSENS account selected for this connection. Use to confirm which account is connected. Does not select or switch accounts. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

Arguments: none.

Output schema:

{
"type": "object",
"properties": {
"email": {
"type": "string",
"minLength": 1,
"pattern": "\\S"
}
},
"required": [
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}

list_accessible_plants​

List Accessible Plants

Read the current Plant catalog for the signed-in account, all accessible Plants. Use only returned Plant IDs; never guess account scope from letters, digits, keywords, or IDs. Use for: account scope. Not for: a named Plant - use search_plants. Next: get_portfolio_dashboard. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

Arguments: none.

search_plants​

Search Plants

Read the current Plant catalog by name or code, accessible matches only. Call once with the user's name or code. If one result name equals the user's Plant name (any letter case), use it without asking. If the user gives only the end of a code, such as P043 (a full code is NORTH-P043), search the digits, such as 043; if several codes match, show all and ask. Use for: a named Plant. Not for: all Plants - use list_accessible_plants. Next: get_plant_overview. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
querystringYes1 to 120 characters

Input schema:

{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"required": [
"query"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

get_plant_overview​

Get Plant Overview

Read current identity and timezone for one accessible Plant. Use for: Plant scope and local dates. Not for: live status - use get_plant_dashboard. Next: get_plant_daily_performance. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
plantIdstringYesUUID

Input schema:

{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"plantId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

list_devices​

List Devices

Read the current device catalog for one Plant, all devices or one type. Use for: IDs, parents, types, and unclear names with nameQuery. nameQuery matches name or label; letter case and separators are ignored. If no device matches, call again without nameQuery to find similar names or labels. If no device or more than one device matches, stop. Show name, label, and type, and ask which device. Do not read data for all matches. Not for: offline status - use get_plant_dashboard. Next: query_device_telemetry. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
plantIdstringYesUUID
deviceTypestringNo1 to 64 characters; matches ^[A-Za-z][A-Za-z0-9 _-]*$
nameQuerystringNo1 to 120 characters; Part of a device name or label. Letter case and separators are ignored.

Input schema:

{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"deviceType": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z][A-Za-z0-9 _-]*$"
},
"nameQuery": {
"description": "Part of a device name or label. Letter case and separators are ignored.",
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"required": [
"plantId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

get_plant_daily_performance​

Get Plant Daily Performance

Read stored daily yield, PR, availability, and irradiation for one Plant, up to 366 days; can lag. A plain-date end (YYYY-MM-DD) includes that whole day. With offset timestamps, start is inclusive and end is exclusive. Use for: low PR and daily performance. Not for: other stored daily values - use query_plant_daily. Next: get_string_daily_analytics. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
plantIdstringYesUUID
startstringYesYYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset
endstringYesYYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset
timezonestringNoAt least 1 character; IANA zone. Omit to use the Plant's timezone; required when the Plant has none.

Input schema:

{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"start": {
"type": "string",
"pattern": "^(?:\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)$",
"description": "YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset"
},
"end": {
"type": "string",
"pattern": "^(?:\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)$",
"description": "YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset"
},
"timezone": {
"description": "IANA zone. Omit to use the Plant's timezone; required when the Plant has none.",
"type": "string",
"minLength": 1
}
},
"required": [
"plantId",
"start",
"end"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

query_plant_5min​

Query Plant Five-minute Values

Read stored five-minute Plant values; can lag. Up to 31 days, but 1,000 rows allow about 3 days for one metric or 1 day for 3 metrics. start inclusive, end exclusive, with offsets. Use for: numbers across days. Not for: a one-day chart - use get_plant_chart. Next: query_inverter_daily. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
plantIdstringYesUUID
startstringYesISO 8601 date-time
endstringYesISO 8601 date-time
timezonestringNoAt least 1 character; IANA zone. Omit to use the Plant's timezone; required when the Plant has none.
metricsarray of stringYes1 to 20 items; each item one of Active Power Plant, Consumption Load, Daily irradiation, Daily irradiation effect, Daily Overspill Energy, Daily Overspill Energy effect, Daily Overspill PR, Daily PR, Daily PR Temp Corrected, Daily Total Energy, Daily Total Energy effect, Daily Total PR, Daily Yield, Daily Yield effect, Daily Yield Plant, Daily Yield PR, Daily Yield PR Temp Corrected, Daily Yield Total Energy, Daily Yield Total PR, Derating Power Plant, Five Min Overspill PR, Five Min PR, Five Min Total PR, Grid Power, Irradiance, Irradiation, Irradiation_effect, Overspill Energy, Temp-PV Module, Total Energy, Yield, Yield Plant, Yield_effect

Input schema:

{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"start": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"end": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"timezone": {
"description": "IANA zone. Omit to use the Plant's timezone; required when the Plant has none.",
"type": "string",
"minLength": 1
},
"metrics": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"enum": [
"Active Power Plant",
"Consumption Load",
"Daily irradiation",
"Daily irradiation effect",
"Daily Overspill Energy",
"Daily Overspill Energy effect",
"Daily Overspill PR",
"Daily PR",
"Daily PR Temp Corrected",
"Daily Total Energy",
"Daily Total Energy effect",
"Daily Total PR",
"Daily Yield",
"Daily Yield effect",
"Daily Yield Plant",
"Daily Yield PR",
"Daily Yield PR Temp Corrected",
"Daily Yield Total Energy",
"Daily Yield Total PR",
"Derating Power Plant",
"Five Min Overspill PR",
"Five Min PR",
"Five Min Total PR",
"Grid Power",
"Irradiance",
"Irradiation",
"Irradiation_effect",
"Overspill Energy",
"Temp-PV Module",
"Total Energy",
"Yield",
"Yield Plant",
"Yield_effect"
]
}
}
},
"required": [
"plantId",
"start",
"end",
"metrics"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

query_plant_daily​

Query Plant Daily Values

Read stored daily Plant values, up to 366 days and 1,000 rows; can lag. start inclusive, end exclusive, with offsets. Use for: curtailment, soiling, revenue, and monthly values. Not for: yield, PR, availability, irradiation - use get_plant_daily_performance. Next: query_inverter_daily. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
plantIdstringYesUUID
startstringYesISO 8601 date-time
endstringYesISO 8601 date-time
timezonestringNoAt least 1 character; IANA zone. Omit to use the Plant's timezone; required when the Plant has none.
metricsarray of stringYes1 to 20 items; each item one of avg_tcell, daily_availability, daily_pr, daily_pr_agg, daily_pr_corr, daily_pr_corr_agg, daily_pr_overspill, daily_pr_total_agg, daily_pr_total_agg_corr, daily_rev, daily_s_yield, daily_slope_rad, daily_slope_rad_sensor, daily_total_pr, daily_total_pr_corr, daily_yield, daily_yield_agg, meter_reading, mthly_pr, mthly_pr_agg, mthly_pr_corr, mthly_pr_corr_agg, mthly_pr_overspill, mthly_pr_total, mthly_pr_total_agg, mthly_pr_total_agg_corr, mthly_pr_total_corr, mthly_slope_rad, mthly_slope_rad_sensor, mthly_yield, mthly_yield_agg, plant_curtailment, plant_soiling

Input schema:

{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"start": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"end": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"timezone": {
"description": "IANA zone. Omit to use the Plant's timezone; required when the Plant has none.",
"type": "string",
"minLength": 1
},
"metrics": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"enum": [
"avg_tcell",
"daily_availability",
"daily_pr",
"daily_pr_agg",
"daily_pr_corr",
"daily_pr_corr_agg",
"daily_pr_overspill",
"daily_pr_total_agg",
"daily_pr_total_agg_corr",
"daily_rev",
"daily_s_yield",
"daily_slope_rad",
"daily_slope_rad_sensor",
"daily_total_pr",
"daily_total_pr_corr",
"daily_yield",
"daily_yield_agg",
"meter_reading",
"mthly_pr",
"mthly_pr_agg",
"mthly_pr_corr",
"mthly_pr_corr_agg",
"mthly_pr_overspill",
"mthly_pr_total",
"mthly_pr_total_agg",
"mthly_pr_total_agg_corr",
"mthly_pr_total_corr",
"mthly_slope_rad",
"mthly_slope_rad_sensor",
"mthly_yield",
"mthly_yield_agg",
"plant_curtailment",
"plant_soiling"
]
}
}
},
"required": [
"plantId",
"start",
"end",
"metrics"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

list_alarms​

List Alarms

Read live ThingsBoard alarm state for one Plant, the same list as the GUI alarm page. Ten events per page; page 0 is the first page. Start inclusive and end exclusive on creation time, with UTC offsets. Use for: active alarms and alarm history. Not for: work orders - this connector cannot read them. Next: get_alarm for one alarm, then query_device_telemetry for the device curve at the alarm time. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
plantIdstringYesUUID
statusstringNoOne of active, cleared, all; default active; Alarm status. Omit to read active alarms.
startstringYesISO 8601 date-time
endstringYesISO 8601 date-time
pageintegerNoDefault 0; 0 to 9007199254740991; Page index. 0 is the first page; omit page to read the first page.

Input schema:

{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"status": {
"default": "active",
"description": "Alarm status. Omit to read active alarms.",
"type": "string",
"enum": [
"active",
"cleared",
"all"
]
},
"start": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"end": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"page": {
"default": 0,
"description": "Page index. 0 is the first page; omit page to read the first page.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"plantId",
"start",
"end"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

get_alarm​

Get Alarm

Read live ThingsBoard lifecycle state for one alarm in one Plant, from the same source as the GUI alarm page. Times are epoch milliseconds. A read does not acknowledge or clear the alarm. Use for: alarm details and lifecycle times. Not for: work orders - this connector cannot read them. Next: query_device_telemetry for the device curve at the alarm time. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
plantIdstringYesUUID
alarmIdstringYesUUID

Input schema:

{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"alarmId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"plantId",
"alarmId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

query_string_5min​

Query String Five-minute Values

Read stored string Idc and Udc at 5 to 60 minutes; can lag. Up to 7 days, 1,000 rows; inverterIds optional. Data is kept for about the last 72 days only. For an older date, do not call; tell the user stored five-minute string data is not kept for that date. A plain-date end (YYYY-MM-DD) includes that whole day. With offset timestamps, start is inclusive and end is exclusive. Use for: current and voltage across days. Not for: a live curve today - use query_device_telemetry. Next: get_plant_dashboard. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
plantIdstringYesUUID
startstringYesYYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset
endstringYesYYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset
timezonestringNoAt least 1 character; IANA zone. Omit to use the Plant's timezone; required when the Plant has none.
inverterIdsarray of stringNo1 to 50 items; each item UUID
resolutionstringYesOne of 5min, 15min, 30min, 60min
metricsarray of stringYes1 to 2 items; each item one of Idc, Udc

Input schema:

{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"start": {
"type": "string",
"pattern": "^(?:\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)$",
"description": "YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset"
},
"end": {
"type": "string",
"pattern": "^(?:\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)$",
"description": "YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset"
},
"timezone": {
"description": "IANA zone. Omit to use the Plant's timezone; required when the Plant has none.",
"type": "string",
"minLength": 1
},
"inverterIds": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"resolution": {
"type": "string",
"enum": [
"5min",
"15min",
"30min",
"60min"
]
},
"metrics": {
"minItems": 1,
"maxItems": 2,
"type": "array",
"items": {
"type": "string",
"enum": [
"Idc",
"Udc"
]
}
}
},
"required": [
"plantId",
"start",
"end",
"resolution",
"metrics"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

query_inverter_daily​

Query Inverter Daily Values

Read stored inverter daily values as reported; can lag. Up to 366 days, 1,000 rows. inverterIds optional. A plain-date end (YYYY-MM-DD) includes that whole day. With offset timestamps, start is inclusive and end is exclusive. Use for: yield, availability, and losses across inverters. Not for: a live device curve today - use query_device_telemetry. Next: query_string_5min. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
plantIdstringYesUUID
startstringYesYYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset
endstringYesYYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset
timezonestringNoAt least 1 character; IANA zone. Omit to use the Plant's timezone; required when the Plant has none.
inverterIdsarray of stringNo1 to 50 items; each item UUID
metricsarray of stringYes1 to 7 items; each item one of Daily Yield, availability, Daily Derating Loss, Daily Operation Time, unavailability_loss_kwh, overspill_loss_kwh, soiling_loss_kwh

Input schema:

{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"start": {
"type": "string",
"pattern": "^(?:\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)$",
"description": "YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset"
},
"end": {
"type": "string",
"pattern": "^(?:\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)$",
"description": "YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset"
},
"timezone": {
"description": "IANA zone. Omit to use the Plant's timezone; required when the Plant has none.",
"type": "string",
"minLength": 1
},
"inverterIds": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"metrics": {
"minItems": 1,
"maxItems": 7,
"type": "array",
"items": {
"type": "string",
"enum": [
"Daily Yield",
"availability",
"Daily Derating Loss",
"Daily Operation Time",
"unavailability_loss_kwh",
"overspill_loss_kwh",
"soiling_loss_kwh"
]
}
}
},
"required": [
"plantId",
"start",
"end",
"metrics"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

get_plant_dashboard​

Get Plant Dashboard

Read live and today status for one Plant and its devices. Use for: production KPIs, offline devices, and disconnected strings. Not for: past daily performance - use get_plant_daily_performance. Next: list_devices. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
plantIdstringYesUUID
viewstringYesOne of production_status, production_status_asset_owner, device_status, devices_detail, devices_simple, disconnected_strings
deviceTypestringNo1 to 64 characters; matches ^[A-Za-z][A-Za-z0-9 _-]*$
parentDeviceIdstringNoUUID
parentDeviceTypestringNo1 to 64 characters; matches ^[A-Za-z][A-Za-z0-9 _-]*$
faultTypestringNo1 to 64 characters
pageintegerNo0 to 9007199254740991; Page index. 0 is the first page; omit page to read the first page.
pageSizeintegerNo1 to 100

Input schema:

{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"view": {
"type": "string",
"enum": [
"production_status",
"production_status_asset_owner",
"device_status",
"devices_detail",
"devices_simple",
"disconnected_strings"
]
},
"deviceType": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z][A-Za-z0-9 _-]*$"
},
"parentDeviceId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"parentDeviceType": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z][A-Za-z0-9 _-]*$"
},
"faultType": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"page": {
"description": "Page index. 0 is the first page; omit page to read the first page.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"pageSize": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"plantId",
"view"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

get_portfolio_dashboard​

Get Portfolio Dashboard

Read live and today screens across accessible Plants, with 7-day yield and bounded alarm status. Pass plantIds to narrow it. Use for: Plants with problems today. Not for: one Plant over past days - use get_plant_daily_performance. Next: get_plant_dashboard. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
viewstringYesOne of site_overview, last_7_days_yield, last_7_days_yield_agg, devices_status_summary, alarm_status, string_health
datestringYesYYYY-MM-DD
plantIdsarray of stringNo1 to 50 items; each item UUID
alarmDaysintegerNo1 to 92

Input schema:

{
"type": "object",
"properties": {
"view": {
"type": "string",
"enum": [
"site_overview",
"last_7_days_yield",
"last_7_days_yield_agg",
"devices_status_summary",
"alarm_status",
"string_health"
]
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD"
},
"plantIds": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"alarmDays": {
"type": "integer",
"minimum": 1,
"maximum": 92
}
},
"required": [
"view",
"date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

get_plant_chart​

Get Plant Chart

Read a Plant chart for one Plant-local day, live and today data, at 1 to 60 minutes. Use for: a one-day power, yield, or performance chart. Not for: stored numbers across days - use query_plant_5min. Next: query_device_telemetry. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
plantIdstringYesUUID
chartstringYesOne of power, power_asset_owner, yield, yield_agg, yield_agg_asset_owner, performance
datestringYesYYYY-MM-DD
resolutionstringNoOne of 1m, 5m, 15m, 30m, 60m; default 30m

Input schema:

{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chart": {
"type": "string",
"enum": [
"power",
"power_asset_owner",
"yield",
"yield_agg",
"yield_agg_asset_owner",
"performance"
]
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD"
},
"resolution": {
"default": "30m",
"type": "string",
"enum": [
"1m",
"5m",
"15m",
"30m",
"60m"
]
}
},
"required": [
"plantId",
"chart",
"date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

query_device_telemetry​

Query Device Telemetry

Read telemetry for one device and one Plant-local day, today or a past day, at 1 to 60 minutes. Metric keys are device telemetry names, for example Active Power. An empty series can mean a wrong key, not missing data. Get the device ID from list_devices. Use for: device values at a time of day. Not for: string values across days - use query_string_5min. Next: get_plant_dashboard. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
plantIdstringYesUUID
deviceIdstringYesUUID
metricsarray of stringYes1 to 10 items; each item 1 to 64 characters; Device telemetry key names exactly as stored, for example Active Power. A wrong key returns an empty series.
datestringYesYYYY-MM-DD
resolutionstringNoOne of 1m, 5m, 15m, 30m, 60m; default 30m

Input schema:

{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"deviceId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"metrics": {
"minItems": 1,
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"description": "Device telemetry key names exactly as stored, for example Active Power. A wrong key returns an empty series."
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD"
},
"resolution": {
"default": "30m",
"type": "string",
"enum": [
"1m",
"5m",
"15m",
"30m",
"60m"
]
}
},
"required": [
"plantId",
"deviceId",
"metrics",
"date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}

get_string_daily_analytics​

Get String Daily Analytics

Read stored daily string analytics for one Plant, latest processed day or one past Plant-local date; can lag. Call a string weak only with the peer value it was compared with; state that value. Use for: weak strings and peer ranks. Not for: current and voltage curves - use query_string_5min. Next: query_string_5min. Read-only.

Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.

ArgumentTypeRequiredAccepted values
plantIdstringYesUUID
viewstringYesOne of latest, for_date
datestringNoYYYY-MM-DD

Input schema:

{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"view": {
"type": "string",
"enum": [
"latest",
"for_date"
]
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD"
}
},
"required": [
"plantId",
"view"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}