Skip to main content
Glama
YunYouJun

Starter MCP Server

by YunYouJun

get-forecast

Retrieve weather forecast data for specific geographic coordinates by providing latitude and longitude values.

Instructions

Get weather forecast for a location

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
latitudeYesLatitude of the location
longitudeYesLongitude of the location

Implementation Reference

  • The handler function that implements the 'get-forecast' tool logic. It fetches the NWS grid points for given lat/lon, retrieves the forecast data, formats the forecast periods, and returns a text response.
    async ({ latitude, longitude }) => { // Get grid point data const pointsUrl = `${NWS_API_BASE}/points/${latitude.toFixed(4)},${longitude.toFixed(4)}` const pointsData = await makeNWSRequest<PointsResponse>(pointsUrl) if (!pointsData) { return { content: [ { type: 'text', text: `Failed to retrieve grid point data for coordinates: ${latitude}, ${longitude}. This location may not be supported by the NWS API (only US locations are supported).`, }, ], } } const forecastUrl = pointsData.properties?.forecast if (!forecastUrl) { return { content: [ { type: 'text', text: 'Failed to get forecast URL from grid point data', }, ], } } // Get forecast data const forecastData = await makeNWSRequest<ForecastResponse>(forecastUrl) if (!forecastData) { return { content: [ { type: 'text', text: 'Failed to retrieve forecast data', }, ], } } const periods = forecastData.properties?.periods || [] if (periods.length === 0) { return { content: [ { type: 'text', text: 'No forecast periods available', }, ], } } // Format forecast periods const formattedForecast = periods.map((period: ForecastPeriod) => [ `${period.name || 'Unknown'}:`, `Temperature: ${period.temperature || 'Unknown'}°${period.temperatureUnit || 'F'}`, `Wind: ${period.windSpeed || 'Unknown'} ${period.windDirection || ''}`, `${period.shortForecast || 'No forecast available'}`, '---', ].join('\n'), ) const forecastText = `Forecast for ${latitude}, ${longitude}:\n\n${formattedForecast.join('\n')}` return { content: [ { type: 'text', text: forecastText, }, ], } },
  • Zod input schema defining latitude and longitude parameters for the tool.
    inputSchema: z.object({ latitude: z.number().min(-90).max(90).describe('Latitude of the location'), longitude: z .number() .min(-180) .max(180) .describe('Longitude of the location'), }),
  • The registerGetForecast function that calls server.registerTool to register the 'get-forecast' tool with its schema and handler.
    export function registerGetForecast() { server.registerTool( 'get-forecast', { title: 'Weather forecast', description: 'Get weather forecast for a location', inputSchema: z.object({ latitude: z.number().min(-90).max(90).describe('Latitude of the location'), longitude: z .number() .min(-180) .max(180) .describe('Longitude of the location'), }), }, async ({ latitude, longitude }) => { // Get grid point data const pointsUrl = `${NWS_API_BASE}/points/${latitude.toFixed(4)},${longitude.toFixed(4)}` const pointsData = await makeNWSRequest<PointsResponse>(pointsUrl) if (!pointsData) { return { content: [ { type: 'text', text: `Failed to retrieve grid point data for coordinates: ${latitude}, ${longitude}. This location may not be supported by the NWS API (only US locations are supported).`, }, ], } } const forecastUrl = pointsData.properties?.forecast if (!forecastUrl) { return { content: [ { type: 'text', text: 'Failed to get forecast URL from grid point data', }, ], } } // Get forecast data const forecastData = await makeNWSRequest<ForecastResponse>(forecastUrl) if (!forecastData) { return { content: [ { type: 'text', text: 'Failed to retrieve forecast data', }, ], } } const periods = forecastData.properties?.periods || [] if (periods.length === 0) { return { content: [ { type: 'text', text: 'No forecast periods available', }, ], } } // Format forecast periods const formattedForecast = periods.map((period: ForecastPeriod) => [ `${period.name || 'Unknown'}:`, `Temperature: ${period.temperature || 'Unknown'}°${period.temperatureUnit || 'F'}`, `Wind: ${period.windSpeed || 'Unknown'} ${period.windDirection || ''}`, `${period.shortForecast || 'No forecast available'}`, '---', ].join('\n'), ) const forecastText = `Forecast for ${latitude}, ${longitude}:\n\n${formattedForecast.join('\n')}` return { content: [ { type: 'text', text: forecastText, }, ], } }, ) }
  • src/index.ts:10-10 (registration)
    The call to registerGetForecast() in the main index file, which triggers the tool registration.
    registerGetForecast()
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/YunYouJun/starter-mcp-server'

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