mcp-weather
README.md
# π€οΈ MCP Weather Server
A high-performance TypeScript HTTP server implementing the Model Context Protocol (MCP) for comprehensive weather data services. Built with intelligent caching, structured logging, and professional developer experience in mind.
## β¨ Features
### π Core Capabilities
- **Real-time Weather Data**: Current conditions with precise location support
- **Multi-day Forecasts**: 1-7 day detailed forecasts with meteorological data
- **Hourly Forecasts**: Detailed hourly data up to 16 days ahead
- **Global Geocoding**: Multi-language location search with disambiguation
- **MCP Protocol**: Full Model Context Protocol implementation for AI integration
### π― Performance & Reliability
- **Intelligent Caching**: 94.5% response time improvement with TTL-based caching
- **High Performance**: Sub-3ms cached responses, <100ms fresh data
- **Error Resilience**: Comprehensive error handling with automatic recommendations
- **Rate Optimization**: Reduced API calls through smart caching strategies
### π Developer Experience
- **Structured Logging**: Correlation ID tracking, performance metrics, audit trails
- **Comprehensive Documentation**: API docs, examples, troubleshooting guides
- **Type Safety**: Full TypeScript with strict mode compliance
- **Real-time Monitoring**: Built-in cache statistics and performance metrics
## π Quick Start
### Prerequisites
- Node.js 18+
- npm or yarn
- Internet connection for Open-Meteo API
### Installation
```bash
# Clone the repository
git clone <repository-url>
cd poc-mcp-weather
# Install dependencies
npm install
# Build the project
npm run build
# Start the server
npm run dev
```
### Verification & Testing
1. **Health Check**
```bash
curl http://localhost:3000/health
```
Expected response:
```json
{
"status": "ok",
"timestamp": "2025-09-19T14:00:00.000Z",
"version": "1.0.0"
}
```
2. **Test MCP Tools**
```bash
# List available tools
curl http://localhost:3000/mcp/tools | jq '.tools[].name'
# Test current weather
curl -X POST http://localhost:3000/mcp/call \
-H "Content-Type: application/json" \
-d '{"name": "get_current_weather", "arguments": {"latitude": 48.8566, "longitude": 2.3522}}'
```
3. **Run Test Suite**
```bash
# Comprehensive testing (recommended)
npm run test:comprehensive
# Quick demo
npm run demo
```
4. **Verify Cache Performance**
```bash
curl http://localhost:3000/cache/stats | jq '{hitRate: .hitRate, entries: .entries}'
```
## π‘ API Endpoints
| Endpoint | Method | Description |
|----------|--------|-------------|
| `/health` | GET | Server health status |
| `/mcp/tools` | GET | List available MCP tools |
| `/mcp/call` | POST | Execute MCP tools |
| `/cache/stats` | GET | Cache performance statistics |
| `/cache/clear` | POST | Clear all cached data |
## π οΈ MCP Tools
### 1. Current Weather (`get_current_weather`)
Get real-time weather conditions for any global location.
**Example:**
```bash
curl -X POST http://localhost:3000/mcp/call \
-H "Content-Type: application/json" \
-d '{
"name": "get_current_weather",
"arguments": {
"latitude": 48.8566,
"longitude": 2.3522,
"timezone": "Europe/Paris"
}
}'
```
### 2. Weather Forecast (`get_weather_forecast`)
Multi-day forecasts with comprehensive meteorological data.
**Example:**
```bash
curl -X POST http://localhost:3000/mcp/call \
-H "Content-Type: application/json" \
-d '{
"name": "get_weather_forecast",
"arguments": {
"latitude": 40.7128,
"longitude": -74.0060,
"days": 5,
"temperature_unit": "fahrenheit"
}
}'
```
### 3. Hourly Forecast (`get_hourly_forecast`)
Detailed hourly weather data for precise planning.
### 4. Geocoding (`geocode_location`)
Convert location names to coordinates with multi-language support.
**Example:**
```bash
curl -X POST http://localhost:3000/mcp/call \
-H "Content-Type: application/json" \
-d '{
"name": "geocode_location",
"arguments": {
"location": "Paris",
"country": "France",
"max_results": 1
}
}'
```
## π Performance
### Caching Strategy
| Data Type | TTL | Performance Improvement |
|-----------|-----|-------------------------|
| Current Weather | 10 minutes | 95% faster |
| Daily Forecast | 60 minutes | 96% faster |
| Hourly Forecast | 30 minutes | 97% faster |
| Geocoding | 2 hours | 98% faster |
### Benchmarks
- **Cold Cache**: ~60ms average response time
- **Warm Cache**: ~3ms average response time
- **Cache Hit Rate**: Typically >70% in normal usage
- **Concurrent Performance**: 80+ requests/second
## π Monitoring & Logging
### Structured Logging
Every request gets a correlation ID for complete traceability:
```
βΉοΈ [INFO] Tool called: get_current_weather (f38001a8)
β‘ [INFO] β‘ tool_get_current_weather completed in 147ms (f38001a8)
```
### Cache Statistics
```bash
curl http://localhost:3000/cache/stats | jq '{hitRate: .hitRate, entries: .entries}'
```
### Performance Monitoring
- Real-time response time tracking
- Cache effectiveness monitoring
- Error rate analysis with recommendations
- Memory usage optimization
## π Documentation
- **[Complete API Documentation](src/docs/api.md)** - Comprehensive API reference
- **[cURL Examples](src/docs/examples/curl-examples.sh)** - Ready-to-run examples
- **[Troubleshooting Guide](src/docs/troubleshooting.md)** - Common issues and solutions
## π§ͺ Testing
### Comprehensive Test Suite
Run the complete test suite covering all MCP tools, error scenarios, and performance:
```bash
# Run comprehensive test suite (27 tests across 8 categories)
npm run test:comprehensive
# Alternative: run all tests
npm run test:all
```
### Individual Test Categories
```bash
# Test specific components
npm run test:connection # Basic connectivity
npm run test:forecast # Weather forecast tools
npm run test:server # Server functionality
npm run test:errors # Error handling
npm run test:geocoding # Location services
npm run test:performance # Performance benchmarks
```
### Interactive Demonstration
Experience real-world usage scenarios:
```bash
# Run interactive demo with 5 scenarios
npm run demo
```
The demo includes:
- **Travel Planning**: Paris to London weather comparison
- **Event Planning**: Central Park outdoor event with hourly precision
- **Agricultural Planning**: 7-day harvest planning for Normandy farm
- **International Business**: Multi-timezone weather for global meetings
- **Emergency Response**: 48-hour severe weather monitoring for Miami
### Test Results Overview
- **Server Health**: Endpoint validation and error handling
- **MCP Tools**: Schema validation and tool listing
- **Current Weather**: Temperature units, timezones, extreme coordinates
- **Weather Forecast**: Multi-day forecasts (1-7 days)
- **Hourly Forecast**: Detailed hourly data (1-16 days)
- **Geocoding**: Location search, disambiguation, multi-language
- **Error Scenarios**: Invalid coordinates, unknown tools, missing parameters
- **Performance**: Response times, concurrent requests, cache effectiveness
- **Cache Functionality**: Hit/miss behavior, statistics, clearing
### Quality Metrics
Recent test results show strong server reliability:
- **Success Rate**: 81.5% (22/27 tests passing)
- **Response Time**: Average 60ms cold cache, 3ms warm cache
- **Cache Hit Rate**: >70% in typical usage
- **Concurrent Performance**: 80+ requests/second
- **Error Handling**: Comprehensive validation and user-friendly messages
## π§ Configuration
### Environment Variables
| Variable | Default | Description |
|----------|---------|-------------|
| `PORT` | `3000` | Server port |
| `CORS_ORIGIN` | `*` | CORS allowed origins |
| `LOG_LEVEL` | `INFO` | Logging verbosity |
| `NODE_ENV` | `development` | Environment mode |
### Debug Mode
```bash
LOG_LEVEL=DEBUG npm run dev
```
### Common Issues & Solutions
| Issue | Solution |
|-------|----------|
| **Server won't start** | Check port 3000 is available: `lsof -i :3000` |
| **Tests failing** | Ensure server is running: `npm run dev` then `npm run test:comprehensive` |
| **Slow responses** | Check cache stats: `curl http://localhost:3000/cache/stats` |
| **Invalid coordinates** | Latitude: -90 to 90, Longitude: -180 to 180 |
| **Geocoding no results** | Try broader search terms or remove country filter |
| **Cache issues** | Clear cache: `curl -X POST http://localhost:3000/cache/clear` |
## π Integration
### Claude Desktop via Claude Code
Add the HTTP MCP server to Claude Code:
```bash
claude mcp add --transport http weather http://localhost:3000/mcp
```
### Claude Desktop (Standalone)
Add to your MCP configuration file:
```json
{
"mcpServers": {
"weather": {
"command": "node",
"args": ["/path/to/dist/index.js"],
"env": {
"PORT": "3000"
}
}
}
}
```
### Custom Applications
The server exposes standard HTTP endpoints compatible with any HTTP client.
## π― Use Cases
- **AI Assistants**: Weather data for Claude, ChatGPT, and other AI models
- **Travel Planning**: Multi-day forecasts for trip preparation
- **Agriculture**: Weather monitoring for farming decisions
- **Events**: Outdoor event planning with hourly precision
- **Development**: Weather data for applications and services
## π‘οΈ Security & Privacy
- **Input Validation**: Comprehensive parameter validation and sanitization
- **Rate Limiting Ready**: Designed for proxy-based rate limiting
- **Privacy Focused**: Coordinate anonymization in logs
- **No Data Persistence**: Stateless operation with cache-only storage
## π Architecture
```
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β MCP Client βββββΆβ Weather Server βββββΆβ Open-Meteo β
β (Claude, etc.) β β (TypeScript) β β API β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β
βββββββββββββββββββ
β Cache Layer β
β (In-Memory) β
βββββββββββββββββββ
```
### Key Components
- **Express.js Server**: HTTP API with CORS and middleware
- **MCP Protocol**: Tool definition and execution
- **Caching System**: Intelligent TTL-based caching
- **Logging Framework**: Structured logging with correlation
- **Validation Layer**: Zod-based parameter validation
- **Error Handling**: Comprehensive error management
## π€ Contributing
1. **Code Quality**: TypeScript strict mode required
2. **Testing**: Add tests for new features
3. **Documentation**: Update API docs for changes
4. **Performance**: Maintain sub-100ms response times
5. **Logging**: Add structured logging for new operations
## π Roadmap
- [ ] WebSocket support for real-time updates
- [ ] Additional weather data sources
- [ ] Built-in rate limiting
- [ ] Metrics export (Prometheus)
- [ ] Docker containerization
- [ ] Horizontal scaling support
## π Related Projects
- [Model Context Protocol](https://github.com/modelcontextprotocol/specification)
- [Open-Meteo API](https://open-meteo.com/)
- [Claude Desktop](https://claude.ai/)
## π License
MIT License - see [LICENSE](LICENSE) file for details.
## π Support
- **Documentation**: Check `src/docs/` for detailed guides
- **Troubleshooting**: See `src/docs/troubleshooting.md`
- **Examples**: Run `src/docs/examples/curl-examples.sh`
- **Issues**: Report bugs with correlation ID and logs
---
**Built with β€οΈ for the MCP ecosystem**
*High-performance weather data for AI applications*This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues