MCP server for Kardashev Labs US grid data — LMP, carbon, load, curtailment, interconnection queues, ERCOT large loads, and live RT−DA spread forecasts. No API key required.
Kardashev MCP demonstrates solid tool design with consistent naming (all verb_noun pattern), comprehensive parameter descriptions, and well-structured Zod schemas. All 11 tools have clear descriptions (avg ~150 chars) and typed input parameters. However, output schemas are not documented, responses are formatted as plain text via toToolText() rather than structured objects, limiting LLM ability to parse and chain results. Error handling is basic (fail() returns text messages without recovery guidance). No tool annotations (readOnlyHint, destructiveHint) despite all tools being read-only. Parameter descriptions are good but lack explicit constraints (e.g., limit ranges, date format validation). Missing output schema documentation is the primary gap preventing a higher score.
Grid carbon intensity in lbs CO₂/MWh. Omit iso with latest=true for all balancing authorities; pass iso for one region. Prefer this over raw fuel-mix when the question is about emissions intensity.
Published Curtailment (MWh) at ISO/fuel grain the ISO already publishes. Strongest coverage for CAISO, ERCOT, SPP. Not Resource Curtailment. Negative prices are Markets stress, not curtailment.
Historical accuracy metrics for Kardashev's spread forecasts. Aggregated by model and node.
Generation by fuel type (MW) for a US ISO. Use latest=true for the newest snapshot; otherwise returns recent history (row-capped).
ERCOT Large Load (>10 MW) registrations and status. Not Demand or consumption.
Locational marginal prices (LMP) for a US ISO. market=RT (real-time) or DA (day-ahead). Optionally filter by node_id. This is settled/observed prices — for Kardashev's forward RT minus DA Spread Issuance use get_spread_forecast instead.
Output schemas not documented. Tools return plain text via toToolText() rather than structured JSON objects. LLMs cannot reliably parse results or chain tool calls. Responses should include typed fields (e.g., {isos: [{code, status}], timestamp}).
No tool annotations despite all tools being read-only. Add readOnlyHint: true to all tool definitions to signal safety to agents and prevent unnecessary confirmation prompts.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Actual electricity Demand (MW) for a US ISO or Balancing Authority. Demand is consumption, not Large Load.
Near-term ISO Demand forecast (MW). This is the operator's Demand forecast, not a Kardashev Spread Issuance. Use get_spread_forecast for Spread Issuances keyed by Node, Target Hour, and Forecast Model.
Search generator Interconnection Projects across US ISOs/RTOs. This is a Current Observation. Identity is the ISO Request ID (INR at ERCOT). GIS Film exists for ERCOT only. Does not return a Clearance Band or time-to-power.
Kardashev's proprietary RT minus DA Spread Issuance forecast. Keyed by Node, Target Hour, and Forecast Model. This is a forward forecast, not settled prices.
List US ISOs/RTOs covered by Kardashev Labs and their live ingest status. Call this first to discover valid iso codes for other tools.
Error handling lacks recovery guidance. fail() returns raw error messages without actionable next steps. E.g., 'iso is required when fetching carbon history' should suggest 'Call list_isos() first to discover valid ISO codes.'
Parameter constraints not fully specified. 'limit' parameters lack explicit min/max (docs say default 50, max 500, but not enforced in schema). Date parameters lack format validation (YYYY-MM-DD not enforced). Add constraints to Zod schema.
Pagination not fully implemented. Tools accept 'limit' but do not return total_count, next_cursor, or has_more flags. Large result sets risk context window exhaustion. Add pagination metadata to responses.