weather-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@weather-mcpWhat's the current weather in Tokyo?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.

weather-mcp
TypeScript MCP server that exposes weather tools backed by OpenWeatherMap.
Tools
Tool | Description |
| Current conditions by city name or lat/lon, plus umbrella advice and outdoor checks |
| 5-day / 3-hour forecast by lat/lon, plus umbrella advice and outdoor checks per period |
Each successful tool response appends:
Umbrella - whether to take one, based on rain/storm/snow and precipitation chance
Outdoor - whether it is a good time to be outside, including heat, cold, wind, and humidity checks
Transports
Mode | Env | Use when |
|
| Local Cursor / Claude Desktop |
Streamable HTTP |
| Deploy (Render, etc.) / remote URL |
Official MCP docs: https://modelcontextprotocol.io/docs/
Live remote (Render)
Deployed on Render’s free tier:
Landing page | |
MCP endpoint | |
Health check |
Cursor config (remote)
Add this to Settings → MCP or ~/.cursor/mcp.json:
{
"mcpServers": {
"weather": {
"url": "https://weather-mcp-ts.onrender.com/mcp"
}
}
}No local build or API key in Cursor - the key lives in Render’s env vars.
Render free tier: the service shuts down after ~15 minutes of inactivity. The next request is a cold start and can take up to ~50 seconds before MCP responds. Hit
/healthonce if Cursor tools look stuck waking up.
Related MCP server: mcp-weatherapi
Prerequisites (local only)
Node.js 20+
pnpm (or npm/yarn)
An OpenWeatherMap API key (get one here)
Setup (local)
pnpm install
cp .env.example .envEdit .env and set your key:
OPEN_WEATHER_MAP_API_KEY=your_key_here
TRANSPORT=stdioBuild the server:
pnpm run buildThis writes the runnable entrypoint to dist/index.js.
Add to Cursor (local stdio)
Cursor does not start this process from the project root by default for env loading, so pass the env file with an absolute path via Node’s --env-file flag.
Open Cursor Settings → MCP, or edit
~/.cursor/mcp.json.Add a
weatherentry undermcpServers:
{
"mcpServers": {
"weather": {
"command": "node",
"args": [
"--env-file",
"/ABSOLUTE/PATH/TO/weather-mcp/.env",
"/ABSOLUTE/PATH/TO/weather-mcp/dist/index.js"
]
}
}
}Replace /ABSOLUTE/PATH/TO/weather-mcp with your real project path (e.g. run pwd from the repo root). Keep TRANSPORT=stdio (or unset) in .env.
Alternative: env inline
{
"mcpServers": {
"weather": {
"command": "node",
"args": [
"/ABSOLUTE/PATH/TO/weather-mcp/dist/index.js"
],
"env": {
"OPEN_WEATHER_MAP_API_KEY": "your_key_here",
"TRANSPORT": "stdio"
}
}
}
}Prefer .env + --env-file so the key stays out of mcp.json.
Save, then toggle the server off/on in Settings → MCP (or restart Cursor).
Confirm the server shows as connected and lists
get_current_weatherandget_forecast.
After code changes
pnpm run buildThen reload the MCP server in Cursor.
Streamable HTTP (local)
HTTP mode serves a landing page at GET /, MCP at POST/GET /mcp (configurable), plus GET /health. Streamable HTTP is configured via the official SDK’s createMcpHandler + toNodeHandler. The build copies src/index.html into dist/.
pnpm run build
TRANSPORT=http PORT=3000 pnpm run start
# or
pnpm run start:httpYou should see something like:
Weather MCP Server running on http://0.0.0.0:3000/mcp (Streamable HTTP)Deploy on Render
Create a Web Service from this repo (root of the project).
Build:
pnpm install && pnpm run build(ornpmequivalent).Start:
node dist/index.js(orpnpm run start).Env vars:
TRANSPORT=httpOPEN_WEATHER_MAP_API_KEY=...PORTis set by Render automatically
MCP URL:
https://<your-service>.onrender.com/mcp
This deployment:https://weather-mcp-ts.onrender.com/mcp
The HTTP endpoint is unauthenticated. Anyone with the URL can call the tools. Add auth before sharing widely.
Manual smoke check (OpenWeatherMap)
With .env set:
node --env-file=.env -e "
import { getApiKey, buildCurrentWeatherUrl, makeOWMRequest, formatCurrentWeather } from './dist/utils.js';
const apiKey = getApiKey();
const data = await makeOWMRequest(buildCurrentWeatherUrl({ apiKey, city: 'Yaounde,CM', units: 'metric' }));
console.log(data ? formatCurrentWeather(data, 'metric') : 'failed');
"Remote health:
curl -s https://weather-mcp-ts.onrender.com/healthRepo layout
weather-mcp/
├── README.md
├── LICENSE
├── package.json
├── tsconfig.json
├── .env.example
└── src/
├── index.html # landing page (copied to dist on build)
├── index.ts # stdio + Streamable HTTP entry
├── server.ts # tool registration
├── types.ts
└── utils.tsNotes
Never commit
.env(it is gitignored).Stdio servers must not write to stdout except MCP JSON-RPC; logs go to stderr (
console.error).Free OpenWeatherMap plans cover current weather and the 5-day / 3-hour forecast used here.
License
ISC © 2026 RashJrEdmund
This server cannot be deployed
Maintenance
Related MCP Connectors
OpenWeather MCP — wraps the OpenWeatherMap API (openweathermap.org)
Hosted MCP server for Xweather weather data: conditions, forecasts, alerts, and more.
MCP server for weather with reasoning — umbrella advice, outdoor checks, city comparisons.
WeatherAPI.com MCP — wraps WeatherAPI.com (api.weatherapi.com)
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceWraps the OpenWeatherMap API to provide weather data through MCP, enabling AI agents to query current conditions, forecasts, and other weather information via natural language.5MIT
- AlicenseNot gradedqualityCmaintenanceProvides weather data from WeatherAPI.com through MCP, enabling AI agents to query current conditions and forecasts via natural language.8MIT
- FlicenseNot gradedqualityDmaintenanceEnables MCP clients like Kiro and Claude to access current weather conditions and forecasts for any location using the OpenWeatherMap API.-
- AlicenseNot gradedqualityDmaintenanceIntegrates OpenWeatherMap API with MCP to provide weather data, forecasts, air quality, maps, alerts, and geocoding via natural language.67MIT