MCP Weather Server
by moaaz01
README.md
# π€οΈ MCP Weather Server
> A production-ready **Model Context Protocol** weather server built with the official [Anthropic FastMCP Python SDK](https://github.com/modelcontextprotocol/python-sdk). Provides weather forecasts, alerts, and current conditions through a standardized AI-agent interface.
[](LICENSE)
[](https://www.python.org/downloads/)
[](https://pypi.org/project/mcp/)
---
## β¨ Features
- **π§ 2 Tools**: `get_alerts` (weather alerts by state) and `get_forecast` (5-day forecast by coordinates)
- **π 1 Resource**: `weather://{state}/current` β formatted current conditions
- **π¬ 1 Prompt**: `weather_assistant(state)` β guided weather analysis template
- **π Dual Transport**: stdio (local clients) and Streamable HTTP (remote clients)
- **πͺ΅ Structured Logging**: All server logs go to stderr (compatible with stdio transport)
- **π¦ No API Keys Required**: Uses realistic simulated weather data
- **π§ͺ Test Client Included**: Ready-to-run example client
---
## π Quick Start
### Option 1: pip
```bash
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python weather_server.py
```
### Option 2: uv (recommended)
```bash
uv venv
source .venv/bin/activate
uv add "mcp[cli]>=1.27,<2" httpx
python weather_server.py
```
### Option 3: Setup script
```bash
chmod +x setup.sh
./setup.sh
python weather_server.py
```
---
## π Usage
### stdio Transport (default)
```bash
python weather_server.py
```
The server listens on stdin/stdout, ready to connect to Claude Desktop, Cursor, or any MCP client.
### Streamable HTTP Transport
```bash
python weather_server.py --transport streamable-http --port 8000
```
Now available at `http://localhost:8000/mcp` for HTTP-based clients.
### Run the Test Client
```bash
# In one terminal:
python weather_server.py
# In another terminal:
source .venv/bin/activate
python client_example.py
```
---
## π οΈ Tools Reference
### `get_alerts(state: str) -> list[dict]`
Get active weather alerts for a US state.
| Parameter | Type | Description | Example |
|-----------|------|-------------|---------|
| `state` | `str` | 2-letter US state code | `"CA"`, `"TX"`, `"FL"` |
**Returns:** List of alerts with `type`, `severity`, and `area`.
### `get_forecast(latitude: float, longitude: float) -> list[dict]`
Get a 5-day weather forecast for coordinates.
| Parameter | Type | Description |
|-----------|------|-------------|
| `latitude` | `float` | Decimal degrees (-90 to 90) |
| `longitude` | `float` | Decimal degrees (-180 to 180) |
**Returns:** 5-day forecast with `date`, `temperature_f`, `condition`, `humidity_pct`, `wind_mph`.
---
## π Resources Reference
### `weather://{state}/current`
Returns formatted current weather conditions for a state as markdown.
---
## π¬ Prompts Reference
### `weather_assistant(state: str)`
Creates a weather analysis assistant prompt template.
| Parameter | Type | Description |
|-----------|------|-------------|
| `state` | `str` | 2-letter US state code |
---
## π Connecting to Clients
### Claude Desktop
Add to your `claude_desktop_config.json`:
```json
{
"mcpServers": {
"weather": {
"command": "python",
"args": ["/ABSOLUTE/PATH/TO/mcp-weather-server/weather_server.py"]
}
}
}
```
### Cursor
In Cursor Settings β Features β MCP Servers, add:
- **Name**: `weather`
- **Type**: `command`
- **Command**: `python /ABSOLUTE/PATH/TO/mcp-weather-server/weather_server.py`
### HTTP Client (Streamable HTTP)
```bash
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":"1","method":"tools/list","params":{}}'
```
---
## π Project Structure
```
mcp-weather-server/
βββ weather_server.py # Main server implementation
βββ client_example.py # Example MCP client
βββ requirements.txt # Python dependencies
βββ setup.sh # Automated setup script
βββ README.md # This file
βββ .gitignore
```
---
## π§ Architecture
```
βββββββββββββββ stdio/HTTP ββββββββββββββββββββ
β MCP Client β ββββββββββββββββΊ β Weather Server β
β (Claude, etc)β β (FastMCP) β
βββββββββββββββ ββββββββββββββββββββ
β
ββββββββ΄βββββββ
β Simulated β
β Weather Dataβ
βββββββββββββββ
```
---
## π License
MIT β see [LICENSE](LICENSE) for details.
## π Contributing
PRs welcome! Please ensure tools have proper type hints and docstrings.
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues