open-meteo-mcp-server 1.7.0 → 2.0.0

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,97 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ Releases before 2.0.0 predate this file; see the
9
+ [GitHub releases](https://github.com/cmer81/open-meteo-mcp/releases) for their notes.
10
+
11
+ ## [2.0.0] - 2026-07-25
12
+
13
+ Security and correctness release. Everything breaking here is confined to the
14
+ **Streamable HTTP transport**. If you use the default stdio transport (npx,
15
+ Claude Desktop) or the Docker image, no action is required.
16
+
17
+ ### Breaking Changes
18
+
19
+ - **The HTTP transport now binds to `127.0.0.1` instead of all interfaces.** A
20
+ server started with `TRANSPORT=http` is reachable only from the local machine
21
+ unless you set `HOST=0.0.0.0`. The failure mode is silent: the process starts
22
+ normally and its internal health check still passes, but no external client can
23
+ reach it. The Docker image sets `HOST=0.0.0.0` itself, so published ports keep
24
+ working unchanged.
25
+
26
+ ```bash
27
+ # before
28
+ TRANSPORT=http PORT=3000 npx open-meteo-mcp-server
29
+ # after, for anything other than local-only use
30
+ HOST=0.0.0.0 TRANSPORT=http PORT=3000 npx open-meteo-mcp-server
31
+ ```
32
+
33
+ - **Requests carrying an `Origin` header are rejected with `403` unless the origin
34
+ is allow-listed.** This is DNS rebinding protection. Clients that send no
35
+ `Origin` — CLI tools, SDK transports, container probes — are unaffected. Browser
36
+ based clients must now be declared:
37
+
38
+ ```bash
39
+ ALLOWED_ORIGINS=https://app.example,http://localhost:5173
40
+ ```
41
+
42
+ - **`API_KEY` is now enforced on `GET` and `DELETE /mcp`, not just `POST`.** Any
43
+ client that reached those two verbs without a key was relying on the flaw fixed
44
+ below and will now receive `401`.
45
+
46
+ ### Fixed
47
+
48
+ - **`weather_archive` and `climate_projection` published an empty input schema.**
49
+ Both use a `.refine()` for their `start_date <= end_date` rule, which produces a
50
+ `ZodEffects` the SDK cannot introspect: it advertised `{}` as the input schema
51
+ while still validating strictly, so clients had no way to learn the parameters
52
+ and any guess was rejected. Both tools now publish their full schema (16 and 13
53
+ properties, with `latitude`, `longitude`, `start_date` and `end_date` required),
54
+ and cross-field rules remain enforced.
55
+
56
+ - **Response truncation overshot its own limit by roughly 2.5x.** Sizes were
57
+ measured on compact JSON while the response was emitted pretty-printed. A
58
+ 16-day, 20-variable forecast was "truncated" to 24,904 characters and emitted at
59
+ 61,279, which clients rejected outright. Truncation now measures the text as it
60
+ is actually emitted, including the truncation notice, and the same request
61
+ returns 24,959 characters.
62
+
63
+ - **Authentication and rate limiting never ran on `GET` and `DELETE /mcp`.** The
64
+ middlewares were registered after those routes, and Express runs middleware in
65
+ declaration order. With `API_KEY` set, `POST` answered `401` while `GET` and
66
+ `DELETE` answered `404` having skipped authentication entirely; 70
67
+ unauthenticated `DELETE`s drew no `429`. A caller holding a session id could
68
+ terminate another client's session without a key. Session ids are UUIDv4 and
69
+ cannot be guessed, so exploitation required a leaked id — but the key protected
70
+ only one verb of three.
71
+
72
+ - **Clients sending `Accept: */*` received `406 Not Acceptable`.** The header
73
+ normalizer mutated `req.headers`, but the SDK rebuilds the request from Node's
74
+ raw header array through Hono, so its work was invisible to the transport. It
75
+ now rewrites `rawHeaders` as well.
76
+
77
+ ### Added
78
+
79
+ - `HOST` — interface the HTTP transport binds to (default `127.0.0.1`).
80
+ - `ALLOWED_ORIGINS` — comma-separated browser origins permitted to reach the
81
+ server. Empty by default.
82
+ - 14 regression tests covering the published schema of every tool, the emitted
83
+ response size, and the auth, origin and `Accept` behaviour of the HTTP pipeline.
84
+
85
+ ### Documentation
86
+
87
+ - Documented `HOST`, `ALLOWED_ORIGINS` and the 25,000-character response cap,
88
+ none of which were described anywhere despite appearing in every truncated
89
+ payload.
90
+ - Corrected the README's production example, which the new binding default left
91
+ unreachable, and its claim of 7-day forecasts (the schema allows 16).
92
+ - `CLAUDE.md` now records the three traps behind the fixes above, since none are
93
+ apparent from reading the code: middleware mounted after a route silently skips
94
+ it, truncation must measure the text as emitted, and `.refine()` yields a
95
+ `ZodEffects` the SDK cannot introspect.
96
+
97
+ [2.0.0]: https://github.com/cmer81/open-meteo-mcp/compare/v1.7.0...v2.0.0
package/README.md CHANGED
@@ -11,7 +11,7 @@ A comprehensive [Model Context Protocol (MCP)](https://modelcontextprotocol.io)
11
11
  This MCP server provides complete access to Open-Meteo APIs, including:
12
12
 
13
13
  ### Core Weather APIs
14
- - **Weather Forecast** (`weather_forecast`) - 7-day forecasts with hourly and daily resolution
14
+ - **Weather Forecast** (`weather_forecast`) - Forecasts up to 16 days (7 by default) with hourly and daily resolution
15
15
  - **Weather Archive** (`weather_archive`) - Historical ERA5 data from 1940 to present
16
16
  - **Air Quality** (`air_quality`) - PM2.5, PM10, ozone, nitrogen dioxide, pollen, European/US AQI indices, UV index and other pollutants
17
17
  - **Marine Weather** (`marine_weather`) - Wave height, wave period, wave direction and sea surface temperature
@@ -168,12 +168,16 @@ TRANSPORT=http PORT=3000 npx open-meteo-mcp-server
168
168
 
169
169
  This starts an Express server on the specified port (default: 3000) with the MCP endpoint at `/mcp`. The HTTP transport supports session management with unique session IDs per client.
170
170
 
171
- For production deployments, enable authentication and rate limiting:
171
+ > **The server binds to `127.0.0.1` by default**, so it is reachable only from the local machine. To accept connections from other hosts, set `HOST=0.0.0.0` explicitly. The Docker image already does this, so published ports work without extra configuration.
172
+
173
+ For production deployments, bind to a reachable interface and enable authentication and rate limiting:
172
174
 
173
175
  ```bash
174
- API_KEY=your-secret-key RATE_LIMIT_RPM=60 TRANSPORT=http PORT=3000 npx open-meteo-mcp-server
176
+ HOST=0.0.0.0 API_KEY=your-secret-key RATE_LIMIT_RPM=60 TRANSPORT=http PORT=3000 npx open-meteo-mcp-server
175
177
  ```
176
178
 
179
+ If a browser-based client connects to the server, list its origin in `ALLOWED_ORIGINS` — requests carrying an unlisted `Origin` header are rejected with `403` as DNS rebinding protection.
180
+
177
181
  Clients must then include the key in every request:
178
182
  ```
179
183
  Authorization: Bearer your-secret-key
@@ -213,11 +217,11 @@ docker run -d \
213
217
  curl http://localhost:3000/health
214
218
  ```
215
219
 
216
- Available tags:
220
+ Available tags (no `v` prefix — the git tag `v2.0.0` publishes the image as `2.0.0`):
217
221
  - `latest` - Latest stable release
218
- - `v1.x.x` - Specific version (e.g., `v1.1.3`)
219
- - `1` - Latest v1.x.x release
220
- - `1.1` - Latest v1.1.x release
222
+ - `2.0.0` - Specific version
223
+ - `2.0` - Latest 2.0.x release
224
+ - `2` - Latest 2.x.x release
221
225
 
222
226
  #### Using Docker Compose
223
227
 
@@ -297,12 +301,16 @@ All environment variables are optional and have sensible defaults:
297
301
  - `OPEN_METEO_CLIMATE_API_URL` - Climate projection API URL (default: https://climate-api.open-meteo.com)
298
302
  - `TRANSPORT` - Transport mode: `http` for Streamable HTTP, omit for stdio (default: stdio)
299
303
  - `PORT` - HTTP server port when using HTTP transport (default: 3000)
304
+ - `HOST` - Interface the HTTP transport binds to (default: `127.0.0.1`, loopback only). Set to `0.0.0.0` to accept connections from other machines. The Docker image sets this to `0.0.0.0` already, so published ports work out of the box.
300
305
 
301
306
  #### HTTP Transport Security (optional)
302
307
 
303
- - `API_KEY` - When set, all requests to `/mcp` must include this key via `Authorization: Bearer <key>` or `X-API-Key: <key>`. Leave unset for open access (local/dev mode).
308
+ - `API_KEY` - When set, all requests to `/mcp` must include this key via `Authorization: Bearer <key>` or `X-API-Key: <key>`. Leave unset for open access (local/dev mode). Enforced on `GET`, `POST` and `DELETE` alike.
304
309
  - `RATE_LIMIT_RPM` - Maximum requests per minute per IP (default: `60`). HTTP transport only.
305
310
  - `TRUSTED_PROXIES` - Comma-separated list of trusted proxy IPs or CIDR ranges (e.g. `10.0.0.0/8,172.16.0.0/12`). When set, `X-Forwarded-For` is honoured only for requests originating from these addresses. Leave unset to always use the direct connection IP.
311
+ - `ALLOWED_ORIGINS` - Comma-separated list of browser origins permitted to reach the server (e.g. `http://localhost:5173,https://app.example`). Protects against DNS rebinding: any request carrying an `Origin` header that is not listed is rejected with `403`. Requests without an `Origin` header — CLI clients and SDK transports — are unaffected. Empty by default.
312
+
313
+ `/health` stays reachable without a key and without rate limiting, so container probes keep working.
306
314
 
307
315
  ## Skills
308
316
 
@@ -372,6 +380,10 @@ What were the temperatures in London during January 2023?
372
380
  What's the current air quality in Beijing with PM2.5 and ozone levels?
373
381
  ```
374
382
 
383
+ ```
384
+ Give me the current European AQI, UV index, and pollen levels (birch, grass, ragweed) in Paris.
385
+ ```
386
+
375
387
  ### Marine Weather
376
388
  ```
377
389
  Get me the wave height and sea surface temperature for coordinates 45.0, -125.0 for the next 5 days.
@@ -382,6 +394,16 @@ Get me the wave height and sea surface temperature for coordinates 45.0, -125.0
382
394
  Check the river discharge forecast for coordinates 52.5, 13.4 for the next 30 days.
383
395
  ```
384
396
 
397
+ ### Seasonal Forecast
398
+ ```
399
+ Give me the weekly and monthly temperature outlook for Madrid over the next 4 months.
400
+ ```
401
+
402
+ ### Ensemble Forecast
403
+ ```
404
+ Compare the ICON and GFS ensemble forecasts for Berlin over the next 5 days and show the spread across members.
405
+ ```
406
+
385
407
  ### Climate Projections
386
408
  ```
387
409
  Show me temperature projections for New York from 2050 to 2070 using CMIP6 models.
@@ -494,7 +516,8 @@ src/
494
516
  ├── client.ts # HTTP client for Open-Meteo API
495
517
  ├── tools.ts # MCP tool definitions
496
518
  ├── types.ts # Zod validation schemas
497
- └── security.ts # Auth middleware, rate limiter, IP extraction
519
+ ├── truncation.ts # Response size capping and serialization
520
+ └── security.ts # Auth, origin validation, rate limiter, IP extraction
498
521
  ```
499
522
 
500
523
  ## API Coverage
@@ -533,6 +556,19 @@ The server provides comprehensive error handling with detailed error messages fo
533
556
  - Network connectivity issues
534
557
  - Invalid date ranges
535
558
 
559
+ ### Response Size Limits
560
+
561
+ Tool responses are capped at 25,000 characters so a single wide query cannot overflow an LLM's context. When a response exceeds the limit, the time-series arrays (`hourly`, `daily`, `minutely_15`) are shortened by an equal ratio — keeping every parallel series aligned on the same timestamps — and two fields are added:
562
+
563
+ ```json
564
+ {
565
+ "truncated": true,
566
+ "truncation_message": "Response truncated from 95538 characters to stay within the 25000-character limit. Narrow the request (start_date/end_date, forecast_days, past_days, or fewer variables) to retrieve the full data."
567
+ }
568
+ ```
569
+
570
+ To get complete data, narrow the request: shorter date range, fewer `forecast_days`/`past_days`, or fewer variables.
571
+
536
572
  ## Performance
537
573
 
538
574
  - Efficient HTTP client with connection pooling
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export declare class OpenMeteoMCPServer {
7
7
  private static readonly MAX_SESSIONS;
8
8
  private static readonly CLEANUP_INTERVAL_MS;
9
9
  constructor();
10
+ private registerReadOnlyTool;
10
11
  private createServer;
11
12
  private getSession;
12
13
  private startCleanupTimer;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAsDvB,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,cAAc,CAGR;IAEd,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAkB;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAO;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAiB;;IAO5D,OAAO,CAAC,YAAY;IAsIpB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,eAAe;IAkQvB,OAAO,CAAC,kBAAkB;IAapB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiB3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AA6FvB,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,cAAc,CAGR;IAEd,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAkB;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAO;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAiB;;IAiB5D,OAAO,CAAC,oBAAoB;IAgE5B,OAAO,CAAC,YAAY;IA8GpB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,eAAe;IAmPvB,OAAO,CAAC,kBAAkB;IAiBpB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiB3B"}
package/dist/index.js CHANGED
@@ -3,14 +3,15 @@ import 'dotenv/config';
3
3
  import { readFileSync } from 'node:fs';
4
4
  import { dirname, join } from 'node:path';
5
5
  import { fileURLToPath } from 'node:url';
6
- import { Server } from '@modelcontextprotocol/sdk/server/index.js';
6
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
7
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
8
  import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
9
- import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
10
9
  import express from 'express';
10
+ import { z } from 'zod';
11
11
  import { OpenMeteoClient } from './client.js';
12
- import { createAuthMiddleware, createRateLimiter, generateSessionId, getClientIp, sanitizeErrorMessage, } from './security.js';
13
- import { ALL_TOOLS } from './tools.js';
12
+ import { createAcceptNormalizer, createAuthMiddleware, createOriginValidator, createRateLimiter, generateSessionId, getClientIp, sanitizeErrorMessage, } from './security.js';
13
+ import { AIR_QUALITY_TOOL, CLIMATE_PROJECTION_TOOL, DWD_ICON_FORECAST_TOOL, ECMWF_FORECAST_TOOL, ELEVATION_TOOL, ENSEMBLE_FORECAST_TOOL, FLOOD_FORECAST_TOOL, GEM_FORECAST_TOOL, GEOCODING_TOOL, GFS_FORECAST_TOOL, JMA_FORECAST_TOOL, MARINE_WEATHER_TOOL, METEOFRANCE_FORECAST_TOOL, METNO_FORECAST_TOOL, SEASONAL_FORECAST_TOOL, WEATHER_ARCHIVE_TOOL, WEATHER_FORECAST_TOOL, } from './tools.js';
14
+ import { serializeToolResponse } from './truncation.js';
14
15
  import { AirQualityParamsSchema, ArchiveParamsSchema, ClimateParamsSchema, DwdIconParamsSchema, EcmwfParamsSchema, ElevationParamsSchema, EnsembleParamsSchema, FloodParamsSchema, ForecastParamsSchema, GemParamsSchema, GeocodingParamsSchema, GfsParamsSchema, JmaParamsSchema, MarineParamsSchema, MeteoFranceParamsSchema, MetnoParamsSchema, SeasonalParamsSchema, } from './types.js';
15
16
  const __filename = fileURLToPath(import.meta.url);
16
17
  const __dirname = dirname(__filename);
@@ -29,117 +30,47 @@ export class OpenMeteoMCPServer {
29
30
  const baseURL = process.env.OPEN_METEO_API_URL || 'https://api.open-meteo.com';
30
31
  this.client = new OpenMeteoClient(baseURL, pkg.version);
31
32
  }
32
- createServer() {
33
- const server = new Server({
34
- name: 'open-meteo-mcp-server',
35
- version: pkg.version,
36
- }, {
37
- capabilities: {
38
- tools: {},
39
- },
40
- });
41
- // Setup handlers for this server instance
42
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
43
- tools: ALL_TOOLS,
44
- }));
45
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
46
- const { name, arguments: args } = request.params;
33
+ // Registers a read-only tool: wires the Zod schema (validation + generated
34
+ // JSON schema), and wraps the handler with logging, response truncation,
35
+ // and MCP-style error results shared across all 17 tools.
36
+ //
37
+ // The schemas arrive here as a common `z.ZodTypeAny` rather than the concrete
38
+ // per-tool types registerTool's generic overloads expect, so the call below
39
+ // goes through an untyped signature; each call site's `handler` still gets a
40
+ // precise, explicitly-annotated params type. Note this cast also silences the
41
+ // SDK's compile-time check on `inputSchema` — see the ZodEffects handling
42
+ // below for what that check would otherwise have caught.
43
+ registerReadOnlyTool(server, meta, schema, handler) {
44
+ const registerToolUntyped = server.registerTool.bind(server);
45
+ // `.refine()` wraps the object in a ZodEffects, which the SDK cannot
46
+ // introspect: it would publish an empty `{}` input schema while still
47
+ // validating strictly, leaving clients with no idea what to send. Publish
48
+ // the underlying object and re-apply the effects below.
49
+ const objectSchema = schema instanceof z.ZodEffects ? schema.innerType() : schema;
50
+ registerToolUntyped(meta.name, {
51
+ title: meta.title,
52
+ description: meta.description,
53
+ inputSchema: objectSchema,
54
+ annotations: meta.annotations,
55
+ }, async (params) => {
47
56
  const start = Date.now();
48
- log('info', 'tool_call', { tool: name, args });
57
+ log('info', 'tool_call', { tool: meta.name, args: params });
58
+ // Cross-field rules (e.g. start_date <= end_date) live in the effects
59
+ // the SDK never sees, so they are enforced here.
60
+ const refined = schema.safeParse(params);
61
+ if (!refined.success) {
62
+ const message = refined.error.issues.map((issue) => issue.message).join('; ');
63
+ log('error', 'tool_error', { tool: meta.name, error: message, duration_ms: 0 });
64
+ return {
65
+ content: [{ type: 'text', text: `Error: ${message}` }],
66
+ isError: true,
67
+ };
68
+ }
49
69
  try {
50
- let result;
51
- switch (name) {
52
- case 'weather_forecast': {
53
- const params = ForecastParamsSchema.parse(args);
54
- result = await this.client.getForecast(params);
55
- break;
56
- }
57
- case 'weather_archive': {
58
- const params = ArchiveParamsSchema.parse(args);
59
- result = await this.client.getArchive(params);
60
- break;
61
- }
62
- case 'air_quality': {
63
- const params = AirQualityParamsSchema.parse(args);
64
- result = await this.client.getAirQuality(params);
65
- break;
66
- }
67
- case 'marine_weather': {
68
- const params = MarineParamsSchema.parse(args);
69
- result = await this.client.getMarine(params);
70
- break;
71
- }
72
- case 'elevation': {
73
- const params = ElevationParamsSchema.parse(args);
74
- result = await this.client.getElevation(params);
75
- break;
76
- }
77
- case 'flood_forecast': {
78
- const params = FloodParamsSchema.parse(args);
79
- result = await this.client.getFlood(params);
80
- break;
81
- }
82
- case 'geocoding': {
83
- const params = GeocodingParamsSchema.parse(args);
84
- result = await this.client.getGeocoding(params);
85
- break;
86
- }
87
- case 'dwd_icon_forecast': {
88
- const params = DwdIconParamsSchema.parse(args);
89
- result = await this.client.getDwdIcon(params);
90
- break;
91
- }
92
- case 'gfs_forecast': {
93
- const params = GfsParamsSchema.parse(args);
94
- result = await this.client.getGfs(params);
95
- break;
96
- }
97
- case 'meteofrance_forecast': {
98
- const params = MeteoFranceParamsSchema.parse(args);
99
- result = await this.client.getMeteoFrance(params);
100
- break;
101
- }
102
- case 'ecmwf_forecast': {
103
- const params = EcmwfParamsSchema.parse(args);
104
- result = await this.client.getEcmwf(params);
105
- break;
106
- }
107
- case 'jma_forecast': {
108
- const params = JmaParamsSchema.parse(args);
109
- result = await this.client.getJma(params);
110
- break;
111
- }
112
- case 'metno_forecast': {
113
- const params = MetnoParamsSchema.parse(args);
114
- result = await this.client.getMetno(params);
115
- break;
116
- }
117
- case 'gem_forecast': {
118
- const params = GemParamsSchema.parse(args);
119
- result = await this.client.getGem(params);
120
- break;
121
- }
122
- case 'seasonal_forecast': {
123
- const params = SeasonalParamsSchema.parse(args);
124
- result = await this.client.getSeasonal(params);
125
- break;
126
- }
127
- case 'climate_projection': {
128
- const params = ClimateParamsSchema.parse(args);
129
- result = await this.client.getClimate(params);
130
- break;
131
- }
132
- case 'ensemble_forecast': {
133
- const params = EnsembleParamsSchema.parse(args);
134
- result = await this.client.getEnsemble(params);
135
- break;
136
- }
137
- default:
138
- throw new Error(`Unknown tool: ${name}`);
139
- }
140
- const responseText = JSON.stringify(result, null, 2);
70
+ const result = await handler(refined.data);
71
+ const responseText = serializeToolResponse(result);
141
72
  log('info', 'tool_success', {
142
- tool: name,
73
+ tool: meta.name,
143
74
  response_size: responseText.length,
144
75
  duration_ms: Date.now() - start,
145
76
  });
@@ -147,10 +78,41 @@ export class OpenMeteoMCPServer {
147
78
  }
148
79
  catch (err) {
149
80
  const message = err instanceof Error ? err.message : 'Unknown error';
150
- log('error', 'tool_error', { tool: name, error: message, duration_ms: Date.now() - start });
81
+ log('error', 'tool_error', {
82
+ tool: meta.name,
83
+ error: message,
84
+ duration_ms: Date.now() - start,
85
+ });
151
86
  return { content: [{ type: 'text', text: `Error: ${message}` }], isError: true };
152
87
  }
153
88
  });
89
+ }
90
+ createServer() {
91
+ const server = new McpServer({
92
+ name: 'open-meteo-mcp-server',
93
+ version: pkg.version,
94
+ }, {
95
+ capabilities: {
96
+ tools: {},
97
+ },
98
+ });
99
+ this.registerReadOnlyTool(server, WEATHER_FORECAST_TOOL, ForecastParamsSchema, (params) => this.client.getForecast(params));
100
+ this.registerReadOnlyTool(server, WEATHER_ARCHIVE_TOOL, ArchiveParamsSchema, (params) => this.client.getArchive(params));
101
+ this.registerReadOnlyTool(server, AIR_QUALITY_TOOL, AirQualityParamsSchema, (params) => this.client.getAirQuality(params));
102
+ this.registerReadOnlyTool(server, MARINE_WEATHER_TOOL, MarineParamsSchema, (params) => this.client.getMarine(params));
103
+ this.registerReadOnlyTool(server, ELEVATION_TOOL, ElevationParamsSchema, (params) => this.client.getElevation(params));
104
+ this.registerReadOnlyTool(server, FLOOD_FORECAST_TOOL, FloodParamsSchema, (params) => this.client.getFlood(params));
105
+ this.registerReadOnlyTool(server, GEOCODING_TOOL, GeocodingParamsSchema, (params) => this.client.getGeocoding(params));
106
+ this.registerReadOnlyTool(server, DWD_ICON_FORECAST_TOOL, DwdIconParamsSchema, (params) => this.client.getDwdIcon(params));
107
+ this.registerReadOnlyTool(server, GFS_FORECAST_TOOL, GfsParamsSchema, (params) => this.client.getGfs(params));
108
+ this.registerReadOnlyTool(server, METEOFRANCE_FORECAST_TOOL, MeteoFranceParamsSchema, (params) => this.client.getMeteoFrance(params));
109
+ this.registerReadOnlyTool(server, ECMWF_FORECAST_TOOL, EcmwfParamsSchema, (params) => this.client.getEcmwf(params));
110
+ this.registerReadOnlyTool(server, JMA_FORECAST_TOOL, JmaParamsSchema, (params) => this.client.getJma(params));
111
+ this.registerReadOnlyTool(server, METNO_FORECAST_TOOL, MetnoParamsSchema, (params) => this.client.getMetno(params));
112
+ this.registerReadOnlyTool(server, GEM_FORECAST_TOOL, GemParamsSchema, (params) => this.client.getGem(params));
113
+ this.registerReadOnlyTool(server, SEASONAL_FORECAST_TOOL, SeasonalParamsSchema, (params) => this.client.getSeasonal(params));
114
+ this.registerReadOnlyTool(server, CLIMATE_PROJECTION_TOOL, ClimateParamsSchema, (params) => this.client.getClimate(params));
115
+ this.registerReadOnlyTool(server, ENSEMBLE_FORECAST_TOOL, EnsembleParamsSchema, (params) => this.client.getEnsemble(params));
154
116
  return server;
155
117
  }
156
118
  getSession(sessionId) {
@@ -181,26 +143,14 @@ export class OpenMeteoMCPServer {
181
143
  app.get('/health', (_req, res) => {
182
144
  res.status(200).json({ status: 'ok' });
183
145
  });
184
- app.use((req, _res, next) => {
185
- const acceptHeader = req.headers.accept;
186
- const tokens = acceptHeader
187
- ? acceptHeader
188
- .split(',')
189
- .map((value) => value.trim())
190
- .filter(Boolean)
191
- : [];
192
- const normalized = new Set(tokens.map((value) => value.toLowerCase()));
193
- const ensureHeader = (value) => {
194
- if (!normalized.has(value)) {
195
- tokens.push(value);
196
- normalized.add(value);
197
- }
198
- };
199
- ensureHeader('application/json');
200
- ensureHeader('text/event-stream');
201
- req.headers.accept = tokens.join(', ');
202
- next();
203
- });
146
+ app.use(createAcceptNormalizer());
147
+ // Every guard below must be registered BEFORE the routes it protects:
148
+ // Express runs middleware in declaration order, so anything mounted after a
149
+ // route never runs for it. These three previously sat between the DELETE and
150
+ // POST handlers, leaving GET and DELETE unauthenticated and unthrottled.
151
+ app.use(createOriginValidator());
152
+ app.use(createRateLimiter());
153
+ app.use(createAuthMiddleware());
204
154
  // GET /mcp — SSE streaming for server-to-client notifications
205
155
  app.get('/mcp', async (req, res) => {
206
156
  const remoteIp = getClientIp(req);
@@ -297,8 +247,6 @@ export class OpenMeteoMCPServer {
297
247
  }
298
248
  }
299
249
  });
300
- app.use(createRateLimiter());
301
- app.use(createAuthMiddleware());
302
250
  app.post('/mcp', async (req, res) => {
303
251
  const remoteIp = getClientIp(req);
304
252
  const userAgent = req.headers['user-agent'] ?? 'unknown';
@@ -331,20 +279,24 @@ export class OpenMeteoMCPServer {
331
279
  const newSessionId = generateSessionId();
332
280
  log('info', 'session_created', { session_id: newSessionId.substring(0, 8) });
333
281
  // Create server and transport for this new session
334
- const server = this.createServer();
282
+ const mcpServer = this.createServer();
335
283
  const transport = new StreamableHTTPServerTransport({
336
284
  enableJsonResponse: true,
337
285
  sessionIdGenerator: () => newSessionId,
338
286
  });
339
- server.oninitialized = () => {
287
+ mcpServer.server.oninitialized = () => {
340
288
  log('info', 'session_initialized', { session_id: newSessionId.substring(0, 8) });
341
289
  };
342
- server.onclose = () => {
290
+ mcpServer.server.onclose = () => {
343
291
  this.sessionServers.delete(newSessionId);
344
292
  log('info', 'session_closed', { session_id: newSessionId.substring(0, 8) });
345
293
  };
346
- await server.connect(transport);
347
- this.sessionServers.set(newSessionId, { server, transport, lastActivity: Date.now() });
294
+ await mcpServer.connect(transport);
295
+ this.sessionServers.set(newSessionId, {
296
+ server: mcpServer,
297
+ transport,
298
+ lastActivity: Date.now(),
299
+ });
348
300
  // Set session ID in response header before handling request
349
301
  res.setHeader('mcp-session-id', newSessionId);
350
302
  // Handle the initialize request
@@ -403,9 +355,13 @@ export class OpenMeteoMCPServer {
403
355
  startHttpTransport() {
404
356
  const app = this.buildExpressApp();
405
357
  const port = parseInt(process.env.PORT || '3000', 10);
358
+ // Loopback by default so a local server is not silently exposed on the LAN.
359
+ // Container images set HOST=0.0.0.0 explicitly, since the container boundary
360
+ // is what limits reachability there.
361
+ const host = process.env.HOST || '127.0.0.1';
406
362
  app
407
- .listen(port, () => {
408
- log('info', 'server_start', { transport: 'http', port });
363
+ .listen(port, host, () => {
364
+ log('info', 'server_start', { transport: 'http', host, port });
409
365
  })
410
366
  .on('error', (err) => {
411
367
  log('error', 'server_error', { error: err instanceof Error ? err.message : String(err) });
@@ -420,12 +376,12 @@ export class OpenMeteoMCPServer {
420
376
  }
421
377
  else {
422
378
  // For stdio mode, create a single server instance
423
- const server = this.createServer();
379
+ const mcpServer = this.createServer();
424
380
  const stdioTransport = new StdioServerTransport();
425
- server.oninitialized = () => {
381
+ mcpServer.server.oninitialized = () => {
426
382
  log('info', 'session_initialized', { transport: 'stdio' });
427
383
  };
428
- await server.connect(stdioTransport);
384
+ await mcpServer.connect(stdioTransport);
429
385
  log('info', 'server_start', { transport: 'stdio' });
430
386
  }
431
387
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}