Skip to main content
Glama
felipecararo

US Weather MCP Server

by felipecararo

get_alerts

Retrieve weather alerts for any US state using two-letter state codes to monitor hazardous conditions and stay informed about weather warnings.

Instructions

Get weather alerts for a state

Input Schema

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

Implementation Reference

  • src/index.ts:86-132 (registration)
    Registration of the 'get_alerts' MCP tool, including 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,
              },
            ],
          };
        },
      );
  • The core handler logic for the 'get_alerts' tool: fetches alerts from NWS API using makeNWSRequest, handles errors and empty results, formats alerts with formatAlert, and returns markdown 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,
          },
        ],
      };
    },
  • Zod input schema for the 'get_alerts' tool, validating the 'state' parameter as a 2-character string.
    {
      state: z.string().length(2).describe("Two-letter state code (e.g. CA, NY)"),
    },
  • Helper function used by 'get_alerts' to format individual alert features into multi-line text strings.
    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");
    }
  • Shared helper function for making authenticated fetch requests to the National Weather Service (NWS) API, used by 'get_alerts'.
    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

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/felipecararo/mcp-intro'

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