Skip to main content
Glama

get_weather_by_coordinates

Retrieve weather data and forecasts for specific geographic coordinates using latitude and longitude values.

Instructions

Récupère la météo selon les coordonnées géographiques

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
latNoLatitude (-33.8688 pour Sydney par défaut)
lonNoLongitude (151.2093 pour Sydney par défaut)
daysNoNombre de jours de prévision (1-7)

Implementation Reference

  • The primary handler function executing the tool logic. Fetches current weather (days=1) or forecast (days>1) using Open-Meteo API for given coordinates, formats and returns formatted text response.
    async getWeatherByCoordinates(lat, lon, days) { const currentUrl = `${WEATHER_API}?latitude=${lat}&longitude=${lon}&current=temperature_2m,relative_humidity_2m,apparent_temperature,is_day,precipitation,weather_code,cloud_cover,pressure_msl,wind_speed_10m,wind_direction_10m&timezone=auto`; if (days === 1) { const response = await fetch(currentUrl); const data = await response.json(); if (!response.ok) { throw new Error('Erreur lors de la récupération de la météo'); } const current = data.current; const weatherDesc = this.getWeatherDescription(current.weather_code); const windDir = this.getWindDirection(current.wind_direction_10m); return { content: [ { type: 'text', text: `🌤️ Météo actuelle aux coordonnées ${lat}°, ${lon}° 🌡️ **Température:** ${Math.round(current.temperature_2m)}°C 🤔 **Ressenti:** ${Math.round(current.apparent_temperature)}°C ☁️ **Conditions:** ${weatherDesc} ${current.is_day ? '☀️' : '🌙'} 💧 **Humidité:** ${current.relative_humidity_2m}% 🌬️ **Vent:** ${Math.round(current.wind_speed_10m)} km/h ${windDir} 🔽 **Pression:** ${Math.round(current.pressure_msl)} hPa ☁️ **Couverture nuageuse:** ${current.cloud_cover}% ⏰ **Dernière mise à jour:** ${new Date(current.time).toLocaleString('fr-FR')}`, }, ], }; } else { // Prévisions multi-jours const forecastUrl = `${WEATHER_API}?latitude=${lat}&longitude=${lon}&daily=weather_code,temperature_2m_max,temperature_2m_min,precipitation_sum,wind_speed_10m_max&timezone=auto&forecast_days=${days}`; const response = await fetch(forecastUrl); const data = await response.json(); if (!response.ok) { throw new Error('Erreur lors de la récupération des prévisions'); } const daily = data.daily; let forecastText = `🗓️ Prévisions ${days} jours aux coordonnées ${lat}°, ${lon}°\n\n`; for (let i = 0; i < days; i++) { const date = new Date(daily.time[i]); const dayName = date.toLocaleDateString('fr-FR', { weekday: 'long' }); const dateStr = date.toLocaleDateString('fr-FR'); const weatherDesc = this.getWeatherDescription(daily.weather_code[i]); forecastText += `📅 **${dayName.charAt(0).toUpperCase() + dayName.slice(1)} ${dateStr}**\n`; forecastText += `🌡️ ${Math.round(daily.temperature_2m_min[i])}°C → ${Math.round(daily.temperature_2m_max[i])}°C\n`; forecastText += `☁️ ${weatherDesc}\n`; if (daily.precipitation_sum[i] > 0) { forecastText += `🌧️ ${daily.precipitation_sum[i]}mm\n`; } forecastText += `\n`; } return { content: [ { type: 'text', text: forecastText.trim(), }, ], }; } }
  • Input schema defining parameters: lat (number, default -33.8688), lon (number, default 151.2093), days (number 1-7, default 1). No required fields.
    inputSchema: { type: 'object', properties: { lat: { type: 'number', description: 'Latitude (-33.8688 pour Sydney par défaut)', default: -33.8688 }, lon: { type: 'number', description: 'Longitude (151.2093 pour Sydney par défaut)', default: 151.2093 }, days: { type: 'number', description: 'Nombre de jours de prévision (1-7)', default: 1, minimum: 1, maximum: 7 } }, required: [], },
  • src/index.js:96-122 (registration)
    Tool registration in the ListTools response, specifying name, description, and input schema.
    { name: 'get_weather_by_coordinates', description: 'Récupère la météo selon les coordonnées géographiques', inputSchema: { type: 'object', properties: { lat: { type: 'number', description: 'Latitude (-33.8688 pour Sydney par défaut)', default: -33.8688 }, lon: { type: 'number', description: 'Longitude (151.2093 pour Sydney par défaut)', default: 151.2093 }, days: { type: 'number', description: 'Nombre de jours de prévision (1-7)', default: 1, minimum: 1, maximum: 7 } }, required: [], }, },
  • src/index.js:152-157 (registration)
    Dispatch logic in CallToolRequest handler switch statement, mapping tool name to the getWeatherByCoordinates method with default args.
    case 'get_weather_by_coordinates': return await this.getWeatherByCoordinates( args.lat || DEFAULT_LOCATION.latitude, args.lon || DEFAULT_LOCATION.longitude, args.days || 1 );
  • Helper function to translate weather codes to French descriptions, used in getWeatherByCoordinates.
    getWeatherDescription(code) { const descriptions = { 0: 'Ciel dégagé', 1: 'Principalement dégagé', 2: 'Partiellement nuageux', 3: 'Couvert', 45: 'Brouillard', 48: 'Brouillard givrant', 51: 'Bruine légère', 53: 'Bruine modérée', 55: 'Bruine dense', 56: 'Bruine verglaçante légère', 57: 'Bruine verglaçante dense', 61: 'Pluie légère', 63: 'Pluie modérée', 65: 'Pluie forte', 66: 'Pluie verglaçante légère', 67: 'Pluie verglaçante forte', 71: 'Neige légère', 73: 'Neige modérée', 75: 'Neige forte', 77: 'Grains de neige', 80: 'Averses légères', 81: 'Averses modérées', 82: 'Averses violentes', 85: 'Averses de neige légères', 86: 'Averses de neige fortes', 95: 'Orage', 96: 'Orage avec grêle légère', 99: 'Orage avec grêle forte' }; return descriptions[code] || 'Conditions inconnues'; }

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/Yarflam/weather-mcp-server'

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