Weather App

Weather App

By mindsightventures GitHub

Example MCP server implementation for weather data with testing and pre-commit setup

Overview

What is the Weather App?

The Weather App is a command-line and MCP-based application that provides current weather conditions, forecasts, and alerts for locations worldwide.

How to use the Weather App?

To use the Weather App, clone the repository, set up your environment with the OpenWeatherMap API key, and run the application using the provided scripts.

Key features of the Weather App?

  • Get current weather conditions for any location
  • Get daily and hourly weather forecasts
  • Receive weather alerts
  • Automatic location detection
  • Test API connection and check API key status

Use cases of the Weather App?

  1. Checking the weather before going out
  2. Planning outdoor activities based on weather forecasts
  3. Monitoring severe weather alerts in real-time

FAQ from the Weather App?

  • Can I use the Weather App for any location?

Yes! The app provides weather data for locations worldwide.

  • Do I need an API key to use the app?

Yes, you need to sign up for an API key from OpenWeatherMap.

  • Is the Weather App free to use?

Yes! The app is free to use, but you may need to check the API usage limits.

Content

Weather App

CI codecov

A command-line and MCP-based weather application that provides current weather conditions, forecasts, and alerts for locations worldwide.

Features

  • Get current weather conditions for any location
  • Get daily weather forecasts
  • Get hourly weather forecasts
  • Get weather alerts
  • Get weather by coordinates
  • Automatic location detection
  • Test API connection
  • Check API key and subscription status

Installation

Prerequisites

  • Python 3.12 or higher
  • uv package manager

Setup

  1. Clone this repository:

    git clone <repository-url>
    cd weather-app
    
  2. Create a .env file in the root directory with your OpenWeatherMap API key:

    OPENWEATHER_API_KEY=your_api_key_here
    

    You can get an API key from OpenWeatherMap.

  3. Run the installation script:

    ./scripts/install.sh
    

    For development setup, use:

    ./scripts/install.sh --dev
    

Usage

Run the weather app:

./scripts/run_weather.sh

This will start the MCP server with the following available tools:

  • get_current_weather: Get current weather conditions
  • get_forecast: Get daily weather forecast
  • get_hourly_forecast: Get hourly weather forecast
  • get_alerts: Get weather alerts
  • get_weather_by_coordinates: Get weather by coordinates
  • get_user_location: Get your current location
  • test_api_connection: Test the API connection
  • check_api_key_and_subscription: Check your API key and subscription

Development

Code Style and Linting

This project uses:

  • Black for code formatting
  • isort for import sorting
  • Ruff for linting
  • mypy for type checking

All of these tools are configured in the pyproject.toml file.

Pre-commit Hooks

We use pre-commit hooks to ensure code quality. After installing the development dependencies, the hooks are automatically set up.

To manually install the pre-commit hooks:

uv run pre-commit install

To run the pre-commit hooks manually:

uv run pre-commit run --all-files

Testing

Run the tests:

./scripts/run_tests.sh

Run with coverage:

./scripts/run_tests.sh --coverage

Run integration tests (requires API key):

./scripts/run_tests.sh --integration

Run integration tests with coverage:

./scripts/run_tests.sh --integration --coverage

Creating an MCP Server

To create your own MCP server using this project as a template:

  1. Install the project with development dependencies:

    ./scripts/install.sh --dev
    
  2. Create a new Python file with your MCP server implementation:

    import os
    from dotenv import load_dotenv
    from mcp.server.fastmcp import FastMCP
    
    # Load environment variables
    load_dotenv()
    
    # Initialize FastMCP server
    mcp = FastMCP("your-app-name")
    
    # Define your tools
    @mcp.tool
    async def your_tool(param1: str, param2: int) -> str:
        """Tool description."""
        # Your implementation here
        return "Result"
    
    # Run the server
    if __name__ == "__main__":
        mcp.run()
    
  3. Run your server:

    python your_server.py
    

License

This project is licensed under the MIT License - see the LICENSE file for details.

No tools information available.
No content found.