mymcpserver / tools /meteo.py
alihmaou's picture
Deploy tools/meteo.py via Meta-MCP
3019e55 verified
raw
history blame
2.16 kB
import gradio as gr
import json
from PIL import Image
import numpy as np
# --- User Defined Logic ---
import requests
from typing import Dict, Any
def meteo(ville: str) -> str:
"""
Récupère la température actuelle (en °C) pour une ville donnée en utilisant l'API gratuite Open-Meteo.
Args:
ville (str): Nom de la ville (ex: "Paris", "Lyon", "Marseille").
Returns:
str: Chaîne décrivant la température actuelle dans la ville spécifiée.
En cas d'erreur, retourne un message explicite.
"""
# Géocodage simple : on utilise une API Nominatim (OpenStreetMap) sans clé
geo_url = "https://nominatim.openstreetmap.org/search"
geo_params = {
"q": ville,
"format": "json",
"limit": 1
}
headers = {"User-Agent": "gradio-mcp-demo/1.0"}
try:
geo_resp = requests.get(geo_url, params=geo_params, headers=headers, timeout=10)
geo_resp.raise_for_status()
geo_data = geo_resp.json()
if not geo_data:
return f"Ville '{ville}' introuvable."
lat = float(geo_data[0]["lat"])
lon = float(geo_data[0]["lon"])
except Exception as e:
return f"Erreur géocodage : {e}"
# Appel météo via Open-Meteo (pas de clé requise)
meteo_url = "https://api.open-meteo.com/v1/forecast"
meteo_params = {
"latitude": lat,
"longitude": lon,
"current_weather": True,
"temperature_unit": "celsius"
}
try:
meteo_resp = requests.get(meteo_url, params=meteo_params, timeout=10)
meteo_resp.raise_for_status()
data = meteo_resp.json()
temp = data["current_weather"]["temperature"]
return f"Température actuelle à {ville} : {temp} °C"
except Exception as e:
return f"Erreur météo : {e}"
# --- Interface Factory ---
def create_interface():
return gr.Interface(
fn=meteo,
inputs=[gr.Textbox(label=k) for k in ['ville']],
outputs=gr.Textbox(label="Température actuelle dans la ville"),
title="meteo",
description="Auto-generated tool: meteo"
)