Skip to main content
Glama
Weather MCP Agent

Weather MCP Agent

by yehyaabk

Weather MCP Agent

Introduction

This project was built by Yehya Abou Khechfe.

The project is a Weather MCP Agent that retrieves current weather conditions and forecasts for any city, using the OpenWeatherMap API.

The MCP server exposes weather tools that can be consumed in multiple ways:

Related MCP server: OpenWeatherMap_MCP

Project Structure

wheather-mcp-agent/
├── ollama_weather_mcp/
│   ├── ollama_mcp_client.py     # Interactive client powered by Ollama
│   └── ollama_mcp_server.py     # MCP server extended with a prompt for Ollama
├── weather_mcp/
│   ├── __init__.py
│   ├── mcp_client.py            # Simple client (no LLM) for testing the server
│   └── mcp_server.py            # Core MCP server exposing the weather tools
├── .env                         # Environment variables (OpenWeatherMap API key)
├── main.py
├── pyproject.toml
└── README.md

Prerequisites

  • Python 3.10+

  • uv — used as the package and project manager

  • Ollama installed and running locally, with a pulled model (e.g. llama3)

  • mcp[cli] — the MCP Python SDK

  • httpx — for async HTTP requests to the OpenWeatherMap API

  • python-dotenv — for loading environment variables from .env

  • An OpenWeatherMap API key — get one at openweathermap.org/api

Installing dependencies with uv

uv sync

Setting up your .env file

Create a .env file at the project root:

OPENWEATHER_API_KEY=your_api_key_here

Connecting to Claude Desktop

To use this MCP server with Claude Desktop, add it to your Claude configuration file (claude_desktop_config.json):

{
  "mcpServers": {
    "weather": {
      "command": "uv",
      "args": ["run", "--directory", "C:\\path\\to\\wheather-mcp-agent", "weather_mcp/mcp_server.py"]
    }
  }
}

Restart Claude Desktop after saving the configuration — the weather tools should then appear as available tools in a new conversation.

Running the Ollama-powered client

uv run .\ollama_weather_mcp\ollama_mcp_client.py

Example session

[INFO] Server-client connection initialized
Weather Assistant — ask about current conditions or the forecast for any city.
You can also ask general questions.
Type 'q', 'exit', or 'quit' to leave.
You: what is the current weather in paris
[INFO] Requesting Ollama to extract tool and arguments...
Current weather in Paris, FR: clear sky, 32.79°C (feels like 31.48°C), ranging from 32.3°C to 35.03°C, with 28% humidity.
You: and tomorrow ?
[INFO] Requesting Ollama to extract tool and arguments...
--------------------
Weather Forecast in Paris, FR
2026-07-29 12:00:00 — 33.5°C, clear sky
2026-07-29 15:00:00 — 35.88°C, clear sky
2026-07-29 18:00:00 — 37.16°C, clear sky
2026-07-29 21:00:00 — 30.5°C, clear sky
2026-07-30 00:00:00 — 25.28°C, clear sky
2026-07-30 03:00:00 — 22.37°C, scattered clouds
2026-07-30 06:00:00 — 21.97°C, broken clouds
2026-07-30 09:00:00 — 24.71°C, overcast clouds
2026-07-30 12:00:00 — 28.47°C, overcast clouds
2026-07-30 15:00:00 — 33.05°C, clear sky
--------------------
You: what is the capital of lebanon
[INFO] Requesting Ollama to extract tool and arguments...
[INFO] Requesting Ollama to answer a general question ...
Answer: The capital of Lebanon is Beirut (بيروت).
You:

Running the simple test client (no LLM)

Useful for testing the MCP server's tools directly, without going through an LLM:

uv run .\weather_mcp\mcp_client.py

Available Tools

Tool

Description

fetch_current_weather

Fetches the current weather conditions for a given city.

fetch_weather_forecast

Fetches the weather forecast (3-hour intervals) for a given city.

Available Tools

2 tools
fetch_current_weatherA

Fetch the current weather conditions for a given city.

Args: city (str): Name of the city to fetch weather data for.

Returns: dict[str, Any]: A dictionary containing the city, country, temperature, feels-like temperature, min/max temperature, humidity, and weather description. Returns a dictionary with an "error" key if the request fails or the data cannot be retrieved.

Inputs: city (required). Returns: object

fetch_weather_forecastA

Fetch the weather forecast for a given city.

Args: city (str): Name of the city to fetch forecast data for.

Returns: dict[str, Any]: A dictionary containing the city, country, and a list of forecast entries (temperature, datetime, and description) at 3-hour intervals. Returns a dictionary with an "error" key if the request fails or the data cannot be retrieved.

Inputs: city (required). Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 2 tools

    Disambiguation5/5

    The two tools are clearly distinct: one provides current conditions, the other provides a forecast. There is no overlap or ambiguity between them.

    Naming Consistency5/5

    Both tool names follow a consistent 'fetch_' + noun pattern, with names fetch_current_weather and fetch_weather_forecast. The naming is predictable and uniform.

    Tool Count3/5

    With only 2 tools, the set is on the thin side for a weather server, though it covers the core current and forecast needs. It feels slightly minimal but not inadequate.

    Completeness4/5

    The server covers the two most essential weather operations: current conditions and forecasts. Notable gaps include historical weather data and alerts, but these are optional extras rather than essential missing functionality.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides real-time weather data, forecasts, and historical weather information from OpenWeatherMap API for Claude Desktop, enabling natural language queries about current conditions, forecasts, air quality, and weather alerts worldwide.
      11
      MIT