# MSN Weather API

> MSN Weather returns current conditions and forecasts for a location, available as a workflow and API.

MSN Weather returns current conditions, temperatures, air quality, active alerts, and sun times for a city, address, or ZIP code. Get forecast returns daily forecasts for up to 10 days and, optionally, hourly forecasts for the next 24 hours; it needs a city, address, or ZIP code.

- Page: https://fous.com/tools/msn-weather
- Handle: `@msn-weather`
- Category: [Weather](https://fous.com/tools/category/weather)
- Source website: https://msn.com/en-us/weather
- Last verified: Sep 30, 2026

## Methods

### Get current weather

Operation `get_current_weather`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get current MSN Weather conditions for a city, address or ZIP code. Place matches are approximate for broad or ambiguous searches; some air-quality readings or sun times may be unavailable.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `units` | string | no | `"celsius"` | Temperature units, for example fahrenheit. Defaults to fahrenheit in the US and celsius elsewhere. |
| `location` | string | yes | `"98101"` | City, address or ZIP code, for example Seattle, 98101, or Paris, France. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "location"
  ],
  "properties": {
    "units": {
      "enum": [
        "fahrenheit",
        "celsius"
      ],
      "type": "string",
      "description": "Temperature units, for example fahrenheit. Defaults to fahrenheit in the US and celsius elsewhere.",
      "examples": [
        "celsius"
      ]
    },
    "location": {
      "type": "string",
      "description": "City, address or ZIP code, for example Seattle, 98101, or Paris, France.",
      "examples": [
        "98101",
        "Seattle",
        "Paris, France"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "location": "98101"
    },
    {
      "location": "Seattle"
    },
    {
      "location": "Paris, France"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `aqi` | object or null |  | Air-quality index when shown, otherwise a null value. |
| `aqi.unit` | string | `"AQI"` |  |
| `aqi.value` | number or null | `42` |  |
| `place` | string | `"Seattle, WA"` | Matched place name. |
| `alerts` | array |  | Active weather alerts, if any. |
| `alerts[].text` | string or null | `"Prepare for possible flooding. Pay close attention to weather forecast and alerts."` |  |
| `alerts[].title` | string | `"Coastal Flood - Advisory"` |  |
| `sunset` | string or null | `"2026-09-28T18:55:02-07:00"` | Local sunset time in ISO 8601 with UTC offset. |
| `sunrise` | string or null | `"2026-09-28T07:03:59-07:00"` | Local sunrise time in ISO 8601 with UTC offset. |
| `humidity` | object or null |  | Relative humidity as a percent. |
| `humidity.unit` | string | `"%"` |  |
| `humidity.value` | number or null | `72` |  |
| `latitude` | number | `47.6107389` | Matched latitude. |
| `uv_index` | object or null |  | UV index, a unitless index. |
| `uv_index.unit` | string | `"index"` |  |
| `uv_index.value` | number or null | `1` |  |
| `longitude` | number | `-122.3361845` | Matched longitude. |
| `conditions` | string or null | `"Mostly cloudy"` | Current weather conditions in words. |
| `feels_like` | object or null |  | Feels-like temperature with unit. |
| `feels_like.unit` | string | `"°F"` |  |
| `feels_like.value` | number or null | `54` |  |
| `wind_speed` | object or null |  | Wind speed with unit. |
| `wind_speed.unit` | string | `"mph"` |  |
| `wind_speed.value` | number or null | `10` |  |
| `air_quality` | string or null | `"Good air quality"` | Air quality in words. |
| `temperature` | object or null |  | Current temperature with unit. |
| `temperature.unit` | string | `"°F"` |  |
| `temperature.value` | number or null | `62` |  |
| `weather_url` | string | `"https://www.msn.com/en-us/weather/forecast/in-47.6107389,-122.3361845?loc=eyJ4IjoiLTEyMi4zMzYxODQ1IiwieSI6IjQ3LjYxMDczO` | Link to the place on MSN Weather. |
| `wind_direction` | string or null | `"SSW"` | Compass direction of the wind. |
| `observation_time` | string or null | `"2026-09-28T18:42:28-07:00"` | Local observation time as ISO 8601 with UTC offset. |

**Example input**

```json
{
  "location": "98101"
}
```

**Example output**

```json
{
  "aqi": {
    "unit": "AQI",
    "value": 42
  },
  "place": "Seattle, WA",
  "alerts": [],
  "sunset": "2026-09-28T18:55:02-07:00",
  "sunrise": "2026-09-28T07:03:59-07:00",
  "humidity": {
    "unit": "%",
    "value": 72
  },
  "latitude": 47.6107389,
  "uv_index": {
    "unit": "index",
    "value": 1
  },
  "longitude": -122.3361845,
  "conditions": "Mostly cloudy",
  "feels_like": {
    "unit": "°F",
    "value": 54
  },
  "wind_speed": {
    "unit": "mph",
    "value": 10
  },
  "air_quality": "Good air quality",
  "temperature": {
    "unit": "°F",
    "value": 62
  },
  "weather_url": "https://www.msn.com/en-us/weather/forecast/in-47.6107389,-122.3361845?loc=eyJ4IjoiLTEyMi4zMzYxODQ1IiwieSI6IjQ3LjYxMDczODkifQ%3D%3D&weadegreetype=F",
  "wind_direction": "SSW",
  "observation_time": "2026-09-28T18:42:28-07:00"
}
```

### Get forecast

Operation `get_forecast`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get up to 10 days of MSN Weather forecasts for a city, address, or ZIP code, with optional hourly forecasts for the next 24 hours. Temperatures use Fahrenheit in the US and Celsius elsewhere unless specified.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `days` | integer | no | `3` | Number of forecast days, such as 5. |
| `units` | string | no | `"celsius"` | Temperature units, such as celsius. Defaults to fahrenheit in the US and celsius elsewhere. |
| `location` | string | yes | `"10001"` | City, address, or ZIP code, such as Atlanta or 10001. |
| `include_hourly` | boolean | no | `true` | Include the next 24 hourly forecasts, such as true. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "location"
  ],
  "properties": {
    "days": {
      "type": "integer",
      "default": 10,
      "maximum": 10,
      "minimum": 1,
      "description": "Number of forecast days, such as 5.",
      "examples": [
        3,
        5,
        2
      ]
    },
    "units": {
      "enum": [
        "fahrenheit",
        "celsius"
      ],
      "type": "string",
      "description": "Temperature units, such as celsius. Defaults to fahrenheit in the US and celsius elsewhere.",
      "examples": [
        "celsius"
      ]
    },
    "location": {
      "type": "string",
      "minLength": 1,
      "description": "City, address, or ZIP code, such as Atlanta or 10001.",
      "examples": [
        "10001",
        "Atlanta",
        "Paris, France"
      ]
    },
    "include_hourly": {
      "type": "boolean",
      "default": false,
      "description": "Include the next 24 hourly forecasts, such as true.",
      "examples": [
        true
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "days": 3,
      "location": "10001"
    },
    {
      "days": 5,
      "location": "Atlanta",
      "include_hourly": true
    },
    {
      "days": 2,
      "units": "celsius",
      "location": "Paris, France",
      "include_hourly": true
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `daily` | array |  |  |
| `daily[].low` | number or null | `58` |  |
| `daily[].date` | string | `"2026-09-28"` |  |
| `daily[].high` | number or null | `60` |  |
| `daily[].weekday` | string | `"Monday"` |  |
| `daily[].page_link` | string | `"https://www.msn.com/en-us/weather/forecast/in-New-York,NY?loc=eyJsIjoiTmV3IFlvcmsiLCJyIjoiTlkiLCJjIjoiVW5pdGVkIFN0YXRlc` |  |
| `daily[].conditions` | string or null | `"Light rain showers"` |  |
| `daily[].wind_speed` | number or null | `4` |  |
| `daily[].wind_direction` | string or null | `"N"` |  |
| `daily[].wind_speed_unit` | string | `"mph"` |  |
| `daily[].chance_of_precipitation_percent` | number or null | `50` |  |
| `hourly` | array |  |  |
| `hourly[].time` | string | `"2026-09-28T22:00:00.000-04:00"` |  |
| `hourly[].page_link` | string | `"https://www.msn.com/en-us/weather/forecast/in-Atlanta,Ga.?loc=eyJsIjoiQXRsYW50YSIsInIiOiJHYS4iLCJyMiI6IkZ1bHRvbiBDb3Vud` |  |
| `hourly[].conditions` | string or null | `"Clear"` |  |
| `hourly[].temperature` | number or null | `69` |  |
| `hourly[].chance_of_precipitation_percent` | number or null | `0` |  |
| `latitude` | number | `40.7483` |  |
| `longitude` | number | `-73.9941` |  |
| `page_link` | string | `"https://www.msn.com/en-us/weather/forecast/in-New%20York,NY?loc=eyJsIjoiTmV3IFlvcmsiLCJyIjoiTlkiLCJyMiI6IiIsImMiOiJVbml` |  |
| `matched_place` | string | `"10001 New York, NY"` |  |
| `temperature_unit` | string | `"fahrenheit"` |  |

**Example input**

```json
{
  "days": 3,
  "location": "10001"
}
```

**Example output**

```json
{
  "daily": [
    {
      "low": 58,
      "date": "2026-09-28",
      "high": 60,
      "weekday": "Monday",
      "page_link": "https://www.msn.com/en-us/weather/forecast/in-New-York,NY?loc=eyJsIjoiTmV3IFlvcmsiLCJyIjoiTlkiLCJjIjoiVW5pdGVkIFN0YXRlcyIsImkiOiJVUyIsImciOiJlbi11cyIsIngiOiItNzMuOTk0MSIsInkiOiI0MC43NDgzIn0%3D&weadegr…",
      "conditions": "Light rain showers",
      "wind_speed": 4,
      "wind_direction": "N",
      "wind_speed_unit": "mph",
      "chance_of_precipitation_percent": 50
    },
    {
      "low": 59,
      "date": "2026-09-29",
      "high": 68,
      "weekday": "Tuesday",
      "page_link": "https://www.msn.com/en-us/weather/forecast/in-New-York,NY?loc=eyJsIjoiTmV3IFlvcmsiLCJyIjoiTlkiLCJjIjoiVW5pdGVkIFN0YXRlcyIsImkiOiJVUyIsImciOiJlbi11cyIsIngiOiItNzMuOTk0MSIsInkiOiI0MC43NDgzIn0%3D&weadegr…",
      "conditions": "Mostly cloudy",
      "wind_speed": 2,
      "wind_direction": "NW",
      "wind_speed_unit": "mph",
      "chance_of_precipitation_percent": 0
    },
    {
      "low": 63,
      "date": "2026-09-30",
      "high": 75,
      "weekday": "Wednesday",
      "page_link": "https://www.msn.com/en-us/weather/forecast/in-New-York,NY?loc=eyJsIjoiTmV3IFlvcmsiLCJyIjoiTlkiLCJjIjoiVW5pdGVkIFN0YXRlcyIsImkiOiJVUyIsImciOiJlbi11cyIsIngiOiItNzMuOTk0MSIsInkiOiI0MC43NDgzIn0%3D&weadegr…",
      "conditions": "Mostly sunny",
      "wind_speed": 2,
      "wind_direction": "WSW",
      "wind_speed_unit": "mph",
      "chance_of_precipitation_percent": 1
    }
  ],
  "hourly": [],
  "latitude": 40.7483,
  "longitude": -73.9941,
  "page_link": "https://www.msn.com/en-us/weather/forecast/in-New%20York,NY?loc=eyJsIjoiTmV3IFlvcmsiLCJyIjoiTlkiLCJyMiI6IiIsImMiOiJVbml0ZWQgU3RhdGVzIiwiaSI6IlVTIiwiZyI6ImVuLXVzIiwieCI6Ii03My45OTQxIiwieSI6IjQwLjc0ODMi…",
  "matched_place": "10001 New York, NY",
  "temperature_unit": "fahrenheit"
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@msn-weather",
  "visibility": "public",
  "operation": "get_current_weather",
  "version": 1,
  "input": {
    "location": "98101"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@msn-weather\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_current_weather\",\n  \"version\": 1,\n  \"input\": {\n    \"location\": \"98101\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@msn-weather",
  "visibility": "public",
  "operation": "get_current_weather",
  "version": 1,
  "input": {
    "location": "98101"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/msn-weather`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `get_current_weather`: Get current weather. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `get_forecast`: Get forecast. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-msn-weather https://api.fous.com/mcp/tools/msn-weather --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Check current conditions before planning outdoor work
- Compare daily forecasts across locations
- Review hourly forecasts for the next 24 hours
- Check active weather alerts for a location
- Track forecast temperatures and precipitation chances

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this MSN Weather tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a MSN Weather account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from msn.com when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 30, 2026.

### What is the current temperature in a location?

Use Get current weather with a city, address, or ZIP code to return the current temperature and temperature unit.

### What is the forecast for the next few days?

Use Get forecast with a location and number of days to return daily conditions, high and low temperatures, and precipitation chances.

### Can I get hourly weather forecasts?

Yes. Use Get forecast with hourly forecasts enabled to include hourly forecasts for the next 24 hours.

## Related

- [AccuWeather API](https://fous.com/tools/accuweather.md): AccuWeather provides current conditions and RealFeel, plus up to 15 available daily forecasts; shorter public forecasts may return fewer days.
- [The Weather Channel API](https://fous.com/tools/the-weather-channel.md): The Weather Channel returns current conditions, today’s high/low, up to 15 daily forecasts (sometimes fewer), 1–48 local hourly forecasts, and active severe weather alerts.
- [National Weather Service API](https://fous.com/tools/national-weather-service.md): National Weather Service provides U.S. day-and-night forecasts for seven days, hourly forecasts for up to 156 hours where available, active alerts, and latest nearby station observations.
- [IQAir API](https://fous.com/tools/iqair.md): City air quality readings and forecasts from IQAir.
- [Weather Underground API](https://fous.com/tools/weather-underground.md): Historical and current weather conditions from stations worldwide.
- [AirNow API](https://fous.com/tools/airnow.md): Current and forecast air quality for reporting areas in the United States and covered cities in Canada and Mexico.
- [Surfline API](https://fous.com/tools/surfline.md): Surf conditions and forecasts for surf spots.
- [NOAA Space Weather API](https://fous.com/tools/noaa-space-weather.md): NOAA Space Weather provides near-term aurora chances, current geomagnetic activity, a three-day Kp outlook, and NOAA alerts from the past 1–7 days.
- [All Weather tools](https://fous.com/tools/category/weather)
