import { ToolMetadata, InferSchema } from "xmcp";
import { z } from "zod";
import { getForecast, temperatureUnitSchema } from "../lib/weather-api";
export const schema = {
city: z.string().describe("The city name to get forecast for"),
days: z.number().min(1).max(7).optional().describe("Number of forecast days (1-7, default: 3)"),
unit: temperatureUnitSchema.optional().describe("Temperature unit (default: celsius)"),
};
export const metadata: ToolMetadata = {
name: "get-forecast",
description: "Get weather forecast for upcoming days",
annotations: {
title: "Get weather forecast",
readOnlyHint: true,
destructiveHint: false,
idempotentHint: true,
openWorldHint: true,
},
};
export default async function getForecastTool({
city,
days = 3,
unit = "celsius",
}: InferSchema<typeof schema>) {
const forecast = await getForecast(city, days, unit);
const unitSymbol = unit === "celsius" ? "C" : "F";
const forecastLines = forecast.days.map(
(day) => `• ${day.date}: ${day.minTemp}°${unitSymbol} - ${day.maxTemp}°${unitSymbol}`
);
return `${days}-day forecast for ${forecast.city}, ${forecast.country}:\n${forecastLines.join("\n")}`;
}