get_weather_forecast
Retrieve 5-day weather forecasts with 3-hour intervals for any city using the Multi-MCPs server's integrated weather API.
Instructions
Get 5-day/3-hour forecast by city name
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes | ||
| days | No | Days to include (1-5) |
Implementation Reference
- src/apis/weather/openweather.ts:91-100 (handler)The async handler function that implements the get_weather_forecast tool. It validates the API key and location, fetches the forecast data using client.forecastByCity, and optionally slices the list based on the 'days' parameter.async get_weather_forecast(args: Record<string, unknown>) { if (!cfg.openWeatherApiKey) throw new Error("OPENWEATHER_API_KEY is not configured"); const location = String(args.location || ""); const days = args.days ? Number(args.days) : undefined; if (!location) throw new Error("location is required"); const data: any = await client.forecastByCity(location); if (!days) return data; const count = Math.max(1, Math.min(5, days)); const list = (data as any).list || []; return { ...(data as object), list: list.slice(0, count * 8) } as any;
- The inputSchema for the get_weather_forecast tool, defining 'location' as required string and optional 'days' number.inputSchema: { type: "object", properties: { location: { type: "string" }, days: { type: "number", description: "Days to include (1-5)" }, }, required: ["location"], },
- src/tools/register.ts:23-23 (registration)The call to registerOpenWeather() within the registerAllTools function, which includes the get_weather_forecast tool in the overall tool registrations for the MCP server.registerOpenWeather(),
- The forecastByCity method in OpenWeatherClient that makes the API request to retrieve the raw forecast data used by the handler.async forecastByCity(location: string) { return this.request("/data/2.5/forecast", { query: { q: location, appid: this.apiKey, units: "metric" }, }); }
- src/apis/weather/openweather.ts:43-110 (registration)The registerOpenWeather function that defines and returns the ToolRegistration object containing the tool schema and handler for get_weather_forecast.export function registerOpenWeather(): ToolRegistration { const cfg = loadConfig(); const client = new OpenWeatherClient(cfg.openWeatherApiKey || ""); return { tools: [ { name: "get_current_weather", description: "Get current weather by city name", inputSchema: { type: "object", properties: { location: { type: "string", description: "City name, e.g., London" }, }, required: ["location"], }, }, { name: "get_weather_forecast", description: "Get 5-day/3-hour forecast by city name", inputSchema: { type: "object", properties: { location: { type: "string" }, days: { type: "number", description: "Days to include (1-5)" }, }, required: ["location"], }, }, { name: "get_weather_alerts", description: "Get weather alerts for a location (requires One Call support)", inputSchema: { type: "object", properties: { location: { type: "string" }, }, required: ["location"], }, }, ], handlers: { async get_current_weather(args: Record<string, unknown>) { if (!cfg.openWeatherApiKey) throw new Error("OPENWEATHER_API_KEY is not configured"); const location = String(args.location || ""); if (!location) throw new Error("location is required"); return client.currentWeatherByCity(location); }, async get_weather_forecast(args: Record<string, unknown>) { if (!cfg.openWeatherApiKey) throw new Error("OPENWEATHER_API_KEY is not configured"); const location = String(args.location || ""); const days = args.days ? Number(args.days) : undefined; if (!location) throw new Error("location is required"); const data: any = await client.forecastByCity(location); if (!days) return data; const count = Math.max(1, Math.min(5, days)); const list = (data as any).list || []; return { ...(data as object), list: list.slice(0, count * 8) } as any; }, async get_weather_alerts(args: Record<string, unknown>) { if (!cfg.openWeatherApiKey) throw new Error("OPENWEATHER_API_KEY is not configured"); const location = String(args.location || ""); if (!location) throw new Error("location is required"); return client.alertsByLocation(location); }, }, }; }