Weather MCP Server
Weather MCP Server
A Model Context Protocol (MCP) server implementation that provides weather alerts and forecasts for US locations using the National Weather Service (NWS) API.
Features
Tools
get_alerts(state: str): Get active weather alerts for a US state (e.g., "CA", "NY")Returns formatted alerts with event type, area, severity, description, and instructions
get_forecast(latitude: float, longitude: float): Get detailed weather forecast for a specific locationReturns temperature, wind conditions, and detailed forecast for the next 5 periods
Resources
echo://{message}: Echo resource that returns a formatted message
Project Structure
.
├── server/
│ ├── weather.py # Main weather MCP server implementation
│ ├── weather.json # MCP server configuration file
│ └── client.py # Client example using MCPAgent with memory
├── mcpserver/
│ ├── server.py # Alternative server implementation with SSE transport
│ ├── client-sse.py # SSE transport client example
│ ├── client-stdio.py # STDIO transport client example
│ ├── Dockerfile # Docker configuration
│ └── requirements.txt # Python dependencies
├── main.py # Project entry point
├── pyproject.toml # Project configuration and dependencies
└── README.md # This filePrerequisites
Python 3.13 or higher
uv package manager
Installation
Clone the repository:
git clone <repository-url>
cd MCPCRASHCoursemainCreate and activate virtual environment:
uv venv
.venv\Scripts\activate # Windows
# or
source .venv/bin/activate # Linux/MacInstall dependencies:
uv syncOr install specific packages:
uv add "mcp[cli]"
uv add httpx
uv add langchain-groq
uv add mcp-use
uv add python-dotenvUsage
Running the Weather Server
Option 1: Using the server in server/weather.py (STDIO transport)
uv run mcp dev server/weather.pyOption 2: Using the server in mcpserver/server.py (SSE transport)
cd mcpserver
uv run server.pyThe SSE server will run on http://localhost:8000
Running Client Examples
Using MCPAgent Client (with memory)
# Make sure to set GROQ_API_KEY in your .env file
uv run server/client.pyUsing SSE Client
# First, start the SSE server in one terminal
cd mcpserver
uv run server.py
# Then in another terminal, run the client
uv run mcpserver/client-sse.pyUsing STDIO Client
uv run mcpserver/client-stdio.pyInstalling in Claude Desktop
To install the server in Claude Desktop app:
uv run mcp install server/weather.pyYou'll need to configure it in Claude Desktop's settings. The configuration file is located at server/weather.json.
VS Code Integration
Open the project folder in VS Code
Open terminal and run:
uv run server/weather.pyPress
Ctrl+Shift+Ito launch chat in VS CodeLogin with GitHub and setup MCP configuration in VS Code user settings
Configuration
Environment Variables
Create a .env file in the root directory:
GROQ_API_KEY=your_groq_api_key_hereMCP Server Configuration
The server configuration is in server/weather.json. Update the path to match your system:
{
"mcpServers": {
"weather": {
"command": "uv",
"args": [
"run",
"--with",
"mcp[cli]",
"mcp",
"run",
"path/to/server/weather.py"
]
}
}
}Docker Support
Build and run using Docker:
cd mcpserver
docker build -t weather-mcp-server .
docker run -p 8000:8000 weather-mcp-serverAPI Information
This server uses the National Weather Service API, which is free and doesn't require an API key. The server includes:
Proper User-Agent headers as required by NWS
Error handling for API requests
Formatted responses for easy reading
Development
Running in Development Mode
For development with MCP Inspector:
uv run mcp dev server/weather.pyTesting
Test the server by running the client examples:
server/client.py- Full-featured client with conversation memorymcpserver/client-sse.py- SSE transport examplemcpserver/client-stdio.py- STDIO transport example
Dependencies
mcp[cli]- Model Context Protocol frameworkhttpx- Async HTTP client for API requestslangchain-groq- LLM integration (for client examples)mcp-use- MCP utilitiespython-dotenv- Environment variable managementnest-asyncio- Async support for interactive Python
License
See LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Support
For issues and questions, please open an issue on GitHub.