Skip to main content
Glama
Amann001

Weather MCP Server

by Amann001
README.md
# Weather MCP Server

A mini project demonstrating how to build and use a Model Context Protocol (MCP) server with Python.

## Features

- Weather Alerts Tool
- Weather Forecast Tool
- SSE Transport
- STDIO Transport
- MCP Client Integration
- Docker Support
- Async Python Implementation

## Project Structure

```
mcpcrashcourse/
│
├── server/
│   └── mcpserver/
│       ├── server.py
│       ├── client-sse.py
│       ├── client-stdio.py
│       ├── Dockerfile
│       └── requirements.txt
│
├── weather.py
├── weather.json
├── client.py
├── README.md
├── pyproject.toml
└── uv.lock
```

## Tools

### get_alerts

Returns active weather alerts for a US state.

Example:

```python
get_alerts("CA")
```

### get_forecast

Returns forecast information based on latitude and longitude.

Example:

```python
get_forecast(
    latitude=37.7749,
    longitude=-122.4194
)
```

## Transports

### STDIO

Used for local MCP communication.

### SSE

Used for remote communication through HTTP.

## Running the Server

### STDIO

```bash
uv run server/mcpserver/server.py
```

### SSE

Configure transport as:

```python
mcp.run(transport="sse")
```

Then:

```bash
uv run server/mcpserver/server.py
```

## Running Clients

### SSE Client

```bash
uv run server/mcpserver/client-sse.py
```

### STDIO Client

```bash
uv run server/mcpserver/client-stdio.py
```

## Docker

Build:

```bash
docker build -t weather-mcp .
```

Run:

```bash
docker run weather-mcp
```

## Technologies Used

- Python
- MCP
- FastMCP
- HTTPX
- AsyncIO
- Docker
- SSE
- STDIO

## Learning Outcomes

- Building MCP tools
- Creating MCP servers
- Working with MCP clients
- Using SSE transport
- Using STDIO transport
- Tool invocation
- Agent-tool communication
- Dockerizing MCP applications

TDQS

A3.5/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one retrieves alerts by state, the other provides forecasts by coordinates. There is no functional overlap or ambiguity.

Naming Consistency5/5

Both tools follow a consistent 'get_noun' pattern with snake_case, making the names predictable and easy to understand.

Tool Count4/5

With only two tools, the server is minimal but still covers two core weather functionalities. It feels slightly thin but is acceptable for a focused server.

Completeness3/5

The server covers alerts and forecasts but lacks current conditions, historical data, or other common weather endpoints. Notable gaps exist, but the core stated purpose is partially met.

Maintenance

ActivityInactive
ResponsivenessNo issues