Weather MCP Server
README.md
# Weather MCP Server
A Model Context Protocol (MCP) server that provides weather information for the United States using the National Weather Service (NWS) API. Built with [FastMCP](https://github.com/jlowin/fastmcp).
## Features
This server exposes tools that allow AI assistants to fetch real-time weather data:
- **`get_alerts(state: str)`**: Get active weather alerts for a given US state (using the 2-letter state code like CA, NY, TX). Returns details on the event, severity, description, and safety instructions.
- **`get_forecast(latitude: float, longitude: float)`**: Get the detailed weather forecast for a specific location (using latitude and longitude). Returns the forecast for the next 5 periods (e.g., this afternoon, tonight, tomorrow).
## Prerequisites
- Python 3.10 or higher
- `uv` package manager
## Installation & Setup
This project uses `uv` for dependency management. To set it up:
1. Clone the repository
2. Install dependencies (this will create a virtual environment if you run it using uv):
```bash
uv sync
```
## Usage
You can run the MCP server manually via standard input/output, which is how MCP clients will interact with it:
```bash
uv run weather.py
```
### Integrating with Claude Desktop
To use this server with Claude Desktop, you would add it to your `claude_desktop_config.json`:
```json
{
"mcpServers": {
"weather": {
"command": "uv",
"args": [
"--directory",
"path/to/your/mcp-server",
"run",
"weather.py"
]
}
}
}
```
### Integrating with a custom MCP Client
If you have a custom Python MCP Client, you can connect to it like this:
```python
from mcp import StdioServerParameters
server_params = StdioServerParameters(
command="uv",
args=["--directory", "path/to/mcp-server", "run", "weather.py"],
env=None
)
# Pass server_params to your MCP client
```
## APIs Used
- [National Weather Service API](https://api.weather.gov) (No API key required)
TDQS
B3.4/5.0
Scored across 2 tools
Disambiguation5/5
get_alerts and get_forecast have clearly distinct purposes: one for weather alerts by state, the other for forecast by coordinates. No overlap exists.
Naming Consistency5/5
Both tools follow a consistent verb_noun pattern (get_alerts, get_forecast), making them predictable.
Tool Count3/5
With only 2 tools, the server feels thin for a weather domain, bordering on insufficient scope.
Completeness2/5
Common weather operations like current conditions, hourly forecast, or radar are missing, leaving significant gaps for typical use cases.
Maintenance
ActivityInactive
ResponsivenessNo issues