Server definition
- Hash
- sha256:0818ca1b095630b4568d490ab793cda4a4b30b51a041ff7c53c06dff942f7ea9
- What it is
- What a remote MCP server returned when asked what it offers: 5 tools
The blob, as servednamed by its sha256
{
"instructions": "Dryos serves real, reconciled data — US power markets (ERCOT, MISO, PJM, SPP, CAISO, NYISO, ISO-NE), weather, and building permits — collected live from the source. Every stream is checked against the source it came from.\n\nHow to answer a question:\n1. list_streams to find the stream (filter by domain, operator or a word).\n2. describe_stream to read its columns, entity column, measure and unit.\n3. find_entities to look up a node, zone or station name. Never guess one: names are verbatim, inner spaces included (`ALDENE 230 KV T-10`).\n4. query_stream for rows. Past a day or so of five-minute data, pass interval (15m, 1h, 1d, all) and agg (avg, min, max, sum) instead of raw rows. Each bucket carries `samples`; a low count is a collection gap, not a quiet hour. For the current value at every node, zone or station, pass newest=true: one row per entity at its most recent interval, rather than guessing a row limit.\n\nBuilding an app: every query_stream result carries `restUrl`, the same request as a plain GET against the public REST API. Relative times (start=-24h) stay relative in it, so it keeps working. Give that URL to whoever is wiring the data into their code rather than re-deriving one.\n\nRules that prevent wrong answers:\n- Every timestamp is UTC. interval_start_utc is the start of the interval. Convert only for display: ERCOT and SPP are US Central; MISO is EST all year (never EDT); PJM, NYISO and ISO-NE are US Eastern with daylight saving; CAISO is US Pacific.\n- start is inclusive, end exclusive.\n- Forecasts keep every publication. By default each interval's newest vintage is returned; never average vintages together.\n- Null means the source did not report it — never zero.\n- where filters a text column (`column=value`; repeat one column for OR, different columns AND). search is a case-insensitive substring (`column:text`).\n- Cite the stream slug and the interval timestamps behind any number you report.\n",
"tools": [
{
"description": "The distinct values of one text column, most rows first — what a filter can be.\n\n Args:\n slug: The stream.\n column: A text column from describe_stream (not the entity — use find_entities).\n where: Filters as `column=value`, the same as query_stream's.\n search: `column:text`, a case-insensitive substring.\n limit: At most this many (1–500).\n ",
"inputSchema": {
"properties": {
"column": {
"title": "Column",
"type": "string"
},
"limit": {
"default": 40,
"title": "Limit",
"type": "integer"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search"
},
"slug": {
"title": "Slug",
"type": "string"
},
"where": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Where"
}
},
"required": [
"slug",
"column"
],
"title": "column_valuesArguments",
"type": "object"
},
"name": "column_values",
"outputSchema": {
"additionalProperties": true,
"title": "column_valuesDictOutput",
"type": "object"
}
},
{
"description": "One stream in full: every column, the primary key, the source and its health.\n\n Also what changed in the collector recently — a change in the collector is\n a change in the data, and a step in a series may be one.\n\n Args:\n slug: The stream, e.g. ercot-realtime-lmp (list_streams names them).\n ",
"inputSchema": {
"properties": {
"slug": {
"title": "Slug",
"type": "string"
}
},
"required": [
"slug"
],
"title": "describe_streamArguments",
"type": "object"
},
"name": "describe_stream",
"outputSchema": {
"additionalProperties": true,
"title": "describe_streamDictOutput",
"type": "object"
}
},
{
"description": "Look up the nodes, zones, stations or fuels in a stream, with how far back each goes.\n\n Use it before query_stream: names are verbatim and never to be guessed.\n `facets` counts the entities by type.\n\n Args:\n slug: The stream.\n search: Case-insensitive substring of the entity name (\"HOUSTON\", \"HB_\", \"KAUS\").\n entity_type: Only one type — HUB, LOAD_ZONE, RESOURCE_NODE, INTERFACE…\n limit: At most this many (1–2000).\n ",
"inputSchema": {
"properties": {
"entity_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Entity Type"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search"
},
"slug": {
"title": "Slug",
"type": "string"
}
},
"required": [
"slug"
],
"title": "find_entitiesArguments",
"type": "object"
},
"name": "find_entities",
"outputSchema": {
"additionalProperties": true,
"title": "find_entitiesDictOutput",
"type": "object"
}
},
{
"description": "Every stream Dryos collects, with its entity column and headline measure.\n\n Args:\n domain: Energy, Weather or Property.\n operator: A grid operator — ERCOT, MISO, PJM, SPP, CAISO, NYISO or ISO-NE.\n search: A word matched against the slug, name and tagline (\"lmp\", \"wind\", \"permits\").\n ",
"inputSchema": {
"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",
"type": "object"
},
"name": "list_streams",
"outputSchema": {
"additionalProperties": true,
"title": "list_streamsDictOutput",
"type": "object"
}
},
{
"description": "Read rows from a stream — raw (newest first), each entity's newest, or a rollup.\n\n The result carries `restUrl`: this same request as a plain GET on the\n public REST API, ready to put in an app.\n\n Args:\n slug: The stream.\n node: The entity, whatever the stream calls it (node, zone, station, fuel).\n System-level streams have none.\n start: Inclusive, ISO-8601 or relative to now (-24h, -7d). UTC.\n end: Exclusive, same forms.\n interval: Bucket size — 5m, 15m, 1h, 1d, 7d, or all for one bucket.\n Absent means raw rows.\n agg: How a bucket is reduced.\n by: What a rollup splits by: a text column, or none for one series. Default the entity.\n where: Filters as column=value on text columns. Repeat a column for OR.\n search: column:text, a case-insensitive substring.\n vintages: latest is each interval's newest forecast; all keeps every publication.\n stamp: noon labels a daily bucket at noon UTC so its date reads right in US zones.\n newest: One reading per entity — each one's most recent interval, so \"the price\n at every hub right now\" is one call. Not with interval.\n limit: At most this many rows (1–2000).\n ",
"inputSchema": {
"properties": {
"agg": {
"default": "avg",
"enum": [
"avg",
"min",
"max",
"sum"
],
"title": "Agg",
"type": "string"
},
"by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "By"
},
"end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "End"
},
"interval": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Interval"
},
"limit": {
"default": 100,
"title": "Limit",
"type": "integer"
},
"newest": {
"default": false,
"title": "Newest",
"type": "boolean"
},
"node": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Node"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search"
},
"slug": {
"title": "Slug",
"type": "string"
},
"stamp": {
"default": "start",
"enum": [
"start",
"noon"
],
"title": "Stamp",
"type": "string"
},
"start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Start"
},
"vintages": {
"default": "latest",
"enum": [
"latest",
"all"
],
"title": "Vintages",
"type": "string"
},
"where": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Where"
}
},
"required": [
"slug"
],
"title": "query_streamArguments",
"type": "object"
},
"name": "query_stream",
"outputSchema": {
"additionalProperties": true,
"title": "query_streamDictOutput",
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:0818ca1b095630b4568d490ab793cda4a4b30b51a041ff7c53c06dff942f7ea9 | sha256sum