This is a Model Context Protocol (MCP) server that provides weather information using the National Weather Service (NWS) API.
- Get weather alerts for a US state
- Get weather forecast for a specific location (using latitude and longitude)
- Python 3.10+
- FastMCP
- httpx
- Clone this repository
- Set up a virtual environment:
python -m venv .venv source .venv/bin/activate # On Windows, use `.venv\Scripts\activate` - Install the required packages using uv:
uv add "mcp[cli]" httpx
The server uses a configuration file config.py with the following settings:
NWS_API_BASE: The base URL for the National Weather Service APIUSER_AGENT: The User-Agent string used when making requests to the NWS APILOG_LEVEL: The logging level (e.g., "INFO", "DEBUG")LOG_FORMAT: The format string for log messagesREQUEST_TIMEOUT: The timeout for API requests in seconds
You can modify these settings in the config.py file to customize the server behavior.
To run the server standalone:
- Activate the virtual environment if not already activated:
source .venv/bin/activate # On Windows, use `.venv\Scripts\activate` - Run the server:
python weather.py
The Weather MCP Server has been added to the Cline configuration. To use it within Cline:
-
Ensure that Cline is properly set up and running.
-
The Weather MCP Server will be available as a tool named "weather".
-
You can use the following tools within Cline:
a.
get_alerts(state: str): Get weather alerts for a US state (use two-letter state code, e.g., "CA" for California) b.get_forecast(latitude: float, longitude: float): Get weather forecast for a specific location
Example usage in Cline:
# Get alerts for California
result = await mcp.call_tool("weather.get_alerts", state="CA")
print(result)
# Get forecast for San Francisco (approximate coordinates)
result = await mcp.call_tool("weather.get_forecast", latitude=37.7749, longitude=-122.4194)
print(result)
Note: The exact syntax for calling MCP tools may vary depending on your Cline setup. Refer to Cline documentation for the most up-to-date usage instructions.
The server includes improved error handling for API requests and logging. If an error occurs during a request, the server will log the error and return an appropriate error message. Logs are printed to the console with the configured log level and format.
To run the unit tests:
python -m unittest test_weather.py
These tests cover the basic functionality of the get_alerts and get_forecast tools.
To manually test the server, you can use the MCP client to call the provided tools. Here are some example commands:
# Get alerts for California
result = await mcp.call_tool("get_alerts", state="CA")
print(result)
# Get forecast for San Francisco (approximate coordinates)
result = await mcp.call_tool("get_forecast", latitude=37.7749, longitude=-122.4194)
print(result)Contributions are welcome! Please feel free to submit a Pull Request.
This project is open source and available under the MIT License.