{"name":"pjm-nowcast","version":"1.0.0","description":"Trailing and semi-live descriptive statistics on PJM RTO LMP, selected zonal LMP price spreads, and RTO load.","whatItIsNot":"Not a forecast, signal, trading recommendation, or advice. Not a substitute for official PJM data products. Buyer beware: figures are aggregated from public market sources; freshness equals the last successful background poll.","whenToUse":"When to use: You need a PJM window nowcast — load, prints, or realized window volatility — for a named hub or node, as inputs to mark or risk a power window or forward.","whenNotToUse":"When not to use: You already have model inputs (S or forward mark, K, times, r, σ or a premium) and only need fair value, Greeks, or an IV surface; you want a generic ticker screener or “price any stock.”","disclaimer":"Descriptive statistics only. Not a forecast, signal, or trading recommendation. Aggregated from public market sources. Freshness depends on the last successful background poll.","publicBaseUrl":"https://pjm-nowcast-production.up.railway.app","tags":["pjm","lmp","load","spread","electricity"],"jobTags":["mark","realized_vol","regime","spreads","asof","spread_jump"],"iconUrl":"https://pjm-nowcast-production.up.railway.app/favicon.ico","timezone":"America/New_York","networks":["solana","base"],"facilitators":{"payai":true,"cdp":true,"base":"cdp","solana":"payai","polygon":"payai"},"prices":{"POST /v1/nowcast/latest":"$0.02","POST /v1/nowcast/history":"$0.10","POST /v1/nowcast/history/extended":"$0.25","POST /v1/spread/probability-card":"0.25"},"mcp":{"enabled":true,"path":"/mcp","url":"https://pjm-nowcast-production.up.railway.app/mcp","aliasPath":"/api/mcp","aliasUrl":"https://pjm-nowcast-production.up.railway.app/api/mcp","serverCard":"https://pjm-nowcast-production.up.railway.app/.well-known/mcp/server-card.json","transport":"streamable-http","protocolVersion":"2024-11-05","accept":"application/json, text/event-stream","curl":"curl -sS -H 'Accept: application/json, text/event-stream' -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{}}' https://pjm-nowcast-production.up.railway.app/mcp"},"staleness":{"asOf":"Observation clock of the latest stored sample (America/New_York).","polledAt":"Wall time the background poller wrote that sample.","ageSeconds":"Seconds since polledAt.","maxAgeSeconds":10800,"stale":"true when ageSeconds > maxAgeSeconds. Payload is still returned."},"retentionDays":30,"endpoints":[{"tier":"L0","method":"GET","path":"/health","price":"free","description":"Process, store, and poll freshness. No market fetch."},{"tier":"L0","method":"GET","path":"/ready","price":"free","description":"Payment-rails readiness. Railway healthcheck. 503 until CDP probe PASS."},{"tier":"L0","method":"GET","path":"/","price":"free","description":"This service card."},{"tier":"L0","method":"GET","path":"/v1/demo/sample","price":"free","description":"Unpaid synthetic fixture for schema inspection only. Not live PJM and not a nowcast. Paid routes are POST /v1/nowcast/*."},{"tier":"L0","method":"GET","path":"/v1/capabilities","price":"free","description":"Machine matrix: windows, zones, fields, networks, prices."},{"tier":"L0","method":"GET","path":"/v1/nowcast/weather-summary","price":"free","description":"Zone weather sensitivities, latest residual, uncertainty band."},{"tier":"L0","method":"GET","path":"/openapi.json","price":"free","description":"OpenAPI 3 document. Free routes use security: []. Paid nowcast POSTs include x-payment-info and 402."},{"tier":"L0","method":"GET","path":"/swagger.json","price":"free","description":"Alias of /openapi.json."},{"tier":"L0","method":"GET","path":"/skill.md","price":"free","description":"Short agent skill card (also /SKILL.md)."},{"tier":"L0","method":"GET","path":"/llms.txt","price":"free","description":"Plain-text discovery index (also /llm.txt, /.well-known/llms.txt)."},{"tier":"L0","method":"POST","path":"/mcp","price":"free","description":"Streamable HTTP MCP JSON-RPC. tools/list is free. Paid nowcast tools return paymentStatus=required without x402. Alias: POST /api/mcp."},{"tier":"L0","method":"GET","path":"/.well-known/mcp/server-card.json","price":"free","description":"MCP server card: transport, tools, x402 prices."},{"tier":"L0","method":"GET","path":"/.well-known/x402","price":"free","description":"x402 well-known catalog (also /.well-known/x402.json)."},{"tier":"L0","method":"GET","path":"/.well-known/agent.json","price":"free","description":"Agent card: name, paid tools, networks, facilitator."},{"tier":"L0","method":"GET","path":"/.well-known/x402-resources","price":"free","description":"Machine list of paid resources (method, path, price, networks)."},{"tier":"L0","method":"GET","path":"/robots.txt","price":"free","description":"Allows free discovery paths; declares Sitemap."},{"tier":"L0","method":"GET","path":"/sitemap.xml","price":"free","description":"XML sitemap of public docs and discovery pages."},{"tier":"L0","method":"GET","path":"/privacy","price":"free","description":"Privacy summary for crawlers and humans."},{"tier":"L0","method":"GET","path":"/support","price":"free","description":"Support and integrator contact pointers."},{"tier":"L0","method":"GET","path":"/x402-resources","price":"free","description":"Alias of /.well-known/x402-resources."},{"tier":"L1","method":"POST","path":"/v1/nowcast/latest","price":"$0.02","description":"Latest PJM RTO LMP, zonal spreads, RTO load, and nested regime snapshot","exampleRequest":{"families":["rto_lmp","zonal_spread","rto_load"]},"inputSchema":{"type":"object","properties":{"families":{"type":"array","description":"Optional subset of rto_lmp, zonal_spread, rto_load. Default: all three.","items":{"type":"string","enum":["rto_lmp","zonal_spread","rto_load"]},"example":["rto_lmp","zonal_spread","rto_load"]}},"additionalProperties":false}},{"tier":"L2","method":"POST","path":"/v1/nowcast/history","price":"$0.10","description":"1–72h PJM RTO LMP, zonal spread, and load history","exampleRequest":{"families":["rto_lmp"],"windowHours":24},"inputSchema":{"type":"object","properties":{"families":{"type":"array","description":"Optional subset of rto_lmp, zonal_spread, rto_load. Default: all three.","items":{"type":"string","enum":["rto_lmp","zonal_spread","rto_load"]},"example":["rto_lmp","zonal_spread","rto_load"]},"windowHours":{"type":"integer","description":"Trailing window in hours. Default 24. L2 max 72.","minimum":1,"maximum":72,"default":24,"example":24}},"additionalProperties":false}},{"tier":"L3","method":"POST","path":"/v1/nowcast/history/extended","price":"$0.25","description":"Extended PJM history within the retention window","exampleRequest":{"families":["rto_load"],"windowHours":168,"resolution":"hourly","compare":"prior_period"},"inputSchema":{"type":"object","properties":{"families":{"type":"array","description":"Optional subset of rto_lmp, zonal_spread, rto_load. Default: all three.","items":{"type":"string","enum":["rto_lmp","zonal_spread","rto_load"]},"example":["rto_lmp","zonal_spread","rto_load"]},"windowHours":{"type":"integer","description":"Trailing window in hours. Default 168, capped by retention.","minimum":1,"default":168,"example":168},"resolution":{"type":"string","description":"native = one point per poll; hourly = mean per clock hour.","enum":["native","hourly"],"default":"native"},"compare":{"type":"string","description":"If prior_period, include the equal-length window immediately before.","enum":["none","prior_period"],"default":"none"}},"additionalProperties":false}},{"tier":"L1","method":"POST","path":"/v1/nowcast/regime","price":"$0.02","description":"Proprietary latent-state snapshot with asOf and ageSeconds","exampleRequest":{}},{"tier":"L1","method":"POST","path":"/v1/nowcast/spreads","price":"$0.02","description":"Zone-level LMP spread table for the latest print","exampleRequest":{}},{"tier":"L1","method":"POST","path":"/v1/nowcast/asof","price":"$0.02","description":"Descriptive snapshot pinned to a historical asOf","exampleRequest":{"asOf":"2026-10-09T18:00:00-04:00"},"inputSchema":{"type":"object","properties":{"asOf":{"type":"string","description":"ISO-8601 observation clock with offset. Required. No interpolation.","format":"date-time","example":"2026-10-09T18:00:00-04:00"}},"required":["asOf"]}},{"tier":"L2","method":"POST","path":"/v1/nowcast/snapshots","price":"$0.10","description":"Append-only /latest snapshots by EPT hour","exampleRequest":{"from":"2026-10-09T00:00:00-04:00","to":"2026-10-10T00:00:00-04:00"},"inputSchema":{"type":"object","properties":{"from":{"type":"string","description":"ISO-8601 start with offset (inclusive). Capped at 90-day lookback.","format":"date-time","example":"2026-10-09T00:00:00-04:00"},"to":{"type":"string","description":"ISO-8601 end with offset (exclusive).","format":"date-time","example":"2026-10-10T00:00:00-04:00"}}}},{"tier":"weather_sensitivity","method":"POST","path":"/v1/nowcast/weather-sensitivity","price":"0.10","description":"Weather sensitivity series, bands, and degree-day path","exampleRequest":{},"inputSchema":{"type":"object","properties":{"zone":{"type":"string","description":"Optional zone: RTO, BGE, PEPCO, DOM, PSEG, or JCPL. Omit for all six.","example":"RTO"}}}},{"tier":"spread_card","method":"POST","path":"/v1/spread/probability-card","price":"0.25","description":"On-peak zonal spread jump probability card","exampleRequest":{"lookbackDays":5},"inputSchema":{"type":"object","properties":{"lookbackDays":{"type":"integer","description":"Trailing on-peak EPT weekdays (skip weekends and NERC holidays). Default 5, max 30.","minimum":1,"maximum":30,"default":5,"example":5},"asOf":{"type":"string","description":"Optional ISO-8601 sample end. Default: now.","format":"date-time"}},"additionalProperties":false},"tags":["PJM zonal spread jump probability","empirical probability card","evening congestion bar"],"whenToUse":"next on-peak day or trailing congestion-season check","whenNotToUse":"month-ahead, season-ahead, Black vol, a price forecast","exampleResponse":{"sample":{"tag":"high-congestion-season","dayCount":5},"K":12.4,"hitRate":0.4,"avgPayoff":1.8}}]}