@cyanheads/exchange-rates-mcp-server 0.2.0 → 0.2.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.
package/AGENTS.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Developer Protocol
2
2
 
3
3
  **Server:** exchange-rates-mcp-server
4
- **Version:** 0.2.0
4
+ **Version:** 0.2.1
5
5
  **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.11.0`
6
6
  **Engines:** Bun ≥1.3.0, Node ≥24.0.0
7
7
  **MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
package/CLAUDE.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Developer Protocol
2
2
 
3
3
  **Server:** exchange-rates-mcp-server
4
- **Version:** 0.2.0
4
+ **Version:** 0.2.1
5
5
  **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.11.0`
6
6
  **Engines:** Bun ≥1.3.0, Node ≥24.0.0
7
7
  **MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
package/Dockerfile CHANGED
@@ -8,11 +8,6 @@ FROM oven/bun:1.3.14 AS build
8
8
 
9
9
  WORKDIR /usr/src/app
10
10
 
11
- # Install build tools required for native modules (@duckdb/node-api requires python3/make/g++)
12
- RUN apt-get update && apt-get install -y --no-install-recommends \
13
- python3 make g++ && \
14
- rm -rf /var/lib/apt/lists/*
15
-
16
11
  # Copy dependency manifests for optimized layer caching
17
12
  COPY package.json bun.lock ./
18
13
 
@@ -54,10 +49,13 @@ LABEL org.opencontainers.image.version="${APP_VERSION}"
54
49
  # Copy dependency manifests
55
50
  COPY package.json bun.lock ./
56
51
 
57
- # Copy node_modules from the build stage avoids reinstalling native modules
58
- # (@duckdb/node-api requires python3/make/g++ to compile; copying the pre-built
59
- # artifacts from the build stage keeps the production image free of build tools).
60
- COPY --from=build /usr/src/app/node_modules ./node_modules
52
+ # Install only production dependencies, ignoring any lifecycle scripts (like 'prepare')
53
+ # that are not needed in the final production image. Peers are omitted too: the
54
+ # framework's optional peers are opt-in tiers this server does not use, and its one
55
+ # required peer (zod) is a direct dependency. The OTEL tier is installed explicitly
56
+ # below; @duckdb/node-api is likewise a direct dependency.
57
+ RUN --mount=type=cache,target=/root/.bun/install/cache \
58
+ bun install --production --frozen-lockfile --ignore-scripts --omit=peer
61
59
 
62
60
  # Conditionally install OpenTelemetry optional peer dependencies (Tier 3).
63
61
  # These are not bundled by default to keep the base image lean. Enable at build time
@@ -65,7 +63,7 @@ COPY --from=build /usr/src/app/node_modules ./node_modules
65
63
  ARG OTEL_ENABLED=true
66
64
  RUN --mount=type=cache,target=/root/.bun/install/cache \
67
65
  if [ "$OTEL_ENABLED" = "true" ]; then \
68
- bun add --omit=dev --ignore-scripts @hono/otel \
66
+ bun add --omit=dev --omit=peer --ignore-scripts @hono/otel \
69
67
  @opentelemetry/instrumentation-http \
70
68
  @opentelemetry/exporter-metrics-otlp-http \
71
69
  @opentelemetry/exporter-trace-otlp-http \
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  <div align="center">
9
9
 
10
- [![Version](https://img.shields.io/badge/Version-0.2.0-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/exchange-rates-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/exchange-rates-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/exchange-rates-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.14-blueviolet.svg?style=flat-square)](https://bun.sh/)
10
+ [![Version](https://img.shields.io/badge/Version-0.2.1-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/exchange-rates-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/exchange-rates-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/exchange-rates-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.14-blueviolet.svg?style=flat-square)](https://bun.sh/)
11
11
 
12
12
  </div>
13
13
 
@@ -0,0 +1,15 @@
1
+ ---
2
+ summary: "Production Docker image installs its own dependencies instead of inheriting the build stage's devDependencies; drops the unused native-build toolchain"
3
+ breaking: false
4
+ security: false
5
+ ---
6
+
7
+ # 0.2.1 — 2026-07-31
8
+
9
+ ## Fixed
10
+
11
+ - **Production image no longer ships build-stage devDependencies** — the production stage runs `bun install --production --frozen-lockfile --ignore-scripts --omit=peer` instead of `COPY --from=build … node_modules`, so `typescript`, `vitest`, `depcheck`, `tsc-alias`, `@biomejs/*`, and the `@rolldown`/`@esbuild` platform binaries no longer land in the shipped image. ([#9](https://github.com/cyanheads/exchange-rates-mcp-server/issues/9))
12
+ - **Build stage drops the unused `python3 make g++` apt layer** — `@duckdb/node-api` and `@duckdb/node-bindings` ship prebuilt platform binaries and declare no install scripts, and the build stage already runs with `--ignore-scripts`, so nothing in the tree ever compiled from source. ([#9](https://github.com/cyanheads/exchange-rates-mcp-server/issues/9))
13
+ - **`--omit=peer` added to the production install and the OTel `bun add`** — the framework's 29 optional peer dependencies were otherwise pulled into the image by default, and a `bun add` after a peer-omitting install would have re-resolved them back in. `zod` (the framework's one required peer) and `@duckdb/node-api` remain, as direct dependencies of this server.
14
+
15
+ Runtime image size: 900MB → 558MB.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/exchange-rates-mcp-server",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "mcpName": "io.github.cyanheads/exchange-rates-mcp-server",
5
5
  "description": "Convert currencies, get FX rates, and query historical ECB exchange rate data via MCP. STDIO or Streamable HTTP.",
6
6
  "type": "module",
package/server.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/cyanheads/exchange-rates-mcp-server",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.2.0",
9
+ "version": "0.2.1",
10
10
  "remotes": [
11
11
  {
12
12
  "type": "streamable-http",
@@ -19,7 +19,7 @@
19
19
  "registryBaseUrl": "https://registry.npmjs.org",
20
20
  "identifier": "@cyanheads/exchange-rates-mcp-server",
21
21
  "runtimeHint": "bun",
22
- "version": "0.2.0",
22
+ "version": "0.2.1",
23
23
  "packageArguments": [
24
24
  {
25
25
  "type": "positional",
@@ -62,7 +62,7 @@
62
62
  "registryBaseUrl": "https://registry.npmjs.org",
63
63
  "identifier": "@cyanheads/exchange-rates-mcp-server",
64
64
  "runtimeHint": "bun",
65
- "version": "0.2.0",
65
+ "version": "0.2.1",
66
66
  "packageArguments": [
67
67
  {
68
68
  "type": "positional",