Nephyr Weather
Weather signal intelligence for prediction markets.
Fetches 31-member GFS ensemble forecasts from Open-Meteo and compares model probabilities against live market prices on Polymarket and Kalshi to detect tradeable edges.
Install
pip install nephyr-weather
pip install "nephyr-weather[mcp]"
pip install "nephyr-weather[api]"
pip install "nephyr-weather[all]"
Quick start
import asyncio
from nephyr_weather import OpenMeteoClient, signal_from_forecast, MarketInfo, detect_edge
async def main():
async with OpenMeteoClient() as client:
forecast = await client.fetch_ensemble("NYC", "2026-03-29")
signal = signal_from_forecast(forecast, threshold_f=75.0, direction="above")
print(f"Model P(NYC high > 75°F): {signal.model_probability:.1%}")
market = MarketInfo(
platform="kalshi",
ticker="KXHIGHNY-26MAR29-T75",
city="NYC",
threshold_f=75.0,
direction="above",
market_price=0.55,
)
result = detect_edge(signal, market)
print(f"Edge: {result.edge:+.1%}, EV: {result.ev:.4f}, Tradeable: {result.is_tradeable}")
asyncio.run(main())
Supported cities
NYC, Chicago, Miami, Austin, LA, Denver, Boston, London, Seoul, Shanghai, Hong Kong, Atlanta
Modules
cities | City coordinates + name normalisation |
ensemble | Open-Meteo GFS client, temperature utils |
signals | Probability calculations from ensemble arrays |
markets | Polymarket + Kalshi weather market discovery |
edge | Edge detection, EV calculation |
types | Public dataclasses |
MCP server
nephyr-weather-mcp
Tools: get_weather_signals, get_ensemble_forecast, detect_edges, list_active_markets, get_city_info
REST API
uvicorn api.app:app --reload
Endpoints: POST /v1/signals, POST /v1/forecast, POST /v1/edges, GET /v1/markets, GET /v1/cities, GET /v1/health
Pricing
| Free | 10 signals/day (one city) |
| Paid | $49/month — all 12 cities, unlimited calls |
| Enterprise | $499/month — custom cities, SLA, dedicated support |
| Agent-to-agent | $0.01/signal |
License
MIT — CLM Studios