Skip to main content
Glama
omeirhaeghe
by omeirhaeghe
README.md
<div align="center">

# โ˜€๏ธ Eighty & Sunny

**A colorful, weather-reactive MCP app.** Rich weather widgets that render right
inside your MCP host โ€” backed by [Open-Meteo](https://open-meteo.com), with
**no API key required**.

![Python](https://img.shields.io/badge/Python-3.11+-3776AB?logo=python&logoColor=white)
![MCP App](https://img.shields.io/badge/MCP-Apps-7C3AED)
![Open-Meteo](https://img.shields.io/badge/Open--Meteo-no%20API%20key-22C55E)
![Deploy](https://img.shields.io/badge/Deploy-Render%20%7C%20Docker-0EA5E9)

</div>

---

The background reacts to **two things at once** โ€” the time of day and the
weather. The sky palette follows each city's real sunrise/sunset (๐ŸŒ… dawn glows
peach, โ˜€๏ธ day is blue-and-gold, ๐ŸŒ† dusk turns purple-orange, ๐ŸŒ™ night dims to
indigo), and the weather tints it on top (๐ŸŒง๏ธ rain cools it blue, โ„๏ธ snow turns
icy, โ›ˆ๏ธ storms go deep purple, โ˜๏ธ overcast mutes to grey). It cross-fades when
you switch cities.

## โœจ Widgets

| Tool | Shows |
|------|-------|
| `show_weather` | Current-conditions card โ€” big temp, animated icon, feels-like, today's high/low, 6-stat grid |
| `show_weather_forecast` | 7-day grid with icons, precip chance and highโ†’low range bars |
| `show_weather_hourly` | Next-24h strip with an SVG temperature curve |
| `show_weather_dashboard` | Everything at once โ€” current + hourly + 7-day + extra stats |
| `get_weather` | Plain JSON (current + hourly + daily), no widget |

Every widget has city **chips** to switch locations instantly and a live
**ยฐF / ยฐC** toggle.

## ๐Ÿš€ Run it

```bash
uv sync
uv run python server/server.py        # โ†’ http://localhost:8778/mcp
```

Point your MCP host at `http://localhost:8778/mcp`. No key, no signup.

## โš™๏ธ Configure (all optional)

| Env var | Default | Meaning |
|---------|---------|---------|
| `WEATHER_CITIES` | `San Francisco,New York,London,Tokyo,Sydney,Paris` | The city chips |
| `WEATHER_UNITS` | `imperial` | Default units (`imperial` / `metric`) |
| `WEATHER_CACHE_TTL` | `600` | Forecast cache seconds (`0` disables) |
| `WEATHER_PREFETCH` | _off_ | `all` = fetch every city up front |

> One tool call fetches only the **active** city (โ‰ค2 requests) and caches it, so
> you stay well under Open-Meteo's free rate limit. Other chips warm from cache.

## โ˜๏ธ Deploy

**Render** โ€” push to GitHub, then **New โ†’ Blueprint** (uses the bundled
`render.yaml`). No env vars needed.

**Docker**
```bash
docker build -t es-weather-mcp . && docker run -p 8080:8080 es-weather-mcp
```

**Azure Container Apps** โ€” one command via the bundled Bicep (`infra/`) +
`azure.yaml`:
```bash
azd up        # provision + build + deploy  โ†’  prints the /mcp URL
```
No secrets required; tweak cities/units in the Azure dashboard or via
`azd env set WEATHER_UNITS metric`.

---

<div align="center">

Weather by [Open-Meteo](https://open-meteo.com) ยท Built as an
[MCP App](https://modelcontextprotocol.io)

`#MCP` `#ModelContextProtocol` `#Weather` `#OpenMeteo` `#WeatherApp`
`#Python` `#FastMCP` `#Claude` `#AIagents` `#OpenSource`

</div>