Dryos

Live US power market prices, load, generation, weather and permits for AI agents.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
68%
Naming quality
92%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,654Tokens (tool definitions)
~1.6 KBTypical response size
Moderate attention impact (1.29% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "dryos": {
      "url": "https://api.dryos.ai/mcp"
    }
  }
}

Remote endpoints

https://api.dryos.ai/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒list_streams(domain, operator, search)

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").

Input Schema

{
  "type": "object",
  "properties": {
    "domain": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Domain"
    },
    "operator": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Operator"
    },
    "search": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Search"
    }
  },
  "title": "list_streamsArguments"
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "list_streamsDictOutput"
}
🟒describe_stream(slug)

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).

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "title": "Slug",
      "type": "string"
    }
  },
  "required": [
    "slug"
  ],
  "title": "describe_streamArguments"
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "describe_streamDictOutput"
}
🟒find_entities(slug, search, entity_type, limit)

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).

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "title": "Slug",
      "type": "string"
    },
    "search": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Search"
    },
    "entity_type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Entity Type"
    },
    "limit": {
      "default": 50,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "slug"
  ],
  "title": "find_entitiesArguments"
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "find_entitiesDictOutput"
}
🟒column_values(slug, column, where, search, limit)

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).

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "title": "Slug",
      "type": "string"
    },
    "column": {
      "title": "Column",
      "type": "string"
    },
    "where": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Where"
    },
    "search": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Search"
    },
    "limit": {
      "default": 40,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "slug",
    "column"
  ],
  "title": "column_valuesArguments"
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "column_valuesDictOutput"
}
🟒query_stream(slug, node, start, end, interval, ...)

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).

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "title": "Slug",
      "type": "string"
    },
    "node": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Node"
    },
    "start": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Start"
    },
    "end": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "End"
    },
    "interval": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Interval"
    },
    "agg": {
      "default": "avg",
      "enum": [
        "avg",
        "min",
        "max",
        "sum"
      ],
      "title": "Agg",
      "type": "string"
    },
    "by": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "By"
    },
    "where": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Where"
    },
    "search": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Search"
    },
    "vintages": {
      "default": "latest",
      "enum": [
        "latest",
        "all"
      ],
      "title": "Vintages",
      "type": "string"
    },
    "stamp": {
      "default": "start",
      "enum": [
        "start",
        "noon"
      ],
      "title": "Stamp",
      "type": "string"
    },
    "newest": {
      "default": false,
      "title": "Newest",
      "type": "boolean"
    },
    "limit": {
      "default": 100,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "slug"
  ],
  "title": "query_streamArguments"
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "query_streamDictOutput"
}

Recommended Prompts

search_research
Search for information about [topic] using Dryos
Expected tools: find_entities
find_specific
Find [specific item] using Dryos
Expected tools: find_entities
list_items
List all [items] available in Dryos
Expected tools: list_streams
browse_collection
Show me the [collection] from Dryos
Expected tools: list_streams

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools