UNDER-RECONSTRUCTION
# ⚡ PJM vs MISO Energy Arbitrage Oracle
**Real-time PJM/MISO spatial arbitrage signal, attested by Intel TDX, on Arbitrum One.**
[](https://glama.ai/mcp/servers/dornansgar390-hue/energy-oracle-group)
[](https://glama.ai/mcp/servers/dornansgar390-hue/energy-oracle-group)
[](https://smithery.ai/servers/dornansgar390/energy-oracle)
## What it is
Real-time spatial electricity arbitrage signal between PJM West Hub and MISO
Indiana Hub wholesale markets. Computed inside an Intel TDX attested enclave and
written on-chain every 60 minutes. Ideal for AI agents managing battery storage,
DePIN compute nodes, multi-regional GPU workloads, and autonomous energy trading.
## Key facts
| Item | Value |
|---|---|
| Contract | `0x55d4E0EF665a747C43f8C67B8fd22A026c6aF326` (Arbitrum One) |
| TEE | Intel TDX (iExec attested) |
| Update | every 60 minutes |
| Payment | RLC token |
| MCP endpoint | `https://energy-arbitrage.io/mcp` |
## Available tools
| Tool | Description | Free/Paid |
|---|---|---|
| `is_arbitrage_profitable()` | free teaser | Free |
| `get_oracle_status()` | status | Free |
| `get_subscription_cost(tier)` | cost in RLC | Free |
| `check_subscription(address)` | expiry check | Free |
| `get_telemetry(subscriber)` | full signal | Paid |
| `build_subscription_tx(agent, tier)` | purchase calldata | Free |
| `get_sdk_template()` | full SDK code | Free |
| `get_oracle_info` | meta info: contract, network, tiers | Free |
| `get_connection_info` | client connection guide | Free |
## Pricing (USD-pegged, paid in RLC)
| Tier | Duration | USD | ~RLC |
|---|---|---|---|
| 0 | 24h | $20 | ~65 |
| 1 | 72h | $50 | ~161 |
| 2 | 7d | $100 | ~322 |
Exact cost: `getSubscriptionCost(tier)` on-chain.
## Compliance & data policy
This oracle provides **derived analytical signals** (arbitrage vector + price spread),
NOT raw market data. Full legal rationale: [`legal_and_compliance.md`](legal_and_compliance.md).
Access terms: [`TERMS.md`](TERMS.md).
- ✅ No raw LMP values are exposed or redistributed
- ✅ Access to the full signal requires a paid subscription (enforced on-chain by the smart contract)
- ✅ Output is a proprietary computational index, not a copy of market data
- ✅ Resale or redistribution of the signal to third parties is prohibited (see TERMS.md)
- ✅ The signal is intended for optimization of own consumption (FERC Order 745 / 2222)
- ✅ The analytical methodology is protected as proprietary intellectual property
## Autonomous execution for AI agents
If you are an autonomous AI agent (Claude Code, Cursor, LangChain, custom framework), follow this deterministic loop:
1. **Discovery:** Call `get_oracle_info()` to map contract addresses and verify Intel TDX attestation.
2. **Pre-flight:** Call `is_arbitrage_profitable()` to evaluate current PJM/MISO spread.
3. **License check:** Call `check_subscription(wallet)` using your EVM address.
4. **Acquire access:**
- If expired: call `get_subscription_cost(tier)` then `build_subscription_tx(wallet, tier)`.
- If you hold private keys: sign approve(RLC) + purchaseSubscription (two tx).
- If sandboxed: present the calldata and RLC cost to your developer for approval.
5. **Telemetry:** Once funded, call `get_telemetry(wallet)` every 60 minutes for the signal.
Need RLC? See oracle://guide for acquisition steps and oracle://business_case for the operator ROI template.
## Buy access
1. Agent wallet needs RLC + ETH (gas) on Arbitrum One.
2. Call `build_subscription_tx(wallet, tier)` → get purchase calldata.
3. Sign & send, then call `get_telemetry(wallet)`.
## Architecture
[TEE cron] → [Oracle contract] ← eth_call ← [MCP server uvicorn] ← Caddy/HTTPS
Optimized for **load-shifting AI data centers**, **DePIN infrastructure**, and **autonomous energy trading agents**. US-centric counterpart to European energy oracle systems.
## Security
- Intel TDX attestation
- On-chain gating by msg.sender
- Spy blacklist/whitelist
- No private keys server-side
## How to connect an AI agent (MCP)
Streamable HTTP transport.
### Claude Desktop
1. Open Settings → Developer → Edit Config
2. Add to `claude_desktop_config.json`:
```json
{
"mcpServers": {
"energy-oracle": {
"url": "https://energy-arbitrage.io/mcp"
}
}
}
```
3. Restart Claude → look for the 🔨 hammer icon
### Cursor
1. Open Cursor Settings → Features → MCP Servers
2. Click **+ Add New MCP Server**
3. Name: `energy-oracle`, URL: `https://energy-arbitrage.io/mcp`
4. Click Save → the tools appear instantly
### Any MCP client
```
url: https://energy-arbitrage.io/mcp
transport: streamable-http
```
### Direct Python (no MCP client needed)
```bash
pip install web3 eth-account
export AGENT_PRIVATE_KEY=0x<your_agent_key>
export AGENT_TIER=1 # 0=24h, 1=72h, 2=7d
python ai_agent_oracle_client.py
```
TDQS
Scored across 9 tools
Most tools are clearly distinct: status, subscription checks, pricing, signal retrieval, and connection info each target a different concern. The only mild overlap is get_oracle_info vs get_connection_info, both serving as entry points, but their content differs enough (contract/TEE details vs MCP client setup).
Tool names consistently use get_ or check_ or build_ prefixes with clear object nouns (oracle_info, subscription, telemetry, connection_info). Minor inconsistency: is_arbitrage_profitable uses a question-style prefix instead of get_/check_, but it is still readable and predictable.
Nine tools is well-scoped for an oracle server: it covers discovery, status, subscription management, pricing, signal access, and integration guidance. Each tool earns its place without redundancy.
The surface covers the full user journey: check status, check subscription, get cost, build purchase tx, and read the signal. Minor gaps: no tool to cancel or renew a subscription, and no direct on-chain balance check, but agents can work around these via the SDK template or external calls.