Discover the EndDeviceList resource at /edev on the IEEE 2030.5 server; retrieve or create an EndDevice resource for your controllable load and confirm that the server has associated it with a MessagingProgram or DemandResponseProgram (Function Set 11 uses the DemandResponseProgram path /drp).
GET the list of DemandResponsePrograms at /drp; each program contains a primacy value (lower = higher priority) and links to EndDeviceControls or LoadShedAvailability resources — retrieve the active program's DemandResponseProgramList.
Poll for active EndDeviceControl resources at the program's /drp/{id}/edc endpoint; each control specifies dtstart (UTC epoch seconds), duration, randomizeDuration (up to which delay is permitted before executing), and deviceCategory (bitmask indicating target device types).
When a control is received and within its active window, apply load curtailment to the target devices within the randomization window: shed load no earlier than dtstart and no later than dtstart + randomizeDuration; send a Response resource to the server's /rsps endpoint indicating execution status.
Implement control cancellation: if a subsequent GET returns that a previously active EndDeviceControl has been superseded (via a newer control with higher primacy or an explicit cancellation), restore shed load and send a Response with status indicating cancellation acknowledged.
Maintain the LoadShedAvailability resource at /lsa with your DER's current available curtailment capacity (in watts), updated on change or at a configurable interval; utilities use this to verify dispatchable capacity before issuing controls.
Known gotchas
The randomizeDuration field exists to prevent synchronized load restoration (cold-load pickup) across many devices simultaneously; do not ignore it — applying all devices at exactly dtstart in a fleet deployment can cause a demand spike equivalent to the shed load returning all at once.
IEEE 2030.5 timestamps are Unix epoch seconds (not milliseconds); a common error is submitting dtstart in milliseconds, which results in controls with dates in 2038+ being silently accepted by some servers but never triggered.
Function Set 11 and Function Set 10 (DER) use overlapping resource paths on some server implementations; ensure your client correctly navigates to /drp for demand response programs and does not conflate them with /derp DER programs.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp