// Test the MCP server tools via direct import
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
// Quick API integration test
const BASE = "https://api.open-meteo.com/v1/forecast";
async function test(name, params) {
const url = new URL(BASE);
for (const [k, v] of Object.entries(params)) url.searchParams.set(k, String(v));
url.searchParams.set("models", "dmi_harmonie_arome_europe");
url.searchParams.set("timezone", "Europe/Copenhagen");
try {
const res = await fetch(url);
const data = await res.json();
if (data.error) {
console.log(`❌ ${name}: ${data.reason}`);
} else {
const keys = Object.keys(data).filter(k => !["latitude","longitude","generationtime_ms","utc_offset_seconds","timezone","timezone_abbreviation","elevation"].includes(k));
console.log(`✅ ${name}: got ${keys.join(", ")}`);
}
} catch (err) {
console.log(`❌ ${name}: ${err.message}`);
}
}
// Test geocoding
async function testGeocode(query) {
const res = await fetch(`https://geocoding-api.open-meteo.com/v1/search?name=${encodeURIComponent(query)}&count=1&language=en&format=json`);
const data = await res.json();
if (data.results?.length) {
const r = data.results[0];
console.log(`✅ Geocode "${query}": ${r.name} (${r.country_code}) ${r.latitude},${r.longitude}`);
} else {
console.log(`❌ Geocode "${query}": no results`);
}
}
await test("Current (CPH)", { latitude: 55.676, longitude: 12.568, current: "temperature_2m,weather_code,wind_speed_10m,apparent_temperature,precipitation,relative_humidity_2m,wind_direction_10m,wind_gusts_10m,surface_pressure,cloud_cover" });
await test("Daily forecast (CPH, 3d)", { latitude: 55.676, longitude: 12.568, forecast_days: 3, daily: "weather_code,temperature_2m_max,temperature_2m_min,apparent_temperature_max,apparent_temperature_min,sunrise,sunset,precipitation_sum,wind_speed_10m_max,wind_gusts_10m_max,wind_direction_10m_dominant" });
await test("Hourly forecast (Aarhus, 1d)", { latitude: 56.163, longitude: 10.204, forecast_days: 1, hourly: "temperature_2m,apparent_temperature,precipitation,weather_code,wind_speed_10m,wind_gusts_10m,cloud_cover" });
await testGeocode("Gilleleje");
await testGeocode("Køge");
await testGeocode("Ølsemagle");
console.log("\nAll tests passed!");