A Model Context Protocol (MCP) server that provides access to the Windy Webcam Public API, enabling AI agents to search and retrieve information about live webcams from around the world.
- Search webcams by location, category, and other criteria
- Get detailed webcam information including images, timelapses, and live players
- Find nearby webcams using geographic coordinates
- Browse webcams by category (beaches, mountains, cities, etc.)
- Filter by country, region, or continent
- Bounding box searches for specific geographic areas
- Map clustering optimized for map display applications
- Coordinate-based proximity searches
- Live webcam feeds and preview images
- Location information with detailed geographic data
- Category classification for easy filtering
- Player embeds for live streaming integration
- Export functionality for bulk webcam data
- Intelligent caching with configurable TTL
- Rate limiting to respect API quotas
- Retry logic with exponential backoff
- Error handling with detailed error messages
- Node.js 18 or higher
- Windy API key (get one at https://api.windy.com/keys)
npm install windy-webcam-mcp-servergit clone <repository-url>
cd windy-webcam-mcp-server
npm install
npm run buildSet your Windy API key as an environment variable:
export WINDY_API_KEY="your-api-key-here"Or create a .env file:
WINDY_API_KEY=your-api-key-hereYou can obtain a free API key from Windy API. The API has rate limits but provides access to a comprehensive database of worldwide webcams.
# Using npm
npx windy-webcam-mcp-server
# Using node directly
node build/index.jsAdd to your MCP client configuration:
{
"mcpServers": {
"windy-webcam": {
"command": "npx",
"args": ["windy-webcam-mcp-server"],
"env": {
"WINDY_API_KEY": "your-api-key-here"
}
}
}
}Search for webcams with various filters including location, category, and geographic criteria.
Parameters:
country- Country code (e.g., "US", "DE", "FR")region- Region code within a countrycontinent- Continent code (e.g., "NA", "EU", "AS")category- Category ID or comma-separated listnearby- Coordinates for proximity search ("lat,lng")bbox- Bounding box ("sw_lat,sw_lng,ne_lat,ne_lng")limit- Number of results (1-50, default: 10)offset- Result offset for paginationorder- Sort order (hotness, new, recent, random)lang- Language code (default: "en")
Get detailed information about a specific webcam by ID.
Parameters:
webcam_id- Webcam identifier (required)include- Additional data to includelang- Language code (default: "en")
Get webcams from a specific geographic location.
Parameters:
location_type- Type of location (country, region, continent)location_code- Location code (required)limit- Number of results (1-50, default: 20)order- Sort order
Get webcams from specific categories.
Parameters:
categories- Category ID or comma-separated list (required)limit- Number of results (1-50, default: 20)order- Sort order
Find webcams near specific coordinates.
Parameters:
latitude- Latitude coordinate (required)longitude- Longitude coordinate (required)radius- Search radius in kilometerslimit- Number of results (1-50, default: 10)
Get webcam clusters optimized for map display.
Parameters:
ne_lat,ne_lng- Northeast corner coordinates (required)sw_lat,sw_lng- Southwest corner coordinates (required)zoom- Map zoom level (1-18)cluster- Enable clustering (default: true)
Get available webcam categories for filtering.
Parameters:
lang- Language code (default: "en")
Get available countries with webcams.
Parameters:
lang- Language code (default: "en")
Get available regions with webcams.
Parameters:
lang- Language code (default: "en")
Get available continents with webcams.
Parameters:
lang- Language code (default: "en")
Get basic information about all available webcams.
Parameters:
format- Export format (json)
// Search for beach webcams in California
await use_mcp_tool({
server_name: "windy-webcam",
tool_name: "search_webcams",
arguments: {
country: "US",
region: "US-CA",
category: "beach",
limit: 10
}
});// Find webcams near San Francisco
await use_mcp_tool({
server_name: "windy-webcam",
tool_name: "get_nearby_webcams",
arguments: {
latitude: 37.7749,
longitude: -122.4194,
limit: 5
}
});// Get all available categories
await use_mcp_tool({
server_name: "windy-webcam",
tool_name: "get_categories",
arguments: {
lang: "en"
}
});All tools return responses in the following format:
{
"success": true,
"summary": "Found 150 webcams (10 returned)",
"data": {
"offset": 0,
"limit": 10,
"total": 150,
"webcams": [...]
},
"cached": false,
"api_info": {
"cache_hit": false,
"response_time_ms": 245
}
}- Rate Limiting: 1 second delay between API requests
- Caching: 5-minute TTL for most endpoints
- Retry Logic: 3 attempts with exponential backoff
- Error Handling: Comprehensive error messages with status codes
The server handles various error scenarios:
- Invalid API Key: Returns authentication error
- Rate Limiting: Automatic retry with backoff
- Not Found: Clear error messages for missing resources
- Network Issues: Retry logic with timeout handling
npm run buildnpm testnpm run devFor detailed API documentation, visit: https://api.windy.com/webcams/docs
MIT License - see LICENSE file for details.
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
For issues and questions:
- Check the API documentation
- Review the error messages for troubleshooting
- Ensure your API key is valid and properly configured
Built with β€οΈ for the Model Context Protocol ecosystem.