meteoswiss-mcp 2.2.1 → 2.3.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Data layer for the meteoswissClimateData tool.
3
+ * Fetches homogeneous climate measurement series from NBCN stations.
4
+ */
5
+ import { getLatin1CsvData } from './ogd-data-store.js';
6
+ import { resolveNbcnStation, findNearestNbcnStation } from './ogd-nbcn-stations.js';
7
+ import { parseNumeric } from '../support/ogd-csv-parser.js';
8
+ import { debugData } from '../support/logging.js';
9
+ import { SOURCE_ATTRIBUTION } from '../schemas/ogd-shared.js';
10
+ /**
11
+ * Map resolution names to URL suffixes.
12
+ * Monthly and yearly files contain all history (no _recent suffix).
13
+ * Daily has _recent (last ~2 years) and _historical variants.
14
+ */
15
+ const RESOLUTION_SUFFIX = {
16
+ daily: 'd_recent',
17
+ monthly: 'm',
18
+ yearly: 'y',
19
+ };
20
+ /**
21
+ * Build the download URL for a station's climate data.
22
+ */
23
+ function buildDataUrl(station, resolution) {
24
+ const collection = station.network === 'nbcn-precip' ? 'ogd-nbcn-precip' : 'ogd-nbcn';
25
+ const abbrLower = station.abbr.toLowerCase();
26
+ const suffix = RESOLUTION_SUFFIX[resolution];
27
+ return `https://data.geo.admin.ch/ch.meteoschweiz.${collection}/${abbrLower}/${collection}_${abbrLower}_${suffix}.csv`;
28
+ }
29
+ /**
30
+ * Parse a MeteoSwiss timestamp (DD.MM.YYYY HH:MM) into an ISO-ish YYYY-MM-DD string.
31
+ */
32
+ function parseTimestamp(ts) {
33
+ const match = ts.match(/^(\d{2})\.(\d{2})\.(\d{4})/);
34
+ if (!match)
35
+ return ts;
36
+ return `${match[3]}-${match[2]}-${match[1]}`;
37
+ }
38
+ /**
39
+ * Map CSV columns to structured measurements.
40
+ * Daily, monthly, and yearly CSVs have different column sets.
41
+ */
42
+ function mapMeasurement(row) {
43
+ return {
44
+ date: parseTimestamp(row.reference_timestamp ?? ''),
45
+ // Temperature (available at all resolutions)
46
+ temperature_mean: parseNumeric(row.ths200d0 ?? row.ths200m0 ?? row.ths200y0 ?? null) ?? undefined,
47
+ temperature_max: parseNumeric(row.ths200dx ?? row.ths2dymx ?? row.ths2dyyx ?? null) ?? undefined,
48
+ temperature_min: parseNumeric(row.ths200dn ?? row.ths2dymn ?? row.ths2dyyn ?? null) ?? undefined,
49
+ // Precipitation (monthly/yearly)
50
+ precipitation: parseNumeric(row.rhs150m0 ?? row.rhs150y0 ?? null) ?? undefined,
51
+ // Sunshine (monthly/yearly)
52
+ sunshine_duration_min: parseNumeric(row.shs000m0 ?? row.shs000y0 ?? null) ?? undefined,
53
+ // Radiation (monthly/yearly)
54
+ radiation_w_m2: parseNumeric(row.ghs000m0 ?? row.ghs000y0 ?? null) ?? undefined,
55
+ // Wind (monthly/yearly)
56
+ wind_speed_m_s: parseNumeric(row.fhs010m0 ?? row.fhs010y0 ?? null) ?? undefined,
57
+ // Pressure (monthly/yearly)
58
+ pressure_hpa: parseNumeric(row.phsstam0 ?? row.phsstay0 ?? null) ?? undefined,
59
+ // Day counts (monthly/yearly)
60
+ frost_days: parseNumeric(row.ths00nm0 ?? row.ths00ny0 ?? null) ?? undefined,
61
+ summer_days: parseNumeric(row.ths25xm0 ?? row.ths25xy0 ?? null) ?? undefined,
62
+ heat_days: parseNumeric(row.ths30xm0 ?? row.ths30xy0 ?? null) ?? undefined,
63
+ ice_days: parseNumeric(row.ths00xm0 ?? row.ths00xy0 ?? null) ?? undefined,
64
+ tropical_nights: parseNumeric(row.ths20nm0 ?? row.ths20ny0 ?? null) ?? undefined,
65
+ rain_days: parseNumeric(row.rhs001m0 ?? row.rhs001y0 ?? null) ?? undefined,
66
+ };
67
+ }
68
+ /**
69
+ * Strip undefined values from a measurement to keep the response clean.
70
+ */
71
+ function stripUndefined(m) {
72
+ const result = {};
73
+ for (const [key, value] of Object.entries(m)) {
74
+ if (value !== undefined) {
75
+ result[key] = value;
76
+ }
77
+ }
78
+ return result;
79
+ }
80
+ /**
81
+ * Fetch climate data from MeteoSwiss NBCN stations.
82
+ */
83
+ export async function getClimateData(params) {
84
+ let station;
85
+ let distance_km;
86
+ if (params.coordinates) {
87
+ const result = await findNearestNbcnStation(params.coordinates.lat, params.coordinates.lon);
88
+ station = result.station;
89
+ distance_km = result.distance_km;
90
+ debugData('[ogd-nbcn] Nearest station to coordinates: %s (%.1f km)', station.abbr, distance_km);
91
+ }
92
+ else if (params.station) {
93
+ station = await resolveNbcnStation(params.station);
94
+ debugData('[ogd-nbcn] Resolved station: %s (%s)', station.abbr, station.name);
95
+ }
96
+ else {
97
+ throw new Error('Either "station" or "coordinates" must be provided');
98
+ }
99
+ const resolution = params.resolution ?? 'monthly';
100
+ const url = buildDataUrl(station, resolution);
101
+ const abbrLower = station.abbr.toLowerCase();
102
+ const cacheKey = `climate/${station.network}-${abbrLower}-${RESOLUTION_SUFFIX[resolution]}.csv`;
103
+ const rows = await getLatin1CsvData(url, cacheKey, 'climate');
104
+ debugData('[ogd-nbcn] Fetched %d rows for %s (%s)', rows.length, station.abbr, resolution);
105
+ // Apply date filtering
106
+ let filtered = rows;
107
+ if (params.start_date) {
108
+ const start = params.start_date;
109
+ filtered = filtered.filter((row) => {
110
+ const date = parseTimestamp(row.reference_timestamp ?? '');
111
+ return date >= start;
112
+ });
113
+ }
114
+ if (params.end_date) {
115
+ const end = params.end_date;
116
+ filtered = filtered.filter((row) => {
117
+ const date = parseTimestamp(row.reference_timestamp ?? '');
118
+ return date <= end;
119
+ });
120
+ }
121
+ // Take the most recent rows (from the end), limited by params.limit
122
+ const limit = params.limit ?? 30;
123
+ const sliced = filtered.slice(-limit);
124
+ const data = sliced.map((row) => stripUndefined(mapMeasurement(row)));
125
+ return {
126
+ station: {
127
+ name: station.name,
128
+ abbreviation: station.abbr,
129
+ elevation: station.elevation,
130
+ coordinates: { lat: station.lat, lon: station.lon },
131
+ canton: station.canton,
132
+ distance_km,
133
+ network: station.network,
134
+ },
135
+ resolution,
136
+ data,
137
+ source: SOURCE_ATTRIBUTION,
138
+ };
139
+ }
140
+ //# sourceMappingURL=ogd-climate-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ogd-climate-data.js","sourceRoot":"","sources":["../../src/data/ogd-climate-data.ts"],"names":[],"mappings":"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"}
@@ -2,13 +2,15 @@
2
2
  * Data layer for the getCurrentWeather tool.
3
3
  * Fetches real-time measurements from the consolidated VQHA80.csv.
4
4
  */
5
- import { getCsvData } from './ogd-data-store.js';
5
+ import { getCsvData, getLatin1CsvData } from './ogd-data-store.js';
6
6
  import { resolveSmnStation, findNearestStation } from './ogd-smn-stations.js';
7
7
  import { parseNumeric } from '../support/ogd-csv-parser.js';
8
8
  import { reverseGeocodeSwiss } from '../support/reverse-geocode.js';
9
9
  import { debugData } from '../support/logging.js';
10
10
  import { SOURCE_ATTRIBUTION } from '../schemas/ogd-shared.js';
11
11
  const REALTIME_CSV_URL = 'https://data.geo.admin.ch/ch.meteoschweiz.messwerte-aktuell/VQHA80.csv';
12
+ /** The 8 stations that have visual observations (OBS) data */
13
+ const OBS_STATIONS = new Set(['ALT', 'BAS', 'CHU', 'GSB', 'JUN', 'SAE', 'SIO', 'SMA']);
12
14
  /** Cache reverse geocode results per station (coordinates are static) */
13
15
  const reverseGeoCache = new Map();
14
16
  async function getCachedReverseGeocode(lat, lon, stationAbbr) {
@@ -57,12 +59,23 @@ export async function getCurrentWeather(params) {
57
59
  getCsvData(REALTIME_CSV_URL, 'measurements/VQHA80.csv', 'realtime', filter),
58
60
  getCachedReverseGeocode(station.lat, station.lon, station.abbr),
59
61
  ]);
60
- if (rows.length === 0) {
61
- throw new Error(`No current data available for station ${station.abbr} (${station.name})`);
62
+ let row = rows[0];
63
+ // Fallback for precipitation-only stations: VQHA80 does not include them
64
+ if (!row && station.network === 'smn-precip') {
65
+ debugData('[ogd-weather] Station %s is precip-only, fetching per-station CSV', station.abbr);
66
+ const abbrLower = station.abbr.toLowerCase();
67
+ const precipUrl = `https://data.geo.admin.ch/ch.meteoschweiz.ogd-smn-precip/${abbrLower}/ogd-smn-precip_${abbrLower}_t_recent.csv`;
68
+ const precipRows = await getCsvData(precipUrl, `measurements/smn-precip-${abbrLower}-t-recent.csv`, 'realtime');
69
+ // Use the most recent row (last in the CSV)
70
+ row = precipRows.length > 0 ? precipRows[precipRows.length - 1] : undefined;
62
71
  }
63
- const row = rows[0];
64
72
  if (!row) {
65
- throw new Error(`No data row for station ${station.abbr}`);
73
+ throw new Error(`No current data available for station ${station.abbr} (${station.name})`);
74
+ }
75
+ // Enrich with visual observations for the 8 OBS stations
76
+ let visual_observations;
77
+ if (OBS_STATIONS.has(station.abbr)) {
78
+ visual_observations = await fetchVisualObservations(station.abbr);
66
79
  }
67
80
  return {
68
81
  station: {
@@ -73,8 +86,9 @@ export async function getCurrentWeather(params) {
73
86
  municipality: geo?.municipality,
74
87
  canton: geo?.canton ?? station.canton,
75
88
  distance_km,
89
+ network: station.network,
76
90
  },
77
- timestamp: row.Date ?? '',
91
+ timestamp: row.Date ?? row.reference_timestamp ?? '',
78
92
  measurements: {
79
93
  temperature: measurement(row, 'tre200s0', '\u00B0C'),
80
94
  humidity: measurement(row, 'ure200s0', '%'),
@@ -89,7 +103,49 @@ export async function getCurrentWeather(params) {
89
103
  pressure_sea_level: measurement(row, 'pp0qffs0', 'hPa'),
90
104
  snow_depth: measurement(row, 'htoauts0', 'cm'),
91
105
  },
106
+ visual_observations,
92
107
  source: SOURCE_ATTRIBUTION,
93
108
  };
94
109
  }
110
+ /**
111
+ * Fetch the latest visual observation for an OBS station.
112
+ * Returns undefined if the fetch fails (non-critical enrichment).
113
+ */
114
+ async function fetchVisualObservations(abbr) {
115
+ try {
116
+ const abbrLower = abbr.toLowerCase();
117
+ const url = `https://data.geo.admin.ch/ch.meteoschweiz.ogd-obs/${abbrLower}/ogd-obs_${abbrLower}_d_recent.csv`;
118
+ const rows = await getLatin1CsvData(url, `observations/obs-${abbrLower}-d-recent.csv`, 'realtime');
119
+ if (rows.length === 0)
120
+ return undefined;
121
+ const latestRow = rows[rows.length - 1];
122
+ const cloudCover = parseNumeric(latestRow.nto000d0 ?? null);
123
+ const parseFlag = (val) => {
124
+ if (val === null)
125
+ return undefined;
126
+ const num = parseNumeric(val);
127
+ return num === null ? undefined : num === 1;
128
+ };
129
+ // Parse timestamp DD.MM.YYYY → YYYY-MM-DD
130
+ const ts = latestRow.reference_timestamp ?? '';
131
+ const match = ts.match(/^(\d{2})\.(\d{2})\.(\d{4})/);
132
+ const date = match ? `${match[3]}-${match[2]}-${match[1]}` : ts;
133
+ return {
134
+ date,
135
+ cloud_cover_percent: cloudCover ?? undefined,
136
+ is_clear_day: parseFlag(latestRow.nto002d0 ?? null),
137
+ is_overcast_day: parseFlag(latestRow.nto008d0 ?? null),
138
+ has_rain: parseFlag(latestRow.w1p012d0 ?? null),
139
+ has_rain_and_snow: parseFlag(latestRow.w2p001d0 ?? null),
140
+ has_snowfall: parseFlag(latestRow.w2p002d0 ?? null),
141
+ has_hail: parseFlag(latestRow.w3p002d0 ?? null),
142
+ has_fog: parseFlag(latestRow.w5p002d0 ?? null),
143
+ has_snow_coverage: parseFlag(latestRow.est000d0 ?? null),
144
+ };
145
+ }
146
+ catch (error) {
147
+ debugData('[ogd-weather] Failed to fetch visual observations for %s: %O', abbr, error);
148
+ return undefined;
149
+ }
150
+ }
95
151
  //# sourceMappingURL=ogd-current-weather.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ogd-current-weather.js","sourceRoot":"","sources":["../../src/data/ogd-current-weather.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ogd-current-weather.js","sourceRoot":"","sources":["../../src/data/ogd-current-weather.ts"],"names":[],"mappings":"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"}
@@ -21,14 +21,40 @@ function resolveFixturePath(url) {
21
21
  // Map known URL patterns to fixture directories
22
22
  if (url.includes('VQHA80.csv'))
23
23
  return path.join(OGD_FIXTURES_ROOT, 'measurements', 'VQHA80.csv');
24
- if (url.includes('meta_stations.csv'))
24
+ // SMN-precip metadata and data (must come BEFORE SMN to avoid 'smn' substring match)
25
+ if (url.includes('meta_stations.csv') && url.includes('smn-precip'))
26
+ return path.join(OGD_FIXTURES_ROOT, 'metadata', 'ogd-smn-precip_meta_stations.csv');
27
+ if (url.includes('ogd-smn-precip') && url.includes('_t_recent.csv'))
28
+ return path.join(OGD_FIXTURES_ROOT, 'measurements', 'smn-precip-abe-t-recent.csv');
29
+ // SMN (weather station) metadata
30
+ if (url.includes('meta_stations.csv') && url.includes('smn'))
25
31
  return path.join(OGD_FIXTURES_ROOT, 'metadata', 'ogd-smn_meta_stations.csv');
32
+ if (url.includes('meta_parameters.csv') && url.includes('smn'))
33
+ return path.join(OGD_FIXTURES_ROOT, 'metadata', 'ogd-smn_meta_parameters.csv');
34
+ // NBCN metadata and data (nbcn-precip must come BEFORE nbcn)
35
+ if (url.includes('meta_stations.csv') && url.includes('nbcn-precip'))
36
+ return path.join(OGD_FIXTURES_ROOT, 'metadata', 'ogd-nbcn-precip_meta_stations.csv');
37
+ if (url.includes('meta_stations.csv') && url.includes('nbcn'))
38
+ return path.join(OGD_FIXTURES_ROOT, 'metadata', 'ogd-nbcn_meta_stations.csv');
39
+ if (url.includes('ogd-nbcn') && url.includes('_m.csv'))
40
+ return path.join(OGD_FIXTURES_ROOT, 'climate', 'nbcn-bas-m.csv');
41
+ if (url.includes('ogd-nbcn') && url.includes('_d_recent.csv'))
42
+ return path.join(OGD_FIXTURES_ROOT, 'climate', 'nbcn-bas-d-recent.csv');
43
+ // OBS (visual observations) data
44
+ if (url.includes('ogd-obs') && url.includes('_d_recent.csv'))
45
+ return path.join(OGD_FIXTURES_ROOT, 'observations', 'obs-sma-d-recent.csv');
46
+ // Pollen metadata and data
47
+ if (url.includes('meta_stations.csv') && url.includes('pollen'))
48
+ return path.join(OGD_FIXTURES_ROOT, 'metadata', 'ogd-pollen_meta_stations.csv');
49
+ if (url.includes('meta_parameters.csv') && url.includes('pollen'))
50
+ return path.join(OGD_FIXTURES_ROOT, 'metadata', 'ogd-pollen_meta_parameters.csv');
51
+ if (url.includes('ogd-pollen') && url.includes('_d_recent.csv'))
52
+ return path.join(OGD_FIXTURES_ROOT, 'pollen', 'pzh-daily-recent.csv');
53
+ // Forecast metadata
26
54
  if (url.includes('meta_point.csv'))
27
55
  return path.join(OGD_FIXTURES_ROOT, 'metadata', 'ogd-local-forecasting_meta_point.csv');
28
56
  if (url.includes('meta_parameters.csv') && url.includes('forecasting'))
29
57
  return path.join(OGD_FIXTURES_ROOT, 'metadata', 'ogd-local-forecasting_meta_parameters.csv');
30
- if (url.includes('meta_parameters.csv') && url.includes('smn'))
31
- return path.join(OGD_FIXTURES_ROOT, 'metadata', 'ogd-smn_meta_parameters.csv');
32
58
  // Forecast CSVs: match by parameter name
33
59
  for (const param of [
34
60
  'tre200dx',
@@ -1 +1 @@
1
- {"version":3,"file":"ogd-data-store.js","sourceRoot":"","sources":["../../src/data/ogd-data-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAe,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEnF,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;AAEjD;;;GAGG;AACH,SAAS,kBAAkB,CAAC,GAAW;IACrC,IAAI,CAAC,iBAAiB;QAAE,OAAO,IAAI,CAAC;IAEpC,gDAAgD;IAChD,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IAClG,IAAI,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,2BAA2B,CAAC,CAAC;IAC/E,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,sCAAsC,CAAC,CAAC;IAC1F,IAAI,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;QACpE,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,2CAA2C,CAAC,CAAC;IAC/F,IAAI,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,6BAA6B,CAAC,CAAC;IAEjF,yCAAyC;IACzC,KAAK,MAAM,KAAK,IAAI;QAClB,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;KACX,EAAE,CAAC;QACF,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC;YAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,IAAY,EAAE,QAAgB;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AAClD,CAAC;AAED,iCAAiC;AACjC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,SAAS,CAAC,wBAAwB,EAAE,MAAM,CAAC;IACrD,QAAQ,EAAE,SAAS,CAAC,wBAAwB,EAAE,SAAS,CAAC;IACxD,QAAQ,EAAE,SAAS,CAAC,wBAAwB,EAAE,UAAU,CAAC;IACzD,OAAO,EAAE,SAAS,CAAC,uBAAuB,EAAE,WAAW,CAAC;CAChD,CAAC;AAIX,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAExF;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,IAAqB;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IACjD,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,aAAa,CAAC,SAAiB,EAAE,GAAW;IACzD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACtC,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;YACd,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,aAAa;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,QAAgB,EAChB,IAAe,EACf,MAAiC;IAEjC,yDAAyD;IACzD,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,WAAW,EAAE,CAAC;QAChB,SAAS,CAAC,+BAA+B,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,wCAAwC,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE5B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACnD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,SAAS,CAAC,8BAA8B,EAAE,QAAQ,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7E,MAAM,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,SAAS,CAAC,mCAAmC,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtE,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,QAAgB,EAChB,IAAe,EACf,MAAiC;IAEjC,yDAAyD;IACzD,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,WAAW,EAAE,CAAC;QAChB,SAAS,CAAC,+BAA+B,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,wCAAwC,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE5B,sCAAsC;IACtC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACnD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,SAAS,CAAC,8BAA8B,EAAE,QAAQ,CAAC,CAAC;QACpD,OAAO,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACxC,SAAS,CAAC,6CAA6C,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChF,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"ogd-data-store.js","sourceRoot":"","sources":["../../src/data/ogd-data-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Station metadata loader for MeteoSwiss NBCN (National Basic Climatic Network) stations.
3
+ * Loads and caches station metadata from the OGD STAC API.
4
+ * Merges NBCN (29 climate stations) and NBCN-precip (46 precipitation stations).
5
+ */
6
+ import { getCollection } from './ogd-stac-client.js';
7
+ import { getLatin1CsvData } from './ogd-data-store.js';
8
+ import { parseNumeric } from '../support/ogd-csv-parser.js';
9
+ import { normalize } from '../support/normalize.js';
10
+ import { findNearest } from '../support/haversine.js';
11
+ import { geocodeSwissLocation } from '../support/geocode.js';
12
+ import { debugData } from '../support/logging.js';
13
+ import { OGD_COLLECTIONS } from '../schemas/ogd-shared.js';
14
+ let stationCache = null;
15
+ let stationByAbbr = null;
16
+ /**
17
+ * Parse station metadata rows into NbcnStation objects.
18
+ */
19
+ function parseStationRows(rows, network) {
20
+ return rows
21
+ .filter((r) => r.station_abbr)
22
+ .map((row) => ({
23
+ abbr: row.station_abbr ?? '',
24
+ name: row.station_name ?? '',
25
+ canton: row.station_canton ?? '',
26
+ elevation: parseNumeric(row.station_height_masl ?? null) ?? 0,
27
+ lat: parseNumeric(row.station_coordinates_wgs84_lat ?? null) ?? 0,
28
+ lon: parseNumeric(row.station_coordinates_wgs84_lon ?? null) ?? 0,
29
+ data_since: row.station_data_since ?? '',
30
+ network,
31
+ }));
32
+ }
33
+ /**
34
+ * Load NBCN + NBCN-precip station metadata from the OGD STAC API.
35
+ * Cached in memory after first load.
36
+ *
37
+ * @returns Array of all NBCN and NBCN-precip stations
38
+ */
39
+ export async function loadNbcnStations() {
40
+ if (stationCache)
41
+ return stationCache;
42
+ debugData('[ogd-nbcn] Loading station metadata (NBCN + NBCN-precip)...');
43
+ const [nbcnCollection, precipCollection] = await Promise.all([
44
+ getCollection(OGD_COLLECTIONS.NBCN),
45
+ getCollection(OGD_COLLECTIONS.NBCN_PRECIP),
46
+ ]);
47
+ const nbcnAsset = nbcnCollection.assets?.['ogd-nbcn_meta_stations.csv'];
48
+ if (!nbcnAsset) {
49
+ throw new Error('Station metadata asset not found in NBCN collection');
50
+ }
51
+ const precipAsset = precipCollection.assets?.['ogd-nbcn-precip_meta_stations.csv'];
52
+ if (!precipAsset) {
53
+ throw new Error('Station metadata asset not found in NBCN-precip collection');
54
+ }
55
+ const [nbcnRows, precipRows] = await Promise.all([
56
+ getLatin1CsvData(nbcnAsset.href, 'metadata/nbcn-stations.csv', 'metadata'),
57
+ getLatin1CsvData(precipAsset.href, 'metadata/nbcn-precip-stations.csv', 'metadata'),
58
+ ]);
59
+ const nbcnStations = parseStationRows(nbcnRows, 'nbcn');
60
+ const precipStations = parseStationRows(precipRows, 'nbcn-precip');
61
+ stationCache = [...nbcnStations, ...precipStations];
62
+ stationByAbbr = new Map(stationCache.map((s) => [s.abbr.toLowerCase(), s]));
63
+ debugData('[ogd-nbcn] Loaded %d stations (%d NBCN + %d precip)', stationCache.length, nbcnStations.length, precipStations.length);
64
+ return stationCache;
65
+ }
66
+ /**
67
+ * Find the nearest NBCN station to a given WGS84 coordinate.
68
+ */
69
+ export async function findNearestNbcnStation(lat, lon) {
70
+ const stations = await loadNbcnStations();
71
+ const result = findNearest(stations, (s) => s.lat, (s) => s.lon, lat, lon);
72
+ if (!result) {
73
+ throw new Error('No NBCN stations available');
74
+ }
75
+ return { station: result.item, distance_km: result.distance_km };
76
+ }
77
+ /**
78
+ * Resolve a query to an NBCN station.
79
+ * Tries: exact abbreviation → fuzzy name → geocoding fallback.
80
+ */
81
+ export async function resolveNbcnStation(query) {
82
+ const stations = await loadNbcnStations();
83
+ if (!stationByAbbr) {
84
+ throw new Error('NBCN station index not initialized');
85
+ }
86
+ const q = normalize(query.trim());
87
+ const exact = stationByAbbr.get(q);
88
+ if (exact)
89
+ return exact;
90
+ const nameMatch = stations.find((s) => normalize(s.name).includes(q));
91
+ if (nameMatch)
92
+ return nameMatch;
93
+ debugData('[ogd-nbcn] No direct match for "%s", trying geocoding...', query);
94
+ const geocoded = await geocodeSwissLocation(query);
95
+ if (geocoded) {
96
+ const { station } = await findNearestNbcnStation(geocoded.lat, geocoded.lon);
97
+ debugData('[ogd-nbcn] Geocoded "%s" → %s, nearest station: %s (%s)', query, geocoded.name, station.abbr, station.name);
98
+ return station;
99
+ }
100
+ const examples = stations
101
+ .slice(0, 5)
102
+ .map((s) => `${s.abbr} (${s.name})`)
103
+ .join(', ');
104
+ throw new Error(`No climate station found for "${query}". Examples: ${examples}`);
105
+ }
106
+ /**
107
+ * Clear the in-memory station cache. Useful for testing.
108
+ */
109
+ export function clearNbcnStationCache() {
110
+ stationCache = null;
111
+ stationByAbbr = null;
112
+ }
113
+ //# sourceMappingURL=ogd-nbcn-stations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ogd-nbcn-stations.js","sourceRoot":"","sources":["../../src/data/ogd-nbcn-stations.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,31 @@ import { parseNumeric } from '../support/ogd-csv-parser.js';
8
8
  import { normalize } from '../support/normalize.js';
9
9
  import { debugData } from '../support/logging.js';
10
10
  import { OGD_COLLECTIONS, SOURCE_ATTRIBUTION } from '../schemas/ogd-shared.js';
11
+ /**
12
+ * Map from the first 6 characters of a pollen parameter code to a short
13
+ * species display name. MeteoSwiss codes follow the pattern:
14
+ * k{a|h}{genus-4-chars}{resolution} where genus is a Latin-genus abbreviation.
15
+ */
16
+ const POLLEN_SPECIES = {
17
+ kaalnu: 'Alder (Alnus)',
18
+ kabetu: 'Birch (Betula)',
19
+ kacory: 'Hazel (Corylus)',
20
+ kafagu: 'Beech (Fagus)',
21
+ kafrax: 'Ash (Fraxinus)',
22
+ kaquer: 'Oak (Quercus)',
23
+ khpoac: 'Grasses (Poaceae)',
24
+ };
25
+ /**
26
+ * Get a short display name for a pollen parameter code.
27
+ * Falls back to the raw code if the prefix is not recognized.
28
+ *
29
+ * @param code - Parameter shortname (or 6-char prefix) like 'kaalnud1'
30
+ * @returns Short species name like 'Alder (Alnus)', or the raw code
31
+ */
32
+ function pollenDisplayName(code) {
33
+ const prefix = code.slice(0, 6);
34
+ return POLLEN_SPECIES[prefix] ?? code;
35
+ }
11
36
  /**
12
37
  * Fetch pollen data from MeteoSwiss OGD.
13
38
  *
@@ -23,18 +48,6 @@ export async function getPollenData(params) {
23
48
  throw new Error('Pollen station metadata asset not found');
24
49
  }
25
50
  const stationRows = await getLatin1CsvData(stationMetaAsset.href, 'metadata/pollen-stations.csv', 'metadata');
26
- // Get parameter metadata for pollen type names
27
- const paramMetaAsset = collection.assets?.['ogd-pollen_meta_parameters.csv'];
28
- const paramRows = paramMetaAsset
29
- ? await getLatin1CsvData(paramMetaAsset.href, 'metadata/pollen-parameters.csv', 'metadata')
30
- : [];
31
- const paramNames = new Map();
32
- for (const row of paramRows) {
33
- const code = row.parameter_shortname ?? '';
34
- const name = row.parameter_description_en ?? row.parameter_description_de ?? code;
35
- if (code)
36
- paramNames.set(code, name);
37
- }
38
51
  // Filter stations if search provided
39
52
  let filteredStations = stationRows.filter((r) => r.station_abbr);
40
53
  if (params.station) {
@@ -58,16 +71,34 @@ export async function getPollenData(params) {
58
71
  const latestRow = rows[rows.length - 1];
59
72
  if (!latestRow)
60
73
  return null;
61
- const pollen = [];
74
+ // Collect measurements, preferring d1 (calendar day 0-0 UTC) over d0 (6-6 UTC)
75
+ const d0Values = new Map();
76
+ const d1Values = new Map();
62
77
  for (const [key, value] of Object.entries(latestRow)) {
63
78
  if (key === 'station_abbr' || key === 'reference_timestamp' || key === 'Date')
64
79
  continue;
65
80
  const numVal = parseNumeric(value);
66
81
  if (numVal === null)
67
82
  continue;
83
+ const prefix = key.slice(0, 6);
84
+ const suffix = key.slice(6);
85
+ if (suffix === 'd1') {
86
+ d1Values.set(prefix, numVal);
87
+ }
88
+ else if (suffix === 'd0') {
89
+ d0Values.set(prefix, numVal);
90
+ }
91
+ // Ignore h0, y0, and other resolutions for daily pollen output
92
+ }
93
+ const pollen = [];
94
+ const allPrefixes = new Set([...d1Values.keys(), ...d0Values.keys()]);
95
+ for (const prefix of allPrefixes) {
96
+ const value = d1Values.get(prefix) ?? d0Values.get(prefix);
97
+ if (value === undefined)
98
+ continue;
68
99
  pollen.push({
69
- type: paramNames.get(key) ?? key,
70
- value: numVal,
100
+ type: pollenDisplayName(prefix),
101
+ value,
71
102
  unit: 'particles/m\u00B3',
72
103
  });
73
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ogd-pollen-data.js","sourceRoot":"","sources":["../../src/data/ogd-pollen-data.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAQ/E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAA2B;IAC7D,SAAS,CAAC,2CAA2C,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAE/D,uBAAuB;IACvB,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,8BAA8B,CAAC,CAAC;IAC7E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,gBAAgB,CACxC,gBAAgB,CAAC,IAAI,EACrB,8BAA8B,EAC9B,UAAU,CACX,CAAC;IAEF,+CAA+C;IAC/C,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,gCAAgC,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,cAAc;QAC9B,CAAC,CAAC,MAAM,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,gCAAgC,EAAE,UAAU,CAAC;QAC3F,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,wBAAwB,IAAI,GAAG,CAAC,wBAAwB,IAAI,IAAI,CAAC;QAClF,IAAI,IAAI;YAAE,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,qCAAqC;IACrC,IAAI,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACjE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,EAAE,CACJ,SAAS,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC7F,CAAC;QACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,gCAAgC,MAAM,CAAC,OAAO,KAAK;gBACjD,cAAc,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAqC,EAAE;QAC3E,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,IAAI,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,6DAA6D;QAC7D,MAAM,OAAO,GAAG,wDAAwD,SAAS,eAAe,SAAS,eAAe,CAAC;QAEzH,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC,OAAO,EACP,UAAU,SAAS,mBAAmB,EACtC,UAAU,CACX,CAAC;YACF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,SAAS;gBAAE,OAAO,IAAI,CAAC;YAE5B,MAAM,MAAM,GAAwB,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrD,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,qBAAqB,IAAI,GAAG,KAAK,MAAM;oBAAE,SAAS;gBACxF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,MAAM,KAAK,IAAI;oBAAE,SAAS;gBAC9B,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG;oBAChC,KAAK,EAAE,MAAM;oBACb,IAAI,EAAE,mBAAmB;iBAC1B,CAAC,CAAC;YACL,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP,IAAI,EAAE,UAAU,CAAC,YAAY,IAAI,IAAI;oBACrC,YAAY,EAAE,IAAI;oBAClB,WAAW,EAAE;wBACX,GAAG,EAAE,YAAY,CAAC,UAAU,CAAC,6BAA6B,IAAI,IAAI,CAAC,IAAI,CAAC;wBACxE,GAAG,EAAE,YAAY,CAAC,UAAU,CAAC,6BAA6B,IAAI,IAAI,CAAC,IAAI,CAAC;qBACzE;iBACF;gBACD,SAAS,EAAE,SAAS,CAAC,mBAAmB,IAAI,SAAS,CAAC,IAAI,IAAI,EAAE;gBAChE,MAAM;aACP,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,CAAC,sDAAsD,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC/E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAA0B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAElF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"ogd-pollen-data.js","sourceRoot":"","sources":["../../src/data/ogd-pollen-data.ts"],"names":[],"mappings":"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"}
@@ -14,22 +14,10 @@ import { OGD_COLLECTIONS } from '../schemas/ogd-shared.js';
14
14
  let stationCache = null;
15
15
  let stationByAbbr = null;
16
16
  /**
17
- * Load SMN station metadata from the OGD STAC API.
18
- * Cached in memory after first load.
19
- *
20
- * @returns Array of all SMN stations
17
+ * Parse station metadata rows into SmnStation objects.
21
18
  */
22
- export async function loadSmnStations() {
23
- if (stationCache)
24
- return stationCache;
25
- debugData('[ogd-smn] Loading station metadata...');
26
- const collection = await getCollection(OGD_COLLECTIONS.SMN);
27
- const metaAsset = collection.assets?.['ogd-smn_meta_stations.csv'];
28
- if (!metaAsset) {
29
- throw new Error('Station metadata asset not found in SMN collection');
30
- }
31
- const rows = await getLatin1CsvData(metaAsset.href, 'metadata/smn-stations.csv', 'metadata');
32
- stationCache = rows
19
+ function parseStationRows(rows, network) {
20
+ return rows
33
21
  .filter((r) => r.station_abbr)
34
22
  .map((row) => ({
35
23
  abbr: row.station_abbr ?? '',
@@ -39,9 +27,42 @@ export async function loadSmnStations() {
39
27
  lat: parseNumeric(row.station_coordinates_wgs84_lat ?? null) ?? 0,
40
28
  lon: parseNumeric(row.station_coordinates_wgs84_lon ?? null) ?? 0,
41
29
  data_since: row.station_data_since ?? '',
30
+ network,
42
31
  }));
32
+ }
33
+ /**
34
+ * Load SMN + SMN-precip station metadata from the OGD STAC API.
35
+ * Merges both networks into a single list. Cached in memory after first load.
36
+ *
37
+ * @returns Array of all SMN and SMN-precip stations
38
+ */
39
+ export async function loadSmnStations() {
40
+ if (stationCache)
41
+ return stationCache;
42
+ debugData('[ogd-smn] Loading station metadata (SMN + SMN-precip)...');
43
+ // Load both collections in parallel
44
+ const [smnCollection, precipCollection] = await Promise.all([
45
+ getCollection(OGD_COLLECTIONS.SMN),
46
+ getCollection(OGD_COLLECTIONS.SMN_PRECIP),
47
+ ]);
48
+ const smnAsset = smnCollection.assets?.['ogd-smn_meta_stations.csv'];
49
+ if (!smnAsset) {
50
+ throw new Error('Station metadata asset not found in SMN collection');
51
+ }
52
+ const precipAsset = precipCollection.assets?.['ogd-smn-precip_meta_stations.csv'];
53
+ if (!precipAsset) {
54
+ throw new Error('Station metadata asset not found in SMN-precip collection');
55
+ }
56
+ // Fetch both metadata CSVs in parallel
57
+ const [smnRows, precipRows] = await Promise.all([
58
+ getLatin1CsvData(smnAsset.href, 'metadata/smn-stations.csv', 'metadata'),
59
+ getLatin1CsvData(precipAsset.href, 'metadata/smn-precip-stations.csv', 'metadata'),
60
+ ]);
61
+ const smnStations = parseStationRows(smnRows, 'smn');
62
+ const precipStations = parseStationRows(precipRows, 'smn-precip');
63
+ stationCache = [...smnStations, ...precipStations];
43
64
  stationByAbbr = new Map(stationCache.map((s) => [s.abbr.toLowerCase(), s]));
44
- debugData('[ogd-smn] Loaded %d stations', stationCache.length);
65
+ debugData('[ogd-smn] Loaded %d stations (%d SMN + %d precip)', stationCache.length, smnStations.length, precipStations.length);
45
66
  return stationCache;
46
67
  }
47
68
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ogd-smn-stations.js","sourceRoot":"","sources":["../../src/data/ogd-smn-stations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ogd-smn-stations.js","sourceRoot":"","sources":["../../src/data/ogd-smn-stations.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,10 @@ const STAC_BASE = 'https://data.geo.admin.ch/api/stac/v1';
14
14
  const COLLECTION_FIXTURES = {
15
15
  'ch.meteoschweiz.ogd-local-forecasting': 'collection-local-forecasting.json',
16
16
  'ch.meteoschweiz.ogd-smn': 'collection-ogd-smn.json',
17
+ 'ch.meteoschweiz.ogd-smn-precip': 'collection-ogd-smn-precip.json',
18
+ 'ch.meteoschweiz.ogd-nbcn': 'collection-ogd-nbcn.json',
19
+ 'ch.meteoschweiz.ogd-nbcn-precip': 'collection-ogd-nbcn-precip.json',
20
+ 'ch.meteoschweiz.ogd-obs': 'collection-ogd-obs.json',
17
21
  'ch.meteoschweiz.ogd-pollen': 'collection-pollen.json',
18
22
  };
19
23
  const ITEMS_FIXTURES = {
@@ -1 +1 @@
1
- {"version":3,"file":"ogd-stac-client.js","sourceRoot":"","sources":["../../src/data/ogd-stac-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ogd-stac-client.js","sourceRoot":"","sources":["../../src/data/ogd-stac-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Zod schemas for the meteoswissClimateData MCP tool.
3
+ */
4
+ import { z } from 'zod';
5
+ import { CoordinatesSchema } from './ogd-shared.js';
6
+ /** Coordinates with Swiss bounding-box validation for tool input */
7
+ const CoordinatesParamSchema = CoordinatesSchema.extend({
8
+ lat: z.number().min(45.5).max(48).describe('WGS84 latitude'),
9
+ lon: z.number().min(5.9).max(10.6).describe('WGS84 longitude'),
10
+ }).describe('WGS84 coordinates (alternative to station name)');
11
+ export const CLIMATE_RESOLUTIONS = ['daily', 'monthly', 'yearly'];
12
+ export const GetClimateDataParamsSchema = z.object({
13
+ station: z
14
+ .string()
15
+ .min(1)
16
+ .optional()
17
+ .describe('Climate station name or abbreviation (e.g., "Zurich", "BAS", "Davos"). Part of the National Basic Climatic Network (29 climate + 46 precipitation stations).'),
18
+ coordinates: CoordinatesParamSchema.optional(),
19
+ resolution: z
20
+ .enum(CLIMATE_RESOLUTIONS)
21
+ .default('monthly')
22
+ .describe('Data resolution: daily (temp min/max/mean), monthly (full climate summary), yearly (annual summary)'),
23
+ start_date: z
24
+ .string()
25
+ .optional()
26
+ .describe('Start date filter (YYYY-MM-DD). Only rows on or after this date are returned.'),
27
+ end_date: z
28
+ .string()
29
+ .optional()
30
+ .describe('End date filter (YYYY-MM-DD). Only rows on or before this date are returned.'),
31
+ limit: z
32
+ .number()
33
+ .int()
34
+ .min(1)
35
+ .max(365)
36
+ .default(30)
37
+ .describe('Maximum number of data rows to return (default 30)'),
38
+ });
39
+ //# sourceMappingURL=ogd-climate-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ogd-climate-data.js","sourceRoot":"","sources":["../../src/schemas/ogd-climate-data.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,oEAAoE;AACpE,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,MAAM,CAAC;IACtD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC5D,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;CAC/D,CAAC,CAAC,QAAQ,CAAC,iDAAiD,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAC;AAG3E,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CACP,8JAA8J,CAC/J;IACH,WAAW,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IAC9C,UAAU,EAAE,CAAC;SACV,IAAI,CAAC,mBAAmB,CAAC;SACzB,OAAO,CAAC,SAAS,CAAC;SAClB,QAAQ,CACP,qGAAqG,CACtG;IACH,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,+EAA+E,CAAC;IAC5F,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8EAA8E,CAAC;IAC3F,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,oDAAoD,CAAC;CAClE,CAAC,CAAC"}
@@ -63,6 +63,8 @@ export const OGD_COLLECTIONS = {
63
63
  SMN_PRECIP: 'ch.meteoschweiz.ogd-smn-precip',
64
64
  SMN_TOWER: 'ch.meteoschweiz.ogd-smn-tower',
65
65
  NBCN: 'ch.meteoschweiz.ogd-nbcn',
66
+ NBCN_PRECIP: 'ch.meteoschweiz.ogd-nbcn-precip',
67
+ OBS: 'ch.meteoschweiz.ogd-obs',
66
68
  POLLEN: 'ch.meteoschweiz.ogd-pollen',
67
69
  RADIOSOUNDING: 'ch.meteoschweiz.ogd-radiosounding',
68
70
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ogd-shared.js","sourceRoot":"","sources":["../../src/schemas/ogd-shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ogd-shared.js","sourceRoot":"","sources":["../../src/schemas/ogd-shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,mBAAmB;AAEnB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAE/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAEvD,sBAAsB;AAEtB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAGH,kCAAkC;AAElC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU,EAAW,CAAC;AAGtF;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,WAAW,EAAE,iBAAiB;CAC/B,CAAC,CAAC;AAGH,oCAAoC;AAEpC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,QAAQ,EAAE;CACzD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC;CAC9C,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;CAClC,CAAC,CAAC;AAGH,yBAAyB;AAEzB,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,iBAAiB,EAAE,uCAAuC;IAC1D,GAAG,EAAE,yBAAyB;IAC9B,UAAU,EAAE,gCAAgC;IAC5C,SAAS,EAAE,+BAA+B;IAC1C,IAAI,EAAE,0BAA0B;IAChC,WAAW,EAAE,iCAAiC;IAC9C,GAAG,EAAE,yBAAyB;IAC9B,MAAM,EAAE,4BAA4B;IACpC,aAAa,EAAE,mCAAmC;CAC1C,CAAC;AAEX,wBAAwB;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAA+B,CAAC;AAElE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,WAAW,EAAE,iBAAiB;CAC/B,CAAC,CAAC"}
package/dist/server.js CHANGED
@@ -15,6 +15,8 @@ import { ListStationsParamsSchema } from './schemas/ogd-station-list.js';
15
15
  import { listStations } from './data/ogd-station-list.js';
16
16
  import { GetPollenDataParamsSchema } from './schemas/ogd-pollen-data.js';
17
17
  import { getPollenData } from './data/ogd-pollen-data.js';
18
+ import { GetClimateDataParamsSchema } from './schemas/ogd-climate-data.js';
19
+ import { getClimateData } from './data/ogd-climate-data.js';
18
20
  import { debugServer, debugTools } from './support/logging.js';
19
21
  import { recordToolCall } from './support/metrics.js';
20
22
  import { getVersion } from './support/version.js';
@@ -161,7 +163,9 @@ Forecast horizon: up to 9 days. Updated hourly.`, GetLocalForecastParamsSchema.s
161
163
  });
162
164
  // Register getCurrentWeather tool (OGD)
163
165
  debugServer('Registering tool: getCurrentWeather');
164
- server.tool('meteoswissCurrentWeather', `Get real-time weather measurements from any of ~160 Swiss automatic weather stations. Returns temperature, precipitation, wind, humidity, pressure, sunshine, and more. Data updates every 10 minutes.
166
+ server.tool('meteoswissCurrentWeather', `Get real-time weather measurements from ~300 Swiss automatic weather stations (~160 full weather + ~140 precipitation-only). Returns temperature, precipitation, wind, humidity, pressure, sunshine, and more. Data updates every 10 minutes. Precipitation-only stations return only rainfall data.
167
+
168
+ For 8 stations (Zurich, Basel, Chur, Sion, Altdorf, Säntis, Jungfraujoch, Grand St-Bernard), also includes daily visual observations: cloud cover, fog, rain, snowfall, hail, and snow coverage.
165
169
 
166
170
  Accepts station names ("Zurich"), abbreviations ("SMA"), addresses ("Bahnhofplatz 1 Bern"), or WGS84 coordinates. Automatically finds the nearest station.`, GetCurrentWeatherParamsSchema.shape, async (params) => {
167
171
  const _t0 = performance.now();
@@ -242,6 +246,39 @@ Accepts station names ("Zurich"), abbreviations ("SMA"), addresses ("Bahnhofplat
242
246
  };
243
247
  }
244
248
  });
249
+ // Register getClimateData tool (OGD NBCN)
250
+ debugServer('Registering tool: getClimateData');
251
+ server.tool('meteoswissClimateData', `Get homogeneous climate measurement series from Switzerland's National Basic Climatic Network (NBCN). Returns temperature, precipitation, sunshine, radiation, wind, pressure, and climate indicators (frost days, summer days, heat days) going back decades.
252
+
253
+ 29 climate stations + 46 precipitation stations with daily, monthly, and yearly resolution.
254
+
255
+ Use cases: "What are typical January temperatures in Zurich?", "How has precipitation changed in Basel over 50 years?", "How many heat days did Lugano have last year?"
256
+
257
+ Accepts station names ("Zurich", "Basel"), abbreviations ("SMA", "BAS"), or WGS84 coordinates.`, GetClimateDataParamsSchema.shape, async (params) => {
258
+ const _t0 = performance.now();
259
+ try {
260
+ console.error(`Processing meteoswissClimateData request: station=${params.station ?? ''}, resolution=${params.resolution ?? 'monthly'}`);
261
+ debugTools('getClimateData called with params: %O', params);
262
+ const result = await getClimateData(params);
263
+ console.error(`Successfully retrieved climate data: ${result.data.length} rows`);
264
+ recordToolCall('meteoswissClimateData', performance.now() - _t0);
265
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
266
+ }
267
+ catch (error) {
268
+ console.error('Error in meteoswissClimateData tool:', error);
269
+ debugTools('Error in getClimateData: %O', error);
270
+ recordToolCall('meteoswissClimateData', performance.now() - _t0);
271
+ return {
272
+ content: [
273
+ {
274
+ type: 'text',
275
+ text: `Failed to get climate data: ${error instanceof Error ? error.message : String(error)}`,
276
+ },
277
+ ],
278
+ isError: true,
279
+ };
280
+ }
281
+ });
245
282
  // Register prompts
246
283
  debugServer('Registering prompts');
247
284
  // German prompt for Northern Switzerland
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -1,47 +1,35 @@
1
1
  /**
2
2
  * CSV parser for MeteoSwiss OGD data files.
3
- * Handles semicolon delimiters and Latin1/Windows-1252 encoding.
3
+ * Wraps csv-parse/sync with MeteoSwiss-specific configuration:
4
+ * semicolon delimiters, RFC 4180 quoting, and null mapping for missing values.
4
5
  */
6
+ import { parse } from 'csv-parse/sync';
5
7
  import { debugData } from './logging.js';
6
8
  /**
7
9
  * Parse a MeteoSwiss CSV string into typed rows.
8
10
  * MeteoSwiss uses semicolon delimiters with missing values as '-' or empty.
11
+ * Handles RFC 4180 quoted fields (descriptions may contain embedded semicolons).
9
12
  *
10
13
  * @param csvText - Raw CSV text content
11
14
  * @param filter - Optional predicate to filter rows during parsing (avoids allocating unneeded rows)
12
15
  * @returns Array of parsed rows as key-value objects
13
16
  */
14
17
  export function parseCsv(csvText, filter) {
15
- const lines = csvText.split('\n').filter((line) => line.trim().length > 0);
16
- if (lines.length < 2) {
18
+ if (!csvText.trim())
17
19
  return [];
18
- }
19
- const headerLine = lines[0];
20
- if (!headerLine) {
21
- return [];
22
- }
23
- const headers = headerLine.split(';').map((h) => h.trim());
24
- debugData('[ogd-csv] Parsed %d headers: %s', headers.length, headers.join(', '));
25
- const rows = [];
26
- for (let i = 1; i < lines.length; i++) {
27
- const line = lines[i];
28
- if (!line)
29
- continue;
30
- const values = line.split(';');
31
- const row = {};
32
- for (let j = 0; j < headers.length; j++) {
33
- const header = headers[j];
34
- if (!header)
35
- continue;
36
- const raw = values[j]?.trim() ?? '';
37
- row[header] = raw === '' || raw === '-' ? null : raw;
38
- }
39
- if (!filter || filter(row)) {
40
- rows.push(row);
41
- }
42
- }
43
- debugData('[ogd-csv] Parsed %d data rows (from %d lines)', rows.length, lines.length - 1);
44
- return rows;
20
+ const records = parse(csvText, {
21
+ delimiter: ';',
22
+ columns: true,
23
+ skip_empty_lines: true,
24
+ trim: true,
25
+ relax_column_count: true,
26
+ cast: (value) => (value === '' || value === '-' ? null : value),
27
+ on_record: filter
28
+ ? (record) => (filter(record) ? record : null)
29
+ : undefined,
30
+ });
31
+ debugData('[ogd-csv] Parsed %d data rows', records.length);
32
+ return records;
45
33
  }
46
34
  /**
47
35
  * Parse a numeric value from a CSV cell, returning null for missing data.
@@ -1 +1 @@
1
- {"version":3,"file":"ogd-csv-parser.js","sourceRoot":"","sources":["../../src/support/ogd-csv-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAKzC;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,MAAiC;IACzE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,SAAS,CAAC,iCAAiC,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjF,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAW,EAAE,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACpC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QACvD,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,SAAS,CAAC,+CAA+C,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1F,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAoB;IAC/C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"ogd-csv-parser.js","sourceRoot":"","sources":["../../src/support/ogd-csv-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAKzC;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,MAAiC;IACzE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAE/B,MAAM,OAAO,GAAa,KAAK,CAAC,OAAO,EAAE;QACvC,SAAS,EAAE,GAAG;QACd,OAAO,EAAE,IAAI;QACb,gBAAgB,EAAE,IAAI;QACtB,IAAI,EAAE,IAAI;QACV,kBAAkB,EAAE,IAAI;QACxB,IAAI,EAAE,CAAC,KAAa,EAAiB,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACtF,SAAS,EAAE,MAAM;YACf,CAAC,CAAC,CAAC,MAAc,EAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACrE,CAAC,CAAC,SAAS;KACd,CAAa,CAAC;IAEf,SAAS,CAAC,+BAA+B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAoB;IAC/C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AACxC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "meteoswiss-mcp",
3
3
  "mcpName": "io.github.eins78/meteoswiss-mcp",
4
- "version": "2.2.1",
4
+ "version": "2.3.0-rc.1",
5
5
  "description": "MCP server for MeteoSwiss weather data — forecasts, real-time measurements, stations, pollen.",
6
6
  "license": "CC0-1.0",
7
7
  "author": "Max F. Albrecht <1@178.is>",
@@ -58,6 +58,7 @@
58
58
  "@eins78/styles": "^1.0.0",
59
59
  "@modelcontextprotocol/sdk": "^1.28.0",
60
60
  "cors": "^2.8.6",
61
+ "csv-parse": "^6.2.1",
61
62
  "debug": "^4.4.3",
62
63
  "express": "^5.2.1",
63
64
  "express-rate-limit": "^8.3.1",