Weather MCP Server
# Weather MCP Server
A Python [Model Context Protocol](https://modelcontextprotocol.io/) server that gives an AI current weather and forecasts. It geocodes locations and reads forecast data from [Open-Meteo](https://open-meteo.com/), then optionally uses Groq to explain the result naturally.
## Requirements
- Python 3.11 or newer
- A Groq API key for AI-generated summaries
- Internet access for Open-Meteo and Groq requests
## Setup
PowerShell:
```powershell
py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
Copy-Item .env.example .env
```
Open `.env` and set `GROQ_API_KEY`. The server still works without the key, but it returns structured JSON instead of an AI summary.
## Run
### Browser UI
Start the user-facing weather chat:
```powershell
python -m weather_mcp_server.web
```
Then open <http://127.0.0.1:8000>. Ask questions such as “Will it rain in London tomorrow?” The browser sends the question to the web adapter, which invokes the same `get_weather` tool exposed by the MCP server.
Run the server directly:
```powershell
python -m weather_mcp_server.server
```
MCP clients can use the checked-in `.vscode/mcp.json` configuration. In VS Code, open this folder as the workspace, install the Python extension if prompted, and start the `weather-mcp-server` MCP server from the MCP controls.
The server exposes one tool:
- `get_weather(location, forecast_days=3)`: returns current conditions and 1-7 days of forecast data.
## Test
```powershell
python -m pytest
```
The tests mock Open-Meteo, so they do not require network access or a Groq key.
TDQS
Scored across 1 tool
Only one tool exists, so there is no possibility of confusion or overlap. The single tool's purpose is clearly defined and distinct by default.
The tool name uses a clear verb_noun pattern (get_weather) that aligns with common MCP naming conventions. With only one tool, there is no inconsistency to evaluate.
A single tool is too few for a weather server's apparent scope. A weather domain could reasonably include current conditions, alerts, historical data, or location search as separate tools, so this feels undersized.
The tool covers both current conditions and a multi-day forecast, which addresses the core weather use case. Minor gaps exist, such as no separate alerts or historical data tools, but these are not blocking for basic weather lookups.