quickstart-resources/weather-server-python
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-15 15:13:25 -07:00
..
.python-version First commit 2024-12-11 14:47:06 -05:00
pyproject.toml Upgrade Python libraries to mcp 2.2.0, and bump others as well (#197) 2026-09-15 15:13:25 -07:00
README.md Improve all readmes (#188) 2026-08-27 20:32:29 -07:00
uv.lock Upgrade Python libraries to mcp 2.2.0, and bump others as well (#197) 2026-09-15 15:13:25 -07:00
weather.py Upgrade Python libraries to mcp 2.2.0, and bump others as well (#197) 2026-09-15 15:13:25 -07:00

A Simple MCP Weather Server written in Python

A minimal MCP server that exposes US weather data from the National Weather Service API as two tools:

  • get_forecast – get the forecast for a location (takes latitude and longitude)
  • get_alerts – get active weather alerts for a US state (takes a two-letter state code)

This example accompanies the Build an MCP server tutorial.

Prerequisites

  • Python 3.10+
  • uv

Run the server

uv run weather.py

uv run creates the virtual environment and installs dependencies on first use.

The server communicates over stdio, so running it directly just waits for a client on stdin. To see it in action, launch it from one of the client examples in this repository, for example:

cd ../mcp-client-python
uv run client.py ../weather-server-python/weather.py

Structured content

Both tools declare an output schema and return structured_content. get_forecast returns an object; get_alerts returns a top-level JSON array, which protocol revision 2026-07-28 is the first to allow — see Structured Content in the spec.

Alerts is a RootModel[list[Alert]] rather than a plain list[Alert] because the SDK wraps non-object return types as {"result": ...}; a RootModel is taken as the schema exactly as written. See Structured Output in the SDK docs.

Note that an array-rooted schema requires a 2026-07-28 client. This SDK does not project it down for older ones — it raises instead.