Skip to main content
Glama
README.md
# MCP
A Simple implementation of a command-line tool that provides access to US weather data through a client-server architecture using the Model Context Protocol (MCP) and Google's Gemini AI.
Built to practive and understand how MCP works.

## Overview

This project connects a Python client application with a weather data server, allowing users to query weather information using natural language. The server communicates with the National Weather Service API to retrieve weather alerts and forecasts.

## Features

- Query weather alerts for US states using state codes
- Get detailed weather forecasts for specific locations using latitude and longitude
- Natural language interface powered by Google's Gemini AI
- Client-server architecture using Model Context Protocol (MCP)

## Prerequisites

- Python 3.8+
- Node.js (if running JavaScript server)
- Google Gemini API key

## Installation

1. Clone the repository:
   ```
   git clone https://github.com/Abhinavexists/MCP_Server.git
   cd weather-tool
   ```

2. Install uv if you don't have it already:
   ```
   pip install uv
   ```

3. Create and activate a virtual environment:
   ```
   uv venv
   ```
   - On Windows: `.venv\Scripts\activate`
   - On macOS/Linux: `source .venv/bin/activate`

4. Install dependencies using uv (this project uses uv.lock and pyproject.toml):
   ```
   uv pip sync
   ```

3. Create a `.env` file in the project root directory with your Gemini API key:
   ```
   GEMINI_API_KEY=your_gemini_api_key_here
   ```

## Usage

1. Start the client and connect to the weather server:
   ```
   python client.py server.py
   ```

2. Once connected, you can ask questions about weather information:
   ```
   Query: What are the current weather alerts in CA?
   Query: What's the forecast for latitude 37.7749, longitude -122.4194?
   ```

3. Type `quit` to exit the application.

## Available Tools

The server provides the following tools:

- **get_alerts**: Fetches weather alerts for a specified US state (using two-letter state code)
- **get_forecast**: Retrieves weather forecasts for a specific location (using latitude and longitude)

## Project Structure

- `client.py`: MCP client that connects to the server and processes user queries using Gemini AI
- `server.py`: MCP server that implements weather data tools and communicates with the National Weather Service API

## Error Handling

The application includes robust error handling for:
- Invalid server script paths
- Connection issues with the NWS API
- Invalid or missing data in API responses

## Future Improvements

- Add additional weather data endpoints
- Implement caching for frequently requested data
- Add support for location name lookup (instead of requiring lat/long)
- Create a web interface

## License

[MIT License](LICENSE)

## Resources

For more information about Model Context Protocol (MCP), refer to the official Claude MCP documentation:
- [Claude MCP Documentation](https://modelcontextprotocol.io/introduction)

TDQS

B3.1/5.0

Scored across 2 tools

Disambiguation5/5

get_alerts and get_forecast clearly serve distinct purposes: one retrieves alerts for a state, the other a forecast by coordinates. There is no ambiguity between them.

Naming Consistency5/5

Both tool names follow a consistent get_ + noun pattern, matching the domain (alerts, forecast). The naming style is uniform and predictable.

Tool Count3/5

With only two tools, the server feels very minimal, likely covering only a narrow subset of weather functionality. It is borderline appropriate for a highly focused server but may be too thin for general weather use.

Completeness2/5

The surface is extremely limited: no support for current conditions, alerts by coordinates, or marine/aviation forecasts. Users needing basic weather data beyond forecast or state alerts will find the server inadequate.

Maintenance

ActivityInactive
ResponsivenessNo issues