Skip to main content
Glama
robertn702

OpenWeatherMap MCP Server

get-minutely-forecast

Retrieve minute-by-minute precipitation forecasts for the next hour using location data. Input a city name or coordinates to access detailed weather predictions for up to 60 minutes.

Instructions

Get minute-by-minute precipitation forecast for next hour

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of minutes to forecast (1-60, default: 60)
locationYesCity name (e.g., 'New York') or coordinates (e.g., 'lat,lon')

Implementation Reference

  • The execute handler function implementing the core logic for the get-minutely-forecast tool: resolves location, fetches minutely precipitation forecast from OpenWeatherMap API, formats the response as JSON with precipitation amounts and descriptions.
    execute: async (args, { session, log }) => {
      try {
        log.info("Getting minutely weather forecast", { 
          location: args.location,
          limit: args.limit
        });
        
        // Get OpenWeather client
        const client = getOpenWeatherClient(session as SessionData | undefined);
        
        // Configure client for this request
        configureClientForLocation(client, args.location);
        
        // Fetch minutely forecast data
        const requestedMinutes = args.limit || 60;
        const minutelyData = await client.getMinutelyForecast(requestedMinutes);
        
        log.info("Successfully retrieved minutely weather forecast", { 
          location: args.location,
          minutes: minutelyData.length
        });
        
        // Format the response
        const formattedForecast = JSON.stringify({
          location: args.location,
          minutes_requested: requestedMinutes,
          forecast: minutelyData.map((minute, index) => ({
            minute_offset: index + 1,
            time: minute.dt.toISOString(),
            precipitation: minute.weather.rain,
            precipitation_description: minute.weather.rain > 0 ? 
              (minute.weather.rain < 0.1 ? 'Light rain' : 
               minute.weather.rain < 0.5 ? 'Moderate rain' : 'Heavy rain') : 'No precipitation'
          }))
        }, null, 2);
        
        return {
          content: [
            {
              type: "text",
              text: formattedForecast
            }
          ]
        };
      } catch (error) {
        log.error("Failed to get minutely weather forecast", { 
          error: error instanceof Error ? error.message : 'Unknown error' 
        });
        
        // Provide helpful error messages
        if (error instanceof Error) {
          if (error.message.includes('city not found')) {
            throw new Error(`Location "${args.location}" not found. Please check the spelling or try using coordinates.`);
          }
          if (error.message.includes('Invalid API key')) {
            throw new Error('Invalid OpenWeatherMap API key. Please check your configuration.');
          }
        }
        
        throw new Error(`Failed to get minutely weather forecast: ${error instanceof Error ? error.message : 'Unknown error'}`);
      }
    }
  • src/main.ts:381-447 (registration)
    Registration of the get-minutely-forecast tool using server.addTool, including name, description, input schema, and execute handler.
    server.addTool({
      name: "get-minutely-forecast",
      description: "Get minute-by-minute precipitation forecast for next hour",
      parameters: getMinutelyForecastSchema,
      execute: async (args, { session, log }) => {
        try {
          log.info("Getting minutely weather forecast", { 
            location: args.location,
            limit: args.limit
          });
          
          // Get OpenWeather client
          const client = getOpenWeatherClient(session as SessionData | undefined);
          
          // Configure client for this request
          configureClientForLocation(client, args.location);
          
          // Fetch minutely forecast data
          const requestedMinutes = args.limit || 60;
          const minutelyData = await client.getMinutelyForecast(requestedMinutes);
          
          log.info("Successfully retrieved minutely weather forecast", { 
            location: args.location,
            minutes: minutelyData.length
          });
          
          // Format the response
          const formattedForecast = JSON.stringify({
            location: args.location,
            minutes_requested: requestedMinutes,
            forecast: minutelyData.map((minute, index) => ({
              minute_offset: index + 1,
              time: minute.dt.toISOString(),
              precipitation: minute.weather.rain,
              precipitation_description: minute.weather.rain > 0 ? 
                (minute.weather.rain < 0.1 ? 'Light rain' : 
                 minute.weather.rain < 0.5 ? 'Moderate rain' : 'Heavy rain') : 'No precipitation'
            }))
          }, null, 2);
          
          return {
            content: [
              {
                type: "text",
                text: formattedForecast
              }
            ]
          };
        } catch (error) {
          log.error("Failed to get minutely weather forecast", { 
            error: error instanceof Error ? error.message : 'Unknown error' 
          });
          
          // Provide helpful error messages
          if (error instanceof Error) {
            if (error.message.includes('city not found')) {
              throw new Error(`Location "${args.location}" not found. Please check the spelling or try using coordinates.`);
            }
            if (error.message.includes('Invalid API key')) {
              throw new Error('Invalid OpenWeatherMap API key. Please check your configuration.');
            }
          }
          
          throw new Error(`Failed to get minutely weather forecast: ${error instanceof Error ? error.message : 'Unknown error'}`);
        }
      }
    });
  • Zod schema defining the input parameters for the get-minutely-forecast tool: location (string) and optional limit (number 1-60).
    export const getMinutelyForecastSchema = z.object({
      location: z.string().describe("City name (e.g., 'New York') or coordinates (e.g., 'lat,lon')"),
      limit: z.number().min(1).max(60).optional().describe("Number of minutes to forecast (1-60, default: 60)"),
    });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/robertn702/mcp-openweathermap'

If you have feedback or need assistance with the MCP directory API, please join our Discord server