From 45d99c832e2897a34255c5e36380727fb2c39662 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Nguyen?= Date: Mon, 13 Apr 2026 02:23:42 +0200 Subject: [PATCH] fix(mcp-server): use explicit undici fetch for Node 16+ compat, bump to 0.1.7 --- package-lock.json | 37 ++++++++++++++++++++++++++++++-- package.json | 3 ++- src/__tests__/api-client.test.ts | 8 ++++--- src/api-client.ts | 1 + src/index.ts | 10 +++++++++ 5 files changed, 53 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index ca153cf..b4ed5cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,16 @@ { "name": "@cenogram/mcp-server", - "version": "0.1.6", + "version": "0.1.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@cenogram/mcp-server", - "version": "0.1.6", + "version": "0.1.7", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.28.0", + "undici": "^5.29.0", "zod": "^3.24.0" }, "bin": { @@ -601,6 +602,14 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "engines": { + "node": ">=14" + } + }, "node_modules/@hono/node-server": { "version": "1.19.13", "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.13.tgz", @@ -3721,6 +3730,17 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", @@ -4317,6 +4337,11 @@ "levn": "^0.4.1" } }, + "@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==" + }, "@hono/node-server": { "version": "1.19.13", "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.13.tgz", @@ -6313,6 +6338,14 @@ } } }, + "undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "requires": { + "@fastify/busboy": "^2.0.0" + } + }, "undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", diff --git a/package.json b/package.json index ec69526..d13d40c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cenogram/mcp-server", - "version": "0.1.6", + "version": "0.1.7", "description": "MCP Server for Polish real estate transaction data (7M+ transactions from RCN)", "type": "module", "bin": { @@ -20,6 +20,7 @@ }, "dependencies": { "@modelcontextprotocol/sdk": "^1.28.0", + "undici": "^5.29.0", "zod": "^3.24.0" }, "devDependencies": { diff --git a/src/__tests__/api-client.test.ts b/src/__tests__/api-client.test.ts index 3f4d39e..d25366a 100644 --- a/src/__tests__/api-client.test.ts +++ b/src/__tests__/api-client.test.ts @@ -1,8 +1,10 @@ import { describe, it, expect, vi, beforeEach } from "vitest"; -// Must mock fetch before importing api-client -const mockFetch = vi.fn(); -vi.stubGlobal("fetch", mockFetch); +const { mockFetch } = vi.hoisted(() => ({ + mockFetch: vi.fn(), +})); + +vi.mock("undici", () => ({ fetch: mockFetch })); vi.mock("../client-id.js", () => ({ getClientId: () => "test-client-uuid-1234", diff --git a/src/api-client.ts b/src/api-client.ts index 3c73402..80b6924 100644 --- a/src/api-client.ts +++ b/src/api-client.ts @@ -1,3 +1,4 @@ +import { fetch, type Response } from "undici"; import { getClientId } from "./client-id.js"; const BASE_URL = process.env.CENOGRAM_API_URL || "https://cenogram.pl"; diff --git a/src/index.ts b/src/index.ts index 9285a1d..2467140 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,6 +6,16 @@ import { dirname, join } from "node:path"; import { readFileSync, realpathSync } from "node:fs"; import { registerTools } from "./tools.js"; +// ── Node version check ───────────────────────────────────────────── + +const [nodeMajor] = process.versions.node.split(".").map(Number); +if (nodeMajor != null && nodeMajor < 18) { + process.stderr.write( + `Warning: @cenogram/mcp-server recommends Node.js >= 18 (current: ${process.version}). ` + + "The server will try to run, but some features may not work.\n", + ); +} + // ── Version ──────────────────────────────────────────────────────── const __dirname = dirname(fileURLToPath(import.meta.url));