Skip to main content
Glama
adarshem

MCP Weather Server

get-alerts

Fetch real-time weather alerts for any US state by providing a two-letter state code using the MCP Weather Server.

Instructions

Get weather alerts for a state

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
stateYesTwo-letter state code (e.g. CA, NY)

Implementation Reference

  • The main handler function for the 'get-alerts' tool. Fetches alerts from the National Weather Service API for a given state code, handles errors and empty results, formats the alerts using the formatAlert helper, and returns them as formatted text content.
    async ({ state }) => {
      const stateCode = state.toUpperCase();
      const alertsUrl = `${NWS_API_BASE}/alerts?area=${stateCode}`;
      const alertsData = await makeNWSRequest<AlertsResponse>(alertsUrl);
    
      if (!alertsData) {
        return {
          content: [
            {
              type: 'text',
              text: 'Failed to retrieve alerts data'
            }
          ]
        };
      }
    
      const features = alertsData.features || [];
      if (features.length === 0) {
        return {
          content: [
            {
              type: 'text',
              text: `No active alerts for ${stateCode}`
            }
          ]
        };
      }
    
      const formattedAlerts = features.map(formatAlert);
      const alertsText = `Active alerts for ${stateCode}:\n\n${formattedAlerts.join(
        '\n'
      )}`;
    
      return {
        content: [
          {
            type: 'text',
            text: alertsText
          }
        ]
      };
    }
  • Input schema for the 'get-alerts' tool, validating the 'state' parameter as a two-letter string using Zod.
    {
      state: z.string().length(2).describe('Two-letter state code (e.g. CA, NY)')
    },
  • src/index.ts:86-134 (registration)
    Registration of the 'get-alerts' tool on the MCP server, specifying name, description, input schema, and inline handler function.
    server.tool(
      'get-alerts',
      'Get weather alerts for a state',
      {
        state: z.string().length(2).describe('Two-letter state code (e.g. CA, NY)')
      },
      async ({ state }) => {
        const stateCode = state.toUpperCase();
        const alertsUrl = `${NWS_API_BASE}/alerts?area=${stateCode}`;
        const alertsData = await makeNWSRequest<AlertsResponse>(alertsUrl);
    
        if (!alertsData) {
          return {
            content: [
              {
                type: 'text',
                text: 'Failed to retrieve alerts data'
              }
            ]
          };
        }
    
        const features = alertsData.features || [];
        if (features.length === 0) {
          return {
            content: [
              {
                type: 'text',
                text: `No active alerts for ${stateCode}`
              }
            ]
          };
        }
    
        const formattedAlerts = features.map(formatAlert);
        const alertsText = `Active alerts for ${stateCode}:\n\n${formattedAlerts.join(
          '\n'
        )}`;
    
        return {
          content: [
            {
              type: 'text',
              text: alertsText
            }
          ]
        };
      }
    );
  • Helper function to format a single weather alert feature into a multi-line string, used within the get-alerts handler.
    function formatAlert(feature: AlertFeature): string {
      const props = feature.properties;
      return [
        `Event: ${props.event || 'Unknown'}`,
        `Area: ${props.areaDesc || 'Unknown'}`,
        `Severity: ${props.severity || 'Unknown'}`,
        `Status: ${props.status || 'Unknown'}`,
        `Headline: ${props.headline || 'No headline'}`,
        '---'
      ].join('\n');
    }
  • Generic helper function for making authenticated requests to the National Weather Service API, used by the get-alerts handler.
    async function makeNWSRequest<T>(url: string): Promise<T | null> {
      const headers = {
        'User-Agent': USER_AGENT,
        Accept: 'application/geo+json'
      };
    
      try {
        const response = await fetch(url, { headers });
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        return (await response.json()) as T;
      } catch (error) {
        console.error('Error making NWS request:', error);
        return null;
      }
    }
Install Server

Other Tools

Related Tools

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/adarshem/mcp-server-learn'

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