Connects Claude to QWeather's comprehensive weather API with support for real-time conditions, multi-day forecasts (3/7/10/15/30 days), minute-by-minute precipitation tracking, hourly predictions, weather warnings, air quality data, and lifestyle indices like UV, sports, and allergy ratings. Supports both JWT (EdDSA/Ed25519) authentication and legacy API keys, with JWT recommended since QWeather is deprecating API keys in 2027. The server auto-caches JWT tokens until near expiry and handles clock skew gracefully. Useful when you need precise Chinese weather data or want to build weather-aware applications that can query conditions, issue warnings, or advise users based on comprehensive meteorological indices beyond basic temperature and precipitation.
English | 简体中文
MCP server for QWeather API, providing comprehensive weather information query capabilities through Model Context Protocol (MCP).
Recommended: Install automatically for Claude Desktop using Smithery:
npx -y @smithery/cli install @overstarry/qweather-mcp --client claude
# stdio server
npx -y qweather-mcp
QWeather has announced that API Key authentication will be deprecated in 2027 and recommends migrating to JWT (EdDSA + Ed25519). Generate an Ed25519 key pair, upload the public key to the QWeather console, and configure:
QWEATHER_API_BASE=https://<your-host>.qweatherapi.com
QWEATHER_PROJECT_ID=<project-id>
QWEATHER_KEY_ID=<credential-id>
# Either pass the PEM path…
QWEATHER_PRIVATE_KEY_PATH=/path/to/ed25519-private.pem
# …or the PEM content directly (newlines preserved)
# QWEATHER_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
If both QWEATHER_PRIVATE_KEY_PATH and QWEATHER_PRIVATE_KEY are provided, the path takes precedence. For QWEATHER_PRIVATE_KEY, the literal two-character sequence \n is auto-converted to real newlines, so the single-line form above works in shells, .env files, and JSON configs.
JSON config example:
{
"mcpServers": {
"qweather": {
"command": "npx",
"args": ["-y", "qweather-mcp"],
"env": {
"QWEATHER_API_BASE": "https://<your-host>.qweatherapi.com",
"QWEATHER_PROJECT_ID": "<project-id>",
"QWEATHER_KEY_ID": "<credential-id>",
"QWEATHER_PRIVATE_KEY_PATH": "/path/to/ed25519-private.pem"
}
}
}
}
JWT details: tokens are signed with alg=EdDSA, iat is back-dated 30s to tolerate clock skew, exp = iat + 900s (15 min, well under QWeather's 24h cap), and tokens are cached and reused until ~30s before expiry. See the official authentication docs.
QWEATHER_API_BASE=https://api.qweather.com
QWEATHER_API_KEY=<your-api-key>
JSON config example:
{
"mcpServers": {
"qweather": {
"command": "npx",
"args": ["-y", "qweather-mcp"],
"env": {
"QWEATHER_API_BASE": "<your-api-url>",
"QWEATHER_API_KEY": "<your-api-key>"
}
}
}
}
| Env vars present | Mode |
|---|---|
Full JWT vars (QWEATHER_PROJECT_ID + QWEATHER_KEY_ID + QWEATHER_PRIVATE_KEY[_PATH]) | JWT (wins even if QWEATHER_API_KEY is also set) |
Full JWT vars + QWEATHER_API_KEY | JWT (API Key is ignored) |
Partial JWT vars + QWEATHER_API_KEY | API Key, with a startup warning to stderr |
| Partial JWT vars only | startup error |
QWEATHER_API_KEY only | API Key |
| neither | startup error |
The active mode is logged to stderr at startup, e.g. Weather MCP Server running on stdio (auth: JWT/EdDSA).
Get current weather information for a specified location.
Get weather forecast information for a specified location with customizable forecast days:
Forecast data includes:
Provides minute-by-minute precipitation forecast for the next 2 hours, including:
Provides hourly weather forecasts for 24, 72, or 168 hours, including:
Provides real-time weather warning information, including:
Provides weather life indices information, supporting various index types:
Provides real-time air quality data, including:
Provides hourly air quality forecast for the next 24 hours:
Provides air quality forecast for the next 3 days:
Issues and improvements are welcome! Please check our contribution guidelines.
MIT
QWEATHER_API_BASE*secretYour qweather api host
QWEATHER_API_KEY*secretYour qweather api key