Live US power market prices, load, generation, weather and permits for AI agents.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The distinct values of one text column, most rows first — what a filter can be. Args: slug: The stream. column: A text column from describe_stream (not the entity — use find_entities). where: Filters as `column=value`, the same as query_stream's. search: `column:text`, a case-insensitive substring. limit: At most this many (1–500).
The distinct values of one text column, most rows first — what a filter can be. Args: slug: The stream. column: A text column from describe_stream (not the entity — use find_entities). where: Filters as `column=value`, the same as query_stream's. search: `column:text`, a case-insensitive substring. limit: At most this many (1–500).
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| limit | integer | |
| where | any | |
| column* | string | |
| search | any |
{
"type": "object",
"title": "column_valuesArguments",
"required": [
"slug",
"column"
],
"properties": {
"slug": {
"type": "string",
"title": "Slug"
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 40
},
"where": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Where",
"default": null
},
"column": {
"type": "string",
"title": "Column"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Search",
"default": null
}
}
}One stream in full: every column, the primary key, the source and its health. Also what changed in the collector recently — a change in the collector is a change in the data, and a step in a series may be one. Args: slug: The stream, e.g. ercot-realtime-lmp (list_streams names them).
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"title": "describe_streamArguments",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"title": "Slug"
}
}
}Look up the nodes, zones, stations or fuels in a stream, with how far back each goes. Use it before query_stream: names are verbatim and never to be guessed. `facets` counts the entities by type. Args: slug: The stream. search: Case-insensitive substring of the entity name ("HOUSTON", "HB_", "KAUS"). entity_type: Only one type — HUB, LOAD_ZONE, RESOURCE_NODE, INTERFACE… limit: At most this many (1–2000).
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| limit | integer | |
| search | any | |
| entity_type | any |
{
"type": "object",
"title": "find_entitiesArguments",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"title": "Slug"
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 50
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Search",
"default": null
},
"entity_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Entity Type",
"default": null
}
}
}Every stream Dryos collects, with its entity column and headline measure. Args: domain: Energy, Weather or Property. operator: A grid operator — ERCOT, MISO, PJM, SPP, CAISO, NYISO or ISO-NE. search: A word matched against the slug, name and tagline ("lmp", "wind", "permits").
| Argument | Type | Description |
|---|---|---|
| domain | any | |
| search | any | |
| operator | any |
{
"type": "object",
"title": "list_streamsArguments",
"properties": {
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Domain",
"default": null
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Search",
"default": null
},
"operator": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Operator",
"default": null
}
}
}Read rows from a stream — raw (newest first), each entity's newest, or a rollup. The result carries `restUrl`: this same request as a plain GET on the public REST API, ready to put in an app. Args: slug: The stream. node: The entity, whatever the stream calls it (node, zone, station, fuel). System-level streams have none. start: Inclusive, ISO-8601 or relative to now (-24h, -7d). UTC. end: Exclusive, same forms. interval: Bucket size — 5m, 15m, 1h, 1d, 7d, or all for one bucket. Absent means raw rows. agg: How a bucket is reduced. by: What a rollup splits by: a text column, or none for one series. Default the entity. where: Filters as column=value on text columns. Repeat a column for OR. search: column:text, a case-insensitive substring. vintages: latest is each interval's newest forecast; all keeps every publication. stamp: noon labels a daily bucket at noon UTC so its date reads right in US zones. newest: One reading per entity — each one's most recent interval, so "the price at every hub right now" is one call. Not with interval. limit: At most this many rows (1–2000).
| Argument | Type | Description |
|---|---|---|
| by | any | |
| agg | string | |
| end | any | |
| node | any | |
| slug* | string | |
| limit |
| integer |
| stamp | string |
| start | any |
| where | any |
| newest | boolean |
| search | any |
| interval | any |
| vintages | string |
{
"type": "object",
"title": "query_streamArguments",
"required": [
"slug"
],
"properties": {
"by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "By",
"default": null
},
"agg": {
"enum": [
"avg",
"min",
"max",
"sum"
],
"type": "string",
"title": "Agg",
"default": "avg"
},
"end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "End",
"default": null
},
"node": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Node",
"default": null
},
"slug": {
"type": "string",
"title": "Slug"
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 100
},
"stamp": {
"enum": [
"start",
"noon"
],
"type": "string",
"title": "Stamp",
"default": "start"
},
"start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Start",
"default": null
},
"where": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Where",
"default": null
},
"newest": {
"type": "boolean",
"title": "Newest",
"default": false
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Search",
"default": null
},
"interval": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Interval",
"default": null
},
"vintages": {
"enum": [
"latest",
"all"
],
"type": "string",
"title": "Vintages",
"default": "latest"
}
}
}