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