Serveur MCP

Tern EV-Charging Analytics

io.github.useternai/usetern
Données et analytique IoT et matériel Authentification requise MCP 2025-11-25

Ce que fait ce MCP

Analyzes EV-charging station and connector utilization, demand, session patterns, site rankings, corridor benchmarks, and nearby infrastructure.

aggregate_charging_utilization
Station-level utilization aggregated over a GeoJSON area and a date window of at most 92 days, optionally filtered to a capacity band (default 150 kW = HPC; pass 100 for fast charging). The reply is one row per station, so it reads an area without pulling any station's daily rows.
Schéma d’entrée
{'type': 'object', 'title': 'aggregate_charging_utilizationArguments', 'required': ['country_iso3', 'geometry', 'date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To', 'description': 'YYYY-MM-DD (required; window <= 92 days, >= date_from).'}, 'geometry': {'type': 'string', 'title': 'Geometry', 'description': 'GeoJSON Polygon/MultiPolygon as a JSON string.'}, 'date_from': {'type': 'string', 'title': 'Date From', 'description': 'YYYY-MM-DD (required).'}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'maxLength': 3, 'minLength': 3, 'description': 'ISO-3166 alpha-3 scope, e.g. NOR.'}, 'max_capacity_kw': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Max Capacity Kw', 'default': None}, 'min_capacity_kw': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Min Capacity Kw', 'default': None, 'description': 'kW floor (default 150 = HPC; pass 100 for fast-charging).'}}}
Schéma de sortie
{'type': 'object', 'title': 'aggregate_charging_utilizationOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
aggregate_evse_utilization
EVSE-level utilization aggregated over a GeoJSON area and a date window of at most 92 days, optionally filtered to a capacity band. The per-connector counterpart of aggregate_charging_utilization.
Schéma d’entrée
{'type': 'object', 'title': 'aggregate_evse_utilizationArguments', 'required': ['country_iso3', 'geometry', 'date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To', 'description': 'YYYY-MM-DD (required; window <= 92 days, >= date_from).'}, 'geometry': {'type': 'string', 'title': 'Geometry', 'description': 'GeoJSON Polygon/MultiPolygon as a JSON string.'}, 'date_from': {'type': 'string', 'title': 'Date From', 'description': 'YYYY-MM-DD (required).'}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'maxLength': 3, 'minLength': 3, 'description': 'ISO-3166 alpha-3 scope, e.g. NOR.'}, 'max_capacity_kw': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Max Capacity Kw', 'default': None}, 'min_capacity_kw': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Min Capacity Kw', 'default': None, 'description': 'kW floor (default 150 = HPC; pass 100 for fast-charging).'}}}
Schéma de sortie
{'type': 'object', 'title': 'aggregate_evse_utilizationOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
area_benchmark
How hard is each EVSE at this site working compared with the area around it? Reads the area_benchmark claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'CapacityBand': {'type': 'object', 'title': 'CapacityBand', 'properties': {'max_capacity_kw': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'title': 'Max Capacity Kw', 'default': None}, 'min_capacity_kw': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'title': 'Min Capacity Kw', 'default': None}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'AreaBenchmarkParams': {'type': 'object', 'title': 'AreaBenchmarkParams', 'required': ['site_id', 'observation_params', 'aggregate_params'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'aggregate_params': {'$ref': '#/$defs/EvseAggregateParams'}, 'observation_params': {'$ref': '#/$defs/StationUtilizationParams'}}, 'additionalProperties': False}, 'EvseAggregateParams': {'type': 'object', 'title': 'EvseAggregateParams', 'required': ['country_iso3', 'geometry', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityBand', 'default': {'max_capacity_kw': None, 'min_capacity_kw': None}}, 'geometry': {'type': 'string', 'title': 'Geometry', 'minLength': 1}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'StationUtilizationParams': {'type': 'object', 'title': 'StationUtilizationParams', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}}, 'title': 'area_benchmarkArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/AreaBenchmarkParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'area_benchmarkOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
avg_session_minutes
How long does a session at this site actually last? Reads the avg_session_minutes claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'AvgSessionMinutesParams': {'type': 'object', 'title': 'AvgSessionMinutesParams', 'required': ['site_id', 'observation_params'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'station_id': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'title': 'Station Id', 'default': None}, 'observation_params': {'$ref': '#/$defs/StationUtilizationParams'}}, 'additionalProperties': False}, 'StationUtilizationParams': {'type': 'object', 'title': 'StationUtilizationParams', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}}, 'title': 'avg_session_minutesArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/AvgSessionMinutesParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'avg_session_minutesOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
busy_evse_hours
How many EVSE-hours at this station carried charging on the drilled day, and how many of its EVSEs were charging at once in the busiest hour? Reads the busy_evse_hours claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateList': {'type': 'object', 'title': 'DateList', 'required': ['dates'], 'properties': {'dates': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Dates', 'minLength': 1}}, 'additionalProperties': False}, 'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'PeakWindow': {'type': 'object', 'title': 'PeakWindow', 'properties': {'from_hour': {'type': 'integer', 'title': 'From Hour', 'default': 6, 'maximum': 23, 'minimum': 0}, 'until_hour': {'type': 'integer', 'title': 'Until Hour', 'default': 23, 'maximum': 24, 'minimum': 1}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'EvseHourlyParams': {'type': 'object', 'title': 'EvseHourlyParams', 'required': ['country_iso3', 'station_ids'], 'properties': {'date': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Date', 'default': None}, 'dates': {'anyOf': [{'$ref': '#/$defs/DateList'}, {'type': 'null'}], 'default': None}, 'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'BusyEvseHoursParams': {'type': 'object', 'title': 'BusyEvseHoursParams', 'required': ['observation_params', 'date_range', 'site_id', 'station_id'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_id': {'type': 'string', 'title': 'Station Id', 'minLength': 1}, 'peak_window': {'$ref': '#/$defs/PeakWindow', 'default': {'from_hour': 6, 'until_hour': 23}}, 'observation_params': {'$ref': '#/$defs/EvseHourlyParams'}}, 'additionalProperties': False}}, 'title': 'busy_evse_hoursArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/BusyEvseHoursParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'busy_evse_hoursOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
corridor_benchmark
How does this site's demand per EVSE-day compare with the corridor drawn around it? Reads the corridor_benchmark claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'CapacityBand': {'type': 'object', 'title': 'CapacityBand', 'properties': {'max_capacity_kw': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'title': 'Max Capacity Kw', 'default': None}, 'min_capacity_kw': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'title': 'Min Capacity Kw', 'default': None}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'EvseAggregateParams': {'type': 'object', 'title': 'EvseAggregateParams', 'required': ['country_iso3', 'geometry', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityBand', 'default': {'max_capacity_kw': None, 'min_capacity_kw': None}}, 'geometry': {'type': 'string', 'title': 'Geometry', 'minLength': 1}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'CorridorBenchmarkParams': {'type': 'object', 'title': 'CorridorBenchmarkParams', 'required': ['site_id', 'observation_params', 'station_id', 'aggregate_params'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'station_id': {'type': 'string', 'title': 'Station Id', 'minLength': 1}, 'aggregate_params': {'$ref': '#/$defs/EvseAggregateParams'}, 'observation_params': {'$ref': '#/$defs/StationUtilizationParams'}}, 'additionalProperties': False}, 'StationUtilizationParams': {'type': 'object', 'title': 'StationUtilizationParams', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}}, 'title': 'corridor_benchmarkArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/CorridorBenchmarkParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'corridor_benchmarkOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
corridor_comparison
How does this site compare with the named stations around it — distance, EVSE count, max kW, and sessions per EVSE-day each? Reads the corridor_comparison claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'NearbyStationParams': {'type': 'object', 'title': 'NearbyStationParams', 'required': ['country_iso3', 'lat', 'lng', 'radius_km'], 'properties': {'lat': {'type': 'number', 'title': 'Lat', 'maximum': 90, 'minimum': -90}, 'lng': {'type': 'number', 'title': 'Lng', 'maximum': 180, 'minimum': -180}, 'limit': {'anyOf': [{'type': 'integer', 'maximum': 50, 'minimum': 1}, {'type': 'null'}], 'title': 'Limit', 'default': None}, 'radius_km': {'type': 'number', 'title': 'Radius Km', 'maximum': 10.0, 'exclusiveMinimum': 0}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'CorridorComparisonParams': {'type': 'object', 'title': 'CorridorComparisonParams', 'required': ['site_id', 'location', 'observation_params'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'pattern': '^[0-9a-fA-F]{32}$'}, 'location': {'$ref': '#/$defs/NearbyStationParams'}, 'observation_params': {'$ref': '#/$defs/StationUtilizationParams'}}, 'additionalProperties': False}, 'StationUtilizationParams': {'type': 'object', 'title': 'StationUtilizationParams', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}}, 'title': 'corridor_comparisonArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/CorridorComparisonParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'corridor_comparisonOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
daily_spike
Which days ran far above this site's normal, and by how much? Reads the daily_spike claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'DailySpikeParams': {'type': 'object', 'title': 'DailySpikeParams', 'required': ['site_id', 'observation_params'], 'properties': {'factor': {'type': 'number', 'title': 'Factor', 'default': 1.5, 'exclusiveMinimum': 0}, 'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'observation_params': {'$ref': '#/$defs/StationUtilizationParams'}}, 'additionalProperties': False}, 'StationUtilizationParams': {'type': 'object', 'title': 'StationUtilizationParams', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}}, 'title': 'daily_spikeArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/DailySpikeParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'daily_spikeOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
day_vs_similar
Was one particular day unusual for the day of week it fell on? Reads the day_vs_similar claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'DayVsSimilarParams': {'type': 'object', 'title': 'DayVsSimilarParams', 'required': ['site_id', 'observation_params', 'station_id', 'target_date'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'station_id': {'type': 'string', 'title': 'Station Id', 'minLength': 1}, 'target_date': {'type': 'string', 'title': 'Target Date'}, 'observation_params': {'$ref': '#/$defs/StationUtilizationParams'}}, 'additionalProperties': False}, 'StationUtilizationParams': {'type': 'object', 'title': 'StationUtilizationParams', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}}, 'title': 'day_vs_similarArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/DayVsSimilarParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'day_vs_similarOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
demand_share_multiple
How much of the area's demand does this one site take, said as a multiple of the mean station? Reads the demand_share_multiple claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'CapacityBand': {'type': 'object', 'title': 'CapacityBand', 'properties': {'max_capacity_kw': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'title': 'Max Capacity Kw', 'default': None}, 'min_capacity_kw': {'anyOf': [{'type': 'number', 'exclusiveMinimum': 0}, {'type': 'null'}], 'title': 'Min Capacity Kw', 'default': None}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'StationAggregateParams': {'type': 'object', 'title': 'StationAggregateParams', 'required': ['country_iso3', 'geometry', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityBand', 'default': {'max_capacity_kw': None, 'min_capacity_kw': None}}, 'geometry': {'type': 'string', 'title': 'Geometry', 'minLength': 1}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'StationUtilizationParams': {'type': 'object', 'title': 'StationUtilizationParams', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'DemandShareMultipleParams': {'type': 'object', 'title': 'DemandShareMultipleParams', 'required': ['site_id', 'observation_params', 'aggregate_params'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'aggregate_params': {'$ref': '#/$defs/StationAggregateParams'}, 'observation_params': {'$ref': '#/$defs/StationUtilizationParams'}}, 'additionalProperties': False}}, 'title': 'demand_share_multipleArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/DemandShareMultipleParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'demand_share_multipleOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
estate_coverage
Which estate sites reported on every day of the window, which are partial or young, and how full is the window's final day? Reads the estate_coverage claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'EstateScope': {'type': 'object', 'title': 'EstateScope', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[0-9a-fA-F]{32}$'}, 'title': 'Station Ids', 'maxLength': 50, 'minLength': 2}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'EstateCoverageParams': {'type': 'object', 'title': 'EstateCoverageParams', 'required': ['site_id', 'estate'], 'properties': {'estate': {'$ref': '#/$defs/EstateScope'}, 'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}}, 'additionalProperties': False}}, 'title': 'estate_coverageArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/EstateCoverageParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'estate_coverageOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
estate_monthly_series
Did demand per EVSE across the estate move month over month, and did each focus site move with it? Reads the estate_monthly_series claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'EstateScope': {'type': 'object', 'title': 'EstateScope', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[0-9a-fA-F]{32}$'}, 'title': 'Station Ids', 'maxLength': 50, 'minLength': 2}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'EstateMonthlySeriesParams': {'type': 'object', 'title': 'EstateMonthlySeriesParams', 'required': ['site_id', 'estate'], 'properties': {'estate': {'$ref': '#/$defs/EstateScope'}, 'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'focus_station_ids': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[0-9a-fA-F]{32}$'}, 'title': 'Focus Station Ids', 'default': [], 'maxItems': 6}}, 'additionalProperties': False}}, 'title': 'estate_monthly_seriesArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/EstateMonthlySeriesParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'estate_monthly_seriesOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
hourly_spike
When in the day does demand at this site peak? Reads the hourly_spike claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateList': {'type': 'object', 'title': 'DateList', 'required': ['dates'], 'properties': {'dates': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Dates', 'minLength': 1}}, 'additionalProperties': False}, 'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'PeakWindow': {'type': 'object', 'title': 'PeakWindow', 'properties': {'from_hour': {'type': 'integer', 'title': 'From Hour', 'default': 6, 'maximum': 23, 'minimum': 0}, 'until_hour': {'type': 'integer', 'title': 'Until Hour', 'default': 23, 'maximum': 24, 'minimum': 1}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'EvseHourlyParams': {'type': 'object', 'title': 'EvseHourlyParams', 'required': ['country_iso3', 'station_ids'], 'properties': {'date': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Date', 'default': None}, 'dates': {'anyOf': [{'$ref': '#/$defs/DateList'}, {'type': 'null'}], 'default': None}, 'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'HourlySpikeParams': {'type': 'object', 'title': 'HourlySpikeParams', 'required': ['observation_params', 'date_range', 'site_id'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'peak_window': {'$ref': '#/$defs/PeakWindow', 'default': {'from_hour': 6, 'until_hour': 23}}, 'observation_params': {'$ref': '#/$defs/EvseHourlyParams'}}, 'additionalProperties': False}}, 'title': 'hourly_spikeArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/HourlySpikeParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'hourly_spikeOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
list_evses
List the individual EVSEs (connectors) of up to 20 stations, with their capacity in kW. Stall counts and capacity bands come from here rather than from a station record.
Schéma d’entrée
{'type': 'object', 'title': 'list_evsesArguments', 'required': ['country_iso3', 'station_ids'], 'properties': {'station_ids': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'string'}], 'title': 'Station Ids', 'description': '1-20 station ids (array or comma-separated).'}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'maxLength': 3, 'minLength': 3, 'description': 'ISO-3166 alpha-3 scope, e.g. NOR.'}}}
Schéma de sortie
{'type': 'object', 'title': 'list_evsesOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
monthly_sessions_per_stall_day
Is demand per EVSE rising or falling month over month? Reads the monthly_sessions_per_stall_day claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'StationUtilizationParams': {'type': 'object', 'title': 'StationUtilizationParams', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'MonthlySessionsPerStallDayParams': {'type': 'object', 'title': 'MonthlySessionsPerStallDayParams', 'required': ['site_id', 'observation_params'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'station_id': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'title': 'Station Id', 'default': None}, 'observation_params': {'$ref': '#/$defs/StationUtilizationParams'}}, 'additionalProperties': False}}, 'title': 'monthly_sessions_per_stall_dayArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/MonthlySessionsPerStallDayParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'monthly_sessions_per_stall_dayOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
nearby_charging_stations
List the charging stations within a radius of a point, nearest first. The radius is in kilometres and at most 10; the reply is the API payload inline. This is how a site's competitors are found before any claim is read.
Schéma d’entrée
{'type': 'object', 'title': 'nearby_charging_stationsArguments', 'required': ['country_iso3', 'lat', 'lng', 'radius_km'], 'properties': {'lat': {'type': 'number', 'title': 'Lat'}, 'lng': {'type': 'number', 'title': 'Lng'}, 'limit': {'anyOf': [{'type': 'integer', 'maximum': 50}, {'type': 'null'}], 'title': 'Limit', 'default': None}, 'radius_km': {'type': 'number', 'title': 'Radius Km', 'maximum': 10, 'description': 'km, > 0 and <= 10.', 'exclusiveMinimum': 0}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'maxLength': 3, 'minLength': 3, 'description': 'ISO-3166 alpha-3 scope, e.g. NOR.'}}}
Schéma de sortie
{'type': 'object', 'title': 'nearby_charging_stationsOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
peak_hour_co_saturation
When the site reaches its busiest hour of the day, do the stations around it reach their own busiest hours at the same time? Reads the peak_hour_co_saturation claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateList': {'type': 'object', 'title': 'DateList', 'required': ['dates'], 'properties': {'dates': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Dates', 'minLength': 1}}, 'additionalProperties': False}, 'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'PeakWindow': {'type': 'object', 'title': 'PeakWindow', 'properties': {'from_hour': {'type': 'integer', 'title': 'From Hour', 'default': 6, 'maximum': 23, 'minimum': 0}, 'until_hour': {'type': 'integer', 'title': 'Until Hour', 'default': 23, 'maximum': 24, 'minimum': 1}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'EvseHourlyParams': {'type': 'object', 'title': 'EvseHourlyParams', 'required': ['country_iso3', 'station_ids'], 'properties': {'date': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Date', 'default': None}, 'dates': {'anyOf': [{'$ref': '#/$defs/DateList'}, {'type': 'null'}], 'default': None}, 'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'PeakHourCoSaturationParams': {'type': 'object', 'title': 'PeakHourCoSaturationParams', 'required': ['observation_params', 'date_range', 'site_id'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'pattern': '^[0-9a-fA-F]{32}$'}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'peak_window': {'$ref': '#/$defs/PeakWindow', 'default': {'from_hour': 6, 'until_hour': 23}}, 'tolerance_hours': {'type': 'integer', 'title': 'Tolerance Hours', 'default': 1, 'maximum': 6, 'minimum': 0}, 'observation_params': {'$ref': '#/$defs/EvseHourlyParams'}}, 'additionalProperties': False}}, 'title': 'peak_hour_co_saturationArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/PeakHourCoSaturationParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'peak_hour_co_saturationOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
poi_context
What kind of place is this site sitting in? Reads the poi_context claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading. places carries the rows this claim reads, because they are transcribed by the caller rather than fetched.
Schéma d’entrée
{'type': 'object', '$defs': {'PlaceRow': {'type': 'object', 'title': 'PlaceRow', 'required': ['name', 'kind', 'dist_m', 'lat', 'lon', 'place_ref', 'source'], 'properties': {'lat': {'type': 'number', 'title': 'Lat'}, 'lon': {'type': 'number', 'title': 'Lon'}, 'kind': {'type': 'string', 'title': 'Kind', 'minLength': 1}, 'name': {'type': 'string', 'title': 'Name', 'minLength': 1}, 'note': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Note', 'default': None}, 'dist_m': {'type': 'integer', 'title': 'Dist M', 'minimum': 0}, 'rating': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Rating', 'default': None}, 'source': {'enum': ['google_places', 'chargefinder'], 'type': 'string', 'title': 'Source'}, 'reviews': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Reviews', 'default': None}, 'place_ref': {'type': 'string', 'title': 'Place Ref', 'minLength': 1}, 'co_located': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Co Located', 'default': None}, 'station_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Station Id', 'default': None}}, 'additionalProperties': True}, 'PoiContextParams': {'type': 'object', 'title': 'PoiContextParams', 'required': ['site_id'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}}, 'additionalProperties': False}}, 'title': 'poi_contextArguments', 'required': ['params', 'places'], 'properties': {'params': {'$ref': '#/$defs/PoiContextParams'}, 'places': {'type': 'array', 'items': {'$ref': '#/$defs/PlaceRow'}, 'title': 'Places'}}}
Schéma de sortie
{'type': 'object', 'title': 'poi_contextOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
rank_gap
Where does this site sit in its estate's ranking, and how far is it from the estate median and the estate leader? Reads the rank_gap claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'EstateScope': {'type': 'object', 'title': 'EstateScope', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[0-9a-fA-F]{32}$'}, 'title': 'Station Ids', 'maxLength': 50, 'minLength': 2}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'RankGapParams': {'type': 'object', 'title': 'RankGapParams', 'required': ['site_id', 'estate', 'station_id'], 'properties': {'estate': {'$ref': '#/$defs/EstateScope'}, 'site_id': {'type': 'string', 'title': 'Site Id', 'pattern': '^[0-9a-fA-F]{32}$'}, 'station_id': {'type': 'string', 'title': 'Station Id', 'pattern': '^[0-9a-fA-F]{32}$'}}, 'additionalProperties': False}}, 'title': 'rank_gapArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/RankGapParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'rank_gapOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
road_context
What road does this site sit on, and what class is it? Reads the road_context claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'RoadContextParams': {'type': 'object', 'title': 'RoadContextParams', 'required': ['site_id', 'observation_params'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'observation_params': {'$ref': '#/$defs/OvertureRoadsParams'}}, 'additionalProperties': False}, 'OvertureRoadsParams': {'type': 'object', 'title': 'OvertureRoadsParams', 'required': ['country_iso3', 'station_ids'], 'properties': {'radius_m': {'anyOf': [{'type': 'integer', 'maximum': 10000, 'exclusiveMinimum': 0}, {'type': 'null'}], 'title': 'Radius M', 'default': None}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}}, 'title': 'road_contextArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/RoadContextParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'road_contextOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
search_charging_stations
Find charging stations in one country by structured filter — id, title, address, operator. The reply is the API payload inline: station ids, titles, addresses and operators, which is what the claim tools take as site_id and station_id.
Schéma d’entrée
{'type': 'object', 'title': 'search_charging_stationsArguments', 'required': ['country_iso3'], 'properties': {'id': {'anyOf': [{'type': 'string', 'pattern': '^[0-9a-fA-F]{32}$'}, {'type': 'null'}], 'title': 'Id', 'default': None, 'description': 'One 32-char hex station id.'}, 'limit': {'anyOf': [{'type': 'integer', 'maximum': 50}, {'type': 'null'}], 'title': 'Limit', 'default': None}, 'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Title', 'default': None}, 'address': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Address', 'default': None}, 'operator': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Operator', 'default': None}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'maxLength': 3, 'minLength': 3, 'description': 'ISO-3166 alpha-3 scope, e.g. NOR.'}}}
Schéma de sortie
{'type': 'object', 'title': 'search_charging_stationsOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
sessions_per_stall_day
How hard is each EVSE at this site working per day? Reads the sessions_per_stall_day claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'StationUtilizationParams': {'type': 'object', 'title': 'StationUtilizationParams', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'SessionsPerStallDayParams': {'type': 'object', 'title': 'SessionsPerStallDayParams', 'required': ['site_id', 'observation_params'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'station_id': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'title': 'Station Id', 'default': None}, 'observation_params': {'$ref': '#/$defs/StationUtilizationParams'}}, 'additionalProperties': False}}, 'title': 'sessions_per_stall_dayArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/SessionsPerStallDayParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'sessions_per_stall_dayOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
site_profile
What is this site — how many EVSEs, and how close is the nearest station? Reads the site_profile claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'SiteProfileParams': {'type': 'object', 'title': 'SiteProfileParams', 'required': ['site_id', 'location'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'pattern': '^[0-9a-fA-F]{32}$'}, 'location': {'$ref': '#/$defs/NearbyStationParams'}}, 'additionalProperties': False}, 'NearbyStationParams': {'type': 'object', 'title': 'NearbyStationParams', 'required': ['country_iso3', 'lat', 'lng', 'radius_km'], 'properties': {'lat': {'type': 'number', 'title': 'Lat', 'maximum': 90, 'minimum': -90}, 'lng': {'type': 'number', 'title': 'Lng', 'maximum': 180, 'minimum': -180}, 'limit': {'anyOf': [{'type': 'integer', 'maximum': 50, 'minimum': 1}, {'type': 'null'}], 'title': 'Limit', 'default': None}, 'radius_km': {'type': 'number', 'title': 'Radius Km', 'maximum': 10.0, 'exclusiveMinimum': 0}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}}, 'title': 'site_profileArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/SiteProfileParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'site_profileOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
site_ranking
How do the estate's sites rank on sessions per EVSE-day over one window, and how far is the leader above the estate median? Reads the site_ranking claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'EstateScope': {'type': 'object', 'title': 'EstateScope', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[0-9a-fA-F]{32}$'}, 'title': 'Station Ids', 'maxLength': 50, 'minLength': 2}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'SiteRankingParams': {'type': 'object', 'title': 'SiteRankingParams', 'required': ['site_id', 'estate'], 'properties': {'estate': {'$ref': '#/$defs/EstateScope'}, 'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}}, 'additionalProperties': False}}, 'title': 'site_rankingArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/SiteRankingParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'site_rankingOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
total_charging_minutes
How many minutes of charging did this site actually deliver over the window? Reads the total_charging_minutes claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'StationUtilizationParams': {'type': 'object', 'title': 'StationUtilizationParams', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}, 'TotalChargingMinutesParams': {'type': 'object', 'title': 'TotalChargingMinutesParams', 'required': ['site_id', 'observation_params'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'station_id': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'title': 'Station Id', 'default': None}, 'observation_params': {'$ref': '#/$defs/StationUtilizationParams'}}, 'additionalProperties': False}}, 'title': 'total_charging_minutesArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/TotalChargingMinutesParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'total_charging_minutesOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
total_sessions
How much charging demand did this site see over the window? Reads the total_sessions claim for one site and returns only its result: the status the claim decided from its own observations (computed or insufficient), the typed result, and the display a deliverable would print. The observations behind it are pulled into a scratch directory that is deleted before the call returns, so the rows never enter the conversation and nothing is left on the server to read back later — this call is the whole reading.
Schéma d’entrée
{'type': 'object', '$defs': {'DateRange': {'type': 'object', 'title': 'DateRange', 'required': ['date_from', 'date_to'], 'properties': {'date_to': {'type': 'string', 'title': 'Date To'}, 'date_from': {'type': 'string', 'title': 'Date From'}}, 'additionalProperties': False}, 'CapacityRange': {'type': 'object', 'title': 'CapacityRange', 'properties': {'max_capacity_kw': {'type': 'number', 'title': 'Max Capacity Kw', 'default': 1000.0}, 'min_capacity_kw': {'type': 'number', 'title': 'Min Capacity Kw', 'default': 150.0}}, 'additionalProperties': False}, 'TotalSessionsParams': {'type': 'object', 'title': 'TotalSessionsParams', 'required': ['site_id', 'observation_params'], 'properties': {'site_id': {'type': 'string', 'title': 'Site Id', 'minLength': 1}, 'station_id': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'title': 'Station Id', 'default': None}, 'observation_params': {'$ref': '#/$defs/StationUtilizationParams'}}, 'additionalProperties': False}, 'StationUtilizationParams': {'type': 'object', 'title': 'StationUtilizationParams', 'required': ['country_iso3', 'station_ids', 'date_range'], 'properties': {'capacity': {'$ref': '#/$defs/CapacityRange', 'default': {'max_capacity_kw': '1000.0', 'min_capacity_kw': '150.0'}}, 'date_range': {'$ref': '#/$defs/DateRange'}, 'station_ids': {'type': 'array', 'items': {'type': 'string'}, 'title': 'Station Ids', 'maxLength': 20, 'minLength': 1}, 'country_iso3': {'type': 'string', 'title': 'Country Iso3', 'pattern': '^[A-Za-z]{3}$', 'maxLength': 3, 'minLength': 3}}, 'additionalProperties': False}}, 'title': 'total_sessionsArguments', 'required': ['params'], 'properties': {'params': {'$ref': '#/$defs/TotalSessionsParams'}}}
Schéma de sortie
{'type': 'object', 'title': 'total_sessionsOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
Ajouté
total_sessions
18 September 2026 02:40
Ajouté
total_charging_minutes
18 September 2026 02:40
Ajouté
site_ranking
18 September 2026 02:40
Ajouté
site_profile
18 September 2026 02:40
Ajouté
sessions_per_stall_day
18 September 2026 02:40
Ajouté
road_context
18 September 2026 02:40
Ajouté
rank_gap
18 September 2026 02:40
Ajouté
poi_context
18 September 2026 02:40
Ajouté
peak_hour_co_saturation
18 September 2026 02:40
Ajouté
monthly_sessions_per_stall_day
18 September 2026 02:40
Ajouté
hourly_spike
18 September 2026 02:40
Ajouté
estate_monthly_series
18 September 2026 02:40
Ajouté
estate_coverage
18 September 2026 02:40
Ajouté
demand_share_multiple
18 September 2026 02:40
Ajouté
day_vs_similar
18 September 2026 02:40
Ajouté
daily_spike
18 September 2026 02:40
Ajouté
corridor_comparison
18 September 2026 02:40
Ajouté
corridor_benchmark
18 September 2026 02:40
Ajouté
busy_evse_hours
18 September 2026 02:40
Ajouté
avg_session_minutes
18 September 2026 02:40
Ajouté
area_benchmark
18 September 2026 02:40
Ajouté
aggregate_evse_utilization
18 September 2026 02:40
Ajouté
aggregate_charging_utilization
18 September 2026 02:40
Ajouté
list_evses
18 September 2026 02:40
Ajouté
nearby_charging_stations
18 September 2026 02:40
Ajouté
search_charging_stations
18 September 2026 02:40

Trillboards DOOH Advertising

io.github.snehdhruv/trillboards-dooh

Manages digital out-of-home advertising campaigns and media buys across screens, with edge-AI audience sensing, impression tracki…

RoboSelect360 - Humanoid Robot Intelligence

com.roboselect360/humanoid-robots

Provides market, specification, bill-of-materials, supply-chain, dependency, and risk intelligence for humanoid robots across mec…

Tern EV-Charging Analytics (dev)

io.github.useternai/usetern-dev

Provides development-version analytics for EV-charging utilization, demand, session patterns, site rankings, and corridor compari…

keithah-tessie-mcp

ai.smithery/keithah-tessie-mcp

Integrates with Tessie to access Tesla vehicle information and analyze charging-related data and costs.

LiveDataLink

io.github.blackboxfoundry/livedatalink

Exposes public-data tools covering economics, labor, banking, transport, books, legal opinions, carriers, environmental data, and…

AlpineDataWorks Intelligence Server

com.alpinedataworks/adw-intelligence-server

Provides economic, market, supply-chain, real-estate, energy, consumer, labor, and other scored intelligence indices with histori…

SharksAPI.AI

ai.sharksapi/marketing

Provides marketing analytics and actions across GA4, Search Console, Google Ads, social channels, SEO, WordPress, and marketing p…

synter-ads

io.github.Synter-Media-AI/synter-ads

Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…