Pane types / weather

weather

Conditions where the user is, now and for the next few hours.

A weather forecast card with conditions, UV, wind, and hourly data.

A rendered weather pane (weather-v1)
weather-v1
A rendered weather pane (weather-v2)
weather-v2
A rendered weather pane (weather-v3)
weather-v3

Variants

Set data.variant to one of: hero, data-brick, hourly. Picking the wrong one is the most common way a card comes out looking foreign.

  • Pick the variant by what you have: "hero" for one big temperature, "data-brick" when UV/wind/rain are the story, "hourly" when the next few hours matter.
  • For the "hourly" variant send 6–12 entries and mark the current one with isCurrent: true.

Fields in data

The envelope around data (publisher, label, expiresAt…) is the same on every type: see the envelope.

FieldTypeNotes
variant"hero" | "data-brick" | "hourly"optionalDesign variant to render.
tempnumberrequired
tempUnitstringoptional
tempLabelstringoptional
conditionstringrequired
descriptionstringoptional
rainChancePctnumberoptional
uvIndexnumberoptional
uvLabelstringoptional
windstringoptional
hourlyarray of objectsoptional2–24 items
hourly[].timestringrequired
hourly[].tempnumberrequired
hourly[].iconstringrequired
hourly[].isCurrentbooleanoptional

Craft

  • Pick the variant by what you have: "hero" for one big temperature, "data-brick" when UV/wind/rain are the story, "hourly" when the next few hours matter.
  • temp is a number and tempUnit is the symbol ("°C", "°F") — send both, or the card can't say which scale it means.
  • condition is two or three words ("Partly cloudy"); description is the one-line human read ("Cooler than yesterday, showers clearing by 4pm").
  • For the "hourly" variant send 6–12 entries and mark the current one with isCurrent: true.
  • uvLabel translates the number for people who don't read UV indices: 8 → "Very high".
  • wind is pre-formatted with direction and unit ("18 km/h SSE").
  • Weather expires faster than anything else here — set expiresAt a few hours out.

Avoid

  • Don't send a 7-day forecast — this card is about now; a week of data doesn't fit any variant.
  • Don't send temp as a string ("26°C"); the number and the unit are separate fields.
  • Don't use the hourly variant with two entries — it's built for a run of hours.

Examples

Complete payloads for POST /api/v1/feed/items or the MCP publish_pane tool.

The morning look-out-the-window card

{
  "type": "weather",
  "publisher": "Weather",
  "publisherInit": "W",
  "publisherColor": "#1A4FCC",
  "label": "Sydney · now",
  "data": {
    "variant": "hero",
    "temp": 26,
    "tempUnit": "°C",
    "tempLabel": "Feels like 28°",
    "condition": "Partly cloudy",
    "description": "Warm and humid, showers clearing by mid-afternoon.",
    "rainChancePct": 30,
    "uvIndex": 8,
    "uvLabel": "Very high",
    "wind": "18 km/h SSE"
  }
}

A heads-up where UV and wind are the actionable part

{
  "type": "weather",
  "publisher": "Weather",
  "publisherInit": "W",
  "publisherColor": "#F2C94C",
  "label": "Before you head out",
  "data": {
    "variant": "data-brick",
    "temp": 31,
    "tempUnit": "°C",
    "condition": "Sunny",
    "description": "UV peaks between 11am and 2pm — hat weather.",
    "rainChancePct": 5,
    "uvIndex": 11,
    "uvLabel": "Extreme",
    "wind": "9 km/h NE"
  }
}

The next few hours, for someone deciding when to go

{
  "type": "weather",
  "publisher": "Weather",
  "publisherInit": "W",
  "publisherColor": "#5C544A",
  "label": "Next 6 hours",
  "data": {
    "variant": "hourly",
    "temp": 19,
    "tempUnit": "°C",
    "condition": "Showers easing",
    "rainChancePct": 65,
    "wind": "24 km/h SW",
    "hourly": [
      {
        "time": "1pm",
        "temp": 19,
        "icon": "rain",
        "isCurrent": true
      },
      {
        "time": "2pm",
        "temp": 19,
        "icon": "rain"
      },
      {
        "time": "3pm",
        "temp": 20,
        "icon": "showers"
      },
      {
        "time": "4pm",
        "temp": 21,
        "icon": "partly-cloudy"
      },
      {
        "time": "5pm",
        "temp": 20,
        "icon": "partly-cloudy"
      },
      {
        "time": "6pm",
        "temp": 18,
        "icon": "clear"
      }
    ]
  }
}