<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Karthikeyan DSK</title>
    <description>The latest articles on Forem by Karthikeyan DSK (@karthikeyan_dsk_72d9d837b).</description>
    <link>https://forem.com/karthikeyan_dsk_72d9d837b</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3766004%2F5186bece-d064-4f1c-a5df-1ca0d98aa919.png</url>
      <title>Forem: Karthikeyan DSK</title>
      <link>https://forem.com/karthikeyan_dsk_72d9d837b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/karthikeyan_dsk_72d9d837b"/>
    <language>en</language>
    <item>
      <title>Talk to the Grid: Control Energy Infrastructure with Claude + MCP</title>
      <dc:creator>Karthikeyan DSK</dc:creator>
      <pubDate>Fri, 13 Feb 2026 21:24:49 +0000</pubDate>
      <link>https://forem.com/karthikeyan_dsk_72d9d837b/talk-to-the-grid-control-energy-infrastructure-with-claude-mcp-1a5e</link>
      <guid>https://forem.com/karthikeyan_dsk_72d9d837b/talk-to-the-grid-control-energy-infrastructure-with-claude-mcp-1a5e</guid>
      <description>&lt;p&gt;The energy grid is the largest machine humanity has ever built — and it has no API.&lt;/p&gt;

&lt;p&gt;Until now.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://energyatit.com" rel="noopener noreferrer"&gt;EnergyAtIt&lt;/a&gt; exposes 30+ tools that let Claude dispatch batteries, verify carbon attestations, read meters across 8 industrial protocols, and create demand response events. All through natural language.&lt;/p&gt;

&lt;p&gt;This tutorial walks you through connecting Claude to energy infrastructure in under 5 minutes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Install the MCP Server
&lt;/h2&gt;

&lt;p&gt;No dependencies. No config files. One command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx energyatit-mcp-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. The server starts on stdio and registers 30+ tools with any MCP-compatible client.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Add to Claude Desktop
&lt;/h2&gt;

&lt;p&gt;Open your Claude Desktop config:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;macOS&lt;/strong&gt;: &lt;code&gt;~/Library/Application Support/Claude/claude_desktop_config.json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows&lt;/strong&gt;: &lt;code&gt;%APPDATA%\Claude\claude_desktop_config.json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add the server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"energyatit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"energyatit-mcp-server"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"ENERGYATIT_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"your-key-here"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart Claude Desktop. You'll see the hammer icon with 30+ tools available.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No API key yet?&lt;/strong&gt; Skip the &lt;code&gt;env&lt;/code&gt; block entirely — the sandbox works without one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using Claude Code instead?
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add energyatit &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; energyatit-mcp-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Explore Your Sites
&lt;/h2&gt;

&lt;p&gt;Ask Claude:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What energy sites are available?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude calls &lt;code&gt;list_sites&lt;/code&gt; and returns your tenant's sites with location, capacity, and asset counts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────┬───────────────────────┬──────────┬────────┐
│ Site ID │ Name                  │ Location │ Assets │
├─────────┼───────────────────────┼──────────┼────────┤
│ SITE-01 │ Dubai DC Campus       │ Dubai    │ 12     │
│ SITE-02 │ Abu Dhabi Solar Farm  │ AUH      │ 8      │
│ SITE-03 │ Riyadh Edge Facility  │ Riyadh   │ 6      │
└─────────┴───────────────────────┴──────────┴────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The sandbox comes pre-loaded with simulated sites, assets, and meter data — so you can explore immediately.&lt;/p&gt;

&lt;p&gt;Behind the scenes, Claude is making authenticated API calls to the EnergyAtIt platform. You're just talking.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Read Real-Time Data
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"What's the carbon intensity at the Dubai data center?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude calls &lt;code&gt;get_meter_readings&lt;/code&gt; and &lt;code&gt;get_grid_prices&lt;/code&gt; to pull real-time data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dubai DC Campus — Current Readings
───────────────────────────────────
Grid Import:     42.3 MW
Solar Generation: 18.7 MW
Battery SoC:     73%
Carbon Intensity: 0.42 tCO₂/MWh
Grid Price:      $0.087/kWh (off-peak)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works across protocols. The same natural language query triggers Modbus reads from PLCs, OpenADR signals from utilities, and OCPP status from EV chargers — all translated into one clean response.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Dispatch a Battery
&lt;/h2&gt;

&lt;p&gt;Here's where it gets interesting. Ask Claude:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Dispatch the battery at 2MW for 30 minutes"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude calls &lt;code&gt;dispatch_command&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✓ Dispatch Command Sent
──────────────────────
Asset:     BESS-001 (Tesla Megapack)
Command:   DISCHARGE
Power:     2,000 kW
Duration:  30 min
Status:    EXECUTING
Dispatch ID: DSP-20260213-0847
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's a real state change. The platform translates Claude's natural language into protocol-specific commands — Modbus registers for industrial batteries, OCPP messages for EV chargers, OpenADR signals for utility-enrolled loads.&lt;/p&gt;

&lt;p&gt;One sentence from you. Eight protocols handled underneath.&lt;/p&gt;

&lt;h3&gt;
  
  
  What else can you dispatch?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;"Charge the EV fleet at 50kW each"&lt;/code&gt; → OCPP 2.0 charging profiles&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"Curtail HVAC by 30% for the next hour"&lt;/code&gt; → Modbus setpoint writes&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"Shift the cooling load to off-peak"&lt;/code&gt; → demand response scheduling&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 6: Generate a Carbon Attestation
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Generate a carbon attestation certificate for the Dubai facility"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude calls &lt;code&gt;create_carbon_record&lt;/code&gt; and &lt;code&gt;get_carbon_certificate&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✓ Carbon Attestation Generated
───────────────────────────────
Facility:    FAC-001 (Dubai DC Campus)
Period:      2026-02-13T00:00:00Z → 2026-02-13T23:59:59Z
Consumption: 1,015.2 MWh
Emissions:   426.4 tCO₂e
Intensity:   0.42 tCO₂/MWh
Renewable %: 44.2%

Hash Chain
──────────
Previous:  a7f3c2...e891d4
Current:   3b8e1f...c402a7
Algorithm: SHA-256
Verified:  ✓ Chain intact
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every record is appended to a SHA-256 hash chain. Each entry references the previous hash, creating a tamper-evident audit trail. If anyone modifies a historical record, the chain breaks — and &lt;code&gt;verify_carbon_chain&lt;/code&gt; will catch it.&lt;/p&gt;

&lt;p&gt;This is how you get from "trust me" to "verify it yourself" in carbon accounting.&lt;/p&gt;




&lt;h2&gt;
  
  
  All 30+ Tools
&lt;/h2&gt;

&lt;p&gt;Here's everything Claude can do once connected:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Tools&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sites &amp;amp; Assets&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;list_sites&lt;/code&gt;, &lt;code&gt;get_site&lt;/code&gt;, &lt;code&gt;list_assets&lt;/code&gt;, &lt;code&gt;get_asset&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dispatch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;dispatch_command&lt;/code&gt;, &lt;code&gt;dispatch_history&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Carbon&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;create_carbon_record&lt;/code&gt;, &lt;code&gt;verify_carbon_chain&lt;/code&gt;, &lt;code&gt;get_carbon_certificate&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Demand Response&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;create_dr_event&lt;/code&gt;, &lt;code&gt;dispatch_dr_event&lt;/code&gt;, &lt;code&gt;settle_dr_event&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Settlements&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;generate_settlement&lt;/code&gt;, &lt;code&gt;verify_settlement&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Compliance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;generate_compliance_package&lt;/code&gt;, &lt;code&gt;generate_scope2_report&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reliability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_asset_reliability&lt;/code&gt;, &lt;code&gt;get_site_reliability&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Grid Intel&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_grid_capacity&lt;/code&gt;, &lt;code&gt;get_grid_trends&lt;/code&gt;, &lt;code&gt;get_grid_prices&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Procurement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;create_procurement&lt;/code&gt;, &lt;code&gt;analyze_procurement&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Integrations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;get_integration_status&lt;/code&gt;, &lt;code&gt;get_meter_readings&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sandbox&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;provision_sandbox&lt;/code&gt;, &lt;code&gt;sandbox_status&lt;/code&gt;, &lt;code&gt;health_check&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Get an API Key
&lt;/h2&gt;

&lt;p&gt;The sandbox is free and works without authentication. When you're ready for production:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://energyatit.com/developers" rel="noopener noreferrer"&gt;energyatit.com/developers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sign up for the Pioneer program&lt;/li&gt;
&lt;li&gt;Create an API key from Settings → API Keys&lt;/li&gt;
&lt;li&gt;Add it to your Claude Desktop config as &lt;code&gt;ENERGYATIT_API_KEY&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keys are prefixed &lt;code&gt;eat_live_&lt;/code&gt; (production) or &lt;code&gt;eat_test_&lt;/code&gt; (sandbox).&lt;/p&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/kasathur/energyatit-mcp-server" rel="noopener noreferrer"&gt;github.com/kasathur/energyatit-mcp-server&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm&lt;/strong&gt;: &lt;a href="https://www.npmjs.com/package/energyatit-mcp-server" rel="noopener noreferrer"&gt;npmjs.com/package/energyatit-mcp-server&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platform&lt;/strong&gt;: &lt;a href="https://energyatit.com" rel="noopener noreferrer"&gt;energyatit.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Docs&lt;/strong&gt;: &lt;a href="https://energyatit.com/docs" rel="noopener noreferrer"&gt;energyatit.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Registry&lt;/strong&gt;: &lt;a href="https://registry.modelcontextprotocol.io" rel="noopener noreferrer"&gt;registry.modelcontextprotocol.io&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;We're building toward a world where AI agents autonomously manage energy infrastructure — dispatching batteries when grid prices spike, shifting compute loads to follow renewable generation, and settling carbon in real time.&lt;/p&gt;

&lt;p&gt;The MCP server is the interface layer. The grid is the machine. Claude is the operator.&lt;/p&gt;

&lt;p&gt;Start with the sandbox. Break things. Then connect it to real iron.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx energyatit-mcp-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>mcp</category>
      <category>ai</category>
      <category>energy</category>
      <category>claude</category>
    </item>
    <item>
      <title>How We Translated OpenADR XML to JSON in 47ms — Building the API Layer for the Power Grid</title>
      <dc:creator>Karthikeyan DSK</dc:creator>
      <pubDate>Wed, 11 Feb 2026 09:40:17 +0000</pubDate>
      <link>https://forem.com/karthikeyan_dsk_72d9d837b/how-we-translated-openadr-xml-to-json-in-47ms-building-the-api-layer-for-the-power-grid-24j3</link>
      <guid>https://forem.com/karthikeyan_dsk_72d9d837b/how-we-translated-openadr-xml-to-json-in-47ms-building-the-api-layer-for-the-power-grid-24j3</guid>
      <description>&lt;p&gt;Every critical infrastructure system has been abstracted into programmable primitives. &lt;/p&gt;

&lt;p&gt;Banking has Plaid. Payments have Stripe. Communications have Twilio.&lt;/p&gt;

&lt;p&gt;The power grid? Nothing.&lt;/p&gt;

&lt;p&gt;The grid speaks 8 major protocols — IEC 61850, DNP3, Modbus, OpenADR, OCPP, IEEE 2030.5, and more. They were built by different standards bodies, in different decades. A Modbus register read looks nothing like an OpenADR XML event.&lt;/p&gt;

&lt;p&gt;We're building the translation layer.&lt;/p&gt;

&lt;p&gt;The OpenADR Challenge&lt;/p&gt;

&lt;p&gt;OpenADR 2.0b is the protocol utilities use for demand response. When a utility wants a data center to reduce power consumption, it sends this XML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;oadr:oadrDistributeEvent&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;oadr:oadrEvent&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ei:eiEvent&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;ei:eventDescriptor&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;ei:eventID&amp;gt;&lt;/span&gt;EVT-DR-001&lt;span class="nt"&gt;&amp;lt;/ei:eventID&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;ei:marketContext&amp;gt;&lt;/span&gt;http://dewa.gov.ae/DR&lt;span class="nt"&gt;&amp;lt;/ei:marketContext&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/ei:eventDescriptor&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;ei:eiEventSignals&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;ei:eiEventSignal&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;ei:signalName&amp;gt;&lt;/span&gt;SIMPLE&lt;span class="nt"&gt;&amp;lt;/ei:signalName&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;ei:signalType&amp;gt;&lt;/span&gt;level&lt;span class="nt"&gt;&amp;lt;/ei:signalType&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;ei:currentValue&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;ei:payloadFloat&amp;gt;&amp;lt;ei:value&amp;gt;&lt;/span&gt;2.0&lt;span class="nt"&gt;&amp;lt;/ei:value&amp;gt;&amp;lt;/ei:payloadFloat&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/ei:currentValue&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/ei:eiEventSignal&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/ei:eiEventSignals&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/ei:eiEvent&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/oadr:oadrEvent&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/oadr:oadrDistributeEvent&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the other side, we return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"eventId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EVT-DR-001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signalName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SIMPLE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signalType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"level"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"signalValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"marketContext"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://dewa.gov.ae/DR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"active"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"startDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-02-11T10:00:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"durationSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;47ms. Full semantic translation, not just XML-to-JSON byte conversion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Semantic Translation Matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A naive XML-to-JSON converter gives you namespace-prefixed nesting five levels deep. Useless for developers.&lt;/p&gt;

&lt;p&gt;Our translation engine does four things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Parse&lt;/strong&gt; — XML deserialization with namespace handling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extract&lt;/strong&gt; — Pull semantically meaningful fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Normalize&lt;/strong&gt; — Map to consistent JSON schema across all protocols&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enrich&lt;/strong&gt; — Add context (what does signal level 2.0 mean?)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  8 Protocols, One API
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;Era&lt;/th&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Used For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenADR 2.0b&lt;/td&gt;
&lt;td&gt;2009&lt;/td&gt;
&lt;td&gt;XML&lt;/td&gt;
&lt;td&gt;Utility demand response&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modbus TCP&lt;/td&gt;
&lt;td&gt;1979&lt;/td&gt;
&lt;td&gt;Binary registers&lt;/td&gt;
&lt;td&gt;Industrial equipment, BESS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IEC 61850&lt;/td&gt;
&lt;td&gt;2003&lt;/td&gt;
&lt;td&gt;XML/binary&lt;/td&gt;
&lt;td&gt;Substation automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DNP3&lt;/td&gt;
&lt;td&gt;1993&lt;/td&gt;
&lt;td&gt;Binary&lt;/td&gt;
&lt;td&gt;SCADA telemetry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OCPP 2.0&lt;/td&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;JSON&lt;/td&gt;
&lt;td&gt;EV charging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IEEE 2030.5&lt;/td&gt;
&lt;td&gt;2013&lt;/td&gt;
&lt;td&gt;XML&lt;/td&gt;
&lt;td&gt;Smart inverters, DER&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IEC 60870-5-104&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;Binary&lt;/td&gt;
&lt;td&gt;Wide-area grid telecontrol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ICCP/TASE.2&lt;/td&gt;
&lt;td&gt;1996&lt;/td&gt;
&lt;td&gt;Binary&lt;/td&gt;
&lt;td&gt;Inter-utility data exchange&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We sit at the intersection of all eight. One API. One JSON schema.&lt;/p&gt;

&lt;h2&gt;
  
  
  45 MCP Tools for AI Agents
&lt;/h2&gt;

&lt;p&gt;We built 45 tools on Anthropic's Model Context Protocol:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Dispatch a battery&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dispatch_command&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;assetId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;commandType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;discharge&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;powerMw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;durationMinutes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Carbon attestation&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;attest_energy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;meterId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MTR-DEWA-01&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;kwh&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1250.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grid&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Find subsidies&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scan_subsidies&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;facilityId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fac-001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent doesn't need to know the underlying protocol. It just calls tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;Developer sandbox with prizes up to $1,000:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://app.energyatit.com/journey" rel="noopener noreferrer"&gt;https://app.energyatit.com/journey&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 core primitives: connect, dispatch, settle, comply, intel&lt;/li&gt;
&lt;li&gt;6-stage developer journey with auto-progression&lt;/li&gt;
&lt;li&gt;Leaderboard&lt;/li&gt;
&lt;li&gt;SDKs in TypeScript, Python, and Go&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;The grid is the last major infrastructure without an API. We're fixing that.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EnergyAtIt&lt;/strong&gt; — &lt;a href="https://energyatit.com" rel="noopener noreferrer"&gt;https://energyatit.com&lt;/a&gt;&lt;br&gt;
Built by Karthikeyan DS (ex-AWS, led launch readiness for AWS Hyderabad data center region)&lt;/p&gt;

</description>
      <category>api</category>
      <category>backend</category>
      <category>iot</category>
      <category>performance</category>
    </item>
  </channel>
</rss>
