quickstart-resources/weather-server-python
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Alex Akimov 9395583c49
Improve all readmes (#188)
* Improve all readmes

* Address some of the comments
2026-08-27 20:32:29 -07:00
..
.python-version First commit 2024-12-11 14:47:06 -05:00
pyproject.toml Add structured content to the Python weather server and client and update to v2 (#164) 2026-08-09 14:46:03 +02:00
README.md Improve all readmes (#188) 2026-08-27 20:32:29 -07:00
uv.lock Add structured content to the Python weather server and client and update to v2 (#164) 2026-08-09 14:46:03 +02:00
weather.py Add structured content to the Python weather server and client and update to v2 (#164) 2026-08-09 14:46:03 +02: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.