From 028d5f6f1e5588e7a7ddd60bf3159110be96067e Mon Sep 17 00:00:00 2001 From: Jerome Swannack Date: Tue, 13 Jan 2026 12:06:34 +0000 Subject: [PATCH 01/19] feat: compile example servers to JavaScript for npm consumption Add TypeScript compilation for server code so the example packages can be imported and used by consumers without requiring TypeScript compilation. Changes: - Add tsconfig.server.json to each example for compiling server code - Update package.json exports to point to compiled dist/server/server.js - Add types field pointing to dist/server/server.d.ts - Update build scripts to include server compilation step - Fix .ts import extensions to .js in customer-segmentation-server This enables importing the createServer function from published packages: import { createServer } from '@modelcontextprotocol/server-basic-react'; --- examples/basic-server-preact/package.json | 16 +- .../basic-server-preact/tsconfig.server.json | 16 + examples/basic-server-react/package.json | 16 +- .../basic-server-react/tsconfig.server.json | 16 + examples/basic-server-solid/package.json | 16 +- .../basic-server-solid/tsconfig.server.json | 16 + examples/basic-server-svelte/package.json | 16 +- .../basic-server-svelte/tsconfig.server.json | 16 + examples/basic-server-vanillajs/package.json | 16 +- .../tsconfig.server.json | 16 + examples/basic-server-vue/package.json | 16 +- .../basic-server-vue/tsconfig.server.json | 16 + examples/budget-allocator-server/package.json | 16 +- .../tsconfig.server.json | 16 + examples/cohort-heatmap-server/package.json | 16 +- .../tsconfig.server.json | 16 + .../customer-segmentation-server/package.json | 16 +- .../customer-segmentation-server/server.ts | 4 +- .../src/data-generator.ts | 4 +- .../src/mcp-app.ts | 4 +- .../tsconfig.server.json | 16 + examples/integration-server/package.json | 18 +- .../integration-server/tsconfig.server.json | 16 + examples/map-server/package.json | 16 +- examples/map-server/tsconfig.server.json | 16 + examples/scenario-modeler-server/package.json | 16 +- .../tsconfig.server.json | 16 + examples/shadertoy-server/package.json | 16 +- .../shadertoy-server/tsconfig.server.json | 16 + examples/sheet-music-server/package.json | 16 +- .../sheet-music-server/tsconfig.server.json | 16 + examples/system-monitor-server/package.json | 16 +- .../tsconfig.server.json | 16 + examples/threejs-server/package.json | 16 +- examples/threejs-server/tsconfig.server.json | 16 + examples/transcript-server/package.json | 16 +- .../transcript-server/tsconfig.server.json | 16 + examples/video-resource-server/package.json | 16 +- .../tsconfig.server.json | 16 + examples/wiki-explorer-server/package.json | 16 +- .../wiki-explorer-server/tsconfig.server.json | 16 + src/generated/schema.json | 658 +++--------------- 42 files changed, 632 insertions(+), 648 deletions(-) create mode 100644 examples/basic-server-preact/tsconfig.server.json create mode 100644 examples/basic-server-react/tsconfig.server.json create mode 100644 examples/basic-server-solid/tsconfig.server.json create mode 100644 examples/basic-server-svelte/tsconfig.server.json create mode 100644 examples/basic-server-vanillajs/tsconfig.server.json create mode 100644 examples/basic-server-vue/tsconfig.server.json create mode 100644 examples/budget-allocator-server/tsconfig.server.json create mode 100644 examples/cohort-heatmap-server/tsconfig.server.json create mode 100644 examples/customer-segmentation-server/tsconfig.server.json create mode 100644 examples/integration-server/tsconfig.server.json create mode 100644 examples/map-server/tsconfig.server.json create mode 100644 examples/scenario-modeler-server/tsconfig.server.json create mode 100644 examples/shadertoy-server/tsconfig.server.json create mode 100644 examples/sheet-music-server/tsconfig.server.json create mode 100644 examples/system-monitor-server/tsconfig.server.json create mode 100644 examples/threejs-server/tsconfig.server.json create mode 100644 examples/transcript-server/tsconfig.server.json create mode 100644 examples/video-resource-server/tsconfig.server.json create mode 100644 examples/wiki-explorer-server/tsconfig.server.json diff --git a/examples/basic-server-preact/package.json b/examples/basic-server-preact/package.json index 84cba1e2..d398c018 100644 --- a/examples/basic-server-preact/package.json +++ b/examples/basic-server-preact/package.json @@ -9,19 +9,18 @@ "directory": "examples/basic-server-preact" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch server.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -41,5 +40,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/basic-server-preact/tsconfig.server.json b/examples/basic-server-preact/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/basic-server-preact/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/basic-server-react/package.json b/examples/basic-server-react/package.json index 8cdcf617..c1cffc7e 100644 --- a/examples/basic-server-react/package.json +++ b/examples/basic-server-react/package.json @@ -9,19 +9,18 @@ "directory": "examples/basic-server-react" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch server.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -44,5 +43,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/basic-server-react/tsconfig.server.json b/examples/basic-server-react/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/basic-server-react/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/basic-server-solid/package.json b/examples/basic-server-solid/package.json index 536c3171..33e7f8d2 100644 --- a/examples/basic-server-solid/package.json +++ b/examples/basic-server-solid/package.json @@ -9,19 +9,18 @@ "directory": "examples/basic-server-solid" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch server.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -41,5 +40,12 @@ "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0", "vite-plugin-solid": "^2.0.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/basic-server-solid/tsconfig.server.json b/examples/basic-server-solid/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/basic-server-solid/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/basic-server-svelte/package.json b/examples/basic-server-svelte/package.json index a5445bfd..e61fbbbb 100644 --- a/examples/basic-server-svelte/package.json +++ b/examples/basic-server-svelte/package.json @@ -9,19 +9,18 @@ "directory": "examples/basic-server-svelte" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch server.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -41,5 +40,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/basic-server-svelte/tsconfig.server.json b/examples/basic-server-svelte/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/basic-server-svelte/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/basic-server-vanillajs/package.json b/examples/basic-server-vanillajs/package.json index 0643c732..9cd3db8b 100644 --- a/examples/basic-server-vanillajs/package.json +++ b/examples/basic-server-vanillajs/package.json @@ -9,19 +9,18 @@ "directory": "examples/basic-server-vanillajs" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch server.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -39,5 +38,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/basic-server-vanillajs/tsconfig.server.json b/examples/basic-server-vanillajs/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/basic-server-vanillajs/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/basic-server-vue/package.json b/examples/basic-server-vue/package.json index 27af1337..ab77f877 100644 --- a/examples/basic-server-vue/package.json +++ b/examples/basic-server-vue/package.json @@ -9,19 +9,18 @@ "directory": "examples/basic-server-vue" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch server.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -41,5 +40,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/basic-server-vue/tsconfig.server.json b/examples/basic-server-vue/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/basic-server-vue/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/budget-allocator-server/package.json b/examples/budget-allocator-server/package.json index 65de035b..60e663cc 100644 --- a/examples/budget-allocator-server/package.json +++ b/examples/budget-allocator-server/package.json @@ -9,14 +9,12 @@ "directory": "examples/budget-allocator-server" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -24,7 +22,8 @@ "start:http": "cross-env NODE_ENV=development npm run build && npm run serve:http", "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -43,5 +42,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/budget-allocator-server/tsconfig.server.json b/examples/budget-allocator-server/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/budget-allocator-server/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/cohort-heatmap-server/package.json b/examples/cohort-heatmap-server/package.json index 4798b999..6876142e 100644 --- a/examples/cohort-heatmap-server/package.json +++ b/examples/cohort-heatmap-server/package.json @@ -9,14 +9,12 @@ "directory": "examples/cohort-heatmap-server" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -24,7 +22,8 @@ "start:http": "cross-env NODE_ENV=development npm run build && npm run serve:http", "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -47,5 +46,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/cohort-heatmap-server/tsconfig.server.json b/examples/cohort-heatmap-server/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/cohort-heatmap-server/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/customer-segmentation-server/package.json b/examples/customer-segmentation-server/package.json index ee4ba8f7..a34c7840 100644 --- a/examples/customer-segmentation-server/package.json +++ b/examples/customer-segmentation-server/package.json @@ -9,14 +9,12 @@ "directory": "examples/customer-segmentation-server" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -24,7 +22,8 @@ "start:http": "cross-env NODE_ENV=development npm run build && npm run serve:http", "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -43,5 +42,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/customer-segmentation-server/server.ts b/examples/customer-segmentation-server/server.ts index 28e43e78..5ac1de30 100644 --- a/examples/customer-segmentation-server/server.ts +++ b/examples/customer-segmentation-server/server.ts @@ -16,8 +16,8 @@ import { startServer } from "./server-utils.js"; import { generateCustomers, generateSegmentSummaries, -} from "./src/data-generator.ts"; -import { SEGMENTS, type Customer, type SegmentSummary } from "./src/types.ts"; +} from "./src/data-generator.js"; +import { SEGMENTS, type Customer, type SegmentSummary } from "./src/types.js"; const DIST_DIR = path.join(import.meta.dirname, "dist"); diff --git a/examples/customer-segmentation-server/src/data-generator.ts b/examples/customer-segmentation-server/src/data-generator.ts index 10cfd062..35e01a7a 100644 --- a/examples/customer-segmentation-server/src/data-generator.ts +++ b/examples/customer-segmentation-server/src/data-generator.ts @@ -1,5 +1,5 @@ -import type { Customer, SegmentSummary, SegmentName } from "./types.ts"; -import { SEGMENT_COLORS, SEGMENTS } from "./types.ts"; +import type { Customer, SegmentSummary, SegmentName } from "./types.js"; +import { SEGMENT_COLORS, SEGMENTS } from "./types.js"; // Company name generation const PREFIXES = [ diff --git a/examples/customer-segmentation-server/src/mcp-app.ts b/examples/customer-segmentation-server/src/mcp-app.ts index f02bc6bb..bc7c7e07 100644 --- a/examples/customer-segmentation-server/src/mcp-app.ts +++ b/examples/customer-segmentation-server/src/mcp-app.ts @@ -11,8 +11,8 @@ import { import { Chart, registerables } from "chart.js"; import "./global.css"; import "./mcp-app.css"; -import type { Customer, SegmentSummary, MetricName } from "./types.ts"; -import { SEGMENT_COLORS, METRIC_LABELS } from "./types.ts"; +import type { Customer, SegmentSummary, MetricName } from "./types.js"; +import { SEGMENT_COLORS, METRIC_LABELS } from "./types.js"; // Register Chart.js components Chart.register(...registerables); diff --git a/examples/customer-segmentation-server/tsconfig.server.json b/examples/customer-segmentation-server/tsconfig.server.json new file mode 100644 index 00000000..8ef64962 --- /dev/null +++ b/examples/customer-segmentation-server/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts", "src/types.ts", "src/data-generator.ts"] +} diff --git a/examples/integration-server/package.json b/examples/integration-server/package.json index ea17e4f3..d8475cf8 100644 --- a/examples/integration-server/package.json +++ b/examples/integration-server/package.json @@ -4,14 +4,15 @@ "private": true, "type": "module", "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", "start": "npm run start:http", "start:http": "cross-env NODE_ENV=development npm run build && npm run serve:http", "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", - "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'" + "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "../..", @@ -33,5 +34,16 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" - } + }, + "main": "dist/server/server.js", + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } + }, + "files": [ + "dist" + ] } diff --git a/examples/integration-server/tsconfig.server.json b/examples/integration-server/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/integration-server/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/map-server/package.json b/examples/map-server/package.json index f1c9db84..7fac1cf8 100644 --- a/examples/map-server/package.json +++ b/examples/map-server/package.json @@ -9,14 +9,12 @@ "directory": "examples/map-server" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -24,7 +22,8 @@ "start:http": "cross-env NODE_ENV=development npm run build && npm run serve:http", "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -42,5 +41,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/map-server/tsconfig.server.json b/examples/map-server/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/map-server/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/scenario-modeler-server/package.json b/examples/scenario-modeler-server/package.json index 4a32db76..8f5c70d8 100644 --- a/examples/scenario-modeler-server/package.json +++ b/examples/scenario-modeler-server/package.json @@ -9,14 +9,12 @@ "directory": "examples/scenario-modeler-server" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -24,7 +22,8 @@ "start:http": "cross-env NODE_ENV=development npm run build && npm run serve:http", "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -48,5 +47,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/scenario-modeler-server/tsconfig.server.json b/examples/scenario-modeler-server/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/scenario-modeler-server/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/shadertoy-server/package.json b/examples/shadertoy-server/package.json index 7164bcd1..34ed6d4b 100644 --- a/examples/shadertoy-server/package.json +++ b/examples/shadertoy-server/package.json @@ -9,19 +9,18 @@ "directory": "examples/shadertoy-server" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch server.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -39,5 +38,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/shadertoy-server/tsconfig.server.json b/examples/shadertoy-server/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/shadertoy-server/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/sheet-music-server/package.json b/examples/sheet-music-server/package.json index 51aa9a20..8a8925e3 100644 --- a/examples/sheet-music-server/package.json +++ b/examples/sheet-music-server/package.json @@ -9,19 +9,18 @@ "directory": "examples/sheet-music-server" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch server.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -40,5 +39,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/sheet-music-server/tsconfig.server.json b/examples/sheet-music-server/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/sheet-music-server/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/system-monitor-server/package.json b/examples/system-monitor-server/package.json index 1df4c2bd..6c9c6df5 100644 --- a/examples/system-monitor-server/package.json +++ b/examples/system-monitor-server/package.json @@ -9,14 +9,12 @@ "directory": "examples/system-monitor-server" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -24,7 +22,8 @@ "start:http": "cross-env NODE_ENV=development npm run build && npm run serve:http", "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -44,5 +43,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/system-monitor-server/tsconfig.server.json b/examples/system-monitor-server/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/system-monitor-server/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/threejs-server/package.json b/examples/threejs-server/package.json index 0adc7049..8c974982 100644 --- a/examples/threejs-server/package.json +++ b/examples/threejs-server/package.json @@ -9,14 +9,12 @@ "directory": "examples/threejs-server" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -24,7 +22,8 @@ "start:http": "cross-env NODE_ENV=development npm run build && npm run serve:http", "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -49,5 +48,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/threejs-server/tsconfig.server.json b/examples/threejs-server/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/threejs-server/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/transcript-server/package.json b/examples/transcript-server/package.json index 63bbd29d..03b045ce 100644 --- a/examples/transcript-server/package.json +++ b/examples/transcript-server/package.json @@ -9,19 +9,18 @@ "directory": "examples/transcript-server" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun server.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -40,5 +39,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/transcript-server/tsconfig.server.json b/examples/transcript-server/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/transcript-server/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/video-resource-server/package.json b/examples/video-resource-server/package.json index b35862fd..eb15da6b 100644 --- a/examples/video-resource-server/package.json +++ b/examples/video-resource-server/package.json @@ -9,19 +9,18 @@ "directory": "examples/video-resource-server" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch server.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -39,5 +38,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/video-resource-server/tsconfig.server.json b/examples/video-resource-server/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/video-resource-server/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/examples/wiki-explorer-server/package.json b/examples/wiki-explorer-server/package.json index ce00dc71..61294cfd 100644 --- a/examples/wiki-explorer-server/package.json +++ b/examples/wiki-explorer-server/package.json @@ -9,14 +9,12 @@ "directory": "examples/wiki-explorer-server" }, "license": "MIT", - "main": "server.ts", + "main": "dist/server/server.js", "files": [ - "server.ts", - "server-utils.ts", "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -24,7 +22,8 @@ "start:http": "cross-env NODE_ENV=development npm run build && npm run serve:http", "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", - "prepublishOnly": "npm run build" + "prepublishOnly": "npm run build", + "build:server": "tsc -p tsconfig.server.json" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -44,5 +43,12 @@ "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" + }, + "types": "dist/server/server.d.ts", + "exports": { + ".": { + "types": "./dist/server/server.d.ts", + "default": "./dist/server/server.js" + } } } diff --git a/examples/wiki-explorer-server/tsconfig.server.json b/examples/wiki-explorer-server/tsconfig.server.json new file mode 100644 index 00000000..96512aa6 --- /dev/null +++ b/examples/wiki-explorer-server/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "declaration": true, + "outDir": "./dist/server", + "rootDir": ".", + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true + }, + "include": ["server.ts", "server-utils.ts"] +} diff --git a/src/generated/schema.json b/src/generated/schema.json index 1d87d9c8..a3e72eb8 100644 --- a/src/generated/schema.json +++ b/src/generated/schema.json @@ -30,6 +30,7 @@ }, "McpUiDisplayMode": { "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Display mode for UI presentation.", "anyOf": [ { "type": "string", @@ -43,8 +44,7 @@ "type": "string", "const": "pip" } - ], - "description": "Display mode for UI presentation." + ] }, "McpUiHostCapabilities": { "$schema": "https://json-schema.org/draft/2020-12/schema", @@ -261,6 +261,7 @@ "const": "ui/notifications/host-context-changed" }, "params": { + "description": "Partial context update containing only changed fields.", "type": "object", "properties": { "toolInfo": { @@ -281,6 +282,7 @@ ] }, "tool": { + "description": "Tool definition including name, inputSchema, etc.", "type": "object", "properties": { "name": { @@ -305,10 +307,6 @@ "items": { "type": "string" } - }, - "theme": { - "type": "string", - "enum": ["light", "dark"] } }, "required": ["src"], @@ -406,8 +404,7 @@ } }, "required": ["name", "inputSchema"], - "additionalProperties": false, - "description": "Tool definition including name, inputSchema, etc." + "additionalProperties": false } }, "required": ["tool"], @@ -434,6 +431,7 @@ "description": "CSS variables for theming the app.", "type": "object", "propertyNames": { + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", @@ -743,96 +741,17 @@ "type": "string", "const": "--shadow-lg" } - ], - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." + ] }, "additionalProperties": { + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} - ], - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." - }, - "required": [ - "--color-background-primary", - "--color-background-secondary", - "--color-background-tertiary", - "--color-background-inverse", - "--color-background-ghost", - "--color-background-info", - "--color-background-danger", - "--color-background-success", - "--color-background-warning", - "--color-background-disabled", - "--color-text-primary", - "--color-text-secondary", - "--color-text-tertiary", - "--color-text-inverse", - "--color-text-ghost", - "--color-text-info", - "--color-text-danger", - "--color-text-success", - "--color-text-warning", - "--color-text-disabled", - "--color-border-primary", - "--color-border-secondary", - "--color-border-tertiary", - "--color-border-inverse", - "--color-border-ghost", - "--color-border-info", - "--color-border-danger", - "--color-border-success", - "--color-border-warning", - "--color-border-disabled", - "--color-ring-primary", - "--color-ring-secondary", - "--color-ring-inverse", - "--color-ring-info", - "--color-ring-danger", - "--color-ring-success", - "--color-ring-warning", - "--font-sans", - "--font-mono", - "--font-weight-normal", - "--font-weight-medium", - "--font-weight-semibold", - "--font-weight-bold", - "--font-text-xs-size", - "--font-text-sm-size", - "--font-text-md-size", - "--font-text-lg-size", - "--font-heading-xs-size", - "--font-heading-sm-size", - "--font-heading-md-size", - "--font-heading-lg-size", - "--font-heading-xl-size", - "--font-heading-2xl-size", - "--font-heading-3xl-size", - "--font-text-xs-line-height", - "--font-text-sm-line-height", - "--font-text-md-line-height", - "--font-text-lg-line-height", - "--font-heading-xs-line-height", - "--font-heading-sm-line-height", - "--font-heading-md-line-height", - "--font-heading-lg-line-height", - "--font-heading-xl-line-height", - "--font-heading-2xl-line-height", - "--font-heading-3xl-line-height", - "--border-radius-xs", - "--border-radius-sm", - "--border-radius-md", - "--border-radius-lg", - "--border-radius-xl", - "--border-radius-full", - "--border-width-regular", - "--shadow-hairline", - "--shadow-sm", - "--shadow-md", - "--shadow-lg" - ] + ] + } }, "css": { "description": "CSS blocks that apps can inject.", @@ -881,8 +800,8 @@ "type": "object", "properties": { "height": { - "type": "number", - "description": "Fixed container height in pixels." + "description": "Fixed container height in pixels.", + "type": "number" } }, "required": ["height"], @@ -911,8 +830,8 @@ "type": "object", "properties": { "width": { - "type": "number", - "description": "Fixed container width in pixels." + "description": "Fixed container width in pixels.", + "type": "number" } }, "required": ["width"], @@ -986,28 +905,27 @@ "type": "object", "properties": { "top": { - "type": "number", - "description": "Top safe area inset in pixels." + "description": "Top safe area inset in pixels.", + "type": "number" }, "right": { - "type": "number", - "description": "Right safe area inset in pixels." + "description": "Right safe area inset in pixels.", + "type": "number" }, "bottom": { - "type": "number", - "description": "Bottom safe area inset in pixels." + "description": "Bottom safe area inset in pixels.", + "type": "number" }, "left": { - "type": "number", - "description": "Left safe area inset in pixels." + "description": "Left safe area inset in pixels.", + "type": "number" } }, "required": ["top", "right", "bottom", "left"], "additionalProperties": false } }, - "additionalProperties": {}, - "description": "Partial context update containing only changed fields." + "additionalProperties": {} } }, "required": ["method", "params"], @@ -1035,6 +953,7 @@ ] }, "tool": { + "description": "Tool definition including name, inputSchema, etc.", "type": "object", "properties": { "name": { @@ -1059,10 +978,6 @@ "items": { "type": "string" } - }, - "theme": { - "type": "string", - "enum": ["light", "dark"] } }, "required": ["src"], @@ -1160,8 +1075,7 @@ } }, "required": ["name", "inputSchema"], - "additionalProperties": false, - "description": "Tool definition including name, inputSchema, etc." + "additionalProperties": false } }, "required": ["tool"], @@ -1188,6 +1102,7 @@ "description": "CSS variables for theming the app.", "type": "object", "propertyNames": { + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", @@ -1497,96 +1412,17 @@ "type": "string", "const": "--shadow-lg" } - ], - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." + ] }, "additionalProperties": { + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} - ], - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." - }, - "required": [ - "--color-background-primary", - "--color-background-secondary", - "--color-background-tertiary", - "--color-background-inverse", - "--color-background-ghost", - "--color-background-info", - "--color-background-danger", - "--color-background-success", - "--color-background-warning", - "--color-background-disabled", - "--color-text-primary", - "--color-text-secondary", - "--color-text-tertiary", - "--color-text-inverse", - "--color-text-ghost", - "--color-text-info", - "--color-text-danger", - "--color-text-success", - "--color-text-warning", - "--color-text-disabled", - "--color-border-primary", - "--color-border-secondary", - "--color-border-tertiary", - "--color-border-inverse", - "--color-border-ghost", - "--color-border-info", - "--color-border-danger", - "--color-border-success", - "--color-border-warning", - "--color-border-disabled", - "--color-ring-primary", - "--color-ring-secondary", - "--color-ring-inverse", - "--color-ring-info", - "--color-ring-danger", - "--color-ring-success", - "--color-ring-warning", - "--font-sans", - "--font-mono", - "--font-weight-normal", - "--font-weight-medium", - "--font-weight-semibold", - "--font-weight-bold", - "--font-text-xs-size", - "--font-text-sm-size", - "--font-text-md-size", - "--font-text-lg-size", - "--font-heading-xs-size", - "--font-heading-sm-size", - "--font-heading-md-size", - "--font-heading-lg-size", - "--font-heading-xl-size", - "--font-heading-2xl-size", - "--font-heading-3xl-size", - "--font-text-xs-line-height", - "--font-text-sm-line-height", - "--font-text-md-line-height", - "--font-text-lg-line-height", - "--font-heading-xs-line-height", - "--font-heading-sm-line-height", - "--font-heading-md-line-height", - "--font-heading-lg-line-height", - "--font-heading-xl-line-height", - "--font-heading-2xl-line-height", - "--font-heading-3xl-line-height", - "--border-radius-xs", - "--border-radius-sm", - "--border-radius-md", - "--border-radius-lg", - "--border-radius-xl", - "--border-radius-full", - "--border-width-regular", - "--shadow-hairline", - "--shadow-sm", - "--shadow-md", - "--shadow-lg" - ] + ] + } }, "css": { "description": "CSS blocks that apps can inject.", @@ -1635,8 +1471,8 @@ "type": "object", "properties": { "height": { - "type": "number", - "description": "Fixed container height in pixels." + "description": "Fixed container height in pixels.", + "type": "number" } }, "required": ["height"], @@ -1665,8 +1501,8 @@ "type": "object", "properties": { "width": { - "type": "number", - "description": "Fixed container width in pixels." + "description": "Fixed container width in pixels.", + "type": "number" } }, "required": ["width"], @@ -1740,20 +1576,20 @@ "type": "object", "properties": { "top": { - "type": "number", - "description": "Top safe area inset in pixels." + "description": "Top safe area inset in pixels.", + "type": "number" }, "right": { - "type": "number", - "description": "Right safe area inset in pixels." + "description": "Right safe area inset in pixels.", + "type": "number" }, "bottom": { - "type": "number", - "description": "Bottom safe area inset in pixels." + "description": "Bottom safe area inset in pixels.", + "type": "number" }, "left": { - "type": "number", - "description": "Left safe area inset in pixels." + "description": "Left safe area inset in pixels.", + "type": "number" } }, "required": ["top", "right", "bottom", "left"], @@ -1781,6 +1617,7 @@ "description": "CSS variables for theming the app.", "type": "object", "propertyNames": { + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", @@ -2090,96 +1927,17 @@ "type": "string", "const": "--shadow-lg" } - ], - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." + ] }, "additionalProperties": { + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} - ], - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." - }, - "required": [ - "--color-background-primary", - "--color-background-secondary", - "--color-background-tertiary", - "--color-background-inverse", - "--color-background-ghost", - "--color-background-info", - "--color-background-danger", - "--color-background-success", - "--color-background-warning", - "--color-background-disabled", - "--color-text-primary", - "--color-text-secondary", - "--color-text-tertiary", - "--color-text-inverse", - "--color-text-ghost", - "--color-text-info", - "--color-text-danger", - "--color-text-success", - "--color-text-warning", - "--color-text-disabled", - "--color-border-primary", - "--color-border-secondary", - "--color-border-tertiary", - "--color-border-inverse", - "--color-border-ghost", - "--color-border-info", - "--color-border-danger", - "--color-border-success", - "--color-border-warning", - "--color-border-disabled", - "--color-ring-primary", - "--color-ring-secondary", - "--color-ring-inverse", - "--color-ring-info", - "--color-ring-danger", - "--color-ring-success", - "--color-ring-warning", - "--font-sans", - "--font-mono", - "--font-weight-normal", - "--font-weight-medium", - "--font-weight-semibold", - "--font-weight-bold", - "--font-text-xs-size", - "--font-text-sm-size", - "--font-text-md-size", - "--font-text-lg-size", - "--font-heading-xs-size", - "--font-heading-sm-size", - "--font-heading-md-size", - "--font-heading-lg-size", - "--font-heading-xl-size", - "--font-heading-2xl-size", - "--font-heading-3xl-size", - "--font-text-xs-line-height", - "--font-text-sm-line-height", - "--font-text-md-line-height", - "--font-text-lg-line-height", - "--font-heading-xs-line-height", - "--font-heading-sm-line-height", - "--font-heading-md-line-height", - "--font-heading-lg-line-height", - "--font-heading-xl-line-height", - "--font-heading-2xl-line-height", - "--font-heading-3xl-line-height", - "--border-radius-xs", - "--border-radius-sm", - "--border-radius-md", - "--border-radius-lg", - "--border-radius-xl", - "--border-radius-full", - "--border-width-regular", - "--shadow-hairline", - "--shadow-sm", - "--shadow-md", - "--shadow-lg" - ] + ] + } }, "css": { "description": "CSS blocks that apps can inject.", @@ -2207,6 +1965,7 @@ "type": "object", "properties": { "appInfo": { + "description": "App identification (name and version).", "type": "object", "properties": { "name": { @@ -2231,10 +1990,6 @@ "items": { "type": "string" } - }, - "theme": { - "type": "string", - "enum": ["light", "dark"] } }, "required": ["src"], @@ -2246,16 +2001,13 @@ }, "websiteUrl": { "type": "string" - }, - "description": { - "type": "string" } }, "required": ["name", "version"], - "additionalProperties": false, - "description": "App identification (name and version)." + "additionalProperties": false }, "appCapabilities": { + "description": "Features and capabilities this app provides.", "type": "object", "properties": { "experimental": { @@ -2276,12 +2028,11 @@ "additionalProperties": false } }, - "additionalProperties": false, - "description": "Features and capabilities this app provides." + "additionalProperties": false }, "protocolVersion": { - "type": "string", - "description": "Protocol version this app supports." + "description": "Protocol version this app supports.", + "type": "string" } }, "required": ["appInfo", "appCapabilities", "protocolVersion"], @@ -2296,10 +2047,11 @@ "type": "object", "properties": { "protocolVersion": { - "type": "string", - "description": "Negotiated protocol version string (e.g., \"2025-11-21\")." + "description": "Negotiated protocol version string (e.g., \"2025-11-21\").", + "type": "string" }, "hostInfo": { + "description": "Host application identification and version.", "type": "object", "properties": { "name": { @@ -2324,10 +2076,6 @@ "items": { "type": "string" } - }, - "theme": { - "type": "string", - "enum": ["light", "dark"] } }, "required": ["src"], @@ -2339,16 +2087,13 @@ }, "websiteUrl": { "type": "string" - }, - "description": { - "type": "string" } }, "required": ["name", "version"], - "additionalProperties": false, - "description": "Host application identification and version." + "additionalProperties": false }, "hostCapabilities": { + "description": "Features and capabilities provided by the host.", "type": "object", "properties": { "experimental": { @@ -2551,10 +2296,10 @@ "additionalProperties": false } }, - "additionalProperties": false, - "description": "Features and capabilities provided by the host." + "additionalProperties": false }, "hostContext": { + "description": "Rich context about the host environment.", "type": "object", "properties": { "toolInfo": { @@ -2575,6 +2320,7 @@ ] }, "tool": { + "description": "Tool definition including name, inputSchema, etc.", "type": "object", "properties": { "name": { @@ -2599,10 +2345,6 @@ "items": { "type": "string" } - }, - "theme": { - "type": "string", - "enum": ["light", "dark"] } }, "required": ["src"], @@ -2700,8 +2442,7 @@ } }, "required": ["name", "inputSchema"], - "additionalProperties": false, - "description": "Tool definition including name, inputSchema, etc." + "additionalProperties": false } }, "required": ["tool"], @@ -2728,6 +2469,7 @@ "description": "CSS variables for theming the app.", "type": "object", "propertyNames": { + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", @@ -3037,96 +2779,17 @@ "type": "string", "const": "--shadow-lg" } - ], - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." + ] }, "additionalProperties": { + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} - ], - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." - }, - "required": [ - "--color-background-primary", - "--color-background-secondary", - "--color-background-tertiary", - "--color-background-inverse", - "--color-background-ghost", - "--color-background-info", - "--color-background-danger", - "--color-background-success", - "--color-background-warning", - "--color-background-disabled", - "--color-text-primary", - "--color-text-secondary", - "--color-text-tertiary", - "--color-text-inverse", - "--color-text-ghost", - "--color-text-info", - "--color-text-danger", - "--color-text-success", - "--color-text-warning", - "--color-text-disabled", - "--color-border-primary", - "--color-border-secondary", - "--color-border-tertiary", - "--color-border-inverse", - "--color-border-ghost", - "--color-border-info", - "--color-border-danger", - "--color-border-success", - "--color-border-warning", - "--color-border-disabled", - "--color-ring-primary", - "--color-ring-secondary", - "--color-ring-inverse", - "--color-ring-info", - "--color-ring-danger", - "--color-ring-success", - "--color-ring-warning", - "--font-sans", - "--font-mono", - "--font-weight-normal", - "--font-weight-medium", - "--font-weight-semibold", - "--font-weight-bold", - "--font-text-xs-size", - "--font-text-sm-size", - "--font-text-md-size", - "--font-text-lg-size", - "--font-heading-xs-size", - "--font-heading-sm-size", - "--font-heading-md-size", - "--font-heading-lg-size", - "--font-heading-xl-size", - "--font-heading-2xl-size", - "--font-heading-3xl-size", - "--font-text-xs-line-height", - "--font-text-sm-line-height", - "--font-text-md-line-height", - "--font-text-lg-line-height", - "--font-heading-xs-line-height", - "--font-heading-sm-line-height", - "--font-heading-md-line-height", - "--font-heading-lg-line-height", - "--font-heading-xl-line-height", - "--font-heading-2xl-line-height", - "--font-heading-3xl-line-height", - "--border-radius-xs", - "--border-radius-sm", - "--border-radius-md", - "--border-radius-lg", - "--border-radius-xl", - "--border-radius-full", - "--border-width-regular", - "--shadow-hairline", - "--shadow-sm", - "--shadow-md", - "--shadow-lg" - ] + ] + } }, "css": { "description": "CSS blocks that apps can inject.", @@ -3175,8 +2838,8 @@ "type": "object", "properties": { "height": { - "type": "number", - "description": "Fixed container height in pixels." + "description": "Fixed container height in pixels.", + "type": "number" } }, "required": ["height"], @@ -3205,8 +2868,8 @@ "type": "object", "properties": { "width": { - "type": "number", - "description": "Fixed container width in pixels." + "description": "Fixed container width in pixels.", + "type": "number" } }, "required": ["width"], @@ -3280,28 +2943,27 @@ "type": "object", "properties": { "top": { - "type": "number", - "description": "Top safe area inset in pixels." + "description": "Top safe area inset in pixels.", + "type": "number" }, "right": { - "type": "number", - "description": "Right safe area inset in pixels." + "description": "Right safe area inset in pixels.", + "type": "number" }, "bottom": { - "type": "number", - "description": "Bottom safe area inset in pixels." + "description": "Bottom safe area inset in pixels.", + "type": "number" }, "left": { - "type": "number", - "description": "Left safe area inset in pixels." + "description": "Left safe area inset in pixels.", + "type": "number" } }, "required": ["top", "right", "bottom", "left"], "additionalProperties": false } }, - "additionalProperties": {}, - "description": "Rich context about the host environment." + "additionalProperties": {} } }, "required": [ @@ -3341,11 +3003,12 @@ "type": "object", "properties": { "role": { + "description": "Message role, currently only \"user\" is supported.", "type": "string", - "const": "user", - "description": "Message role, currently only \"user\" is supported." + "const": "user" }, "content": { + "description": "Message content blocks (text, image, etc.).", "type": "array", "items": { "anyOf": [ @@ -3512,10 +3175,6 @@ "items": { "type": "string" } - }, - "theme": { - "type": "string", - "enum": ["light", "dark"] } }, "required": ["src"], @@ -3659,8 +3318,7 @@ "additionalProperties": false } ] - }, - "description": "Message content blocks (text, image, etc.)." + } } }, "required": ["role", "content"], @@ -3693,8 +3351,8 @@ "type": "object", "properties": { "url": { - "type": "string", - "description": "URL to open in the host's browser" + "description": "URL to open in the host's browser", + "type": "string" } }, "required": ["url"], @@ -3727,6 +3385,7 @@ "type": "object", "properties": { "mode": { + "description": "The display mode being requested.", "anyOf": [ { "type": "string", @@ -3740,8 +3399,7 @@ "type": "string", "const": "pip" } - ], - "description": "The display mode being requested." + ] } }, "required": ["mode"], @@ -3756,6 +3414,7 @@ "type": "object", "properties": { "mode": { + "description": "The display mode that was actually set. May differ from requested if not supported.", "anyOf": [ { "type": "string", @@ -3769,8 +3428,7 @@ "type": "string", "const": "pip" } - ], - "description": "The display mode that was actually set. May differ from requested if not supported." + ] } }, "required": ["mode"], @@ -3977,8 +3635,8 @@ "type": "object", "properties": { "html": { - "type": "string", - "description": "HTML content to load into the inner iframe." + "description": "HTML content to load into the inner iframe.", + "type": "string" }, "sandbox": { "description": "Optional override for the inner iframe's sandbox attribute.", @@ -4086,6 +3744,7 @@ }, "McpUiStyleVariableKey": { "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "CSS variable keys available to MCP apps for theming.", "anyOf": [ { "type": "string", @@ -4395,13 +4054,14 @@ "type": "string", "const": "--shadow-lg" } - ], - "description": "CSS variable keys available to MCP apps for theming." + ] }, "McpUiStyles": { "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "type": "object", "propertyNames": { + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", @@ -4711,97 +4371,17 @@ "type": "string", "const": "--shadow-lg" } - ], - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." + ] }, "additionalProperties": { + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} - ], - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." - }, - "required": [ - "--color-background-primary", - "--color-background-secondary", - "--color-background-tertiary", - "--color-background-inverse", - "--color-background-ghost", - "--color-background-info", - "--color-background-danger", - "--color-background-success", - "--color-background-warning", - "--color-background-disabled", - "--color-text-primary", - "--color-text-secondary", - "--color-text-tertiary", - "--color-text-inverse", - "--color-text-ghost", - "--color-text-info", - "--color-text-danger", - "--color-text-success", - "--color-text-warning", - "--color-text-disabled", - "--color-border-primary", - "--color-border-secondary", - "--color-border-tertiary", - "--color-border-inverse", - "--color-border-ghost", - "--color-border-info", - "--color-border-danger", - "--color-border-success", - "--color-border-warning", - "--color-border-disabled", - "--color-ring-primary", - "--color-ring-secondary", - "--color-ring-inverse", - "--color-ring-info", - "--color-ring-danger", - "--color-ring-success", - "--color-ring-warning", - "--font-sans", - "--font-mono", - "--font-weight-normal", - "--font-weight-medium", - "--font-weight-semibold", - "--font-weight-bold", - "--font-text-xs-size", - "--font-text-sm-size", - "--font-text-md-size", - "--font-text-lg-size", - "--font-heading-xs-size", - "--font-heading-sm-size", - "--font-heading-md-size", - "--font-heading-lg-size", - "--font-heading-xl-size", - "--font-heading-2xl-size", - "--font-heading-3xl-size", - "--font-text-xs-line-height", - "--font-text-sm-line-height", - "--font-text-md-line-height", - "--font-text-lg-line-height", - "--font-heading-xs-line-height", - "--font-heading-sm-line-height", - "--font-heading-md-line-height", - "--font-heading-lg-line-height", - "--font-heading-xl-line-height", - "--font-heading-2xl-line-height", - "--font-heading-3xl-line-height", - "--border-radius-xs", - "--border-radius-sm", - "--border-radius-md", - "--border-radius-lg", - "--border-radius-xl", - "--border-radius-full", - "--border-width-regular", - "--shadow-hairline", - "--shadow-sm", - "--shadow-md", - "--shadow-lg" - ], - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." + ] + } }, "McpUiSupportedContentBlockModalities": { "$schema": "https://json-schema.org/draft/2020-12/schema", @@ -4848,6 +4428,7 @@ }, "McpUiTheme": { "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Color theme preference for the host environment.", "anyOf": [ { "type": "string", @@ -4857,8 +4438,7 @@ "type": "string", "const": "dark" } - ], - "description": "Color theme preference for the host environment." + ] }, "McpUiToolCancelledNotification": { "$schema": "https://json-schema.org/draft/2020-12/schema", @@ -4949,6 +4529,7 @@ "description": "Who can access this tool. Default: [\"model\", \"app\"]\n- \"model\": Tool visible to and callable by the agent\n- \"app\": Tool callable by the app from this server only", "type": "array", "items": { + "description": "Tool visibility scope - who can access the tool.", "anyOf": [ { "type": "string", @@ -4958,8 +4539,7 @@ "type": "string", "const": "app" } - ], - "description": "Tool visibility scope - who can access the tool." + ] } } }, @@ -4974,23 +4554,12 @@ "const": "ui/notifications/tool-result" }, "params": { + "description": "Standard MCP tool execution result.", "type": "object", "properties": { "_meta": { "type": "object", "properties": { - "progressToken": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - } - ] - }, "io.modelcontextprotocol/related-task": { "type": "object", "properties": { @@ -4999,7 +4568,7 @@ } }, "required": ["taskId"], - "additionalProperties": false + "additionalProperties": {} } }, "additionalProperties": {} @@ -5172,10 +4741,6 @@ "items": { "type": "string" } - }, - "theme": { - "type": "string", - "enum": ["light", "dark"] } }, "required": ["src"], @@ -5333,8 +4898,7 @@ } }, "required": ["content"], - "additionalProperties": {}, - "description": "Standard MCP tool execution result." + "additionalProperties": {} } }, "required": ["method", "params"], @@ -5342,6 +4906,7 @@ }, "McpUiToolVisibility": { "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "Tool visibility scope - who can access the tool.", "anyOf": [ { "type": "string", @@ -5351,8 +4916,7 @@ "type": "string", "const": "app" } - ], - "description": "Tool visibility scope - who can access the tool." + ] }, "McpUiUpdateModelContextRequest": { "$schema": "https://json-schema.org/draft/2020-12/schema", @@ -5533,10 +5097,6 @@ "items": { "type": "string" } - }, - "theme": { - "type": "string", - "enum": ["light", "dark"] } }, "required": ["src"], From 91d5cb1e2b01caf75bb0cce47320e192a30b43e8 Mon Sep 17 00:00:00 2001 From: Jerome Swannack Date: Tue, 13 Jan 2026 13:14:14 +0000 Subject: [PATCH 02/19] fix: add type assertion for Nominatim API response --- examples/map-server/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/map-server/server.ts b/examples/map-server/server.ts index b36db931..c232aa56 100644 --- a/examples/map-server/server.ts +++ b/examples/map-server/server.ts @@ -80,7 +80,7 @@ async function geocodeWithNominatim(query: string): Promise { ); } - return response.json(); + return response.json() as Promise; } /** From 2f7f7ee96f5ba53158bd15f94062693c7731a16b Mon Sep 17 00:00:00 2001 From: Jerome Swannack Date: Tue, 13 Jan 2026 13:19:35 +0000 Subject: [PATCH 03/19] chore: regenerate schemas --- package-lock.json | 540 ++++++++----------------------- src/generated/schema.json | 658 +++++++++++++++++++++++++++++++------- 2 files changed, 680 insertions(+), 518 deletions(-) diff --git a/package-lock.json b/package-lock.json index 379526fe..be76ab96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -70,7 +70,7 @@ }, "examples/basic-host": { "name": "@modelcontextprotocol/ext-apps-basic-host", - "version": "1.1.0", + "version": "0.4.0", "dependencies": { "@modelcontextprotocol/ext-apps": "../..", "@modelcontextprotocol/sdk": "^1.24.0", @@ -94,19 +94,6 @@ "vitest": "^3.2.4" } }, - "examples/basic-host/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/basic-host/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/basic-server-preact": { "name": "@modelcontextprotocol/server-basic-preact", "version": "0.4.0", @@ -131,19 +118,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/basic-server-preact/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/basic-server-preact/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/basic-server-react": { "name": "@modelcontextprotocol/server-basic-react", "version": "0.4.0", @@ -171,19 +145,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/basic-server-react/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/basic-server-react/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/basic-server-solid": { "name": "@modelcontextprotocol/server-basic-solid", "version": "0.4.0", @@ -208,19 +169,6 @@ "vite-plugin-solid": "^2.0.0" } }, - "examples/basic-server-solid/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/basic-server-solid/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/basic-server-svelte": { "name": "@modelcontextprotocol/server-basic-svelte", "version": "0.4.0", @@ -245,19 +193,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/basic-server-svelte/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/basic-server-svelte/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/basic-server-vanillajs": { "name": "@modelcontextprotocol/server-basic-vanillajs", "version": "0.4.0", @@ -280,19 +215,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/basic-server-vanillajs/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/basic-server-vanillajs/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/basic-server-vue": { "name": "@modelcontextprotocol/server-basic-vue", "version": "0.4.0", @@ -317,19 +239,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/basic-server-vue/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/basic-server-vue/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/budget-allocator-server": { "name": "@modelcontextprotocol/server-budget-allocator", "version": "0.4.0", @@ -353,19 +262,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/budget-allocator-server/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/budget-allocator-server/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/cohort-heatmap-server": { "name": "@modelcontextprotocol/server-cohort-heatmap", "version": "0.4.0", @@ -393,19 +289,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/cohort-heatmap-server/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/cohort-heatmap-server/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/customer-segmentation-server": { "name": "@modelcontextprotocol/server-customer-segmentation", "version": "0.4.0", @@ -429,19 +312,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/customer-segmentation-server/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/customer-segmentation-server/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/integration-server": { "version": "1.0.0", "dependencies": { @@ -466,19 +336,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/integration-server/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/integration-server/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/map-server": { "name": "@modelcontextprotocol/server-map", "version": "0.4.0", @@ -501,19 +358,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/map-server/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/map-server/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/scenario-modeler-server": { "name": "@modelcontextprotocol/server-scenario-modeler", "version": "0.4.0", @@ -542,19 +386,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/scenario-modeler-server/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/scenario-modeler-server/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/shadertoy-server": { "name": "@modelcontextprotocol/server-shadertoy", "version": "0.4.0", @@ -577,19 +408,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/shadertoy-server/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/shadertoy-server/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/sheet-music-server": { "name": "@modelcontextprotocol/server-sheet-music", "version": "0.4.0", @@ -613,19 +431,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/sheet-music-server/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/sheet-music-server/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/system-monitor-server": { "name": "@modelcontextprotocol/server-system-monitor", "version": "0.4.0", @@ -650,19 +455,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/system-monitor-server/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/system-monitor-server/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/threejs-server": { "name": "@modelcontextprotocol/server-threejs", "version": "0.4.0", @@ -692,19 +484,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/threejs-server/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/threejs-server/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/transcript-server": { "name": "@modelcontextprotocol/server-transcript", "version": "0.4.0", @@ -728,21 +507,10 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/transcript-server/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/transcript-server/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/transcript-server/node_modules/zod": { "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -770,19 +538,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/video-resource-server/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/video-resource-server/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "examples/wiki-explorer-server": { "name": "@modelcontextprotocol/server-wiki-explorer", "version": "0.4.0", @@ -807,19 +562,6 @@ "vite-plugin-singlefile": "^2.3.0" } }, - "examples/wiki-explorer-server/node_modules/@types/node": { - "version": "22.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "examples/wiki-explorer-server/node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/code-frame": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", @@ -851,7 +593,6 @@ "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/generator": "^7.28.6", @@ -877,16 +618,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/generator": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", @@ -934,16 +665,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-globals": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", @@ -1915,10 +1636,23 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@oclif/core/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@oven/bun-darwin-aarch64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oven/bun-darwin-aarch64/-/bun-darwin-aarch64-1.3.5.tgz", - "integrity": "sha512-8GvNtMo0NINM7Emk9cNAviCG3teEgr3BUX9be0+GD029zIagx2Sf54jMui1Eu1IpFm7nWHODuLEefGOQNaJ0gQ==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oven/bun-darwin-aarch64/-/bun-darwin-aarch64-1.3.6.tgz", + "integrity": "sha512-27rypIapNkYboOSylkf1tD9UW9Ado2I+P1NBL46Qz29KmOjTL6WuJ7mHDC5O66CYxlOkF5r93NPDAC3lFHYBXw==", "cpu": [ "arm64" ], @@ -1929,9 +1663,9 @@ ] }, "node_modules/@oven/bun-darwin-x64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oven/bun-darwin-x64/-/bun-darwin-x64-1.3.5.tgz", - "integrity": "sha512-r33eHQOHAwkuiBJIwmkXIyqONQOQMnd1GMTpDzaxx9vf9+svby80LZO9Hcm1ns6KT/TBRFyODC/0loA7FAaffg==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oven/bun-darwin-x64/-/bun-darwin-x64-1.3.6.tgz", + "integrity": "sha512-I82xGzPkBxzBKgbl8DsA0RfMQCWTWjNmLjIEkW1ECiv3qK02kHGQ5FGUr/29L/SuvnGsULW4tBTRNZiMzL37nA==", "cpu": [ "x64" ], @@ -1942,9 +1676,9 @@ ] }, "node_modules/@oven/bun-darwin-x64-baseline": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oven/bun-darwin-x64-baseline/-/bun-darwin-x64-baseline-1.3.5.tgz", - "integrity": "sha512-p5q3rJk48qhLuLBOFehVc+kqCE03YrswTc6NCxbwsxiwfySXwcAvpF2KWKF/ZZObvvR8hCCvqe1F81b2p5r2dg==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oven/bun-darwin-x64-baseline/-/bun-darwin-x64-baseline-1.3.6.tgz", + "integrity": "sha512-nqtr+pTsHqusYpG2OZc6s+AmpWDB/FmBvstrK0y5zkti4OqnCuu7Ev2xNjS7uyb47NrAFF40pWqkpaio5XEd7w==", "cpu": [ "x64" ], @@ -1955,9 +1689,9 @@ ] }, "node_modules/@oven/bun-linux-aarch64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64/-/bun-linux-aarch64-1.3.5.tgz", - "integrity": "sha512-zkcHPI23QxJ1TdqafhgkXt1NOEN8o5C460sVeNnrhfJ43LwZgtfcvcQE39x/pBedu67fatY8CU0iY00nOh46ZQ==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64/-/bun-linux-aarch64-1.3.6.tgz", + "integrity": "sha512-YaQEAYjBanoOOtpqk/c5GGcfZIyxIIkQ2m1TbHjedRmJNwxzWBhGinSARFkrRIc3F8pRIGAopXKvJ/2rjN1LzQ==", "cpu": [ "arm64" ], @@ -1968,9 +1702,9 @@ ] }, "node_modules/@oven/bun-linux-aarch64-musl": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64-musl/-/bun-linux-aarch64-musl-1.3.5.tgz", - "integrity": "sha512-HKBeUlJdNduRkzJKZ5DXM+pPqntfC50/Hu2X65jVX0Y7hu/6IC8RaUTqpr8FtCZqqmc9wDK0OTL+Mbi9UQIKYQ==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64-musl/-/bun-linux-aarch64-musl-1.3.6.tgz", + "integrity": "sha512-FR+iJt17rfFgYgpxL3M67AUwujOgjw52ZJzB9vElI5jQXNjTyOKf8eH4meSk4vjlYF3h/AjKYd6pmN0OIUlVKQ==", "cpu": [ "arm64" ], @@ -1981,9 +1715,9 @@ ] }, "node_modules/@oven/bun-linux-x64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64/-/bun-linux-x64-1.3.5.tgz", - "integrity": "sha512-n7zhKTSDZS0yOYg5Rq8easZu5Y/o47sv0c7yGr2ciFdcie9uYV55fZ7QMqhWMGK33ezCSikh5EDkUMCIvfWpjA==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64/-/bun-linux-x64-1.3.6.tgz", + "integrity": "sha512-egfngj0dfJ868cf30E7B+ye9KUWSebYxOG4l9YP5eWeMXCtenpenx0zdKtAn9qxJgEJym5AN6trtlk+J6x8Lig==", "cpu": [ "x64" ], @@ -1994,9 +1728,9 @@ ] }, "node_modules/@oven/bun-linux-x64-baseline": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-baseline/-/bun-linux-x64-baseline-1.3.5.tgz", - "integrity": "sha512-FeCQyBU62DMuB0nn01vPnf3McXrKOsrK9p7sHaBFYycw0mmoU8kCq/WkBkGMnLuvQljJSyen8QBTx+fXdNupWg==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-baseline/-/bun-linux-x64-baseline-1.3.6.tgz", + "integrity": "sha512-jRmnX18ak8WzqLrex3siw0PoVKyIeI5AiCv4wJLgSs7VKfOqrPycfHIWfIX2jdn7ngqbHFPzI09VBKANZ4Pckg==", "cpu": [ "x64" ], @@ -2007,9 +1741,9 @@ ] }, "node_modules/@oven/bun-linux-x64-musl": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-musl/-/bun-linux-x64-musl-1.3.5.tgz", - "integrity": "sha512-XkCCHkByYn8BIDvoxnny898znju4xnW2kvFE8FT5+0Y62cWdcBGMZ9RdsEUTeRz16k8hHtJpaSfLcEmNTFIwRQ==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-musl/-/bun-linux-x64-musl-1.3.6.tgz", + "integrity": "sha512-YeXcJ9K6vJAt1zSkeA21J6pTe7PgDMLTHKGI3nQBiMYnYf7Ob3K+b/ChSCznrJG7No5PCPiQPg4zTgA+BOTmSA==", "cpu": [ "x64" ], @@ -2020,9 +1754,9 @@ ] }, "node_modules/@oven/bun-linux-x64-musl-baseline": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-musl-baseline/-/bun-linux-x64-musl-baseline-1.3.5.tgz", - "integrity": "sha512-TJiYC7KCr0XxFTsxgwQOeE7dncrEL/RSyL0EzSL3xRkrxJMWBCvCSjQn7LV1i6T7hFst0+3KoN3VWvD5BinqHA==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-musl-baseline/-/bun-linux-x64-musl-baseline-1.3.6.tgz", + "integrity": "sha512-7FjVnxnRTp/AgWqSQRT/Vt9TYmvnZ+4M+d9QOKh/Lf++wIFXFGSeAgD6bV1X/yr2UPVmZDk+xdhr2XkU7l2v3w==", "cpu": [ "x64" ], @@ -2033,9 +1767,9 @@ ] }, "node_modules/@oven/bun-windows-x64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oven/bun-windows-x64/-/bun-windows-x64-1.3.5.tgz", - "integrity": "sha512-T3xkODItb/0ftQPFsZDc7EAX2D6A4TEazQ2YZyofZToO8Q7y8YT8ooWdhd0BQiTCd66uEvgE1DCZetynwg2IoA==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oven/bun-windows-x64/-/bun-windows-x64-1.3.6.tgz", + "integrity": "sha512-Sr1KwUcbB0SEpnSPO22tNJppku2khjFluEst+mTGhxHzAGQTQncNeJxDnt3F15n+p9Q+mlcorxehd68n1siikQ==", "cpu": [ "x64" ], @@ -2046,9 +1780,9 @@ ] }, "node_modules/@oven/bun-windows-x64-baseline": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oven/bun-windows-x64-baseline/-/bun-windows-x64-baseline-1.3.5.tgz", - "integrity": "sha512-rtVQB9/1XK8FWJgFtsOthbPifRMYypgJwxu+pK3NHx8WvFKmq7HcPDqNr8xLzGULjQEO7eAo2aOZfONOwYz+5g==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oven/bun-windows-x64-baseline/-/bun-windows-x64-baseline-1.3.6.tgz", + "integrity": "sha512-PFUa7JL4lGoyyppeS4zqfuoXXih+gSE0XxhDMrCPVEUev0yhGNd/tbWBvcdpYnUth80owENoGjc8s5Knopv9wA==", "cpu": [ "x64" ], @@ -2158,6 +1892,13 @@ "node": ">= 8.0.0" } }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.55.1", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", @@ -2566,7 +2307,6 @@ "integrity": "sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1", "debug": "^4.4.1", @@ -2768,14 +2508,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.0.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.6.tgz", - "integrity": "sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q==", + "version": "22.19.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.5.tgz", + "integrity": "sha512-HfF8+mYcHPcPypui3w3mvzuIErlNOh2OAG+BCeBZCEwyiD5ls2SiCwEyT47OELtf7M3nHxBdu0FsmzdKxkN52Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/qs": { @@ -2798,7 +2537,6 @@ "integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -2963,16 +2701,6 @@ } } }, - "node_modules/@vitest/mocker/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/@vitest/pretty-format": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", @@ -3069,6 +2797,12 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/@vue/compiler-core/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, "node_modules/@vue/compiler-dom": { "version": "3.5.26", "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.26.tgz", @@ -3096,6 +2830,12 @@ "source-map-js": "^1.2.1" } }, + "node_modules/@vue/compiler-sfc/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, "node_modules/@vue/compiler-ssr": { "version": "3.5.26", "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.26.tgz", @@ -3201,7 +2941,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3527,7 +3266,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -4239,7 +3977,6 @@ "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "dev": true, "license": "ISC", - "peer": true, "engines": { "node": ">=12" } @@ -4657,10 +4394,14 @@ } }, "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } }, "node_modules/etag": { "version": "1.8.1", @@ -4714,7 +4455,6 @@ "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", - "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", @@ -4790,6 +4530,24 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fflate": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", @@ -5110,16 +4868,6 @@ "he": "bin/he" } }, - "node_modules/hono": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.3.tgz", - "integrity": "sha512-PmQi306+M/ct/m5s66Hrg+adPnkD5jiO6IjA7WhWw0gSBSo1EcRegwuI1deZ+wd5pzCGynCcn2DprnE4/yEV4w==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=16.9.0" - } - }, "node_modules/html-entities": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", @@ -5961,6 +5709,19 @@ "node": ">=4" } }, + "node_modules/nodemon/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/nodemon/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -6256,7 +6017,6 @@ "resolved": "https://registry.npmjs.org/preact/-/preact-10.28.2.tgz", "integrity": "sha512-lbteaWGzGHdlIuiJ0l2Jq454m6kcpI1zNje6d8MlGAFlYvP2GO4ibnat7P74Esfz4sPTdM6UxtTwh/d3pwM9JA==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -6352,7 +6112,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -6451,7 +6210,6 @@ "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -6530,16 +6288,13 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/send": { @@ -6573,7 +6328,6 @@ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz", "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=10" } @@ -6764,6 +6518,19 @@ "node": ">=10" } }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -6819,7 +6586,6 @@ "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.10.tgz", "integrity": "sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.1.0", "seroval": "~1.3.0", @@ -6998,7 +6764,6 @@ "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.46.3.tgz", "integrity": "sha512-Y5juST3x+/ySty5tYJCVWa6Corkxpt25bUZQHqOceg9xfMUtDsFx6rCsG6cYf1cA6vzDi66HIvaki0byZZX95A==", "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", @@ -7302,31 +7067,12 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, "node_modules/tinyglobby/node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -8074,9 +7820,8 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8109,9 +7854,9 @@ } }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -8170,7 +7915,6 @@ "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -8323,31 +8067,12 @@ "vite": "5.x || 6.x || 7.x" } }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, "node_modules/vite/node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -8466,7 +8191,6 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.26.tgz", "integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==", "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.26", "@vue/compiler-sfc": "3.5.26", @@ -8639,7 +8363,6 @@ "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "dev": true, "license": "ISC", - "peer": true, "bin": { "yaml": "bin.mjs" }, @@ -8690,7 +8413,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/generated/schema.json b/src/generated/schema.json index a3e72eb8..1d87d9c8 100644 --- a/src/generated/schema.json +++ b/src/generated/schema.json @@ -30,7 +30,6 @@ }, "McpUiDisplayMode": { "$schema": "https://json-schema.org/draft/2020-12/schema", - "description": "Display mode for UI presentation.", "anyOf": [ { "type": "string", @@ -44,7 +43,8 @@ "type": "string", "const": "pip" } - ] + ], + "description": "Display mode for UI presentation." }, "McpUiHostCapabilities": { "$schema": "https://json-schema.org/draft/2020-12/schema", @@ -261,7 +261,6 @@ "const": "ui/notifications/host-context-changed" }, "params": { - "description": "Partial context update containing only changed fields.", "type": "object", "properties": { "toolInfo": { @@ -282,7 +281,6 @@ ] }, "tool": { - "description": "Tool definition including name, inputSchema, etc.", "type": "object", "properties": { "name": { @@ -307,6 +305,10 @@ "items": { "type": "string" } + }, + "theme": { + "type": "string", + "enum": ["light", "dark"] } }, "required": ["src"], @@ -404,7 +406,8 @@ } }, "required": ["name", "inputSchema"], - "additionalProperties": false + "additionalProperties": false, + "description": "Tool definition including name, inputSchema, etc." } }, "required": ["tool"], @@ -431,7 +434,6 @@ "description": "CSS variables for theming the app.", "type": "object", "propertyNames": { - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", @@ -741,17 +743,96 @@ "type": "string", "const": "--shadow-lg" } - ] + ], + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." }, "additionalProperties": { - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} - ] - } + ], + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." + }, + "required": [ + "--color-background-primary", + "--color-background-secondary", + "--color-background-tertiary", + "--color-background-inverse", + "--color-background-ghost", + "--color-background-info", + "--color-background-danger", + "--color-background-success", + "--color-background-warning", + "--color-background-disabled", + "--color-text-primary", + "--color-text-secondary", + "--color-text-tertiary", + "--color-text-inverse", + "--color-text-ghost", + "--color-text-info", + "--color-text-danger", + "--color-text-success", + "--color-text-warning", + "--color-text-disabled", + "--color-border-primary", + "--color-border-secondary", + "--color-border-tertiary", + "--color-border-inverse", + "--color-border-ghost", + "--color-border-info", + "--color-border-danger", + "--color-border-success", + "--color-border-warning", + "--color-border-disabled", + "--color-ring-primary", + "--color-ring-secondary", + "--color-ring-inverse", + "--color-ring-info", + "--color-ring-danger", + "--color-ring-success", + "--color-ring-warning", + "--font-sans", + "--font-mono", + "--font-weight-normal", + "--font-weight-medium", + "--font-weight-semibold", + "--font-weight-bold", + "--font-text-xs-size", + "--font-text-sm-size", + "--font-text-md-size", + "--font-text-lg-size", + "--font-heading-xs-size", + "--font-heading-sm-size", + "--font-heading-md-size", + "--font-heading-lg-size", + "--font-heading-xl-size", + "--font-heading-2xl-size", + "--font-heading-3xl-size", + "--font-text-xs-line-height", + "--font-text-sm-line-height", + "--font-text-md-line-height", + "--font-text-lg-line-height", + "--font-heading-xs-line-height", + "--font-heading-sm-line-height", + "--font-heading-md-line-height", + "--font-heading-lg-line-height", + "--font-heading-xl-line-height", + "--font-heading-2xl-line-height", + "--font-heading-3xl-line-height", + "--border-radius-xs", + "--border-radius-sm", + "--border-radius-md", + "--border-radius-lg", + "--border-radius-xl", + "--border-radius-full", + "--border-width-regular", + "--shadow-hairline", + "--shadow-sm", + "--shadow-md", + "--shadow-lg" + ] }, "css": { "description": "CSS blocks that apps can inject.", @@ -800,8 +881,8 @@ "type": "object", "properties": { "height": { - "description": "Fixed container height in pixels.", - "type": "number" + "type": "number", + "description": "Fixed container height in pixels." } }, "required": ["height"], @@ -830,8 +911,8 @@ "type": "object", "properties": { "width": { - "description": "Fixed container width in pixels.", - "type": "number" + "type": "number", + "description": "Fixed container width in pixels." } }, "required": ["width"], @@ -905,27 +986,28 @@ "type": "object", "properties": { "top": { - "description": "Top safe area inset in pixels.", - "type": "number" + "type": "number", + "description": "Top safe area inset in pixels." }, "right": { - "description": "Right safe area inset in pixels.", - "type": "number" + "type": "number", + "description": "Right safe area inset in pixels." }, "bottom": { - "description": "Bottom safe area inset in pixels.", - "type": "number" + "type": "number", + "description": "Bottom safe area inset in pixels." }, "left": { - "description": "Left safe area inset in pixels.", - "type": "number" + "type": "number", + "description": "Left safe area inset in pixels." } }, "required": ["top", "right", "bottom", "left"], "additionalProperties": false } }, - "additionalProperties": {} + "additionalProperties": {}, + "description": "Partial context update containing only changed fields." } }, "required": ["method", "params"], @@ -953,7 +1035,6 @@ ] }, "tool": { - "description": "Tool definition including name, inputSchema, etc.", "type": "object", "properties": { "name": { @@ -978,6 +1059,10 @@ "items": { "type": "string" } + }, + "theme": { + "type": "string", + "enum": ["light", "dark"] } }, "required": ["src"], @@ -1075,7 +1160,8 @@ } }, "required": ["name", "inputSchema"], - "additionalProperties": false + "additionalProperties": false, + "description": "Tool definition including name, inputSchema, etc." } }, "required": ["tool"], @@ -1102,7 +1188,6 @@ "description": "CSS variables for theming the app.", "type": "object", "propertyNames": { - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", @@ -1412,17 +1497,96 @@ "type": "string", "const": "--shadow-lg" } - ] + ], + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." }, "additionalProperties": { - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} - ] - } + ], + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." + }, + "required": [ + "--color-background-primary", + "--color-background-secondary", + "--color-background-tertiary", + "--color-background-inverse", + "--color-background-ghost", + "--color-background-info", + "--color-background-danger", + "--color-background-success", + "--color-background-warning", + "--color-background-disabled", + "--color-text-primary", + "--color-text-secondary", + "--color-text-tertiary", + "--color-text-inverse", + "--color-text-ghost", + "--color-text-info", + "--color-text-danger", + "--color-text-success", + "--color-text-warning", + "--color-text-disabled", + "--color-border-primary", + "--color-border-secondary", + "--color-border-tertiary", + "--color-border-inverse", + "--color-border-ghost", + "--color-border-info", + "--color-border-danger", + "--color-border-success", + "--color-border-warning", + "--color-border-disabled", + "--color-ring-primary", + "--color-ring-secondary", + "--color-ring-inverse", + "--color-ring-info", + "--color-ring-danger", + "--color-ring-success", + "--color-ring-warning", + "--font-sans", + "--font-mono", + "--font-weight-normal", + "--font-weight-medium", + "--font-weight-semibold", + "--font-weight-bold", + "--font-text-xs-size", + "--font-text-sm-size", + "--font-text-md-size", + "--font-text-lg-size", + "--font-heading-xs-size", + "--font-heading-sm-size", + "--font-heading-md-size", + "--font-heading-lg-size", + "--font-heading-xl-size", + "--font-heading-2xl-size", + "--font-heading-3xl-size", + "--font-text-xs-line-height", + "--font-text-sm-line-height", + "--font-text-md-line-height", + "--font-text-lg-line-height", + "--font-heading-xs-line-height", + "--font-heading-sm-line-height", + "--font-heading-md-line-height", + "--font-heading-lg-line-height", + "--font-heading-xl-line-height", + "--font-heading-2xl-line-height", + "--font-heading-3xl-line-height", + "--border-radius-xs", + "--border-radius-sm", + "--border-radius-md", + "--border-radius-lg", + "--border-radius-xl", + "--border-radius-full", + "--border-width-regular", + "--shadow-hairline", + "--shadow-sm", + "--shadow-md", + "--shadow-lg" + ] }, "css": { "description": "CSS blocks that apps can inject.", @@ -1471,8 +1635,8 @@ "type": "object", "properties": { "height": { - "description": "Fixed container height in pixels.", - "type": "number" + "type": "number", + "description": "Fixed container height in pixels." } }, "required": ["height"], @@ -1501,8 +1665,8 @@ "type": "object", "properties": { "width": { - "description": "Fixed container width in pixels.", - "type": "number" + "type": "number", + "description": "Fixed container width in pixels." } }, "required": ["width"], @@ -1576,20 +1740,20 @@ "type": "object", "properties": { "top": { - "description": "Top safe area inset in pixels.", - "type": "number" + "type": "number", + "description": "Top safe area inset in pixels." }, "right": { - "description": "Right safe area inset in pixels.", - "type": "number" + "type": "number", + "description": "Right safe area inset in pixels." }, "bottom": { - "description": "Bottom safe area inset in pixels.", - "type": "number" + "type": "number", + "description": "Bottom safe area inset in pixels." }, "left": { - "description": "Left safe area inset in pixels.", - "type": "number" + "type": "number", + "description": "Left safe area inset in pixels." } }, "required": ["top", "right", "bottom", "left"], @@ -1617,7 +1781,6 @@ "description": "CSS variables for theming the app.", "type": "object", "propertyNames": { - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", @@ -1927,17 +2090,96 @@ "type": "string", "const": "--shadow-lg" } - ] + ], + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." }, "additionalProperties": { - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} - ] - } + ], + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." + }, + "required": [ + "--color-background-primary", + "--color-background-secondary", + "--color-background-tertiary", + "--color-background-inverse", + "--color-background-ghost", + "--color-background-info", + "--color-background-danger", + "--color-background-success", + "--color-background-warning", + "--color-background-disabled", + "--color-text-primary", + "--color-text-secondary", + "--color-text-tertiary", + "--color-text-inverse", + "--color-text-ghost", + "--color-text-info", + "--color-text-danger", + "--color-text-success", + "--color-text-warning", + "--color-text-disabled", + "--color-border-primary", + "--color-border-secondary", + "--color-border-tertiary", + "--color-border-inverse", + "--color-border-ghost", + "--color-border-info", + "--color-border-danger", + "--color-border-success", + "--color-border-warning", + "--color-border-disabled", + "--color-ring-primary", + "--color-ring-secondary", + "--color-ring-inverse", + "--color-ring-info", + "--color-ring-danger", + "--color-ring-success", + "--color-ring-warning", + "--font-sans", + "--font-mono", + "--font-weight-normal", + "--font-weight-medium", + "--font-weight-semibold", + "--font-weight-bold", + "--font-text-xs-size", + "--font-text-sm-size", + "--font-text-md-size", + "--font-text-lg-size", + "--font-heading-xs-size", + "--font-heading-sm-size", + "--font-heading-md-size", + "--font-heading-lg-size", + "--font-heading-xl-size", + "--font-heading-2xl-size", + "--font-heading-3xl-size", + "--font-text-xs-line-height", + "--font-text-sm-line-height", + "--font-text-md-line-height", + "--font-text-lg-line-height", + "--font-heading-xs-line-height", + "--font-heading-sm-line-height", + "--font-heading-md-line-height", + "--font-heading-lg-line-height", + "--font-heading-xl-line-height", + "--font-heading-2xl-line-height", + "--font-heading-3xl-line-height", + "--border-radius-xs", + "--border-radius-sm", + "--border-radius-md", + "--border-radius-lg", + "--border-radius-xl", + "--border-radius-full", + "--border-width-regular", + "--shadow-hairline", + "--shadow-sm", + "--shadow-md", + "--shadow-lg" + ] }, "css": { "description": "CSS blocks that apps can inject.", @@ -1965,7 +2207,6 @@ "type": "object", "properties": { "appInfo": { - "description": "App identification (name and version).", "type": "object", "properties": { "name": { @@ -1990,6 +2231,10 @@ "items": { "type": "string" } + }, + "theme": { + "type": "string", + "enum": ["light", "dark"] } }, "required": ["src"], @@ -2001,13 +2246,16 @@ }, "websiteUrl": { "type": "string" + }, + "description": { + "type": "string" } }, "required": ["name", "version"], - "additionalProperties": false + "additionalProperties": false, + "description": "App identification (name and version)." }, "appCapabilities": { - "description": "Features and capabilities this app provides.", "type": "object", "properties": { "experimental": { @@ -2028,11 +2276,12 @@ "additionalProperties": false } }, - "additionalProperties": false + "additionalProperties": false, + "description": "Features and capabilities this app provides." }, "protocolVersion": { - "description": "Protocol version this app supports.", - "type": "string" + "type": "string", + "description": "Protocol version this app supports." } }, "required": ["appInfo", "appCapabilities", "protocolVersion"], @@ -2047,11 +2296,10 @@ "type": "object", "properties": { "protocolVersion": { - "description": "Negotiated protocol version string (e.g., \"2025-11-21\").", - "type": "string" + "type": "string", + "description": "Negotiated protocol version string (e.g., \"2025-11-21\")." }, "hostInfo": { - "description": "Host application identification and version.", "type": "object", "properties": { "name": { @@ -2076,6 +2324,10 @@ "items": { "type": "string" } + }, + "theme": { + "type": "string", + "enum": ["light", "dark"] } }, "required": ["src"], @@ -2087,13 +2339,16 @@ }, "websiteUrl": { "type": "string" + }, + "description": { + "type": "string" } }, "required": ["name", "version"], - "additionalProperties": false + "additionalProperties": false, + "description": "Host application identification and version." }, "hostCapabilities": { - "description": "Features and capabilities provided by the host.", "type": "object", "properties": { "experimental": { @@ -2296,10 +2551,10 @@ "additionalProperties": false } }, - "additionalProperties": false + "additionalProperties": false, + "description": "Features and capabilities provided by the host." }, "hostContext": { - "description": "Rich context about the host environment.", "type": "object", "properties": { "toolInfo": { @@ -2320,7 +2575,6 @@ ] }, "tool": { - "description": "Tool definition including name, inputSchema, etc.", "type": "object", "properties": { "name": { @@ -2345,6 +2599,10 @@ "items": { "type": "string" } + }, + "theme": { + "type": "string", + "enum": ["light", "dark"] } }, "required": ["src"], @@ -2442,7 +2700,8 @@ } }, "required": ["name", "inputSchema"], - "additionalProperties": false + "additionalProperties": false, + "description": "Tool definition including name, inputSchema, etc." } }, "required": ["tool"], @@ -2469,7 +2728,6 @@ "description": "CSS variables for theming the app.", "type": "object", "propertyNames": { - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", @@ -2779,17 +3037,96 @@ "type": "string", "const": "--shadow-lg" } - ] + ], + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." }, "additionalProperties": { - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} - ] - } + ], + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." + }, + "required": [ + "--color-background-primary", + "--color-background-secondary", + "--color-background-tertiary", + "--color-background-inverse", + "--color-background-ghost", + "--color-background-info", + "--color-background-danger", + "--color-background-success", + "--color-background-warning", + "--color-background-disabled", + "--color-text-primary", + "--color-text-secondary", + "--color-text-tertiary", + "--color-text-inverse", + "--color-text-ghost", + "--color-text-info", + "--color-text-danger", + "--color-text-success", + "--color-text-warning", + "--color-text-disabled", + "--color-border-primary", + "--color-border-secondary", + "--color-border-tertiary", + "--color-border-inverse", + "--color-border-ghost", + "--color-border-info", + "--color-border-danger", + "--color-border-success", + "--color-border-warning", + "--color-border-disabled", + "--color-ring-primary", + "--color-ring-secondary", + "--color-ring-inverse", + "--color-ring-info", + "--color-ring-danger", + "--color-ring-success", + "--color-ring-warning", + "--font-sans", + "--font-mono", + "--font-weight-normal", + "--font-weight-medium", + "--font-weight-semibold", + "--font-weight-bold", + "--font-text-xs-size", + "--font-text-sm-size", + "--font-text-md-size", + "--font-text-lg-size", + "--font-heading-xs-size", + "--font-heading-sm-size", + "--font-heading-md-size", + "--font-heading-lg-size", + "--font-heading-xl-size", + "--font-heading-2xl-size", + "--font-heading-3xl-size", + "--font-text-xs-line-height", + "--font-text-sm-line-height", + "--font-text-md-line-height", + "--font-text-lg-line-height", + "--font-heading-xs-line-height", + "--font-heading-sm-line-height", + "--font-heading-md-line-height", + "--font-heading-lg-line-height", + "--font-heading-xl-line-height", + "--font-heading-2xl-line-height", + "--font-heading-3xl-line-height", + "--border-radius-xs", + "--border-radius-sm", + "--border-radius-md", + "--border-radius-lg", + "--border-radius-xl", + "--border-radius-full", + "--border-width-regular", + "--shadow-hairline", + "--shadow-sm", + "--shadow-md", + "--shadow-lg" + ] }, "css": { "description": "CSS blocks that apps can inject.", @@ -2838,8 +3175,8 @@ "type": "object", "properties": { "height": { - "description": "Fixed container height in pixels.", - "type": "number" + "type": "number", + "description": "Fixed container height in pixels." } }, "required": ["height"], @@ -2868,8 +3205,8 @@ "type": "object", "properties": { "width": { - "description": "Fixed container width in pixels.", - "type": "number" + "type": "number", + "description": "Fixed container width in pixels." } }, "required": ["width"], @@ -2943,27 +3280,28 @@ "type": "object", "properties": { "top": { - "description": "Top safe area inset in pixels.", - "type": "number" + "type": "number", + "description": "Top safe area inset in pixels." }, "right": { - "description": "Right safe area inset in pixels.", - "type": "number" + "type": "number", + "description": "Right safe area inset in pixels." }, "bottom": { - "description": "Bottom safe area inset in pixels.", - "type": "number" + "type": "number", + "description": "Bottom safe area inset in pixels." }, "left": { - "description": "Left safe area inset in pixels.", - "type": "number" + "type": "number", + "description": "Left safe area inset in pixels." } }, "required": ["top", "right", "bottom", "left"], "additionalProperties": false } }, - "additionalProperties": {} + "additionalProperties": {}, + "description": "Rich context about the host environment." } }, "required": [ @@ -3003,12 +3341,11 @@ "type": "object", "properties": { "role": { - "description": "Message role, currently only \"user\" is supported.", "type": "string", - "const": "user" + "const": "user", + "description": "Message role, currently only \"user\" is supported." }, "content": { - "description": "Message content blocks (text, image, etc.).", "type": "array", "items": { "anyOf": [ @@ -3175,6 +3512,10 @@ "items": { "type": "string" } + }, + "theme": { + "type": "string", + "enum": ["light", "dark"] } }, "required": ["src"], @@ -3318,7 +3659,8 @@ "additionalProperties": false } ] - } + }, + "description": "Message content blocks (text, image, etc.)." } }, "required": ["role", "content"], @@ -3351,8 +3693,8 @@ "type": "object", "properties": { "url": { - "description": "URL to open in the host's browser", - "type": "string" + "type": "string", + "description": "URL to open in the host's browser" } }, "required": ["url"], @@ -3385,7 +3727,6 @@ "type": "object", "properties": { "mode": { - "description": "The display mode being requested.", "anyOf": [ { "type": "string", @@ -3399,7 +3740,8 @@ "type": "string", "const": "pip" } - ] + ], + "description": "The display mode being requested." } }, "required": ["mode"], @@ -3414,7 +3756,6 @@ "type": "object", "properties": { "mode": { - "description": "The display mode that was actually set. May differ from requested if not supported.", "anyOf": [ { "type": "string", @@ -3428,7 +3769,8 @@ "type": "string", "const": "pip" } - ] + ], + "description": "The display mode that was actually set. May differ from requested if not supported." } }, "required": ["mode"], @@ -3635,8 +3977,8 @@ "type": "object", "properties": { "html": { - "description": "HTML content to load into the inner iframe.", - "type": "string" + "type": "string", + "description": "HTML content to load into the inner iframe." }, "sandbox": { "description": "Optional override for the inner iframe's sandbox attribute.", @@ -3744,7 +4086,6 @@ }, "McpUiStyleVariableKey": { "$schema": "https://json-schema.org/draft/2020-12/schema", - "description": "CSS variable keys available to MCP apps for theming.", "anyOf": [ { "type": "string", @@ -4054,14 +4395,13 @@ "type": "string", "const": "--shadow-lg" } - ] + ], + "description": "CSS variable keys available to MCP apps for theming." }, "McpUiStyles": { "$schema": "https://json-schema.org/draft/2020-12/schema", - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "type": "object", "propertyNames": { - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string", @@ -4371,17 +4711,97 @@ "type": "string", "const": "--shadow-lg" } - ] + ], + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." }, "additionalProperties": { - "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation.", "anyOf": [ { "type": "string" }, {} - ] - } + ], + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." + }, + "required": [ + "--color-background-primary", + "--color-background-secondary", + "--color-background-tertiary", + "--color-background-inverse", + "--color-background-ghost", + "--color-background-info", + "--color-background-danger", + "--color-background-success", + "--color-background-warning", + "--color-background-disabled", + "--color-text-primary", + "--color-text-secondary", + "--color-text-tertiary", + "--color-text-inverse", + "--color-text-ghost", + "--color-text-info", + "--color-text-danger", + "--color-text-success", + "--color-text-warning", + "--color-text-disabled", + "--color-border-primary", + "--color-border-secondary", + "--color-border-tertiary", + "--color-border-inverse", + "--color-border-ghost", + "--color-border-info", + "--color-border-danger", + "--color-border-success", + "--color-border-warning", + "--color-border-disabled", + "--color-ring-primary", + "--color-ring-secondary", + "--color-ring-inverse", + "--color-ring-info", + "--color-ring-danger", + "--color-ring-success", + "--color-ring-warning", + "--font-sans", + "--font-mono", + "--font-weight-normal", + "--font-weight-medium", + "--font-weight-semibold", + "--font-weight-bold", + "--font-text-xs-size", + "--font-text-sm-size", + "--font-text-md-size", + "--font-text-lg-size", + "--font-heading-xs-size", + "--font-heading-sm-size", + "--font-heading-md-size", + "--font-heading-lg-size", + "--font-heading-xl-size", + "--font-heading-2xl-size", + "--font-heading-3xl-size", + "--font-text-xs-line-height", + "--font-text-sm-line-height", + "--font-text-md-line-height", + "--font-text-lg-line-height", + "--font-heading-xs-line-height", + "--font-heading-sm-line-height", + "--font-heading-md-line-height", + "--font-heading-lg-line-height", + "--font-heading-xl-line-height", + "--font-heading-2xl-line-height", + "--font-heading-3xl-line-height", + "--border-radius-xs", + "--border-radius-sm", + "--border-radius-md", + "--border-radius-lg", + "--border-radius-xl", + "--border-radius-full", + "--border-width-regular", + "--shadow-hairline", + "--shadow-sm", + "--shadow-md", + "--shadow-lg" + ], + "description": "Style variables for theming MCP apps.\n\nIndividual style keys are optional - hosts may provide any subset of these values.\nValues are strings containing CSS values (colors, sizes, font stacks, etc.).\n\nNote: This type uses `Record` rather than `Partial>`\nfor compatibility with Zod schema generation. Both are functionally equivalent for validation." }, "McpUiSupportedContentBlockModalities": { "$schema": "https://json-schema.org/draft/2020-12/schema", @@ -4428,7 +4848,6 @@ }, "McpUiTheme": { "$schema": "https://json-schema.org/draft/2020-12/schema", - "description": "Color theme preference for the host environment.", "anyOf": [ { "type": "string", @@ -4438,7 +4857,8 @@ "type": "string", "const": "dark" } - ] + ], + "description": "Color theme preference for the host environment." }, "McpUiToolCancelledNotification": { "$schema": "https://json-schema.org/draft/2020-12/schema", @@ -4529,7 +4949,6 @@ "description": "Who can access this tool. Default: [\"model\", \"app\"]\n- \"model\": Tool visible to and callable by the agent\n- \"app\": Tool callable by the app from this server only", "type": "array", "items": { - "description": "Tool visibility scope - who can access the tool.", "anyOf": [ { "type": "string", @@ -4539,7 +4958,8 @@ "type": "string", "const": "app" } - ] + ], + "description": "Tool visibility scope - who can access the tool." } } }, @@ -4554,12 +4974,23 @@ "const": "ui/notifications/tool-result" }, "params": { - "description": "Standard MCP tool execution result.", "type": "object", "properties": { "_meta": { "type": "object", "properties": { + "progressToken": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + } + ] + }, "io.modelcontextprotocol/related-task": { "type": "object", "properties": { @@ -4568,7 +4999,7 @@ } }, "required": ["taskId"], - "additionalProperties": {} + "additionalProperties": false } }, "additionalProperties": {} @@ -4741,6 +5172,10 @@ "items": { "type": "string" } + }, + "theme": { + "type": "string", + "enum": ["light", "dark"] } }, "required": ["src"], @@ -4898,7 +5333,8 @@ } }, "required": ["content"], - "additionalProperties": {} + "additionalProperties": {}, + "description": "Standard MCP tool execution result." } }, "required": ["method", "params"], @@ -4906,7 +5342,6 @@ }, "McpUiToolVisibility": { "$schema": "https://json-schema.org/draft/2020-12/schema", - "description": "Tool visibility scope - who can access the tool.", "anyOf": [ { "type": "string", @@ -4916,7 +5351,8 @@ "type": "string", "const": "app" } - ] + ], + "description": "Tool visibility scope - who can access the tool." }, "McpUiUpdateModelContextRequest": { "$schema": "https://json-schema.org/draft/2020-12/schema", @@ -5097,6 +5533,10 @@ "items": { "type": "string" } + }, + "theme": { + "type": "string", + "enum": ["light", "dark"] } }, "required": ["src"], From e114f51835a185a3aa4b9f7faf6a1fbcc2a21c39 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Tue, 13 Jan 2026 21:09:05 +0000 Subject: [PATCH 04/19] refactor: split server examples into library and binary entry points - server.ts: exports createServer() only (library entry point) - main.ts: entry point with main() that runs the server (binary) - package.json: adds bin field for npx support, uses inline bun build - tsconfig.server.json: emitDeclarationOnly, outputs to dist/ This allows: 1. Importing the server as a library: import { createServer } from '@modelcontextprotocol/server-basic-react' 2. Running with npx: npx @modelcontextprotocol/server-basic-react [--stdio] Added migration script at scripts/migrate-server-examples.ts --- .../main.ts} | 22 ++ examples/basic-server-preact/package.json | 24 ++- examples/basic-server-preact/server.ts | 19 +- .../basic-server-preact/tsconfig.server.json | 11 +- examples/basic-server-react/main.ts | 90 +++++++++ examples/basic-server-react/package.json | 30 +-- examples/basic-server-react/server.ts | 16 -- .../basic-server-react/tsconfig.server.json | 5 +- .../main.ts} | 22 ++ examples/basic-server-solid/package.json | 24 ++- examples/basic-server-solid/server.ts | 19 +- .../basic-server-solid/tsconfig.server.json | 11 +- .../{server-utils.ts => main.ts} | 22 ++ examples/basic-server-svelte/package.json | 24 ++- examples/basic-server-svelte/server.ts | 19 +- .../basic-server-svelte/tsconfig.server.json | 11 +- examples/basic-server-vanillajs/main.ts | 94 +++++++++ examples/basic-server-vanillajs/package.json | 24 ++- .../basic-server-vanillajs/server-utils.ts | 72 ------- examples/basic-server-vanillajs/server.ts | 17 -- .../tsconfig.server.json | 11 +- .../main.ts} | 22 ++ examples/basic-server-vue/package.json | 24 ++- examples/basic-server-vue/server-utils.ts | 72 ------- examples/basic-server-vue/server.ts | 19 +- .../basic-server-vue/tsconfig.server.json | 11 +- scripts/migrate-server-examples.ts | 188 ++++++++++++++++++ 27 files changed, 588 insertions(+), 335 deletions(-) rename examples/{basic-server-solid/server-utils.ts => basic-server-preact/main.ts} (77%) create mode 100644 examples/basic-server-react/main.ts rename examples/{basic-server-react/server-utils.ts => basic-server-solid/main.ts} (77%) rename examples/basic-server-svelte/{server-utils.ts => main.ts} (77%) create mode 100644 examples/basic-server-vanillajs/main.ts delete mode 100644 examples/basic-server-vanillajs/server-utils.ts rename examples/{basic-server-preact/server-utils.ts => basic-server-vue/main.ts} (77%) delete mode 100644 examples/basic-server-vue/server-utils.ts create mode 100644 scripts/migrate-server-examples.ts diff --git a/examples/basic-server-solid/server-utils.ts b/examples/basic-server-preact/main.ts similarity index 77% rename from examples/basic-server-solid/server-utils.ts rename to examples/basic-server-preact/main.ts index 9fe9745a..d9a51a2e 100644 --- a/examples/basic-server-solid/server-utils.ts +++ b/examples/basic-server-preact/main.ts @@ -1,12 +1,20 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-server-basic-preact + * Or: node dist/index.js [--stdio] + */ + /** * Shared utilities for running MCP servers with Streamable HTTP transport. */ +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; @@ -70,3 +78,17 @@ export async function startServer( process.on("SIGINT", shutdown); process.on("SIGTERM", shutdown); } + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3001", 10); + await startServer(createServer, { port, name: "Basic MCP App Server (Preact)" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/basic-server-preact/package.json b/examples/basic-server-preact/package.json index d398c018..bc7de3bd 100644 --- a/examples/basic-server-preact/package.json +++ b/examples/basic-server-preact/package.json @@ -9,24 +9,25 @@ "directory": "examples/basic-server-preact" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", - "serve": "bun --watch server.ts", + "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "prepublishOnly": "npm run build" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", "preact": "^10.0.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@preact/preset-vite": "^2.0.0", @@ -34,18 +35,19 @@ "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-server-basic-preact": "dist/index.js" } } diff --git a/examples/basic-server-preact/server.ts b/examples/basic-server-preact/server.ts index 2f4af3dc..91711590 100644 --- a/examples/basic-server-preact/server.ts +++ b/examples/basic-server-preact/server.ts @@ -1,17 +1,14 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult } from "@modelcontextprotocol/sdk/types.js"; import fs from "node:fs/promises"; import path from "node:path"; import { registerAppTool, registerAppResource, RESOURCE_MIME_TYPE } from "@modelcontextprotocol/ext-apps/server"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); /** * Creates a new MCP server instance with tools and resources registered. */ -function createServer(): McpServer { +export function createServer(): McpServer { const server = new McpServer({ name: "Basic MCP App Server (Preact)", version: "1.0.0", @@ -55,17 +52,3 @@ function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3001", 10); - await startServer(createServer, { port, name: "Basic MCP App Server (Preact)" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/basic-server-preact/tsconfig.server.json b/examples/basic-server-preact/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/basic-server-preact/tsconfig.server.json +++ b/examples/basic-server-preact/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/basic-server-react/main.ts b/examples/basic-server-react/main.ts new file mode 100644 index 00000000..39840a13 --- /dev/null +++ b/examples/basic-server-react/main.ts @@ -0,0 +1,90 @@ +/** + * Entry point for running the MCP server. + * Run with: npx @modelcontextprotocol/server-basic-react + * Or: node dist/index.js [--stdio] + */ + +import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; +import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; +import cors from "cors"; +import type { Request, Response } from "express"; +import { createServer } from "./server.js"; + +export interface ServerOptions { + port: number; + name?: string; +} + +/** + * Starts an MCP server with Streamable HTTP transport in stateless mode. + * + * @param createServer - Factory function that creates a new McpServer instance per request. + * @param options - Server configuration options. + */ +export async function startServer( + createServer: () => McpServer, + options: ServerOptions, +): Promise { + const { port, name = "MCP Server" } = options; + + const app = createMcpExpressApp({ host: "0.0.0.0" }); + app.use(cors()); + + app.all("/mcp", async (req: Request, res: Response) => { + const server = createServer(); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + }); + + res.on("close", () => { + transport.close().catch(() => {}); + server.close().catch(() => {}); + }); + + try { + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("MCP error:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } + }); + + const httpServer = app.listen(port, (err) => { + if (err) { + console.error("Failed to start server:", err); + process.exit(1); + } + console.log(`${name} listening on http://localhost:${port}/mcp`); + }); + + const shutdown = () => { + console.log("\nShutting down..."); + httpServer.close(() => process.exit(0)); + }; + + process.on("SIGINT", shutdown); + process.on("SIGTERM", shutdown); +} + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3001", 10); + await startServer(createServer, { port, name: "Basic MCP App Server (React)" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/basic-server-react/package.json b/examples/basic-server-react/package.json index c1cffc7e..5c7e1a19 100644 --- a/examples/basic-server-react/package.json +++ b/examples/basic-server-react/package.json @@ -9,22 +9,33 @@ "directory": "examples/basic-server-react" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", + "types": "dist/server.d.ts", + "bin": { + "mcp-server-basic-react": "dist/index.js" + }, "files": [ "dist" ], + "exports": { + ".": { + "types": "./dist/server.d.ts", + "default": "./dist/server.js" + } + }, "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", - "serve": "bun --watch server.ts", + "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "prepublishOnly": "npm run build" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", + "cors": "^2.8.5", + "express": "^5.1.0", "react": "^19.2.0", "react-dom": "^19.2.0", "zod": "^4.1.13" @@ -37,18 +48,9 @@ "@types/react-dom": "^19.2.2", "@vitejs/plugin-react": "^4.3.4", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" - }, - "types": "dist/server/server.d.ts", - "exports": { - ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" - } } } diff --git a/examples/basic-server-react/server.ts b/examples/basic-server-react/server.ts index 76d332a6..45b1dc99 100644 --- a/examples/basic-server-react/server.ts +++ b/examples/basic-server-react/server.ts @@ -1,10 +1,8 @@ import { registerAppResource, registerAppTool, RESOURCE_MIME_TYPE } from "@modelcontextprotocol/ext-apps/server"; import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult } from "@modelcontextprotocol/sdk/types.js"; import fs from "node:fs/promises"; import path from "node:path"; -import { startServer } from "./server-utils.js"; const DIST_DIR = path.join(import.meta.dirname, "dist"); @@ -52,17 +50,3 @@ export function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3001", 10); - await startServer(createServer, { port, name: "Basic MCP App Server (React)" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/basic-server-react/tsconfig.server.json b/examples/basic-server-react/tsconfig.server.json index 96512aa6..05ddd8ec 100644 --- a/examples/basic-server-react/tsconfig.server.json +++ b/examples/basic-server-react/tsconfig.server.json @@ -5,12 +5,13 @@ "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": ["server.ts"] } diff --git a/examples/basic-server-react/server-utils.ts b/examples/basic-server-solid/main.ts similarity index 77% rename from examples/basic-server-react/server-utils.ts rename to examples/basic-server-solid/main.ts index 9fe9745a..23353486 100644 --- a/examples/basic-server-react/server-utils.ts +++ b/examples/basic-server-solid/main.ts @@ -1,12 +1,20 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-server-basic-solid + * Or: node dist/index.js [--stdio] + */ + /** * Shared utilities for running MCP servers with Streamable HTTP transport. */ +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; @@ -70,3 +78,17 @@ export async function startServer( process.on("SIGINT", shutdown); process.on("SIGTERM", shutdown); } + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3001", 10); + await startServer(createServer, { port, name: "Basic MCP App Server (Solid)" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/basic-server-solid/package.json b/examples/basic-server-solid/package.json index 33e7f8d2..1a8a59bd 100644 --- a/examples/basic-server-solid/package.json +++ b/examples/basic-server-solid/package.json @@ -9,43 +9,45 @@ "directory": "examples/basic-server-solid" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", - "serve": "bun --watch server.ts", + "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "prepublishOnly": "npm run build" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", "solid-js": "^1.9.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0", "vite-plugin-solid": "^2.0.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-server-basic-solid": "dist/index.js" } } diff --git a/examples/basic-server-solid/server.ts b/examples/basic-server-solid/server.ts index 902649cf..6659ab70 100644 --- a/examples/basic-server-solid/server.ts +++ b/examples/basic-server-solid/server.ts @@ -1,17 +1,14 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult } from "@modelcontextprotocol/sdk/types.js"; import fs from "node:fs/promises"; import path from "node:path"; import { registerAppTool, registerAppResource, RESOURCE_MIME_TYPE } from "@modelcontextprotocol/ext-apps/server"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); /** * Creates a new MCP server instance with tools and resources registered. */ -function createServer(): McpServer { +export function createServer(): McpServer { const server = new McpServer({ name: "Basic MCP App Server (Solid)", version: "1.0.0", @@ -55,17 +52,3 @@ function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3001", 10); - await startServer(createServer, { port, name: "Basic MCP App Server (Solid)" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/basic-server-solid/tsconfig.server.json b/examples/basic-server-solid/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/basic-server-solid/tsconfig.server.json +++ b/examples/basic-server-solid/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/basic-server-svelte/server-utils.ts b/examples/basic-server-svelte/main.ts similarity index 77% rename from examples/basic-server-svelte/server-utils.ts rename to examples/basic-server-svelte/main.ts index 9fe9745a..762a40eb 100644 --- a/examples/basic-server-svelte/server-utils.ts +++ b/examples/basic-server-svelte/main.ts @@ -1,12 +1,20 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-server-basic-svelte + * Or: node dist/index.js [--stdio] + */ + /** * Shared utilities for running MCP servers with Streamable HTTP transport. */ +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; @@ -70,3 +78,17 @@ export async function startServer( process.on("SIGINT", shutdown); process.on("SIGTERM", shutdown); } + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3001", 10); + await startServer(createServer, { port, name: "Basic MCP App Server (Svelte)" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/basic-server-svelte/package.json b/examples/basic-server-svelte/package.json index e61fbbbb..41e109bb 100644 --- a/examples/basic-server-svelte/package.json +++ b/examples/basic-server-svelte/package.json @@ -9,24 +9,25 @@ "directory": "examples/basic-server-svelte" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", - "serve": "bun --watch server.ts", + "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "prepublishOnly": "npm run build" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", "svelte": "^5.0.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^5.0.0", @@ -34,18 +35,19 @@ "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-server-basic-svelte": "dist/index.js" } } diff --git a/examples/basic-server-svelte/server.ts b/examples/basic-server-svelte/server.ts index a9c2f4ab..b90e70b0 100644 --- a/examples/basic-server-svelte/server.ts +++ b/examples/basic-server-svelte/server.ts @@ -1,17 +1,14 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult } from "@modelcontextprotocol/sdk/types.js"; import fs from "node:fs/promises"; import path from "node:path"; import { registerAppTool, registerAppResource, RESOURCE_MIME_TYPE } from "@modelcontextprotocol/ext-apps/server"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); /** * Creates a new MCP server instance with tools and resources registered. */ -function createServer(): McpServer { +export function createServer(): McpServer { const server = new McpServer({ name: "Basic MCP App Server (Svelte)", version: "1.0.0", @@ -55,17 +52,3 @@ function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3001", 10); - await startServer(createServer, { port, name: "Basic MCP App Server (Svelte)" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/basic-server-svelte/tsconfig.server.json b/examples/basic-server-svelte/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/basic-server-svelte/tsconfig.server.json +++ b/examples/basic-server-svelte/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/basic-server-vanillajs/main.ts b/examples/basic-server-vanillajs/main.ts new file mode 100644 index 00000000..d53d53b5 --- /dev/null +++ b/examples/basic-server-vanillajs/main.ts @@ -0,0 +1,94 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-server-basic-vanillajs + * Or: node dist/index.js [--stdio] + */ + +/** + * Shared utilities for running MCP servers with Streamable HTTP transport. + */ + +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; +import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; +import cors from "cors"; +import type { Request, Response } from "express"; +import { createServer } from "./server.js"; + +export interface ServerOptions { + port: number; + name?: string; +} + +/** + * Starts an MCP server with Streamable HTTP transport in stateless mode. + * + * @param createServer - Factory function that creates a new McpServer instance per request. + * @param options - Server configuration options. + */ +export async function startServer( + createServer: () => McpServer, + options: ServerOptions, +): Promise { + const { port, name = "MCP Server" } = options; + + const app = createMcpExpressApp({ host: "0.0.0.0" }); + app.use(cors()); + + app.all("/mcp", async (req: Request, res: Response) => { + const server = createServer(); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + }); + + res.on("close", () => { + transport.close().catch(() => {}); + server.close().catch(() => {}); + }); + + try { + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("MCP error:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } + }); + + const httpServer = app.listen(port, (err) => { + if (err) { + console.error("Failed to start server:", err); + process.exit(1); + } + console.log(`${name} listening on http://localhost:${port}/mcp`); + }); + + const shutdown = () => { + console.log("\nShutting down..."); + httpServer.close(() => process.exit(0)); + }; + + process.on("SIGINT", shutdown); + process.on("SIGTERM", shutdown); +} + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3102", 10); + await startServer(createServer, { port, name: "Basic MCP App Server (Vanilla JS)" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/basic-server-vanillajs/package.json b/examples/basic-server-vanillajs/package.json index 9cd3db8b..37dcc60c 100644 --- a/examples/basic-server-vanillajs/package.json +++ b/examples/basic-server-vanillajs/package.json @@ -9,41 +9,43 @@ "directory": "examples/basic-server-vanillajs" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", - "serve": "bun --watch server.ts", + "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "prepublishOnly": "npm run build" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-server-basic-vanillajs": "dist/index.js" } } diff --git a/examples/basic-server-vanillajs/server-utils.ts b/examples/basic-server-vanillajs/server-utils.ts deleted file mode 100644 index 9fe9745a..00000000 --- a/examples/basic-server-vanillajs/server-utils.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Shared utilities for running MCP servers with Streamable HTTP transport. - */ - -import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; -import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; -import cors from "cors"; -import type { Request, Response } from "express"; - -export interface ServerOptions { - port: number; - name?: string; -} - -/** - * Starts an MCP server with Streamable HTTP transport in stateless mode. - * - * @param createServer - Factory function that creates a new McpServer instance per request. - * @param options - Server configuration options. - */ -export async function startServer( - createServer: () => McpServer, - options: ServerOptions, -): Promise { - const { port, name = "MCP Server" } = options; - - const app = createMcpExpressApp({ host: "0.0.0.0" }); - app.use(cors()); - - app.all("/mcp", async (req: Request, res: Response) => { - const server = createServer(); - const transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: undefined, - }); - - res.on("close", () => { - transport.close().catch(() => {}); - server.close().catch(() => {}); - }); - - try { - await server.connect(transport); - await transport.handleRequest(req, res, req.body); - } catch (error) { - console.error("MCP error:", error); - if (!res.headersSent) { - res.status(500).json({ - jsonrpc: "2.0", - error: { code: -32603, message: "Internal server error" }, - id: null, - }); - } - } - }); - - const httpServer = app.listen(port, (err) => { - if (err) { - console.error("Failed to start server:", err); - process.exit(1); - } - console.log(`${name} listening on http://localhost:${port}/mcp`); - }); - - const shutdown = () => { - console.log("\nShutting down..."); - httpServer.close(() => process.exit(0)); - }; - - process.on("SIGINT", shutdown); - process.on("SIGTERM", shutdown); -} diff --git a/examples/basic-server-vanillajs/server.ts b/examples/basic-server-vanillajs/server.ts index c95b3ca6..167b056f 100644 --- a/examples/basic-server-vanillajs/server.ts +++ b/examples/basic-server-vanillajs/server.ts @@ -1,12 +1,9 @@ import { registerAppResource, registerAppTool, RESOURCE_MIME_TYPE } from "@modelcontextprotocol/ext-apps/server"; import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult } from "@modelcontextprotocol/sdk/types.js"; import fs from "node:fs/promises"; import path from "node:path"; import { z } from "zod"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); /** @@ -62,17 +59,3 @@ export function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3102", 10); - await startServer(createServer, { port, name: "Basic MCP App Server (Vanilla JS)" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/basic-server-vanillajs/tsconfig.server.json b/examples/basic-server-vanillajs/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/basic-server-vanillajs/tsconfig.server.json +++ b/examples/basic-server-vanillajs/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/basic-server-preact/server-utils.ts b/examples/basic-server-vue/main.ts similarity index 77% rename from examples/basic-server-preact/server-utils.ts rename to examples/basic-server-vue/main.ts index 9fe9745a..0304600e 100644 --- a/examples/basic-server-preact/server-utils.ts +++ b/examples/basic-server-vue/main.ts @@ -1,12 +1,20 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-server-basic-vue + * Or: node dist/index.js [--stdio] + */ + /** * Shared utilities for running MCP servers with Streamable HTTP transport. */ +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; @@ -70,3 +78,17 @@ export async function startServer( process.on("SIGINT", shutdown); process.on("SIGTERM", shutdown); } + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3001", 10); + await startServer(createServer, { port, name: "Basic MCP App Server (Vue)" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/basic-server-vue/package.json b/examples/basic-server-vue/package.json index ab77f877..2eea36d9 100644 --- a/examples/basic-server-vue/package.json +++ b/examples/basic-server-vue/package.json @@ -9,24 +9,25 @@ "directory": "examples/basic-server-vue" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", - "serve": "bun --watch server.ts", + "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "prepublishOnly": "npm run build" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", "vue": "^3.5.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -34,18 +35,19 @@ "@types/node": "^22.0.0", "@vitejs/plugin-vue": "^5.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-server-basic-vue": "dist/index.js" } } diff --git a/examples/basic-server-vue/server-utils.ts b/examples/basic-server-vue/server-utils.ts deleted file mode 100644 index 9fe9745a..00000000 --- a/examples/basic-server-vue/server-utils.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Shared utilities for running MCP servers with Streamable HTTP transport. - */ - -import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; -import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; -import cors from "cors"; -import type { Request, Response } from "express"; - -export interface ServerOptions { - port: number; - name?: string; -} - -/** - * Starts an MCP server with Streamable HTTP transport in stateless mode. - * - * @param createServer - Factory function that creates a new McpServer instance per request. - * @param options - Server configuration options. - */ -export async function startServer( - createServer: () => McpServer, - options: ServerOptions, -): Promise { - const { port, name = "MCP Server" } = options; - - const app = createMcpExpressApp({ host: "0.0.0.0" }); - app.use(cors()); - - app.all("/mcp", async (req: Request, res: Response) => { - const server = createServer(); - const transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: undefined, - }); - - res.on("close", () => { - transport.close().catch(() => {}); - server.close().catch(() => {}); - }); - - try { - await server.connect(transport); - await transport.handleRequest(req, res, req.body); - } catch (error) { - console.error("MCP error:", error); - if (!res.headersSent) { - res.status(500).json({ - jsonrpc: "2.0", - error: { code: -32603, message: "Internal server error" }, - id: null, - }); - } - } - }); - - const httpServer = app.listen(port, (err) => { - if (err) { - console.error("Failed to start server:", err); - process.exit(1); - } - console.log(`${name} listening on http://localhost:${port}/mcp`); - }); - - const shutdown = () => { - console.log("\nShutting down..."); - httpServer.close(() => process.exit(0)); - }; - - process.on("SIGINT", shutdown); - process.on("SIGTERM", shutdown); -} diff --git a/examples/basic-server-vue/server.ts b/examples/basic-server-vue/server.ts index dcb08314..45762636 100644 --- a/examples/basic-server-vue/server.ts +++ b/examples/basic-server-vue/server.ts @@ -1,17 +1,14 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult } from "@modelcontextprotocol/sdk/types.js"; import fs from "node:fs/promises"; import path from "node:path"; import { registerAppTool, registerAppResource, RESOURCE_MIME_TYPE } from "@modelcontextprotocol/ext-apps/server"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); /** * Creates a new MCP server instance with tools and resources registered. */ -function createServer(): McpServer { +export function createServer(): McpServer { const server = new McpServer({ name: "Basic MCP App Server (Vue)", version: "1.0.0", @@ -55,17 +52,3 @@ function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3001", 10); - await startServer(createServer, { port, name: "Basic MCP App Server (Vue)" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/basic-server-vue/tsconfig.server.json b/examples/basic-server-vue/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/basic-server-vue/tsconfig.server.json +++ b/examples/basic-server-vue/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/scripts/migrate-server-examples.ts b/scripts/migrate-server-examples.ts new file mode 100644 index 00000000..41da3ec8 --- /dev/null +++ b/scripts/migrate-server-examples.ts @@ -0,0 +1,188 @@ +#!/usr/bin/env bun +/** + * Migrates basic-server-* examples to the new structure: + * - server.ts: Only exports createServer() + * - main.ts: Entry point with main() that runs the server + * - package.json: Updated with bin field and bun build commands + */ + +import { $ } from "bun"; +import fs from "node:fs/promises"; +import path from "node:path"; + +const EXAMPLES_DIR = path.join(import.meta.dirname, "..", "examples"); + +interface ExampleConfig { + dir: string; + serverName: string; + binName: string; + port: string; +} + +async function getExamples(): Promise { + const dirs = await fs.readdir(EXAMPLES_DIR); + const examples: ExampleConfig[] = []; + + for (const dir of dirs) { + if (!dir.startsWith("basic-server-")) continue; + if (dir === "basic-server-react") continue; // Already migrated + + const serverTs = await fs.readFile(path.join(EXAMPLES_DIR, dir, "server.ts"), "utf-8"); + + // Extract server name from: name: "Basic MCP App Server (React)" + const nameMatch = serverTs.match(/name:\s*["']([^"']+)["']/); + const serverName = nameMatch?.[1] ?? `Basic MCP App Server (${dir.replace("basic-server-", "")})`; + + // Extract port from: PORT ?? "3001" + const portMatch = serverTs.match(/PORT\s*\?\?\s*["'](\d+)["']/); + const port = portMatch?.[1] ?? "3001"; + + // Create bin name: mcp-server-basic-react + const binName = `mcp-server-${dir.replace("basic-server-", "basic-")}`; + + examples.push({ dir, serverName, binName, port }); + } + + return examples; +} + +async function migrateExample(config: ExampleConfig) { + const { dir, serverName, binName, port } = config; + const exampleDir = path.join(EXAMPLES_DIR, dir); + console.log(`\n=== Migrating ${dir} ===`); + console.log(` Server name: ${serverName}`); + console.log(` Bin name: ${binName}`); + console.log(` Port: ${port}`); + + // 1. Read and modify server.ts + const serverTs = await fs.readFile(path.join(exampleDir, "server.ts"), "utf-8"); + + // Remove main function and related imports, ensure createServer is exported + let newServerTs = serverTs + // Remove StdioServerTransport import + .replace(/import\s*\{\s*StdioServerTransport\s*\}\s*from\s*["']@modelcontextprotocol\/sdk\/server\/stdio\.js["'];\s*\n?/g, "") + // Remove startServer import + .replace(/import\s*\{\s*startServer\s*\}\s*from\s*["']\.\/server-utils\.js["'];\s*\n?/g, "") + // Remove main function and call + .replace(/\nasync function main\(\)[\s\S]*?main\(\)\.catch[\s\S]*?\}\);?\s*$/m, "\n") + // Ensure createServer is exported + .replace(/^function createServer\(\)/m, "export function createServer()"); + + await fs.writeFile(path.join(exampleDir, "server.ts"), newServerTs.trim() + "\n"); + console.log(" ✓ Updated server.ts"); + + // 2. Read server-utils.ts + const serverUtils = await fs.readFile(path.join(exampleDir, "server-utils.ts"), "utf-8"); + + // Create main.ts with added imports and main function + const mainTs = serverUtils + .replace( + /\/\*\*\s*\n\s*\*\s*Shared utilities/, + `/**\n * Entry point for running the MCP server.\n * Run with: npx ${binName}\n * Or: node dist/index.js [--stdio]\n */\n\n/**\n * Shared utilities` + ) + .replace( + /import\s*\{\s*createMcpExpressApp\s*\}/, + `import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";\nimport { createMcpExpressApp }` + ) + .replace( + /import type \{ Request, Response \} from "express";/, + `import type { Request, Response } from "express";\nimport { createServer } from "./server.js";` + ) + .trim() + ` + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "${port}", 10); + await startServer(createServer, { port, name: "${serverName}" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); +`; + + await fs.writeFile(path.join(exampleDir, "main.ts"), mainTs); + console.log(" ✓ Created main.ts"); + + // 3. Remove old server-utils.ts and stage the rename + await fs.unlink(path.join(exampleDir, "server-utils.ts")); + await $`cd ${exampleDir} && git add -A server-utils.ts main.ts`.quiet(); + console.log(" ✓ Renamed server-utils.ts -> main.ts"); + + // 4. Update tsconfig.server.json + const tsconfig = { + compilerOptions: { + target: "ES2022", + lib: ["ES2022"], + module: "NodeNext", + moduleResolution: "NodeNext", + declaration: true, + emitDeclarationOnly: true, + outDir: "./dist", + rootDir: ".", + strict: true, + skipLibCheck: true, + esModuleInterop: true, + resolveJsonModule: true, + }, + include: ["server.ts"], + }; + await fs.writeFile(path.join(exampleDir, "tsconfig.server.json"), JSON.stringify(tsconfig, null, 2) + "\n"); + console.log(" ✓ Updated tsconfig.server.json"); + + // 5. Update package.json + const pkgPath = path.join(exampleDir, "package.json"); + const pkg = JSON.parse(await fs.readFile(pkgPath, "utf-8")); + + pkg.main = "dist/server.js"; + pkg.types = "dist/server.d.ts"; + pkg.bin = { [binName]: "dist/index.js" }; + pkg.exports = { + ".": { + types: "./dist/server.d.ts", + default: "./dist/server.js", + }, + }; + pkg.scripts.build = "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js"; + pkg.scripts.serve = "bun --watch main.ts"; + delete pkg.scripts["build:server"]; + + // Move cors and express to dependencies + if (pkg.devDependencies?.cors) { + pkg.dependencies.cors = pkg.devDependencies.cors; + delete pkg.devDependencies.cors; + } + if (pkg.devDependencies?.express) { + pkg.dependencies.express = pkg.devDependencies.express; + delete pkg.devDependencies.express; + } + + await fs.writeFile(pkgPath, JSON.stringify(pkg, null, 2) + "\n"); + console.log(" ✓ Updated package.json"); +} + +async function main() { + const examples = await getExamples(); + console.log(`Found ${examples.length} examples to migrate:`); + for (const ex of examples) { + console.log(` - ${ex.dir}`); + } + + for (const example of examples) { + await migrateExample(example); + } + + console.log("\n✅ Migration complete!"); + console.log("\nNext steps:"); + console.log("1. Run: npm run build:all"); + console.log("2. Run: npm run test:e2e"); +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); From 0008f2daa625cabdf47e824adca930d90f400133 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Tue, 13 Jan 2026 21:54:08 +0000 Subject: [PATCH 05/19] refactor: migrate remaining server examples to library/binary structure Apply the same refactoring to all 13 remaining server examples: - scenario-modeler-server, shadertoy-server, map-server - cohort-heatmap-server, customer-segmentation-server, video-resource-server - system-monitor-server, budget-allocator-server, sheet-music-server - threejs-server, integration-server, transcript-server, wiki-explorer-server Each now has: - server.ts: exports createServer() (library) - main.ts: runs the server (binary with shebang) - bin field in package.json for npx support --- .../basic-server-preact/tsconfig.server.json | 8 +- .../basic-server-solid/tsconfig.server.json | 8 +- .../basic-server-svelte/tsconfig.server.json | 8 +- .../tsconfig.server.json | 8 +- .../basic-server-vue/tsconfig.server.json | 8 +- .../main.ts} | 22 +++ examples/budget-allocator-server/package.json | 21 +- examples/budget-allocator-server/server.ts | 17 -- .../tsconfig.server.json | 11 +- examples/cohort-heatmap-server/main.ts | 94 +++++++++ examples/cohort-heatmap-server/package.json | 21 +- examples/cohort-heatmap-server/server.ts | 17 -- .../tsconfig.server.json | 11 +- examples/customer-segmentation-server/main.ts | 94 +++++++++ .../customer-segmentation-server/package.json | 21 +- .../customer-segmentation-server/server.ts | 19 -- .../tsconfig.server.json | 11 +- examples/integration-server/main.ts | 94 +++++++++ examples/integration-server/package.json | 23 ++- examples/integration-server/server.ts | 17 -- .../integration-server/tsconfig.server.json | 11 +- .../map-server/{server-utils.ts => main.ts} | 22 +++ examples/map-server/package.json | 21 +- examples/map-server/server.ts | 17 -- examples/map-server/tsconfig.server.json | 11 +- examples/scenario-modeler-server/main.ts | 94 +++++++++ examples/scenario-modeler-server/package.json | 21 +- .../scenario-modeler-server/server-utils.ts | 72 ------- examples/scenario-modeler-server/server.ts | 20 -- .../tsconfig.server.json | 11 +- .../main.ts} | 22 +++ examples/shadertoy-server/package.json | 24 +-- examples/shadertoy-server/server-utils.ts | 72 ------- examples/shadertoy-server/server.ts | 17 -- .../shadertoy-server/tsconfig.server.json | 11 +- examples/sheet-music-server/main.ts | 94 +++++++++ examples/sheet-music-server/package.json | 24 +-- examples/sheet-music-server/server-utils.ts | 72 ------- examples/sheet-music-server/server.ts | 19 +- .../sheet-music-server/tsconfig.server.json | 11 +- examples/system-monitor-server/main.ts | 94 +++++++++ examples/system-monitor-server/package.json | 21 +- .../system-monitor-server/server-utils.ts | 72 ------- examples/system-monitor-server/server.ts | 17 -- .../tsconfig.server.json | 11 +- .../main.ts} | 22 +++ examples/threejs-server/package.json | 21 +- examples/threejs-server/server-utils.ts | 72 ------- examples/threejs-server/server.ts | 17 -- examples/threejs-server/tsconfig.server.json | 11 +- examples/transcript-server/main.ts | 91 +++++++++ examples/transcript-server/package.json | 24 +-- examples/transcript-server/server-utils.ts | 69 ------- examples/transcript-server/server.ts | 17 -- .../transcript-server/tsconfig.server.json | 11 +- examples/video-resource-server/main.ts | 94 +++++++++ examples/video-resource-server/package.json | 24 +-- .../video-resource-server/server-utils.ts | 72 ------- examples/video-resource-server/server.ts | 19 +- .../tsconfig.server.json | 11 +- .../main.ts} | 22 +++ examples/wiki-explorer-server/package.json | 21 +- examples/wiki-explorer-server/server-utils.ts | 72 ------- examples/wiki-explorer-server/server.ts | 17 -- .../wiki-explorer-server/tsconfig.server.json | 11 +- scripts/migrate-server-examples.ts | 184 ++++++++++++------ 66 files changed, 1259 insertions(+), 1057 deletions(-) rename examples/{cohort-heatmap-server/server-utils.ts => budget-allocator-server/main.ts} (77%) create mode 100644 examples/cohort-heatmap-server/main.ts create mode 100644 examples/customer-segmentation-server/main.ts create mode 100644 examples/integration-server/main.ts rename examples/map-server/{server-utils.ts => main.ts} (76%) create mode 100644 examples/scenario-modeler-server/main.ts delete mode 100644 examples/scenario-modeler-server/server-utils.ts rename examples/{customer-segmentation-server/server-utils.ts => shadertoy-server/main.ts} (77%) delete mode 100644 examples/shadertoy-server/server-utils.ts create mode 100644 examples/sheet-music-server/main.ts delete mode 100644 examples/sheet-music-server/server-utils.ts create mode 100644 examples/system-monitor-server/main.ts delete mode 100644 examples/system-monitor-server/server-utils.ts rename examples/{budget-allocator-server/server-utils.ts => threejs-server/main.ts} (77%) delete mode 100644 examples/threejs-server/server-utils.ts create mode 100644 examples/transcript-server/main.ts delete mode 100644 examples/transcript-server/server-utils.ts create mode 100644 examples/video-resource-server/main.ts delete mode 100644 examples/video-resource-server/server-utils.ts rename examples/{integration-server/server-utils.ts => wiki-explorer-server/main.ts} (77%) delete mode 100644 examples/wiki-explorer-server/server-utils.ts diff --git a/examples/basic-server-preact/tsconfig.server.json b/examples/basic-server-preact/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/basic-server-preact/tsconfig.server.json +++ b/examples/basic-server-preact/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/basic-server-solid/tsconfig.server.json b/examples/basic-server-solid/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/basic-server-solid/tsconfig.server.json +++ b/examples/basic-server-solid/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/basic-server-svelte/tsconfig.server.json b/examples/basic-server-svelte/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/basic-server-svelte/tsconfig.server.json +++ b/examples/basic-server-svelte/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/basic-server-vanillajs/tsconfig.server.json b/examples/basic-server-vanillajs/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/basic-server-vanillajs/tsconfig.server.json +++ b/examples/basic-server-vanillajs/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/basic-server-vue/tsconfig.server.json b/examples/basic-server-vue/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/basic-server-vue/tsconfig.server.json +++ b/examples/basic-server-vue/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/cohort-heatmap-server/server-utils.ts b/examples/budget-allocator-server/main.ts similarity index 77% rename from examples/cohort-heatmap-server/server-utils.ts rename to examples/budget-allocator-server/main.ts index 9fe9745a..534e876d 100644 --- a/examples/cohort-heatmap-server/server-utils.ts +++ b/examples/budget-allocator-server/main.ts @@ -1,12 +1,20 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-budget-allocator-server + * Or: node dist/index.js [--stdio] + */ + /** * Shared utilities for running MCP servers with Streamable HTTP transport. */ +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; @@ -70,3 +78,17 @@ export async function startServer( process.on("SIGINT", shutdown); process.on("SIGTERM", shutdown); } + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3103", 10); + await startServer(createServer, { port, name: "Marketing" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/budget-allocator-server/package.json b/examples/budget-allocator-server/package.json index 60e663cc..551740c0 100644 --- a/examples/budget-allocator-server/package.json +++ b/examples/budget-allocator-server/package.json @@ -9,12 +9,12 @@ "directory": "examples/budget-allocator-server" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -23,31 +23,34 @@ "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "serve": "bun --watch main.ts" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", "chart.js": "^4.4.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-budget-allocator-server": "dist/index.js" } } diff --git a/examples/budget-allocator-server/server.ts b/examples/budget-allocator-server/server.ts index abc4a9b6..90fcef94 100755 --- a/examples/budget-allocator-server/server.ts +++ b/examples/budget-allocator-server/server.ts @@ -5,7 +5,6 @@ * and industry benchmarks by company stage. */ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult, @@ -18,8 +17,6 @@ import { registerAppResource, registerAppTool, } from "@modelcontextprotocol/ext-apps/server"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); // --------------------------------------------------------------------------- @@ -335,17 +332,3 @@ export function createServer(): McpServer { // --------------------------------------------------------------------------- // Server Startup // --------------------------------------------------------------------------- - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3103", 10); - await startServer(createServer, { port, name: "Budget Allocator Server" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/budget-allocator-server/tsconfig.server.json b/examples/budget-allocator-server/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/budget-allocator-server/tsconfig.server.json +++ b/examples/budget-allocator-server/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/cohort-heatmap-server/main.ts b/examples/cohort-heatmap-server/main.ts new file mode 100644 index 00000000..0b716d1d --- /dev/null +++ b/examples/cohort-heatmap-server/main.ts @@ -0,0 +1,94 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-cohort-heatmap-server + * Or: node dist/index.js [--stdio] + */ + +/** + * Shared utilities for running MCP servers with Streamable HTTP transport. + */ + +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; +import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; +import cors from "cors"; +import type { Request, Response } from "express"; +import { createServer } from "./server.js"; + +export interface ServerOptions { + port: number; + name?: string; +} + +/** + * Starts an MCP server with Streamable HTTP transport in stateless mode. + * + * @param createServer - Factory function that creates a new McpServer instance per request. + * @param options - Server configuration options. + */ +export async function startServer( + createServer: () => McpServer, + options: ServerOptions, +): Promise { + const { port, name = "MCP Server" } = options; + + const app = createMcpExpressApp({ host: "0.0.0.0" }); + app.use(cors()); + + app.all("/mcp", async (req: Request, res: Response) => { + const server = createServer(); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + }); + + res.on("close", () => { + transport.close().catch(() => {}); + server.close().catch(() => {}); + }); + + try { + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("MCP error:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } + }); + + const httpServer = app.listen(port, (err) => { + if (err) { + console.error("Failed to start server:", err); + process.exit(1); + } + console.log(`${name} listening on http://localhost:${port}/mcp`); + }); + + const shutdown = () => { + console.log("\nShutting down..."); + httpServer.close(() => process.exit(0)); + }; + + process.on("SIGINT", shutdown); + process.on("SIGTERM", shutdown); +} + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3104", 10); + await startServer(createServer, { port, name: "Cohort Heatmap Server" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/cohort-heatmap-server/package.json b/examples/cohort-heatmap-server/package.json index 6876142e..93fbe929 100644 --- a/examples/cohort-heatmap-server/package.json +++ b/examples/cohort-heatmap-server/package.json @@ -9,12 +9,12 @@ "directory": "examples/cohort-heatmap-server" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -23,14 +23,16 @@ "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "serve": "bun --watch main.ts" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -40,18 +42,19 @@ "@types/react-dom": "^19.2.2", "@vitejs/plugin-react": "^4.3.4", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-cohort-heatmap-server": "dist/index.js" } } diff --git a/examples/cohort-heatmap-server/server.ts b/examples/cohort-heatmap-server/server.ts index 7c79f91e..6f0c975f 100644 --- a/examples/cohort-heatmap-server/server.ts +++ b/examples/cohort-heatmap-server/server.ts @@ -1,5 +1,4 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js"; import fs from "node:fs/promises"; import path from "node:path"; @@ -9,8 +8,6 @@ import { registerAppResource, registerAppTool, } from "@modelcontextprotocol/ext-apps/server"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); // Schemas - types are derived from these using z.infer @@ -222,17 +219,3 @@ export function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3104", 10); - await startServer(createServer, { port, name: "Cohort Heatmap Server" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/cohort-heatmap-server/tsconfig.server.json b/examples/cohort-heatmap-server/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/cohort-heatmap-server/tsconfig.server.json +++ b/examples/cohort-heatmap-server/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/customer-segmentation-server/main.ts b/examples/customer-segmentation-server/main.ts new file mode 100644 index 00000000..e3bb35ef --- /dev/null +++ b/examples/customer-segmentation-server/main.ts @@ -0,0 +1,94 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-customer-segmentation-server + * Or: node dist/index.js [--stdio] + */ + +/** + * Shared utilities for running MCP servers with Streamable HTTP transport. + */ + +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; +import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; +import cors from "cors"; +import type { Request, Response } from "express"; +import { createServer } from "./server.js"; + +export interface ServerOptions { + port: number; + name?: string; +} + +/** + * Starts an MCP server with Streamable HTTP transport in stateless mode. + * + * @param createServer - Factory function that creates a new McpServer instance per request. + * @param options - Server configuration options. + */ +export async function startServer( + createServer: () => McpServer, + options: ServerOptions, +): Promise { + const { port, name = "MCP Server" } = options; + + const app = createMcpExpressApp({ host: "0.0.0.0" }); + app.use(cors()); + + app.all("/mcp", async (req: Request, res: Response) => { + const server = createServer(); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + }); + + res.on("close", () => { + transport.close().catch(() => {}); + server.close().catch(() => {}); + }); + + try { + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("MCP error:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } + }); + + const httpServer = app.listen(port, (err) => { + if (err) { + console.error("Failed to start server:", err); + process.exit(1); + } + console.log(`${name} listening on http://localhost:${port}/mcp`); + }); + + const shutdown = () => { + console.log("\nShutting down..."); + httpServer.close(() => process.exit(0)); + }; + + process.on("SIGINT", shutdown); + process.on("SIGTERM", shutdown); +} + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3105", 10); + await startServer(createServer, { port, name: "Customer Segmentation Server" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/customer-segmentation-server/package.json b/examples/customer-segmentation-server/package.json index a34c7840..822e7f53 100644 --- a/examples/customer-segmentation-server/package.json +++ b/examples/customer-segmentation-server/package.json @@ -9,12 +9,12 @@ "directory": "examples/customer-segmentation-server" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -23,31 +23,34 @@ "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "serve": "bun --watch main.ts" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", "chart.js": "^4.4.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-customer-segmentation-server": "dist/index.js" } } diff --git a/examples/customer-segmentation-server/server.ts b/examples/customer-segmentation-server/server.ts index 5ac1de30..8bfa65cc 100644 --- a/examples/customer-segmentation-server/server.ts +++ b/examples/customer-segmentation-server/server.ts @@ -1,5 +1,4 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult, @@ -12,7 +11,6 @@ import { registerAppResource, registerAppTool, } from "@modelcontextprotocol/ext-apps/server"; -import { startServer } from "./server-utils.js"; import { generateCustomers, generateSegmentSummaries, @@ -142,20 +140,3 @@ export function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3105", 10); - await startServer(createServer, { - port, - name: "Customer Segmentation Server", - }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/customer-segmentation-server/tsconfig.server.json b/examples/customer-segmentation-server/tsconfig.server.json index 8ef64962..c0168149 100644 --- a/examples/customer-segmentation-server/tsconfig.server.json +++ b/examples/customer-segmentation-server/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts", "src/types.ts", "src/data-generator.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/integration-server/main.ts b/examples/integration-server/main.ts new file mode 100644 index 00000000..5340e8a8 --- /dev/null +++ b/examples/integration-server/main.ts @@ -0,0 +1,94 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-integration-server + * Or: node dist/index.js [--stdio] + */ + +/** + * Shared utilities for running MCP servers with Streamable HTTP transport. + */ + +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; +import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; +import cors from "cors"; +import type { Request, Response } from "express"; +import { createServer } from "./server.js"; + +export interface ServerOptions { + port: number; + name?: string; +} + +/** + * Starts an MCP server with Streamable HTTP transport in stateless mode. + * + * @param createServer - Factory function that creates a new McpServer instance per request. + * @param options - Server configuration options. + */ +export async function startServer( + createServer: () => McpServer, + options: ServerOptions, +): Promise { + const { port, name = "MCP Server" } = options; + + const app = createMcpExpressApp({ host: "0.0.0.0" }); + app.use(cors()); + + app.all("/mcp", async (req: Request, res: Response) => { + const server = createServer(); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + }); + + res.on("close", () => { + transport.close().catch(() => {}); + server.close().catch(() => {}); + }); + + try { + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("MCP error:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } + }); + + const httpServer = app.listen(port, (err) => { + if (err) { + console.error("Failed to start server:", err); + process.exit(1); + } + console.log(`${name} listening on http://localhost:${port}/mcp`); + }); + + const shutdown = () => { + console.log("\nShutting down..."); + httpServer.close(() => process.exit(0)); + }; + + process.on("SIGINT", shutdown); + process.on("SIGTERM", shutdown); +} + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3001", 10); + await startServer(createServer, { port, name: "Integration Test Server" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/integration-server/package.json b/examples/integration-server/package.json index d8475cf8..40cb1237 100644 --- a/examples/integration-server/package.json +++ b/examples/integration-server/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -12,14 +12,16 @@ "start:http": "cross-env NODE_ENV=development npm run build && npm run serve:http", "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", - "build:server": "tsc -p tsconfig.server.json" + "serve": "bun --watch main.ts" }, "dependencies": { "@modelcontextprotocol/ext-apps": "../..", "@modelcontextprotocol/sdk": "^1.24.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -29,21 +31,22 @@ "@types/react-dom": "^19.2.2", "@vitejs/plugin-react": "^4.3.4", "concurrently": "^9.2.1", - "cors": "^2.8.5", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "main": "dist/server/server.js", - "types": "dist/server/server.d.ts", + "main": "dist/server.js", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } }, "files": [ "dist" - ] + ], + "bin": { + "mcp-integration-server": "dist/index.js" + } } diff --git a/examples/integration-server/server.ts b/examples/integration-server/server.ts index f017e4d1..d86a9fd1 100644 --- a/examples/integration-server/server.ts +++ b/examples/integration-server/server.ts @@ -4,7 +4,6 @@ import { RESOURCE_MIME_TYPE, } from "@modelcontextprotocol/ext-apps/server"; import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult, @@ -12,8 +11,6 @@ import type { import fs from "node:fs/promises"; import path from "node:path"; import { z } from "zod"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); const RESOURCE_URI = "ui://get-time/mcp-app.html"; @@ -72,17 +69,3 @@ export function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3001", 10); - await startServer(createServer, { port, name: "Integration Test Server" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/integration-server/tsconfig.server.json b/examples/integration-server/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/integration-server/tsconfig.server.json +++ b/examples/integration-server/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/map-server/server-utils.ts b/examples/map-server/main.ts similarity index 76% rename from examples/map-server/server-utils.ts rename to examples/map-server/main.ts index c700c818..44956598 100644 --- a/examples/map-server/server-utils.ts +++ b/examples/map-server/main.ts @@ -1,12 +1,20 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-map-server + * Or: node dist/index.js [--stdio] + */ + /** * Shared utilities for running MCP servers with Streamable HTTP transport. */ +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; @@ -66,3 +74,17 @@ export async function startServer( process.on("SIGINT", shutdown); process.on("SIGTERM", shutdown); } + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3001", 10); + await startServer(createServer, { port, name: "CesiumJS Map Server" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/map-server/package.json b/examples/map-server/package.json index 7fac1cf8..1c7ed754 100644 --- a/examples/map-server/package.json +++ b/examples/map-server/package.json @@ -9,12 +9,12 @@ "directory": "examples/map-server" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -23,30 +23,33 @@ "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "serve": "bun --watch main.ts" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-map-server": "dist/index.js" } } diff --git a/examples/map-server/server.ts b/examples/map-server/server.ts index c232aa56..1ff1049b 100644 --- a/examples/map-server/server.ts +++ b/examples/map-server/server.ts @@ -6,7 +6,6 @@ * - show-map: Display an interactive 3D globe at a given location */ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult, @@ -20,8 +19,6 @@ import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY, } from "@modelcontextprotocol/ext-apps/server"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); const RESOURCE_URI = "ui://cesium-map/mcp-app.html"; @@ -252,17 +249,3 @@ export function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3001", 10); - await startServer(createServer, { port, name: "CesiumJS Map Server" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/map-server/tsconfig.server.json b/examples/map-server/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/map-server/tsconfig.server.json +++ b/examples/map-server/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/scenario-modeler-server/main.ts b/examples/scenario-modeler-server/main.ts new file mode 100644 index 00000000..b7cc7d00 --- /dev/null +++ b/examples/scenario-modeler-server/main.ts @@ -0,0 +1,94 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-scenario-modeler-server + * Or: node dist/index.js [--stdio] + */ + +/** + * Shared utilities for running MCP servers with Streamable HTTP transport. + */ + +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; +import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; +import cors from "cors"; +import type { Request, Response } from "express"; +import { createServer } from "./server.js"; + +export interface ServerOptions { + port: number; + name?: string; +} + +/** + * Starts an MCP server with Streamable HTTP transport in stateless mode. + * + * @param createServer - Factory function that creates a new McpServer instance per request. + * @param options - Server configuration options. + */ +export async function startServer( + createServer: () => McpServer, + options: ServerOptions, +): Promise { + const { port, name = "MCP Server" } = options; + + const app = createMcpExpressApp({ host: "0.0.0.0" }); + app.use(cors()); + + app.all("/mcp", async (req: Request, res: Response) => { + const server = createServer(); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + }); + + res.on("close", () => { + transport.close().catch(() => {}); + server.close().catch(() => {}); + }); + + try { + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("MCP error:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } + }); + + const httpServer = app.listen(port, (err) => { + if (err) { + console.error("Failed to start server:", err); + process.exit(1); + } + console.log(`${name} listening on http://localhost:${port}/mcp`); + }); + + const shutdown = () => { + console.log("\nShutting down..."); + httpServer.close(() => process.exit(0)); + }; + + process.on("SIGINT", shutdown); + process.on("SIGTERM", shutdown); +} + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3106", 10); + await startServer(createServer, { port, name: "SaaS Scenario Modeler" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/scenario-modeler-server/package.json b/examples/scenario-modeler-server/package.json index 8f5c70d8..92784bad 100644 --- a/examples/scenario-modeler-server/package.json +++ b/examples/scenario-modeler-server/package.json @@ -9,12 +9,12 @@ "directory": "examples/scenario-modeler-server" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -23,7 +23,7 @@ "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "serve": "bun --watch main.ts" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -31,7 +31,9 @@ "chart.js": "^4.4.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -41,18 +43,19 @@ "@types/react-dom": "^19.2.2", "@vitejs/plugin-react": "^4.3.4", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-scenario-modeler-server": "dist/index.js" } } diff --git a/examples/scenario-modeler-server/server-utils.ts b/examples/scenario-modeler-server/server-utils.ts deleted file mode 100644 index 9fe9745a..00000000 --- a/examples/scenario-modeler-server/server-utils.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Shared utilities for running MCP servers with Streamable HTTP transport. - */ - -import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; -import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; -import cors from "cors"; -import type { Request, Response } from "express"; - -export interface ServerOptions { - port: number; - name?: string; -} - -/** - * Starts an MCP server with Streamable HTTP transport in stateless mode. - * - * @param createServer - Factory function that creates a new McpServer instance per request. - * @param options - Server configuration options. - */ -export async function startServer( - createServer: () => McpServer, - options: ServerOptions, -): Promise { - const { port, name = "MCP Server" } = options; - - const app = createMcpExpressApp({ host: "0.0.0.0" }); - app.use(cors()); - - app.all("/mcp", async (req: Request, res: Response) => { - const server = createServer(); - const transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: undefined, - }); - - res.on("close", () => { - transport.close().catch(() => {}); - server.close().catch(() => {}); - }); - - try { - await server.connect(transport); - await transport.handleRequest(req, res, req.body); - } catch (error) { - console.error("MCP error:", error); - if (!res.headersSent) { - res.status(500).json({ - jsonrpc: "2.0", - error: { code: -32603, message: "Internal server error" }, - id: null, - }); - } - } - }); - - const httpServer = app.listen(port, (err) => { - if (err) { - console.error("Failed to start server:", err); - process.exit(1); - } - console.log(`${name} listening on http://localhost:${port}/mcp`); - }); - - const shutdown = () => { - console.log("\nShutting down..."); - httpServer.close(() => process.exit(0)); - }; - - process.on("SIGINT", shutdown); - process.on("SIGTERM", shutdown); -} diff --git a/examples/scenario-modeler-server/server.ts b/examples/scenario-modeler-server/server.ts index 86657f42..d3cbf0d1 100644 --- a/examples/scenario-modeler-server/server.ts +++ b/examples/scenario-modeler-server/server.ts @@ -4,7 +4,6 @@ import { registerAppTool, } from "@modelcontextprotocol/ext-apps/server"; import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult, @@ -12,8 +11,6 @@ import type { import fs from "node:fs/promises"; import path from "node:path"; import { z } from "zod"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); // ============================================================================ @@ -371,20 +368,3 @@ export function createServer(): McpServer { // ============================================================================ // Server Startup // ============================================================================ - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3106", 10); - await startServer(createServer, { - port, - name: "SaaS Scenario Modeler Server", - }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/scenario-modeler-server/tsconfig.server.json b/examples/scenario-modeler-server/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/scenario-modeler-server/tsconfig.server.json +++ b/examples/scenario-modeler-server/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/customer-segmentation-server/server-utils.ts b/examples/shadertoy-server/main.ts similarity index 77% rename from examples/customer-segmentation-server/server-utils.ts rename to examples/shadertoy-server/main.ts index 9fe9745a..717f5e64 100644 --- a/examples/customer-segmentation-server/server-utils.ts +++ b/examples/shadertoy-server/main.ts @@ -1,12 +1,20 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-shadertoy-server + * Or: node dist/index.js [--stdio] + */ + /** * Shared utilities for running MCP servers with Streamable HTTP transport. */ +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; @@ -70,3 +78,17 @@ export async function startServer( process.on("SIGINT", shutdown); process.on("SIGTERM", shutdown); } + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3001", 10); + await startServer(createServer, { port, name: "ShaderToy Server" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/shadertoy-server/package.json b/examples/shadertoy-server/package.json index 34ed6d4b..cd361f53 100644 --- a/examples/shadertoy-server/package.json +++ b/examples/shadertoy-server/package.json @@ -9,41 +9,43 @@ "directory": "examples/shadertoy-server" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", - "serve": "bun --watch server.ts", + "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "prepublishOnly": "npm run build" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-shadertoy-server": "dist/index.js" } } diff --git a/examples/shadertoy-server/server-utils.ts b/examples/shadertoy-server/server-utils.ts deleted file mode 100644 index 9fe9745a..00000000 --- a/examples/shadertoy-server/server-utils.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Shared utilities for running MCP servers with Streamable HTTP transport. - */ - -import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; -import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; -import cors from "cors"; -import type { Request, Response } from "express"; - -export interface ServerOptions { - port: number; - name?: string; -} - -/** - * Starts an MCP server with Streamable HTTP transport in stateless mode. - * - * @param createServer - Factory function that creates a new McpServer instance per request. - * @param options - Server configuration options. - */ -export async function startServer( - createServer: () => McpServer, - options: ServerOptions, -): Promise { - const { port, name = "MCP Server" } = options; - - const app = createMcpExpressApp({ host: "0.0.0.0" }); - app.use(cors()); - - app.all("/mcp", async (req: Request, res: Response) => { - const server = createServer(); - const transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: undefined, - }); - - res.on("close", () => { - transport.close().catch(() => {}); - server.close().catch(() => {}); - }); - - try { - await server.connect(transport); - await transport.handleRequest(req, res, req.body); - } catch (error) { - console.error("MCP error:", error); - if (!res.headersSent) { - res.status(500).json({ - jsonrpc: "2.0", - error: { code: -32603, message: "Internal server error" }, - id: null, - }); - } - } - }); - - const httpServer = app.listen(port, (err) => { - if (err) { - console.error("Failed to start server:", err); - process.exit(1); - } - console.log(`${name} listening on http://localhost:${port}/mcp`); - }); - - const shutdown = () => { - console.log("\nShutting down..."); - httpServer.close(() => process.exit(0)); - }; - - process.on("SIGINT", shutdown); - process.on("SIGTERM", shutdown); -} diff --git a/examples/shadertoy-server/server.ts b/examples/shadertoy-server/server.ts index ff4d336d..0d9ec8b6 100644 --- a/examples/shadertoy-server/server.ts +++ b/examples/shadertoy-server/server.ts @@ -4,7 +4,6 @@ import { RESOURCE_MIME_TYPE, } from "@modelcontextprotocol/ext-apps/server"; import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult, @@ -12,8 +11,6 @@ import type { import fs from "node:fs/promises"; import path from "node:path"; import { z } from "zod"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); const TOOL_DESCRIPTION = `Renders a ShaderToy-compatible GLSL fragment shader in real-time using WebGL 2.0. @@ -140,17 +137,3 @@ export function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3001", 10); - await startServer(createServer, { port, name: "ShaderToy Server" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/shadertoy-server/tsconfig.server.json b/examples/shadertoy-server/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/shadertoy-server/tsconfig.server.json +++ b/examples/shadertoy-server/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/sheet-music-server/main.ts b/examples/sheet-music-server/main.ts new file mode 100644 index 00000000..4b206e72 --- /dev/null +++ b/examples/sheet-music-server/main.ts @@ -0,0 +1,94 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-sheet-music-server + * Or: node dist/index.js [--stdio] + */ + +/** + * Shared utilities for running MCP servers with Streamable HTTP transport. + */ + +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; +import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; +import cors from "cors"; +import type { Request, Response } from "express"; +import { createServer } from "./server.js"; + +export interface ServerOptions { + port: number; + name?: string; +} + +/** + * Starts an MCP server with Streamable HTTP transport in stateless mode. + * + * @param createServer - Factory function that creates a new McpServer instance per request. + * @param options - Server configuration options. + */ +export async function startServer( + createServer: () => McpServer, + options: ServerOptions, +): Promise { + const { port, name = "MCP Server" } = options; + + const app = createMcpExpressApp({ host: "0.0.0.0" }); + app.use(cors()); + + app.all("/mcp", async (req: Request, res: Response) => { + const server = createServer(); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + }); + + res.on("close", () => { + transport.close().catch(() => {}); + server.close().catch(() => {}); + }); + + try { + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("MCP error:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } + }); + + const httpServer = app.listen(port, (err) => { + if (err) { + console.error("Failed to start server:", err); + process.exit(1); + } + console.log(`${name} listening on http://localhost:${port}/mcp`); + }); + + const shutdown = () => { + console.log("\nShutting down..."); + httpServer.close(() => process.exit(0)); + }; + + process.on("SIGINT", shutdown); + process.on("SIGTERM", shutdown); +} + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3001", 10); + await startServer(createServer, { port, name: "Sheet Music Server" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/sheet-music-server/package.json b/examples/sheet-music-server/package.json index 8a8925e3..3b6f32e0 100644 --- a/examples/sheet-music-server/package.json +++ b/examples/sheet-music-server/package.json @@ -9,42 +9,44 @@ "directory": "examples/sheet-music-server" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", - "serve": "bun --watch server.ts", + "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "prepublishOnly": "npm run build" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", "abcjs": "^6.4.4", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-sheet-music-server": "dist/index.js" } } diff --git a/examples/sheet-music-server/server-utils.ts b/examples/sheet-music-server/server-utils.ts deleted file mode 100644 index 9fe9745a..00000000 --- a/examples/sheet-music-server/server-utils.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Shared utilities for running MCP servers with Streamable HTTP transport. - */ - -import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; -import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; -import cors from "cors"; -import type { Request, Response } from "express"; - -export interface ServerOptions { - port: number; - name?: string; -} - -/** - * Starts an MCP server with Streamable HTTP transport in stateless mode. - * - * @param createServer - Factory function that creates a new McpServer instance per request. - * @param options - Server configuration options. - */ -export async function startServer( - createServer: () => McpServer, - options: ServerOptions, -): Promise { - const { port, name = "MCP Server" } = options; - - const app = createMcpExpressApp({ host: "0.0.0.0" }); - app.use(cors()); - - app.all("/mcp", async (req: Request, res: Response) => { - const server = createServer(); - const transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: undefined, - }); - - res.on("close", () => { - transport.close().catch(() => {}); - server.close().catch(() => {}); - }); - - try { - await server.connect(transport); - await transport.handleRequest(req, res, req.body); - } catch (error) { - console.error("MCP error:", error); - if (!res.headersSent) { - res.status(500).json({ - jsonrpc: "2.0", - error: { code: -32603, message: "Internal server error" }, - id: null, - }); - } - } - }); - - const httpServer = app.listen(port, (err) => { - if (err) { - console.error("Failed to start server:", err); - process.exit(1); - } - console.log(`${name} listening on http://localhost:${port}/mcp`); - }); - - const shutdown = () => { - console.log("\nShutting down..."); - httpServer.close(() => process.exit(0)); - }; - - process.on("SIGINT", shutdown); - process.on("SIGTERM", shutdown); -} diff --git a/examples/sheet-music-server/server.ts b/examples/sheet-music-server/server.ts index cec1c3d1..4a1cb8c8 100644 --- a/examples/sheet-music-server/server.ts +++ b/examples/sheet-music-server/server.ts @@ -12,9 +12,6 @@ import { registerAppResource, registerAppTool, } from "@modelcontextprotocol/ext-apps/server"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); const DEFAULT_ABC_NOTATION_INPUT = `X:1 @@ -29,7 +26,7 @@ C C G G | A A G2 | F F E E | D D C2 |`; /** * Creates a new MCP server instance with the sheet music tool and resource. */ -function createServer(): McpServer { +export function createServer(): McpServer { const server = new McpServer({ name: "Sheet Music Server", version: "1.0.0", @@ -115,17 +112,3 @@ function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3001", 10); - await startServer(createServer, { port, name: "Sheet Music Server" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/sheet-music-server/tsconfig.server.json b/examples/sheet-music-server/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/sheet-music-server/tsconfig.server.json +++ b/examples/sheet-music-server/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/system-monitor-server/main.ts b/examples/system-monitor-server/main.ts new file mode 100644 index 00000000..19624809 --- /dev/null +++ b/examples/system-monitor-server/main.ts @@ -0,0 +1,94 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-system-monitor-server + * Or: node dist/index.js [--stdio] + */ + +/** + * Shared utilities for running MCP servers with Streamable HTTP transport. + */ + +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; +import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; +import cors from "cors"; +import type { Request, Response } from "express"; +import { createServer } from "./server.js"; + +export interface ServerOptions { + port: number; + name?: string; +} + +/** + * Starts an MCP server with Streamable HTTP transport in stateless mode. + * + * @param createServer - Factory function that creates a new McpServer instance per request. + * @param options - Server configuration options. + */ +export async function startServer( + createServer: () => McpServer, + options: ServerOptions, +): Promise { + const { port, name = "MCP Server" } = options; + + const app = createMcpExpressApp({ host: "0.0.0.0" }); + app.use(cors()); + + app.all("/mcp", async (req: Request, res: Response) => { + const server = createServer(); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + }); + + res.on("close", () => { + transport.close().catch(() => {}); + server.close().catch(() => {}); + }); + + try { + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("MCP error:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } + }); + + const httpServer = app.listen(port, (err) => { + if (err) { + console.error("Failed to start server:", err); + process.exit(1); + } + console.log(`${name} listening on http://localhost:${port}/mcp`); + }); + + const shutdown = () => { + console.log("\nShutting down..."); + httpServer.close(() => process.exit(0)); + }; + + process.on("SIGINT", shutdown); + process.on("SIGTERM", shutdown); +} + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3107", 10); + await startServer(createServer, { port, name: "System Monitor Server" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/system-monitor-server/package.json b/examples/system-monitor-server/package.json index 6c9c6df5..f30c4bce 100644 --- a/examples/system-monitor-server/package.json +++ b/examples/system-monitor-server/package.json @@ -9,12 +9,12 @@ "directory": "examples/system-monitor-server" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -23,32 +23,35 @@ "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "serve": "bun --watch main.ts" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", "chart.js": "^4.4.0", "systeminformation": "^5.27.11", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-system-monitor-server": "dist/index.js" } } diff --git a/examples/system-monitor-server/server-utils.ts b/examples/system-monitor-server/server-utils.ts deleted file mode 100644 index 9fe9745a..00000000 --- a/examples/system-monitor-server/server-utils.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Shared utilities for running MCP servers with Streamable HTTP transport. - */ - -import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; -import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; -import cors from "cors"; -import type { Request, Response } from "express"; - -export interface ServerOptions { - port: number; - name?: string; -} - -/** - * Starts an MCP server with Streamable HTTP transport in stateless mode. - * - * @param createServer - Factory function that creates a new McpServer instance per request. - * @param options - Server configuration options. - */ -export async function startServer( - createServer: () => McpServer, - options: ServerOptions, -): Promise { - const { port, name = "MCP Server" } = options; - - const app = createMcpExpressApp({ host: "0.0.0.0" }); - app.use(cors()); - - app.all("/mcp", async (req: Request, res: Response) => { - const server = createServer(); - const transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: undefined, - }); - - res.on("close", () => { - transport.close().catch(() => {}); - server.close().catch(() => {}); - }); - - try { - await server.connect(transport); - await transport.handleRequest(req, res, req.body); - } catch (error) { - console.error("MCP error:", error); - if (!res.headersSent) { - res.status(500).json({ - jsonrpc: "2.0", - error: { code: -32603, message: "Internal server error" }, - id: null, - }); - } - } - }); - - const httpServer = app.listen(port, (err) => { - if (err) { - console.error("Failed to start server:", err); - process.exit(1); - } - console.log(`${name} listening on http://localhost:${port}/mcp`); - }); - - const shutdown = () => { - console.log("\nShutting down..."); - httpServer.close(() => process.exit(0)); - }; - - process.on("SIGINT", shutdown); - process.on("SIGTERM", shutdown); -} diff --git a/examples/system-monitor-server/server.ts b/examples/system-monitor-server/server.ts index 9283e211..1a1b56f9 100644 --- a/examples/system-monitor-server/server.ts +++ b/examples/system-monitor-server/server.ts @@ -4,7 +4,6 @@ import { registerAppTool, } from "@modelcontextprotocol/ext-apps/server"; import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult, @@ -14,8 +13,6 @@ import os from "node:os"; import path from "node:path"; import si from "systeminformation"; import { z } from "zod"; -import { startServer } from "./server-utils.js"; - // Schemas - types are derived from these using z.infer const CpuCoreSchema = z.object({ idle: z.number(), @@ -204,17 +201,3 @@ export function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3107", 10); - await startServer(createServer, { port, name: "System Monitor Server" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/system-monitor-server/tsconfig.server.json b/examples/system-monitor-server/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/system-monitor-server/tsconfig.server.json +++ b/examples/system-monitor-server/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/budget-allocator-server/server-utils.ts b/examples/threejs-server/main.ts similarity index 77% rename from examples/budget-allocator-server/server-utils.ts rename to examples/threejs-server/main.ts index 9fe9745a..1f779a97 100644 --- a/examples/budget-allocator-server/server-utils.ts +++ b/examples/threejs-server/main.ts @@ -1,12 +1,20 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-threejs-server + * Or: node dist/index.js [--stdio] + */ + /** * Shared utilities for running MCP servers with Streamable HTTP transport. */ +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; @@ -70,3 +78,17 @@ export async function startServer( process.on("SIGINT", shutdown); process.on("SIGTERM", shutdown); } + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3108", 10); + await startServer(createServer, { port, name: "Three.js Server" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/threejs-server/package.json b/examples/threejs-server/package.json index 8c974982..3d5ea696 100644 --- a/examples/threejs-server/package.json +++ b/examples/threejs-server/package.json @@ -9,12 +9,12 @@ "directory": "examples/threejs-server" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -23,7 +23,7 @@ "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "serve": "bun --watch main.ts" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", @@ -31,7 +31,9 @@ "react": "^19.2.0", "react-dom": "^19.2.0", "three": "^0.181.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -42,18 +44,19 @@ "@types/three": "^0.181.0", "@vitejs/plugin-react": "^4.3.4", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-threejs-server": "dist/index.js" } } diff --git a/examples/threejs-server/server-utils.ts b/examples/threejs-server/server-utils.ts deleted file mode 100644 index 9fe9745a..00000000 --- a/examples/threejs-server/server-utils.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Shared utilities for running MCP servers with Streamable HTTP transport. - */ - -import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; -import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; -import cors from "cors"; -import type { Request, Response } from "express"; - -export interface ServerOptions { - port: number; - name?: string; -} - -/** - * Starts an MCP server with Streamable HTTP transport in stateless mode. - * - * @param createServer - Factory function that creates a new McpServer instance per request. - * @param options - Server configuration options. - */ -export async function startServer( - createServer: () => McpServer, - options: ServerOptions, -): Promise { - const { port, name = "MCP Server" } = options; - - const app = createMcpExpressApp({ host: "0.0.0.0" }); - app.use(cors()); - - app.all("/mcp", async (req: Request, res: Response) => { - const server = createServer(); - const transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: undefined, - }); - - res.on("close", () => { - transport.close().catch(() => {}); - server.close().catch(() => {}); - }); - - try { - await server.connect(transport); - await transport.handleRequest(req, res, req.body); - } catch (error) { - console.error("MCP error:", error); - if (!res.headersSent) { - res.status(500).json({ - jsonrpc: "2.0", - error: { code: -32603, message: "Internal server error" }, - id: null, - }); - } - } - }); - - const httpServer = app.listen(port, (err) => { - if (err) { - console.error("Failed to start server:", err); - process.exit(1); - } - console.log(`${name} listening on http://localhost:${port}/mcp`); - }); - - const shutdown = () => { - console.log("\nShutting down..."); - httpServer.close(() => process.exit(0)); - }; - - process.on("SIGINT", shutdown); - process.on("SIGTERM", shutdown); -} diff --git a/examples/threejs-server/server.ts b/examples/threejs-server/server.ts index d3599684..54c058a7 100644 --- a/examples/threejs-server/server.ts +++ b/examples/threejs-server/server.ts @@ -9,13 +9,10 @@ import { registerAppTool, } from "@modelcontextprotocol/ext-apps/server"; import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js"; import fs from "node:fs/promises"; import path from "node:path"; import { z } from "zod"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); // Default code example for the Three.js widget @@ -222,17 +219,3 @@ export function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3108", 10); - await startServer(createServer, { port, name: "Three.js Server" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/threejs-server/tsconfig.server.json b/examples/threejs-server/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/threejs-server/tsconfig.server.json +++ b/examples/threejs-server/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/transcript-server/main.ts b/examples/transcript-server/main.ts new file mode 100644 index 00000000..2a927041 --- /dev/null +++ b/examples/transcript-server/main.ts @@ -0,0 +1,91 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-transcript-server + * Or: node dist/index.js [--stdio] + */ + +/** + * Shared utilities for running MCP servers with Streamable HTTP transport. + */ + +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; +import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; +import cors from "cors"; +import type { Request, Response } from "express"; +import { createServer } from "./server.js"; + +export interface ServerOptions { + port: number; + name?: string; +} + +/** + * Starts an MCP server with Streamable HTTP transport in stateless mode. + */ +export async function startServer( + createServer: () => McpServer, + options: ServerOptions, +): Promise { + const { port, name = "MCP Server" } = options; + + const app = createMcpExpressApp({ host: "0.0.0.0" }); + app.use(cors()); + + app.all("/mcp", async (req: Request, res: Response) => { + const server = createServer(); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + }); + + res.on("close", () => { + transport.close().catch(() => {}); + server.close().catch(() => {}); + }); + + try { + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("MCP error:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } + }); + + const httpServer = app.listen(port, (err) => { + if (err) { + console.error("Failed to start server:", err); + process.exit(1); + } + console.log(`${name} listening on http://localhost:${port}/mcp`); + }); + + const shutdown = () => { + console.log("\nShutting down..."); + httpServer.close(() => process.exit(0)); + }; + + process.on("SIGINT", shutdown); + process.on("SIGTERM", shutdown); +} + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3109", 10); + await startServer(createServer, { port, name: "Transcript Server" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/transcript-server/package.json b/examples/transcript-server/package.json index 03b045ce..8506ee0d 100644 --- a/examples/transcript-server/package.json +++ b/examples/transcript-server/package.json @@ -9,23 +9,24 @@ "directory": "examples/transcript-server" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", - "serve": "bun server.ts", + "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "prepublishOnly": "npm run build" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", - "zod": "^3.23.0" + "zod": "^3.23.0", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", @@ -33,18 +34,19 @@ "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-transcript-server": "dist/index.js" } } diff --git a/examples/transcript-server/server-utils.ts b/examples/transcript-server/server-utils.ts deleted file mode 100644 index 752edfaf..00000000 --- a/examples/transcript-server/server-utils.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Shared utilities for running MCP servers with Streamable HTTP transport. - */ - -import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; -import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; -import cors from "cors"; -import type { Request, Response } from "express"; - -export interface ServerOptions { - port: number; - name?: string; -} - -/** - * Starts an MCP server with Streamable HTTP transport in stateless mode. - */ -export async function startServer( - createServer: () => McpServer, - options: ServerOptions, -): Promise { - const { port, name = "MCP Server" } = options; - - const app = createMcpExpressApp({ host: "0.0.0.0" }); - app.use(cors()); - - app.all("/mcp", async (req: Request, res: Response) => { - const server = createServer(); - const transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: undefined, - }); - - res.on("close", () => { - transport.close().catch(() => {}); - server.close().catch(() => {}); - }); - - try { - await server.connect(transport); - await transport.handleRequest(req, res, req.body); - } catch (error) { - console.error("MCP error:", error); - if (!res.headersSent) { - res.status(500).json({ - jsonrpc: "2.0", - error: { code: -32603, message: "Internal server error" }, - id: null, - }); - } - } - }); - - const httpServer = app.listen(port, (err) => { - if (err) { - console.error("Failed to start server:", err); - process.exit(1); - } - console.log(`${name} listening on http://localhost:${port}/mcp`); - }); - - const shutdown = () => { - console.log("\nShutting down..."); - httpServer.close(() => process.exit(0)); - }; - - process.on("SIGINT", shutdown); - process.on("SIGTERM", shutdown); -} diff --git a/examples/transcript-server/server.ts b/examples/transcript-server/server.ts index b4cdd09d..96afe09d 100644 --- a/examples/transcript-server/server.ts +++ b/examples/transcript-server/server.ts @@ -1,5 +1,4 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult, @@ -12,8 +11,6 @@ import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY, } from "@modelcontextprotocol/ext-apps/server"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); const RESOURCE_URI = "ui://transcript/mcp-app.html"; @@ -84,17 +81,3 @@ export function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3109", 10); - await startServer(createServer, { port, name: "Transcript Server" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/transcript-server/tsconfig.server.json b/examples/transcript-server/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/transcript-server/tsconfig.server.json +++ b/examples/transcript-server/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/video-resource-server/main.ts b/examples/video-resource-server/main.ts new file mode 100644 index 00000000..ff304639 --- /dev/null +++ b/examples/video-resource-server/main.ts @@ -0,0 +1,94 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-video-resource-server + * Or: node dist/index.js [--stdio] + */ + +/** + * Shared utilities for running MCP servers with Streamable HTTP transport. + */ + +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; +import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; +import cors from "cors"; +import type { Request, Response } from "express"; +import { createServer } from "./server.js"; + +export interface ServerOptions { + port: number; + name?: string; +} + +/** + * Starts an MCP server with Streamable HTTP transport in stateless mode. + * + * @param createServer - Factory function that creates a new McpServer instance per request. + * @param options - Server configuration options. + */ +export async function startServer( + createServer: () => McpServer, + options: ServerOptions, +): Promise { + const { port, name = "MCP Server" } = options; + + const app = createMcpExpressApp({ host: "0.0.0.0" }); + app.use(cors()); + + app.all("/mcp", async (req: Request, res: Response) => { + const server = createServer(); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + }); + + res.on("close", () => { + transport.close().catch(() => {}); + server.close().catch(() => {}); + }); + + try { + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("MCP error:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } + }); + + const httpServer = app.listen(port, (err) => { + if (err) { + console.error("Failed to start server:", err); + process.exit(1); + } + console.log(`${name} listening on http://localhost:${port}/mcp`); + }); + + const shutdown = () => { + console.log("\nShutting down..."); + httpServer.close(() => process.exit(0)); + }; + + process.on("SIGINT", shutdown); + process.on("SIGTERM", shutdown); +} + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3001", 10); + await startServer(createServer, { port, name: "Video Resource Server" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/video-resource-server/package.json b/examples/video-resource-server/package.json index eb15da6b..a7644d0e 100644 --- a/examples/video-resource-server/package.json +++ b/examples/video-resource-server/package.json @@ -9,41 +9,43 @@ "directory": "examples/video-resource-server" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", - "serve": "bun --watch server.ts", + "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve'", - "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "prepublishOnly": "npm run build" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-video-resource-server": "dist/index.js" } } diff --git a/examples/video-resource-server/server-utils.ts b/examples/video-resource-server/server-utils.ts deleted file mode 100644 index 9fe9745a..00000000 --- a/examples/video-resource-server/server-utils.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Shared utilities for running MCP servers with Streamable HTTP transport. - */ - -import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; -import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; -import cors from "cors"; -import type { Request, Response } from "express"; - -export interface ServerOptions { - port: number; - name?: string; -} - -/** - * Starts an MCP server with Streamable HTTP transport in stateless mode. - * - * @param createServer - Factory function that creates a new McpServer instance per request. - * @param options - Server configuration options. - */ -export async function startServer( - createServer: () => McpServer, - options: ServerOptions, -): Promise { - const { port, name = "MCP Server" } = options; - - const app = createMcpExpressApp({ host: "0.0.0.0" }); - app.use(cors()); - - app.all("/mcp", async (req: Request, res: Response) => { - const server = createServer(); - const transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: undefined, - }); - - res.on("close", () => { - transport.close().catch(() => {}); - server.close().catch(() => {}); - }); - - try { - await server.connect(transport); - await transport.handleRequest(req, res, req.body); - } catch (error) { - console.error("MCP error:", error); - if (!res.headersSent) { - res.status(500).json({ - jsonrpc: "2.0", - error: { code: -32603, message: "Internal server error" }, - id: null, - }); - } - } - }); - - const httpServer = app.listen(port, (err) => { - if (err) { - console.error("Failed to start server:", err); - process.exit(1); - } - console.log(`${name} listening on http://localhost:${port}/mcp`); - }); - - const shutdown = () => { - console.log("\nShutting down..."); - httpServer.close(() => process.exit(0)); - }; - - process.on("SIGINT", shutdown); - process.on("SIGTERM", shutdown); -} diff --git a/examples/video-resource-server/server.ts b/examples/video-resource-server/server.ts index cd997da5..90fb3900 100644 --- a/examples/video-resource-server/server.ts +++ b/examples/video-resource-server/server.ts @@ -13,7 +13,6 @@ import { McpServer, ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult, @@ -21,8 +20,6 @@ import type { import fs from "node:fs/promises"; import path from "node:path"; import { z } from "zod"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); const RESOURCE_URI = "ui://video-player/mcp-app.html"; @@ -56,7 +53,7 @@ const VIDEO_LIBRARY: Record = { }, }; -function createServer(): McpServer { +export function createServer(): McpServer { const server = new McpServer({ name: "Video Resource Server", version: "1.0.0", @@ -168,17 +165,3 @@ ${Object.entries(VIDEO_LIBRARY) return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3001", 10); - await startServer(createServer, { port, name: "Video Resource Server" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/video-resource-server/tsconfig.server.json b/examples/video-resource-server/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/video-resource-server/tsconfig.server.json +++ b/examples/video-resource-server/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/examples/integration-server/server-utils.ts b/examples/wiki-explorer-server/main.ts similarity index 77% rename from examples/integration-server/server-utils.ts rename to examples/wiki-explorer-server/main.ts index 9fe9745a..d83ac427 100644 --- a/examples/integration-server/server-utils.ts +++ b/examples/wiki-explorer-server/main.ts @@ -1,12 +1,20 @@ +/** + * Entry point for running the MCP server. + * Run with: npx mcp-wiki-explorer-server + * Or: node dist/index.js [--stdio] + */ + /** * Shared utilities for running MCP servers with Streamable HTTP transport. */ +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; @@ -70,3 +78,17 @@ export async function startServer( process.on("SIGINT", shutdown); process.on("SIGTERM", shutdown); } + +async function main() { + if (process.argv.includes("--stdio")) { + await createServer().connect(new StdioServerTransport()); + } else { + const port = parseInt(process.env.PORT ?? "3109", 10); + await startServer(createServer, { port, name: "Wiki Explorer" }); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/examples/wiki-explorer-server/package.json b/examples/wiki-explorer-server/package.json index 61294cfd..7b865f47 100644 --- a/examples/wiki-explorer-server/package.json +++ b/examples/wiki-explorer-server/package.json @@ -9,12 +9,12 @@ "directory": "examples/wiki-explorer-server" }, "license": "MIT", - "main": "dist/server/server.js", + "main": "dist/server.js", "files": [ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", @@ -23,32 +23,35 @@ "start:stdio": "cross-env NODE_ENV=development npm run build && npm run serve:stdio", "dev": "cross-env NODE_ENV=development concurrently 'npm run watch' 'npm run serve:http'", "prepublishOnly": "npm run build", - "build:server": "tsc -p tsconfig.server.json" + "serve": "bun --watch main.ts" }, "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", "cheerio": "^1.0.0", - "zod": "^4.1.13" + "zod": "^4.1.13", + "cors": "^2.8.5", + "express": "^5.1.0" }, "devDependencies": { "@types/cors": "^2.8.19", "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "force-graph": "^1.49.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" }, - "types": "dist/server/server.d.ts", + "types": "dist/server.d.ts", "exports": { ".": { - "types": "./dist/server/server.d.ts", - "default": "./dist/server/server.js" + "types": "./dist/server.d.ts", + "default": "./dist/server.js" } + }, + "bin": { + "mcp-wiki-explorer-server": "dist/index.js" } } diff --git a/examples/wiki-explorer-server/server-utils.ts b/examples/wiki-explorer-server/server-utils.ts deleted file mode 100644 index 9fe9745a..00000000 --- a/examples/wiki-explorer-server/server-utils.ts +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Shared utilities for running MCP servers with Streamable HTTP transport. - */ - -import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; -import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; -import cors from "cors"; -import type { Request, Response } from "express"; - -export interface ServerOptions { - port: number; - name?: string; -} - -/** - * Starts an MCP server with Streamable HTTP transport in stateless mode. - * - * @param createServer - Factory function that creates a new McpServer instance per request. - * @param options - Server configuration options. - */ -export async function startServer( - createServer: () => McpServer, - options: ServerOptions, -): Promise { - const { port, name = "MCP Server" } = options; - - const app = createMcpExpressApp({ host: "0.0.0.0" }); - app.use(cors()); - - app.all("/mcp", async (req: Request, res: Response) => { - const server = createServer(); - const transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: undefined, - }); - - res.on("close", () => { - transport.close().catch(() => {}); - server.close().catch(() => {}); - }); - - try { - await server.connect(transport); - await transport.handleRequest(req, res, req.body); - } catch (error) { - console.error("MCP error:", error); - if (!res.headersSent) { - res.status(500).json({ - jsonrpc: "2.0", - error: { code: -32603, message: "Internal server error" }, - id: null, - }); - } - } - }); - - const httpServer = app.listen(port, (err) => { - if (err) { - console.error("Failed to start server:", err); - process.exit(1); - } - console.log(`${name} listening on http://localhost:${port}/mcp`); - }); - - const shutdown = () => { - console.log("\nShutting down..."); - httpServer.close(() => process.exit(0)); - }; - - process.on("SIGINT", shutdown); - process.on("SIGTERM", shutdown); -} diff --git a/examples/wiki-explorer-server/server.ts b/examples/wiki-explorer-server/server.ts index 8c331509..faf1d661 100644 --- a/examples/wiki-explorer-server/server.ts +++ b/examples/wiki-explorer-server/server.ts @@ -4,7 +4,6 @@ import { registerAppTool, } from "@modelcontextprotocol/ext-apps/server"; import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import type { CallToolResult, ReadResourceResult, @@ -13,8 +12,6 @@ import * as cheerio from "cheerio"; import fs from "node:fs/promises"; import path from "node:path"; import { z } from "zod"; -import { startServer } from "./server-utils.js"; - const DIST_DIR = path.join(import.meta.dirname, "dist"); type PageInfo = { url: string; title: string }; @@ -169,17 +166,3 @@ export function createServer(): McpServer { return server; } - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "3109", 10); - await startServer(createServer, { port, name: "Wiki Explorer" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); diff --git a/examples/wiki-explorer-server/tsconfig.server.json b/examples/wiki-explorer-server/tsconfig.server.json index 96512aa6..c0168149 100644 --- a/examples/wiki-explorer-server/tsconfig.server.json +++ b/examples/wiki-explorer-server/tsconfig.server.json @@ -1,16 +1,21 @@ { "compilerOptions": { "target": "ES2022", - "lib": ["ES2022"], + "lib": [ + "ES2022" + ], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, - "outDir": "./dist/server", + "emitDeclarationOnly": true, + "outDir": "./dist", "rootDir": ".", "strict": true, "skipLibCheck": true, "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["server.ts", "server-utils.ts"] + "include": [ + "server.ts" + ] } diff --git a/scripts/migrate-server-examples.ts b/scripts/migrate-server-examples.ts index 41da3ec8..a3910333 100644 --- a/scripts/migrate-server-examples.ts +++ b/scripts/migrate-server-examples.ts @@ -1,6 +1,6 @@ #!/usr/bin/env bun /** - * Migrates basic-server-* examples to the new structure: + * Migrates server examples to the new structure: * - server.ts: Only exports createServer() * - main.ts: Entry point with main() that runs the server * - package.json: Updated with bin field and bun build commands @@ -17,6 +17,16 @@ interface ExampleConfig { serverName: string; binName: string; port: string; + serverTsPath: string; // Relative to example dir +} + +async function fileExists(filePath: string): Promise { + try { + await fs.access(filePath); + return true; + } catch { + return false; + } } async function getExamples(): Promise { @@ -24,71 +34,112 @@ async function getExamples(): Promise { const examples: ExampleConfig[] = []; for (const dir of dirs) { - if (!dir.startsWith("basic-server-")) continue; - if (dir === "basic-server-react") continue; // Already migrated - - const serverTs = await fs.readFile(path.join(EXAMPLES_DIR, dir, "server.ts"), "utf-8"); - - // Extract server name from: name: "Basic MCP App Server (React)" + const exampleDir = path.join(EXAMPLES_DIR, dir); + const stat = await fs.stat(exampleDir); + if (!stat.isDirectory()) continue; + + // Check for server-utils.ts (indicates not yet migrated) + const serverUtilsPath = path.join(exampleDir, "server-utils.ts"); + if (!(await fileExists(serverUtilsPath))) continue; + + // Determine server.ts location + let serverTsPath = "server.ts"; + let serverTsFullPath = path.join(exampleDir, serverTsPath); + if (!(await fileExists(serverTsFullPath))) { + // Try src/server.ts + serverTsPath = "src/server.ts"; + serverTsFullPath = path.join(exampleDir, serverTsPath); + if (!(await fileExists(serverTsFullPath))) { + console.log(`Skipping ${dir}: no server.ts found`); + continue; + } + } + + const serverTs = await fs.readFile(serverTsFullPath, "utf-8"); + + // Extract server name from: name: "..." const nameMatch = serverTs.match(/name:\s*["']([^"']+)["']/); - const serverName = nameMatch?.[1] ?? `Basic MCP App Server (${dir.replace("basic-server-", "")})`; + const serverName = nameMatch?.[1] ?? dir.replace(/-/g, " ").replace(/\b\w/g, c => c.toUpperCase()); - // Extract port from: PORT ?? "3001" + // Extract port from: PORT ?? "..." const portMatch = serverTs.match(/PORT\s*\?\?\s*["'](\d+)["']/); const port = portMatch?.[1] ?? "3001"; - // Create bin name: mcp-server-basic-react - const binName = `mcp-server-${dir.replace("basic-server-", "basic-")}`; + // Create bin name from directory name + const binName = `mcp-${dir}`; - examples.push({ dir, serverName, binName, port }); + examples.push({ dir, serverName, binName, port, serverTsPath }); } return examples; } async function migrateExample(config: ExampleConfig) { - const { dir, serverName, binName, port } = config; + const { dir, serverName, binName, port, serverTsPath } = config; const exampleDir = path.join(EXAMPLES_DIR, dir); console.log(`\n=== Migrating ${dir} ===`); console.log(` Server name: ${serverName}`); console.log(` Bin name: ${binName}`); console.log(` Port: ${port}`); + const serverTsFullPath = path.join(exampleDir, serverTsPath); + const serverUtilsPath = path.join(exampleDir, "server-utils.ts"); + const mainTsPath = path.join(exampleDir, "main.ts"); + // 1. Read and modify server.ts - const serverTs = await fs.readFile(path.join(exampleDir, "server.ts"), "utf-8"); + const serverTs = await fs.readFile(serverTsFullPath, "utf-8"); // Remove main function and related imports, ensure createServer is exported let newServerTs = serverTs // Remove StdioServerTransport import - .replace(/import\s*\{\s*StdioServerTransport\s*\}\s*from\s*["']@modelcontextprotocol\/sdk\/server\/stdio\.js["'];\s*\n?/g, "") - // Remove startServer import - .replace(/import\s*\{\s*startServer\s*\}\s*from\s*["']\.\/server-utils\.js["'];\s*\n?/g, "") + .replace( + /import\s*\{\s*StdioServerTransport\s*\}\s*from\s*["']@modelcontextprotocol\/sdk\/server\/stdio\.js["'];\s*\n?/g, + "", + ) + // Remove startServer import (various path formats) + .replace( + /import\s*\{\s*startServer\s*\}\s*from\s*["']\.\/server-utils\.js["'];\s*\n?/g, + "", + ) + .replace( + /import\s*\{\s*startServer\s*\}\s*from\s*["']\.\.\/server-utils\.js["'];\s*\n?/g, + "", + ) // Remove main function and call - .replace(/\nasync function main\(\)[\s\S]*?main\(\)\.catch[\s\S]*?\}\);?\s*$/m, "\n") + .replace( + /\n?async function main\(\)[\s\S]*?main\(\)\.catch[\s\S]*?\}\);?\s*$/m, + "\n", + ) // Ensure createServer is exported - .replace(/^function createServer\(\)/m, "export function createServer()"); + .replace(/^function createServer\(\)/m, "export function createServer()") + .replace(/^async function createServer\(\)/m, "export async function createServer()"); - await fs.writeFile(path.join(exampleDir, "server.ts"), newServerTs.trim() + "\n"); + await fs.writeFile(serverTsFullPath, newServerTs.trim() + "\n"); console.log(" ✓ Updated server.ts"); - // 2. Read server-utils.ts - const serverUtils = await fs.readFile(path.join(exampleDir, "server-utils.ts"), "utf-8"); + // 2. Read server-utils.ts and create main.ts + const serverUtils = await fs.readFile(serverUtilsPath, "utf-8"); + + // Determine the import path for server.js based on structure + const serverImportPath = serverTsPath === "src/server.ts" ? "./src/server.js" : "./server.js"; // Create main.ts with added imports and main function - const mainTs = serverUtils - .replace( - /\/\*\*\s*\n\s*\*\s*Shared utilities/, - `/**\n * Entry point for running the MCP server.\n * Run with: npx ${binName}\n * Or: node dist/index.js [--stdio]\n */\n\n/**\n * Shared utilities` - ) - .replace( - /import\s*\{\s*createMcpExpressApp\s*\}/, - `import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";\nimport { createMcpExpressApp }` - ) - .replace( - /import type \{ Request, Response \} from "express";/, - `import type { Request, Response } from "express";\nimport { createServer } from "./server.js";` - ) - .trim() + ` + const mainTs = + serverUtils + .replace( + /\/\*\*\s*\n\s*\*\s*Shared utilities/, + `/**\n * Entry point for running the MCP server.\n * Run with: npx ${binName}\n * Or: node dist/index.js [--stdio]\n */\n\n/**\n * Shared utilities`, + ) + .replace( + /import\s*\{\s*createMcpExpressApp\s*\}/, + `import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";\nimport { createMcpExpressApp }`, + ) + .replace( + /import type \{ Request, Response \} from "express";/, + `import type { Request, Response } from "express";\nimport { createServer } from "${serverImportPath}";`, + ) + .trim() + + ` async function main() { if (process.argv.includes("--stdio")) { @@ -105,34 +156,37 @@ main().catch((e) => { }); `; - await fs.writeFile(path.join(exampleDir, "main.ts"), mainTs); + await fs.writeFile(mainTsPath, mainTs); console.log(" ✓ Created main.ts"); // 3. Remove old server-utils.ts and stage the rename - await fs.unlink(path.join(exampleDir, "server-utils.ts")); + await fs.unlink(serverUtilsPath); await $`cd ${exampleDir} && git add -A server-utils.ts main.ts`.quiet(); console.log(" ✓ Renamed server-utils.ts -> main.ts"); - // 4. Update tsconfig.server.json - const tsconfig = { - compilerOptions: { - target: "ES2022", - lib: ["ES2022"], - module: "NodeNext", - moduleResolution: "NodeNext", - declaration: true, - emitDeclarationOnly: true, - outDir: "./dist", - rootDir: ".", - strict: true, - skipLibCheck: true, - esModuleInterop: true, - resolveJsonModule: true, - }, - include: ["server.ts"], - }; - await fs.writeFile(path.join(exampleDir, "tsconfig.server.json"), JSON.stringify(tsconfig, null, 2) + "\n"); - console.log(" ✓ Updated tsconfig.server.json"); + // 4. Update tsconfig.server.json if it exists + const tsconfigPath = path.join(exampleDir, "tsconfig.server.json"); + if (await fileExists(tsconfigPath)) { + const tsconfig = { + compilerOptions: { + target: "ES2022", + lib: ["ES2022"], + module: "NodeNext", + moduleResolution: "NodeNext", + declaration: true, + emitDeclarationOnly: true, + outDir: "./dist", + rootDir: ".", + strict: true, + skipLibCheck: true, + esModuleInterop: true, + resolveJsonModule: true, + }, + include: [serverTsPath], + }; + await fs.writeFile(tsconfigPath, JSON.stringify(tsconfig, null, 2) + "\n"); + console.log(" ✓ Updated tsconfig.server.json"); + } // 5. Update package.json const pkgPath = path.join(exampleDir, "package.json"); @@ -147,16 +201,24 @@ main().catch((e) => { default: "./dist/server.js", }, }; - pkg.scripts.build = "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js"; + + // Update build script - handle both INPUT patterns + const hasInput = pkg.scripts?.build?.includes("INPUT="); + const inputPart = hasInput ? "cross-env INPUT=mcp-app.html vite build && " : ""; + const serverPath = serverTsPath; + + pkg.scripts.build = `tsc --noEmit && ${inputPart}tsc -p tsconfig.server.json && bun build ${serverPath} --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js`; pkg.scripts.serve = "bun --watch main.ts"; delete pkg.scripts["build:server"]; - // Move cors and express to dependencies + // Move cors and express to dependencies if in devDependencies if (pkg.devDependencies?.cors) { + pkg.dependencies = pkg.dependencies || {}; pkg.dependencies.cors = pkg.devDependencies.cors; delete pkg.devDependencies.cors; } if (pkg.devDependencies?.express) { + pkg.dependencies = pkg.dependencies || {}; pkg.dependencies.express = pkg.devDependencies.express; delete pkg.devDependencies.express; } @@ -179,7 +241,7 @@ async function main() { console.log("\n✅ Migration complete!"); console.log("\nNext steps:"); console.log("1. Run: npm run build:all"); - console.log("2. Run: npm run test:e2e"); + console.log("2. Test the examples"); } main().catch((e) => { From b42fda59f890df82490b6482967f60df9d82074e Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Tue, 13 Jan 2026 21:55:13 +0000 Subject: [PATCH 06/19] chore: remove unused server-utils.ts from video-resource-server/src --- .../video-resource-server/src/server-utils.ts | 110 ------------------ .../tsconfig.server.json | 8 +- 2 files changed, 2 insertions(+), 116 deletions(-) delete mode 100644 examples/video-resource-server/src/server-utils.ts diff --git a/examples/video-resource-server/src/server-utils.ts b/examples/video-resource-server/src/server-utils.ts deleted file mode 100644 index 40524237..00000000 --- a/examples/video-resource-server/src/server-utils.ts +++ /dev/null @@ -1,110 +0,0 @@ -/** - * Shared utilities for running MCP servers with various transports. - */ - -import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; -import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; -import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; -import cors from "cors"; -import type { Request, Response } from "express"; - -/** - * Starts an MCP server using the appropriate transport based on command-line arguments. - * - * If `--stdio` is passed, uses stdio transport. Otherwise, uses Streamable HTTP transport. - * - * @param createServer - Factory function that creates a new McpServer instance. - */ -export async function startServer( - createServer: () => McpServer, -): Promise { - try { - if (process.argv.includes("--stdio")) { - await startStdioServer(createServer); - } else { - await startStreamableHttpServer(createServer); - } - } catch (e) { - console.error(e); - process.exit(1); - } -} - -/** - * Starts an MCP server with stdio transport. - * - * @param createServer - Factory function that creates a new McpServer instance. - */ -export async function startStdioServer( - createServer: () => McpServer, -): Promise { - await createServer().connect(new StdioServerTransport()); -} - -/** - * Starts an MCP server with Streamable HTTP transport in stateless mode. - * - * Each request creates a fresh server and transport instance, which are - * closed when the response ends (no session tracking). - * - * The server listens on the port specified by the PORT environment variable, - * defaulting to 3001 if not set. - * - * @param createServer - Factory function that creates a new McpServer instance per request. - */ -export async function startStreamableHttpServer( - createServer: () => McpServer, -): Promise { - const port = parseInt(process.env.PORT ?? "3001", 10); - - // Express app - bind to all interfaces for development/testing - const expressApp = createMcpExpressApp({ host: "0.0.0.0" }); - expressApp.use(cors()); - - expressApp.all("/mcp", async (req: Request, res: Response) => { - // Create fresh server and transport for each request (stateless mode) - const server = createServer(); - const transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: undefined, - }); - - // Clean up when response ends - res.on("close", () => { - transport.close().catch(() => {}); - server.close().catch(() => {}); - }); - - try { - await server.connect(transport); - await transport.handleRequest(req, res, req.body); - } catch (error) { - console.error("MCP error:", error); - if (!res.headersSent) { - res.status(500).json({ - jsonrpc: "2.0", - error: { code: -32603, message: "Internal server error" }, - id: null, - }); - } - } - }); - - const { promise, resolve, reject } = Promise.withResolvers(); - - const httpServer = expressApp.listen(port, (err?: Error) => { - if (err) return reject(err); - console.log(`Server listening on http://localhost:${port}/mcp`); - resolve(); - }); - - const shutdown = () => { - console.log("\nShutting down..."); - httpServer.close(() => process.exit(0)); - }; - - process.on("SIGINT", shutdown); - process.on("SIGTERM", shutdown); - - return promise; -} diff --git a/examples/video-resource-server/tsconfig.server.json b/examples/video-resource-server/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/video-resource-server/tsconfig.server.json +++ b/examples/video-resource-server/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } From e062feb3c02d1a6c7e7518f7f7a133ba7e281a27 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Tue, 13 Jan 2026 23:32:37 +0000 Subject: [PATCH 07/19] update --- .../tsconfig.server.json | 8 +- .../tsconfig.server.json | 8 +- examples/customer-segmentation-server/main.ts | 5 +- .../tsconfig.server.json | 8 +- .../integration-server/tsconfig.server.json | 8 +- examples/map-server/tsconfig.server.json | 8 +- .../tsconfig.server.json | 8 +- .../shadertoy-server/tsconfig.server.json | 8 +- .../sheet-music-server/tsconfig.server.json | 8 +- .../tsconfig.server.json | 8 +- examples/threejs-server/tsconfig.server.json | 8 +- .../transcript-server/tsconfig.server.json | 8 +- .../wiki-explorer-server/tsconfig.server.json | 8 +- scripts/migrate-server-examples.ts | 250 ------------------ 14 files changed, 28 insertions(+), 323 deletions(-) delete mode 100644 scripts/migrate-server-examples.ts diff --git a/examples/budget-allocator-server/tsconfig.server.json b/examples/budget-allocator-server/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/budget-allocator-server/tsconfig.server.json +++ b/examples/budget-allocator-server/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/cohort-heatmap-server/tsconfig.server.json b/examples/cohort-heatmap-server/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/cohort-heatmap-server/tsconfig.server.json +++ b/examples/cohort-heatmap-server/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/customer-segmentation-server/main.ts b/examples/customer-segmentation-server/main.ts index e3bb35ef..7be715a4 100644 --- a/examples/customer-segmentation-server/main.ts +++ b/examples/customer-segmentation-server/main.ts @@ -84,7 +84,10 @@ async function main() { await createServer().connect(new StdioServerTransport()); } else { const port = parseInt(process.env.PORT ?? "3105", 10); - await startServer(createServer, { port, name: "Customer Segmentation Server" }); + await startServer(createServer, { + port, + name: "Customer Segmentation Server", + }); } } diff --git a/examples/customer-segmentation-server/tsconfig.server.json b/examples/customer-segmentation-server/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/customer-segmentation-server/tsconfig.server.json +++ b/examples/customer-segmentation-server/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/integration-server/tsconfig.server.json b/examples/integration-server/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/integration-server/tsconfig.server.json +++ b/examples/integration-server/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/map-server/tsconfig.server.json b/examples/map-server/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/map-server/tsconfig.server.json +++ b/examples/map-server/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/scenario-modeler-server/tsconfig.server.json b/examples/scenario-modeler-server/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/scenario-modeler-server/tsconfig.server.json +++ b/examples/scenario-modeler-server/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/shadertoy-server/tsconfig.server.json b/examples/shadertoy-server/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/shadertoy-server/tsconfig.server.json +++ b/examples/shadertoy-server/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/sheet-music-server/tsconfig.server.json b/examples/sheet-music-server/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/sheet-music-server/tsconfig.server.json +++ b/examples/sheet-music-server/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/system-monitor-server/tsconfig.server.json b/examples/system-monitor-server/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/system-monitor-server/tsconfig.server.json +++ b/examples/system-monitor-server/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/threejs-server/tsconfig.server.json b/examples/threejs-server/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/threejs-server/tsconfig.server.json +++ b/examples/threejs-server/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/transcript-server/tsconfig.server.json b/examples/transcript-server/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/transcript-server/tsconfig.server.json +++ b/examples/transcript-server/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/examples/wiki-explorer-server/tsconfig.server.json b/examples/wiki-explorer-server/tsconfig.server.json index c0168149..05ddd8ec 100644 --- a/examples/wiki-explorer-server/tsconfig.server.json +++ b/examples/wiki-explorer-server/tsconfig.server.json @@ -1,9 +1,7 @@ { "compilerOptions": { "target": "ES2022", - "lib": [ - "ES2022" - ], + "lib": ["ES2022"], "module": "NodeNext", "moduleResolution": "NodeNext", "declaration": true, @@ -15,7 +13,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": [ - "server.ts" - ] + "include": ["server.ts"] } diff --git a/scripts/migrate-server-examples.ts b/scripts/migrate-server-examples.ts deleted file mode 100644 index a3910333..00000000 --- a/scripts/migrate-server-examples.ts +++ /dev/null @@ -1,250 +0,0 @@ -#!/usr/bin/env bun -/** - * Migrates server examples to the new structure: - * - server.ts: Only exports createServer() - * - main.ts: Entry point with main() that runs the server - * - package.json: Updated with bin field and bun build commands - */ - -import { $ } from "bun"; -import fs from "node:fs/promises"; -import path from "node:path"; - -const EXAMPLES_DIR = path.join(import.meta.dirname, "..", "examples"); - -interface ExampleConfig { - dir: string; - serverName: string; - binName: string; - port: string; - serverTsPath: string; // Relative to example dir -} - -async function fileExists(filePath: string): Promise { - try { - await fs.access(filePath); - return true; - } catch { - return false; - } -} - -async function getExamples(): Promise { - const dirs = await fs.readdir(EXAMPLES_DIR); - const examples: ExampleConfig[] = []; - - for (const dir of dirs) { - const exampleDir = path.join(EXAMPLES_DIR, dir); - const stat = await fs.stat(exampleDir); - if (!stat.isDirectory()) continue; - - // Check for server-utils.ts (indicates not yet migrated) - const serverUtilsPath = path.join(exampleDir, "server-utils.ts"); - if (!(await fileExists(serverUtilsPath))) continue; - - // Determine server.ts location - let serverTsPath = "server.ts"; - let serverTsFullPath = path.join(exampleDir, serverTsPath); - if (!(await fileExists(serverTsFullPath))) { - // Try src/server.ts - serverTsPath = "src/server.ts"; - serverTsFullPath = path.join(exampleDir, serverTsPath); - if (!(await fileExists(serverTsFullPath))) { - console.log(`Skipping ${dir}: no server.ts found`); - continue; - } - } - - const serverTs = await fs.readFile(serverTsFullPath, "utf-8"); - - // Extract server name from: name: "..." - const nameMatch = serverTs.match(/name:\s*["']([^"']+)["']/); - const serverName = nameMatch?.[1] ?? dir.replace(/-/g, " ").replace(/\b\w/g, c => c.toUpperCase()); - - // Extract port from: PORT ?? "..." - const portMatch = serverTs.match(/PORT\s*\?\?\s*["'](\d+)["']/); - const port = portMatch?.[1] ?? "3001"; - - // Create bin name from directory name - const binName = `mcp-${dir}`; - - examples.push({ dir, serverName, binName, port, serverTsPath }); - } - - return examples; -} - -async function migrateExample(config: ExampleConfig) { - const { dir, serverName, binName, port, serverTsPath } = config; - const exampleDir = path.join(EXAMPLES_DIR, dir); - console.log(`\n=== Migrating ${dir} ===`); - console.log(` Server name: ${serverName}`); - console.log(` Bin name: ${binName}`); - console.log(` Port: ${port}`); - - const serverTsFullPath = path.join(exampleDir, serverTsPath); - const serverUtilsPath = path.join(exampleDir, "server-utils.ts"); - const mainTsPath = path.join(exampleDir, "main.ts"); - - // 1. Read and modify server.ts - const serverTs = await fs.readFile(serverTsFullPath, "utf-8"); - - // Remove main function and related imports, ensure createServer is exported - let newServerTs = serverTs - // Remove StdioServerTransport import - .replace( - /import\s*\{\s*StdioServerTransport\s*\}\s*from\s*["']@modelcontextprotocol\/sdk\/server\/stdio\.js["'];\s*\n?/g, - "", - ) - // Remove startServer import (various path formats) - .replace( - /import\s*\{\s*startServer\s*\}\s*from\s*["']\.\/server-utils\.js["'];\s*\n?/g, - "", - ) - .replace( - /import\s*\{\s*startServer\s*\}\s*from\s*["']\.\.\/server-utils\.js["'];\s*\n?/g, - "", - ) - // Remove main function and call - .replace( - /\n?async function main\(\)[\s\S]*?main\(\)\.catch[\s\S]*?\}\);?\s*$/m, - "\n", - ) - // Ensure createServer is exported - .replace(/^function createServer\(\)/m, "export function createServer()") - .replace(/^async function createServer\(\)/m, "export async function createServer()"); - - await fs.writeFile(serverTsFullPath, newServerTs.trim() + "\n"); - console.log(" ✓ Updated server.ts"); - - // 2. Read server-utils.ts and create main.ts - const serverUtils = await fs.readFile(serverUtilsPath, "utf-8"); - - // Determine the import path for server.js based on structure - const serverImportPath = serverTsPath === "src/server.ts" ? "./src/server.js" : "./server.js"; - - // Create main.ts with added imports and main function - const mainTs = - serverUtils - .replace( - /\/\*\*\s*\n\s*\*\s*Shared utilities/, - `/**\n * Entry point for running the MCP server.\n * Run with: npx ${binName}\n * Or: node dist/index.js [--stdio]\n */\n\n/**\n * Shared utilities`, - ) - .replace( - /import\s*\{\s*createMcpExpressApp\s*\}/, - `import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";\nimport { createMcpExpressApp }`, - ) - .replace( - /import type \{ Request, Response \} from "express";/, - `import type { Request, Response } from "express";\nimport { createServer } from "${serverImportPath}";`, - ) - .trim() + - ` - -async function main() { - if (process.argv.includes("--stdio")) { - await createServer().connect(new StdioServerTransport()); - } else { - const port = parseInt(process.env.PORT ?? "${port}", 10); - await startServer(createServer, { port, name: "${serverName}" }); - } -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); -`; - - await fs.writeFile(mainTsPath, mainTs); - console.log(" ✓ Created main.ts"); - - // 3. Remove old server-utils.ts and stage the rename - await fs.unlink(serverUtilsPath); - await $`cd ${exampleDir} && git add -A server-utils.ts main.ts`.quiet(); - console.log(" ✓ Renamed server-utils.ts -> main.ts"); - - // 4. Update tsconfig.server.json if it exists - const tsconfigPath = path.join(exampleDir, "tsconfig.server.json"); - if (await fileExists(tsconfigPath)) { - const tsconfig = { - compilerOptions: { - target: "ES2022", - lib: ["ES2022"], - module: "NodeNext", - moduleResolution: "NodeNext", - declaration: true, - emitDeclarationOnly: true, - outDir: "./dist", - rootDir: ".", - strict: true, - skipLibCheck: true, - esModuleInterop: true, - resolveJsonModule: true, - }, - include: [serverTsPath], - }; - await fs.writeFile(tsconfigPath, JSON.stringify(tsconfig, null, 2) + "\n"); - console.log(" ✓ Updated tsconfig.server.json"); - } - - // 5. Update package.json - const pkgPath = path.join(exampleDir, "package.json"); - const pkg = JSON.parse(await fs.readFile(pkgPath, "utf-8")); - - pkg.main = "dist/server.js"; - pkg.types = "dist/server.d.ts"; - pkg.bin = { [binName]: "dist/index.js" }; - pkg.exports = { - ".": { - types: "./dist/server.d.ts", - default: "./dist/server.js", - }, - }; - - // Update build script - handle both INPUT patterns - const hasInput = pkg.scripts?.build?.includes("INPUT="); - const inputPart = hasInput ? "cross-env INPUT=mcp-app.html vite build && " : ""; - const serverPath = serverTsPath; - - pkg.scripts.build = `tsc --noEmit && ${inputPart}tsc -p tsconfig.server.json && bun build ${serverPath} --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js`; - pkg.scripts.serve = "bun --watch main.ts"; - delete pkg.scripts["build:server"]; - - // Move cors and express to dependencies if in devDependencies - if (pkg.devDependencies?.cors) { - pkg.dependencies = pkg.dependencies || {}; - pkg.dependencies.cors = pkg.devDependencies.cors; - delete pkg.devDependencies.cors; - } - if (pkg.devDependencies?.express) { - pkg.dependencies = pkg.dependencies || {}; - pkg.dependencies.express = pkg.devDependencies.express; - delete pkg.devDependencies.express; - } - - await fs.writeFile(pkgPath, JSON.stringify(pkg, null, 2) + "\n"); - console.log(" ✓ Updated package.json"); -} - -async function main() { - const examples = await getExamples(); - console.log(`Found ${examples.length} examples to migrate:`); - for (const ex of examples) { - console.log(` - ${ex.dir}`); - } - - for (const example of examples) { - await migrateExample(example); - } - - console.log("\n✅ Migration complete!"); - console.log("\nNext steps:"); - console.log("1. Run: npm run build:all"); - console.log("2. Test the examples"); -} - -main().catch((e) => { - console.error(e); - process.exit(1); -}); From b7f614d5106c18e2b9cffb2e2e21ef67e1964dcc Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Wed, 14 Jan 2026 13:43:22 +0000 Subject: [PATCH 08/19] fix(build): make Windows-compatible by removing chmod and fixing bun externals - Remove 'chmod +x dist/index.js' which doesn't exist on Windows - Add '--external ./server.js' to prevent bun from treating the import as a second entry point --- examples/basic-server-preact/package.json | 2 +- examples/basic-server-react/package.json | 2 +- examples/basic-server-solid/package.json | 2 +- examples/basic-server-svelte/package.json | 2 +- examples/basic-server-vanillajs/package.json | 2 +- examples/basic-server-vue/package.json | 2 +- examples/budget-allocator-server/package.json | 2 +- examples/cohort-heatmap-server/package.json | 2 +- .../customer-segmentation-server/package.json | 2 +- examples/integration-server/package.json | 2 +- examples/map-server/package.json | 2 +- examples/scenario-modeler-server/package.json | 2 +- examples/shadertoy-server/package.json | 2 +- examples/sheet-music-server/package.json | 2 +- examples/system-monitor-server/package.json | 2 +- examples/threejs-server/package.json | 2 +- examples/transcript-server/package.json | 2 +- examples/video-resource-server/package.json | 2 +- examples/wiki-explorer-server/package.json | 2 +- package-lock.json | 340 ++++++++++-------- 20 files changed, 219 insertions(+), 159 deletions(-) diff --git a/examples/basic-server-preact/package.json b/examples/basic-server-preact/package.json index bc7de3bd..3b7e41bc 100644 --- a/examples/basic-server-preact/package.json +++ b/examples/basic-server-preact/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-react/package.json b/examples/basic-server-react/package.json index 5c7e1a19..8ef2230f 100644 --- a/examples/basic-server-react/package.json +++ b/examples/basic-server-react/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-solid/package.json b/examples/basic-server-solid/package.json index 1a8a59bd..7c73ab7c 100644 --- a/examples/basic-server-solid/package.json +++ b/examples/basic-server-solid/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-svelte/package.json b/examples/basic-server-svelte/package.json index 41e109bb..93ad0bb3 100644 --- a/examples/basic-server-svelte/package.json +++ b/examples/basic-server-svelte/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vanillajs/package.json b/examples/basic-server-vanillajs/package.json index 37dcc60c..a19d7a36 100644 --- a/examples/basic-server-vanillajs/package.json +++ b/examples/basic-server-vanillajs/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vue/package.json b/examples/basic-server-vue/package.json index 2eea36d9..47ac5d43 100644 --- a/examples/basic-server-vue/package.json +++ b/examples/basic-server-vue/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/budget-allocator-server/package.json b/examples/budget-allocator-server/package.json index 551740c0..0f93b9ff 100644 --- a/examples/budget-allocator-server/package.json +++ b/examples/budget-allocator-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/cohort-heatmap-server/package.json b/examples/cohort-heatmap-server/package.json index 93fbe929..093b0b8a 100644 --- a/examples/cohort-heatmap-server/package.json +++ b/examples/cohort-heatmap-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/customer-segmentation-server/package.json b/examples/customer-segmentation-server/package.json index 822e7f53..58d9f902 100644 --- a/examples/customer-segmentation-server/package.json +++ b/examples/customer-segmentation-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/integration-server/package.json b/examples/integration-server/package.json index 40cb1237..33632b73 100644 --- a/examples/integration-server/package.json +++ b/examples/integration-server/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/map-server/package.json b/examples/map-server/package.json index 1c7ed754..df139b56 100644 --- a/examples/map-server/package.json +++ b/examples/map-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/scenario-modeler-server/package.json b/examples/scenario-modeler-server/package.json index 92784bad..9657e333 100644 --- a/examples/scenario-modeler-server/package.json +++ b/examples/scenario-modeler-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/shadertoy-server/package.json b/examples/shadertoy-server/package.json index cd361f53..f4b01d1d 100644 --- a/examples/shadertoy-server/package.json +++ b/examples/shadertoy-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/sheet-music-server/package.json b/examples/sheet-music-server/package.json index 3b6f32e0..4fdd281b 100644 --- a/examples/sheet-music-server/package.json +++ b/examples/sheet-music-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/system-monitor-server/package.json b/examples/system-monitor-server/package.json index f30c4bce..7c8e98e6 100644 --- a/examples/system-monitor-server/package.json +++ b/examples/system-monitor-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/threejs-server/package.json b/examples/threejs-server/package.json index 3d5ea696..caa16a9b 100644 --- a/examples/threejs-server/package.json +++ b/examples/threejs-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/transcript-server/package.json b/examples/transcript-server/package.json index 8506ee0d..0aea32eb 100644 --- a/examples/transcript-server/package.json +++ b/examples/transcript-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/video-resource-server/package.json b/examples/video-resource-server/package.json index a7644d0e..af920c05 100644 --- a/examples/video-resource-server/package.json +++ b/examples/video-resource-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/wiki-explorer-server/package.json b/examples/wiki-explorer-server/package.json index 7b865f47..56728f70 100644 --- a/examples/wiki-explorer-server/package.json +++ b/examples/wiki-explorer-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node' && chmod +x dist/index.js", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/package-lock.json b/package-lock.json index 8ea90847..23ac89b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -97,14 +97,19 @@ }, "examples/basic-host/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/basic-host/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/basic-server-preact": { "name": "@modelcontextprotocol/server-basic-preact", "version": "0.4.0", @@ -134,14 +139,19 @@ }, "examples/basic-server-preact/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/basic-server-preact/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/basic-server-react": { "name": "@modelcontextprotocol/server-basic-react", "version": "0.4.0", @@ -174,14 +184,19 @@ }, "examples/basic-server-react/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/basic-server-react/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/basic-server-solid": { "name": "@modelcontextprotocol/server-basic-solid", "version": "0.4.0", @@ -211,14 +226,19 @@ }, "examples/basic-server-solid/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/basic-server-solid/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/basic-server-svelte": { "name": "@modelcontextprotocol/server-basic-svelte", "version": "0.4.0", @@ -248,14 +268,19 @@ }, "examples/basic-server-svelte/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/basic-server-svelte/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/basic-server-vanillajs": { "name": "@modelcontextprotocol/server-basic-vanillajs", "version": "0.4.0", @@ -283,14 +308,19 @@ }, "examples/basic-server-vanillajs/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/basic-server-vanillajs/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/basic-server-vue": { "name": "@modelcontextprotocol/server-basic-vue", "version": "0.4.0", @@ -320,14 +350,19 @@ }, "examples/basic-server-vue/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/basic-server-vue/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/budget-allocator-server": { "name": "@modelcontextprotocol/server-budget-allocator", "version": "0.4.0", @@ -356,14 +391,19 @@ }, "examples/budget-allocator-server/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/budget-allocator-server/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/cohort-heatmap-server": { "name": "@modelcontextprotocol/server-cohort-heatmap", "version": "0.4.0", @@ -396,14 +436,19 @@ }, "examples/cohort-heatmap-server/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/cohort-heatmap-server/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/customer-segmentation-server": { "name": "@modelcontextprotocol/server-customer-segmentation", "version": "0.4.0", @@ -432,14 +477,19 @@ }, "examples/customer-segmentation-server/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/customer-segmentation-server/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/integration-server": { "version": "1.0.0", "dependencies": { @@ -469,14 +519,19 @@ }, "examples/integration-server/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/integration-server/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/map-server": { "name": "@modelcontextprotocol/server-map", "version": "0.4.0", @@ -504,14 +559,19 @@ }, "examples/map-server/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/map-server/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/scenario-modeler-server": { "name": "@modelcontextprotocol/server-scenario-modeler", "version": "0.4.0", @@ -545,14 +605,19 @@ }, "examples/scenario-modeler-server/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/scenario-modeler-server/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/shadertoy-server": { "name": "@modelcontextprotocol/server-shadertoy", "version": "0.4.0", @@ -580,14 +645,19 @@ }, "examples/shadertoy-server/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/shadertoy-server/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/sheet-music-server": { "name": "@modelcontextprotocol/server-sheet-music", "version": "0.4.0", @@ -616,14 +686,19 @@ }, "examples/sheet-music-server/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/sheet-music-server/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/system-monitor-server": { "name": "@modelcontextprotocol/server-system-monitor", "version": "0.4.0", @@ -653,14 +728,19 @@ }, "examples/system-monitor-server/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/system-monitor-server/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/threejs-server": { "name": "@modelcontextprotocol/server-threejs", "version": "0.4.0", @@ -695,14 +775,19 @@ }, "examples/threejs-server/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/threejs-server/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/transcript-server": { "name": "@modelcontextprotocol/server-transcript", "version": "0.4.0", @@ -731,14 +816,19 @@ }, "examples/transcript-server/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/transcript-server/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/transcript-server/node_modules/zod": { "version": "3.25.76", "license": "MIT", @@ -773,14 +863,19 @@ }, "examples/video-resource-server/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/video-resource-server/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "examples/wiki-explorer-server": { "name": "@modelcontextprotocol/server-wiki-explorer", "version": "0.4.0", @@ -810,14 +905,19 @@ }, "examples/wiki-explorer-server/node_modules/@types/node": { "version": "22.19.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.6.tgz", - "integrity": "sha512-qm+G8HuG6hOHQigsi7VGuLjUVu6TtBo/F05zvX04Mw2uCg9Dv0Qxy3Qw7j41SidlTcl5D/5yg0SEZqOB+EqZnQ==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, + "examples/wiki-explorer-server/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/code-frame": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", @@ -874,6 +974,16 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { "version": "7.28.6", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", @@ -921,6 +1031,16 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-globals": { "version": "7.28.0", "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", @@ -2393,19 +2513,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@oclif/core/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@oven/bun-darwin-aarch64": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/@oven/bun-darwin-aarch64/-/bun-darwin-aarch64-1.3.6.tgz", @@ -3267,13 +3374,6 @@ "undici-types": "~7.16.0" } }, - "node_modules/@types/node/node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", @@ -3971,22 +4071,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -5014,6 +5098,18 @@ "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" } }, + "node_modules/encoding-sniffer/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -5700,15 +5796,19 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ignore-by-default": { @@ -6462,19 +6562,6 @@ "node": ">=4" } }, - "node_modules/nodemon/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/nodemon/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -6860,22 +6947,6 @@ "node": ">= 0.10" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/react": { "version": "19.2.3", "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", @@ -7057,13 +7128,16 @@ "license": "MIT" }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/send": { @@ -7183,19 +7257,6 @@ "@img/sharp-win32-x64": "0.34.5" } }, - "node_modules/sharp/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7345,19 +7406,6 @@ "node": ">=10" } }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -8699,9 +8747,9 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, "license": "MIT" }, @@ -9083,6 +9131,18 @@ "node": ">=18" } }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/whatwg-mimetype": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", From aa343c6bc2e8c17e9823dbe8fc42be9b7cbdcd7c Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Wed, 14 Jan 2026 13:51:42 +0000 Subject: [PATCH 09/19] fix(build): use .ts import for bun compatibility - Change import from './server.js' to './server.ts' in main.ts files - Remove --external flag since bun should inline everything - Fixes Windows build where bun couldn't resolve .js to .ts properly --- examples/basic-server-preact/main.ts | 2 +- examples/basic-server-preact/package.json | 2 +- examples/basic-server-react/main.ts | 2 +- examples/basic-server-react/package.json | 2 +- examples/basic-server-solid/main.ts | 2 +- examples/basic-server-solid/package.json | 2 +- examples/basic-server-svelte/main.ts | 2 +- examples/basic-server-svelte/package.json | 2 +- examples/basic-server-vanillajs/main.ts | 2 +- examples/basic-server-vanillajs/package.json | 2 +- examples/basic-server-vue/main.ts | 2 +- examples/basic-server-vue/package.json | 2 +- examples/budget-allocator-server/main.ts | 2 +- examples/budget-allocator-server/package.json | 2 +- examples/cohort-heatmap-server/main.ts | 2 +- examples/cohort-heatmap-server/package.json | 2 +- examples/customer-segmentation-server/main.ts | 2 +- examples/customer-segmentation-server/package.json | 2 +- examples/integration-server/main.ts | 2 +- examples/integration-server/package.json | 2 +- examples/map-server/main.ts | 2 +- examples/map-server/package.json | 2 +- examples/scenario-modeler-server/main.ts | 2 +- examples/scenario-modeler-server/package.json | 2 +- examples/shadertoy-server/main.ts | 2 +- examples/shadertoy-server/package.json | 2 +- examples/sheet-music-server/main.ts | 2 +- examples/sheet-music-server/package.json | 2 +- examples/system-monitor-server/main.ts | 2 +- examples/system-monitor-server/package.json | 2 +- examples/threejs-server/main.ts | 2 +- examples/threejs-server/package.json | 2 +- examples/transcript-server/main.ts | 2 +- examples/transcript-server/package.json | 2 +- examples/video-resource-server/main.ts | 2 +- examples/video-resource-server/package.json | 2 +- examples/wiki-explorer-server/main.ts | 2 +- examples/wiki-explorer-server/package.json | 2 +- 38 files changed, 38 insertions(+), 38 deletions(-) diff --git a/examples/basic-server-preact/main.ts b/examples/basic-server-preact/main.ts index d9a51a2e..2b41ad72 100644 --- a/examples/basic-server-preact/main.ts +++ b/examples/basic-server-preact/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/basic-server-preact/package.json b/examples/basic-server-preact/package.json index 3b7e41bc..02092ee9 100644 --- a/examples/basic-server-preact/package.json +++ b/examples/basic-server-preact/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-react/main.ts b/examples/basic-server-react/main.ts index 39840a13..4bb74143 100644 --- a/examples/basic-server-react/main.ts +++ b/examples/basic-server-react/main.ts @@ -10,7 +10,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js" import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/basic-server-react/package.json b/examples/basic-server-react/package.json index 8ef2230f..2407c6de 100644 --- a/examples/basic-server-react/package.json +++ b/examples/basic-server-react/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-solid/main.ts b/examples/basic-server-solid/main.ts index 23353486..94531fe4 100644 --- a/examples/basic-server-solid/main.ts +++ b/examples/basic-server-solid/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/basic-server-solid/package.json b/examples/basic-server-solid/package.json index 7c73ab7c..f9dc73dd 100644 --- a/examples/basic-server-solid/package.json +++ b/examples/basic-server-solid/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-svelte/main.ts b/examples/basic-server-svelte/main.ts index 762a40eb..ed68ad78 100644 --- a/examples/basic-server-svelte/main.ts +++ b/examples/basic-server-svelte/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/basic-server-svelte/package.json b/examples/basic-server-svelte/package.json index 93ad0bb3..02291ff7 100644 --- a/examples/basic-server-svelte/package.json +++ b/examples/basic-server-svelte/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vanillajs/main.ts b/examples/basic-server-vanillajs/main.ts index d53d53b5..bb12ae8e 100644 --- a/examples/basic-server-vanillajs/main.ts +++ b/examples/basic-server-vanillajs/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/basic-server-vanillajs/package.json b/examples/basic-server-vanillajs/package.json index a19d7a36..ae0d6529 100644 --- a/examples/basic-server-vanillajs/package.json +++ b/examples/basic-server-vanillajs/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vue/main.ts b/examples/basic-server-vue/main.ts index 0304600e..7203530e 100644 --- a/examples/basic-server-vue/main.ts +++ b/examples/basic-server-vue/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/basic-server-vue/package.json b/examples/basic-server-vue/package.json index 47ac5d43..7708a5c5 100644 --- a/examples/basic-server-vue/package.json +++ b/examples/basic-server-vue/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/budget-allocator-server/main.ts b/examples/budget-allocator-server/main.ts index 534e876d..3d597f13 100644 --- a/examples/budget-allocator-server/main.ts +++ b/examples/budget-allocator-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/budget-allocator-server/package.json b/examples/budget-allocator-server/package.json index 0f93b9ff..2ee08a42 100644 --- a/examples/budget-allocator-server/package.json +++ b/examples/budget-allocator-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/cohort-heatmap-server/main.ts b/examples/cohort-heatmap-server/main.ts index 0b716d1d..3d990ab4 100644 --- a/examples/cohort-heatmap-server/main.ts +++ b/examples/cohort-heatmap-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/cohort-heatmap-server/package.json b/examples/cohort-heatmap-server/package.json index 093b0b8a..4e6b442e 100644 --- a/examples/cohort-heatmap-server/package.json +++ b/examples/cohort-heatmap-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/customer-segmentation-server/main.ts b/examples/customer-segmentation-server/main.ts index 7be715a4..edd4f9f5 100644 --- a/examples/customer-segmentation-server/main.ts +++ b/examples/customer-segmentation-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/customer-segmentation-server/package.json b/examples/customer-segmentation-server/package.json index 58d9f902..4ce15aac 100644 --- a/examples/customer-segmentation-server/package.json +++ b/examples/customer-segmentation-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/integration-server/main.ts b/examples/integration-server/main.ts index 5340e8a8..db4a6abe 100644 --- a/examples/integration-server/main.ts +++ b/examples/integration-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/integration-server/package.json b/examples/integration-server/package.json index 33632b73..4462dae7 100644 --- a/examples/integration-server/package.json +++ b/examples/integration-server/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/map-server/main.ts b/examples/map-server/main.ts index 44956598..521cfb7a 100644 --- a/examples/map-server/main.ts +++ b/examples/map-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/map-server/package.json b/examples/map-server/package.json index df139b56..7e128358 100644 --- a/examples/map-server/package.json +++ b/examples/map-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/scenario-modeler-server/main.ts b/examples/scenario-modeler-server/main.ts index b7cc7d00..3dcd9458 100644 --- a/examples/scenario-modeler-server/main.ts +++ b/examples/scenario-modeler-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/scenario-modeler-server/package.json b/examples/scenario-modeler-server/package.json index 9657e333..ed1ba1c4 100644 --- a/examples/scenario-modeler-server/package.json +++ b/examples/scenario-modeler-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/shadertoy-server/main.ts b/examples/shadertoy-server/main.ts index 717f5e64..7c005c76 100644 --- a/examples/shadertoy-server/main.ts +++ b/examples/shadertoy-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/shadertoy-server/package.json b/examples/shadertoy-server/package.json index f4b01d1d..c6fbe59e 100644 --- a/examples/shadertoy-server/package.json +++ b/examples/shadertoy-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/sheet-music-server/main.ts b/examples/sheet-music-server/main.ts index 4b206e72..e4baee4b 100644 --- a/examples/sheet-music-server/main.ts +++ b/examples/sheet-music-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/sheet-music-server/package.json b/examples/sheet-music-server/package.json index 4fdd281b..e583b9b7 100644 --- a/examples/sheet-music-server/package.json +++ b/examples/sheet-music-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/system-monitor-server/main.ts b/examples/system-monitor-server/main.ts index 19624809..271e5402 100644 --- a/examples/system-monitor-server/main.ts +++ b/examples/system-monitor-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/system-monitor-server/package.json b/examples/system-monitor-server/package.json index 7c8e98e6..3f7690d6 100644 --- a/examples/system-monitor-server/package.json +++ b/examples/system-monitor-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/threejs-server/main.ts b/examples/threejs-server/main.ts index 1f779a97..d24a630c 100644 --- a/examples/threejs-server/main.ts +++ b/examples/threejs-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/threejs-server/package.json b/examples/threejs-server/package.json index caa16a9b..1022a712 100644 --- a/examples/threejs-server/package.json +++ b/examples/threejs-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/transcript-server/main.ts b/examples/transcript-server/main.ts index 2a927041..a7998fb5 100644 --- a/examples/transcript-server/main.ts +++ b/examples/transcript-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/transcript-server/package.json b/examples/transcript-server/package.json index 0aea32eb..a46dd872 100644 --- a/examples/transcript-server/package.json +++ b/examples/transcript-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/video-resource-server/main.ts b/examples/video-resource-server/main.ts index ff304639..457322b0 100644 --- a/examples/video-resource-server/main.ts +++ b/examples/video-resource-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/video-resource-server/package.json b/examples/video-resource-server/package.json index af920c05..71fd17b0 100644 --- a/examples/video-resource-server/package.json +++ b/examples/video-resource-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/wiki-explorer-server/main.ts b/examples/wiki-explorer-server/main.ts index d83ac427..a991b18b 100644 --- a/examples/wiki-explorer-server/main.ts +++ b/examples/wiki-explorer-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.js"; +import { createServer } from "./server.ts"; export interface ServerOptions { port: number; diff --git a/examples/wiki-explorer-server/package.json b/examples/wiki-explorer-server/package.json index 56728f70..1cc20e61 100644 --- a/examples/wiki-explorer-server/package.json +++ b/examples/wiki-explorer-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", From d26eeb1da7d2d607498820e08eaf5a9df2b8797d Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Wed, 14 Jan 2026 14:11:38 +0000 Subject: [PATCH 10/19] fix(build): use --external for Windows bun compatibility Bun on Windows incorrectly treats imported .ts files as entry points. Use --external './server.js' to work around this, creating a runtime dependency between index.js and server.js. --- examples/basic-server-preact/main.ts | 2 +- examples/basic-server-preact/package.json | 2 +- examples/basic-server-react/main.ts | 2 +- examples/basic-server-react/package.json | 2 +- examples/basic-server-solid/main.ts | 2 +- examples/basic-server-solid/package.json | 2 +- examples/basic-server-svelte/main.ts | 2 +- examples/basic-server-svelte/package.json | 2 +- examples/basic-server-vanillajs/main.ts | 2 +- examples/basic-server-vanillajs/package.json | 2 +- examples/basic-server-vue/main.ts | 2 +- examples/basic-server-vue/package.json | 2 +- examples/budget-allocator-server/main.ts | 2 +- examples/budget-allocator-server/package.json | 2 +- examples/cohort-heatmap-server/main.ts | 2 +- examples/cohort-heatmap-server/package.json | 2 +- examples/customer-segmentation-server/main.ts | 2 +- examples/customer-segmentation-server/package.json | 2 +- examples/integration-server/main.ts | 2 +- examples/integration-server/package.json | 2 +- examples/map-server/main.ts | 2 +- examples/map-server/package.json | 2 +- examples/scenario-modeler-server/main.ts | 2 +- examples/scenario-modeler-server/package.json | 2 +- examples/shadertoy-server/main.ts | 2 +- examples/shadertoy-server/package.json | 2 +- examples/sheet-music-server/main.ts | 2 +- examples/sheet-music-server/package.json | 2 +- examples/system-monitor-server/main.ts | 2 +- examples/system-monitor-server/package.json | 2 +- examples/threejs-server/main.ts | 2 +- examples/threejs-server/package.json | 2 +- examples/transcript-server/main.ts | 2 +- examples/transcript-server/package.json | 2 +- examples/video-resource-server/main.ts | 2 +- examples/video-resource-server/package.json | 2 +- examples/wiki-explorer-server/main.ts | 2 +- examples/wiki-explorer-server/package.json | 2 +- 38 files changed, 38 insertions(+), 38 deletions(-) diff --git a/examples/basic-server-preact/main.ts b/examples/basic-server-preact/main.ts index 2b41ad72..d9a51a2e 100644 --- a/examples/basic-server-preact/main.ts +++ b/examples/basic-server-preact/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/basic-server-preact/package.json b/examples/basic-server-preact/package.json index 02092ee9..3b7e41bc 100644 --- a/examples/basic-server-preact/package.json +++ b/examples/basic-server-preact/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-react/main.ts b/examples/basic-server-react/main.ts index 4bb74143..39840a13 100644 --- a/examples/basic-server-react/main.ts +++ b/examples/basic-server-react/main.ts @@ -10,7 +10,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js" import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/basic-server-react/package.json b/examples/basic-server-react/package.json index 2407c6de..8ef2230f 100644 --- a/examples/basic-server-react/package.json +++ b/examples/basic-server-react/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-solid/main.ts b/examples/basic-server-solid/main.ts index 94531fe4..23353486 100644 --- a/examples/basic-server-solid/main.ts +++ b/examples/basic-server-solid/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/basic-server-solid/package.json b/examples/basic-server-solid/package.json index f9dc73dd..7c73ab7c 100644 --- a/examples/basic-server-solid/package.json +++ b/examples/basic-server-solid/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-svelte/main.ts b/examples/basic-server-svelte/main.ts index ed68ad78..762a40eb 100644 --- a/examples/basic-server-svelte/main.ts +++ b/examples/basic-server-svelte/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/basic-server-svelte/package.json b/examples/basic-server-svelte/package.json index 02291ff7..93ad0bb3 100644 --- a/examples/basic-server-svelte/package.json +++ b/examples/basic-server-svelte/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vanillajs/main.ts b/examples/basic-server-vanillajs/main.ts index bb12ae8e..d53d53b5 100644 --- a/examples/basic-server-vanillajs/main.ts +++ b/examples/basic-server-vanillajs/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/basic-server-vanillajs/package.json b/examples/basic-server-vanillajs/package.json index ae0d6529..a19d7a36 100644 --- a/examples/basic-server-vanillajs/package.json +++ b/examples/basic-server-vanillajs/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vue/main.ts b/examples/basic-server-vue/main.ts index 7203530e..0304600e 100644 --- a/examples/basic-server-vue/main.ts +++ b/examples/basic-server-vue/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/basic-server-vue/package.json b/examples/basic-server-vue/package.json index 7708a5c5..47ac5d43 100644 --- a/examples/basic-server-vue/package.json +++ b/examples/basic-server-vue/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/budget-allocator-server/main.ts b/examples/budget-allocator-server/main.ts index 3d597f13..534e876d 100644 --- a/examples/budget-allocator-server/main.ts +++ b/examples/budget-allocator-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/budget-allocator-server/package.json b/examples/budget-allocator-server/package.json index 2ee08a42..0f93b9ff 100644 --- a/examples/budget-allocator-server/package.json +++ b/examples/budget-allocator-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/cohort-heatmap-server/main.ts b/examples/cohort-heatmap-server/main.ts index 3d990ab4..0b716d1d 100644 --- a/examples/cohort-heatmap-server/main.ts +++ b/examples/cohort-heatmap-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/cohort-heatmap-server/package.json b/examples/cohort-heatmap-server/package.json index 4e6b442e..093b0b8a 100644 --- a/examples/cohort-heatmap-server/package.json +++ b/examples/cohort-heatmap-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/customer-segmentation-server/main.ts b/examples/customer-segmentation-server/main.ts index edd4f9f5..7be715a4 100644 --- a/examples/customer-segmentation-server/main.ts +++ b/examples/customer-segmentation-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/customer-segmentation-server/package.json b/examples/customer-segmentation-server/package.json index 4ce15aac..58d9f902 100644 --- a/examples/customer-segmentation-server/package.json +++ b/examples/customer-segmentation-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/integration-server/main.ts b/examples/integration-server/main.ts index db4a6abe..5340e8a8 100644 --- a/examples/integration-server/main.ts +++ b/examples/integration-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/integration-server/package.json b/examples/integration-server/package.json index 4462dae7..33632b73 100644 --- a/examples/integration-server/package.json +++ b/examples/integration-server/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/map-server/main.ts b/examples/map-server/main.ts index 521cfb7a..44956598 100644 --- a/examples/map-server/main.ts +++ b/examples/map-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/map-server/package.json b/examples/map-server/package.json index 7e128358..df139b56 100644 --- a/examples/map-server/package.json +++ b/examples/map-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/scenario-modeler-server/main.ts b/examples/scenario-modeler-server/main.ts index 3dcd9458..b7cc7d00 100644 --- a/examples/scenario-modeler-server/main.ts +++ b/examples/scenario-modeler-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/scenario-modeler-server/package.json b/examples/scenario-modeler-server/package.json index ed1ba1c4..9657e333 100644 --- a/examples/scenario-modeler-server/package.json +++ b/examples/scenario-modeler-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/shadertoy-server/main.ts b/examples/shadertoy-server/main.ts index 7c005c76..717f5e64 100644 --- a/examples/shadertoy-server/main.ts +++ b/examples/shadertoy-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/shadertoy-server/package.json b/examples/shadertoy-server/package.json index c6fbe59e..f4b01d1d 100644 --- a/examples/shadertoy-server/package.json +++ b/examples/shadertoy-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/sheet-music-server/main.ts b/examples/sheet-music-server/main.ts index e4baee4b..4b206e72 100644 --- a/examples/sheet-music-server/main.ts +++ b/examples/sheet-music-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/sheet-music-server/package.json b/examples/sheet-music-server/package.json index e583b9b7..4fdd281b 100644 --- a/examples/sheet-music-server/package.json +++ b/examples/sheet-music-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/system-monitor-server/main.ts b/examples/system-monitor-server/main.ts index 271e5402..19624809 100644 --- a/examples/system-monitor-server/main.ts +++ b/examples/system-monitor-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/system-monitor-server/package.json b/examples/system-monitor-server/package.json index 3f7690d6..7c8e98e6 100644 --- a/examples/system-monitor-server/package.json +++ b/examples/system-monitor-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/threejs-server/main.ts b/examples/threejs-server/main.ts index d24a630c..1f779a97 100644 --- a/examples/threejs-server/main.ts +++ b/examples/threejs-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/threejs-server/package.json b/examples/threejs-server/package.json index 1022a712..caa16a9b 100644 --- a/examples/threejs-server/package.json +++ b/examples/threejs-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/transcript-server/main.ts b/examples/transcript-server/main.ts index a7998fb5..2a927041 100644 --- a/examples/transcript-server/main.ts +++ b/examples/transcript-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/transcript-server/package.json b/examples/transcript-server/package.json index a46dd872..0aea32eb 100644 --- a/examples/transcript-server/package.json +++ b/examples/transcript-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/video-resource-server/main.ts b/examples/video-resource-server/main.ts index 457322b0..ff304639 100644 --- a/examples/video-resource-server/main.ts +++ b/examples/video-resource-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/video-resource-server/package.json b/examples/video-resource-server/package.json index 71fd17b0..af920c05 100644 --- a/examples/video-resource-server/package.json +++ b/examples/video-resource-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/wiki-explorer-server/main.ts b/examples/wiki-explorer-server/main.ts index a991b18b..d83ac427 100644 --- a/examples/wiki-explorer-server/main.ts +++ b/examples/wiki-explorer-server/main.ts @@ -14,7 +14,7 @@ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import cors from "cors"; import type { Request, Response } from "express"; -import { createServer } from "./server.ts"; +import { createServer } from "./server.js"; export interface ServerOptions { port: number; diff --git a/examples/wiki-explorer-server/package.json b/examples/wiki-explorer-server/package.json index 1cc20e61..56728f70 100644 --- a/examples/wiki-explorer-server/package.json +++ b/examples/wiki-explorer-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", From 0430ae7347d4511e3feaefe574b8c405a76531e8 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Wed, 14 Jan 2026 14:37:00 +0000 Subject: [PATCH 11/19] style: fix prettier formatting in pdf-server/main.ts --- examples/pdf-server/main.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/examples/pdf-server/main.ts b/examples/pdf-server/main.ts index 57d81eef..ac0b8ccb 100644 --- a/examples/pdf-server/main.ts +++ b/examples/pdf-server/main.ts @@ -15,11 +15,7 @@ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/ import cors from "cors"; import type { Request, Response } from "express"; import { createServer, initializePdfIndex } from "./server.js"; -import { - isArxivUrl, - toFileUrl, - normalizeArxivUrl, -} from "./src/pdf-indexer.js"; +import { isArxivUrl, toFileUrl, normalizeArxivUrl } from "./src/pdf-indexer.js"; export interface ServerOptions { port: number; From a24dc6bf1954ec89f195aa906d5499e2741163c5 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Wed, 14 Jan 2026 14:38:59 +0000 Subject: [PATCH 12/19] fix(build): remove quotes from --external for Windows cmd.exe compatibility --- examples/basic-server-preact/package.json | 2 +- examples/basic-server-react/package.json | 2 +- examples/basic-server-solid/package.json | 2 +- examples/basic-server-svelte/package.json | 2 +- examples/basic-server-vanillajs/package.json | 2 +- examples/basic-server-vue/package.json | 2 +- examples/budget-allocator-server/package.json | 2 +- examples/cohort-heatmap-server/package.json | 2 +- examples/customer-segmentation-server/package.json | 2 +- examples/integration-server/package.json | 2 +- examples/map-server/package.json | 2 +- examples/pdf-server/package.json | 2 +- examples/scenario-modeler-server/package.json | 2 +- examples/shadertoy-server/package.json | 2 +- examples/sheet-music-server/package.json | 2 +- examples/system-monitor-server/package.json | 2 +- examples/threejs-server/package.json | 2 +- examples/transcript-server/package.json | 2 +- examples/video-resource-server/package.json | 2 +- examples/wiki-explorer-server/package.json | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/examples/basic-server-preact/package.json b/examples/basic-server-preact/package.json index 3b7e41bc..c3ae59c3 100644 --- a/examples/basic-server-preact/package.json +++ b/examples/basic-server-preact/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-react/package.json b/examples/basic-server-react/package.json index 8ef2230f..ea3ff55a 100644 --- a/examples/basic-server-react/package.json +++ b/examples/basic-server-react/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-solid/package.json b/examples/basic-server-solid/package.json index 7c73ab7c..fe8000ff 100644 --- a/examples/basic-server-solid/package.json +++ b/examples/basic-server-solid/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-svelte/package.json b/examples/basic-server-svelte/package.json index 93ad0bb3..f381626e 100644 --- a/examples/basic-server-svelte/package.json +++ b/examples/basic-server-svelte/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vanillajs/package.json b/examples/basic-server-vanillajs/package.json index a19d7a36..d366fef2 100644 --- a/examples/basic-server-vanillajs/package.json +++ b/examples/basic-server-vanillajs/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vue/package.json b/examples/basic-server-vue/package.json index 47ac5d43..182c6d0c 100644 --- a/examples/basic-server-vue/package.json +++ b/examples/basic-server-vue/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/budget-allocator-server/package.json b/examples/budget-allocator-server/package.json index 0f93b9ff..6ae2932f 100644 --- a/examples/budget-allocator-server/package.json +++ b/examples/budget-allocator-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/cohort-heatmap-server/package.json b/examples/cohort-heatmap-server/package.json index 093b0b8a..4e2c6b57 100644 --- a/examples/cohort-heatmap-server/package.json +++ b/examples/cohort-heatmap-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/customer-segmentation-server/package.json b/examples/customer-segmentation-server/package.json index 58d9f902..ca5b6d0b 100644 --- a/examples/customer-segmentation-server/package.json +++ b/examples/customer-segmentation-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/integration-server/package.json b/examples/integration-server/package.json index 33632b73..d88328b8 100644 --- a/examples/integration-server/package.json +++ b/examples/integration-server/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/map-server/package.json b/examples/map-server/package.json index df139b56..18ba5439 100644 --- a/examples/map-server/package.json +++ b/examples/map-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/pdf-server/package.json b/examples/pdf-server/package.json index fe2902df..2c2b0842 100644 --- a/examples/pdf-server/package.json +++ b/examples/pdf-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/scenario-modeler-server/package.json b/examples/scenario-modeler-server/package.json index 9657e333..45e58694 100644 --- a/examples/scenario-modeler-server/package.json +++ b/examples/scenario-modeler-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/shadertoy-server/package.json b/examples/shadertoy-server/package.json index f4b01d1d..5817f584 100644 --- a/examples/shadertoy-server/package.json +++ b/examples/shadertoy-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/sheet-music-server/package.json b/examples/sheet-music-server/package.json index 4fdd281b..71909c31 100644 --- a/examples/sheet-music-server/package.json +++ b/examples/sheet-music-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/system-monitor-server/package.json b/examples/system-monitor-server/package.json index 7c8e98e6..a9458076 100644 --- a/examples/system-monitor-server/package.json +++ b/examples/system-monitor-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/threejs-server/package.json b/examples/threejs-server/package.json index caa16a9b..8badd65f 100644 --- a/examples/threejs-server/package.json +++ b/examples/threejs-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/transcript-server/package.json b/examples/transcript-server/package.json index 0aea32eb..d92914e6 100644 --- a/examples/transcript-server/package.json +++ b/examples/transcript-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/video-resource-server/package.json b/examples/video-resource-server/package.json index af920c05..4820f9fe 100644 --- a/examples/video-resource-server/package.json +++ b/examples/video-resource-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/wiki-explorer-server/package.json b/examples/wiki-explorer-server/package.json index 56728f70..cb5450fa 100644 --- a/examples/wiki-explorer-server/package.json +++ b/examples/wiki-explorer-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external './server.js' --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", From 5e72c2aa5cdd24303173a565b2b5c283d43edaa6 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Wed, 14 Jan 2026 15:02:32 +0000 Subject: [PATCH 13/19] fix(build): use glob pattern for --external to work on all platforms The literal path --external ./server.js was not matching the import. Using glob pattern --external "./server*" correctly externalizes the server module. --- examples/basic-server-preact/package.json | 2 +- examples/basic-server-react/package.json | 2 +- examples/basic-server-solid/package.json | 2 +- examples/basic-server-svelte/package.json | 2 +- examples/basic-server-vanillajs/package.json | 2 +- examples/basic-server-vue/package.json | 2 +- examples/budget-allocator-server/package.json | 2 +- examples/cohort-heatmap-server/package.json | 2 +- examples/customer-segmentation-server/package.json | 2 +- examples/integration-server/package.json | 2 +- examples/map-server/package.json | 2 +- examples/pdf-server/package.json | 2 +- examples/scenario-modeler-server/package.json | 2 +- examples/shadertoy-server/package.json | 2 +- examples/sheet-music-server/package.json | 2 +- examples/system-monitor-server/package.json | 2 +- examples/threejs-server/package.json | 2 +- examples/transcript-server/package.json | 2 +- examples/video-resource-server/package.json | 2 +- examples/wiki-explorer-server/package.json | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/examples/basic-server-preact/package.json b/examples/basic-server-preact/package.json index c3ae59c3..ecc6f0b4 100644 --- a/examples/basic-server-preact/package.json +++ b/examples/basic-server-preact/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-react/package.json b/examples/basic-server-react/package.json index ea3ff55a..9d9ead56 100644 --- a/examples/basic-server-react/package.json +++ b/examples/basic-server-react/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-solid/package.json b/examples/basic-server-solid/package.json index fe8000ff..4a02f9dc 100644 --- a/examples/basic-server-solid/package.json +++ b/examples/basic-server-solid/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-svelte/package.json b/examples/basic-server-svelte/package.json index f381626e..62cb2a9b 100644 --- a/examples/basic-server-svelte/package.json +++ b/examples/basic-server-svelte/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vanillajs/package.json b/examples/basic-server-vanillajs/package.json index d366fef2..9650a758 100644 --- a/examples/basic-server-vanillajs/package.json +++ b/examples/basic-server-vanillajs/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vue/package.json b/examples/basic-server-vue/package.json index 182c6d0c..428ba7b9 100644 --- a/examples/basic-server-vue/package.json +++ b/examples/basic-server-vue/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/budget-allocator-server/package.json b/examples/budget-allocator-server/package.json index 6ae2932f..c65b239f 100644 --- a/examples/budget-allocator-server/package.json +++ b/examples/budget-allocator-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/cohort-heatmap-server/package.json b/examples/cohort-heatmap-server/package.json index 4e2c6b57..c3fc3fee 100644 --- a/examples/cohort-heatmap-server/package.json +++ b/examples/cohort-heatmap-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/customer-segmentation-server/package.json b/examples/customer-segmentation-server/package.json index ca5b6d0b..aa3b6874 100644 --- a/examples/customer-segmentation-server/package.json +++ b/examples/customer-segmentation-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/integration-server/package.json b/examples/integration-server/package.json index d88328b8..45c88cfa 100644 --- a/examples/integration-server/package.json +++ b/examples/integration-server/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/map-server/package.json b/examples/map-server/package.json index 18ba5439..adedcd81 100644 --- a/examples/map-server/package.json +++ b/examples/map-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/pdf-server/package.json b/examples/pdf-server/package.json index 2c2b0842..7ff21154 100644 --- a/examples/pdf-server/package.json +++ b/examples/pdf-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/scenario-modeler-server/package.json b/examples/scenario-modeler-server/package.json index 45e58694..34ca760c 100644 --- a/examples/scenario-modeler-server/package.json +++ b/examples/scenario-modeler-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/shadertoy-server/package.json b/examples/shadertoy-server/package.json index 5817f584..1f1d3917 100644 --- a/examples/shadertoy-server/package.json +++ b/examples/shadertoy-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/sheet-music-server/package.json b/examples/sheet-music-server/package.json index 71909c31..42f9756b 100644 --- a/examples/sheet-music-server/package.json +++ b/examples/sheet-music-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/system-monitor-server/package.json b/examples/system-monitor-server/package.json index a9458076..fd668e96 100644 --- a/examples/system-monitor-server/package.json +++ b/examples/system-monitor-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/threejs-server/package.json b/examples/threejs-server/package.json index 8badd65f..b04f0518 100644 --- a/examples/threejs-server/package.json +++ b/examples/threejs-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/transcript-server/package.json b/examples/transcript-server/package.json index d92914e6..30cf777d 100644 --- a/examples/transcript-server/package.json +++ b/examples/transcript-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/video-resource-server/package.json b/examples/video-resource-server/package.json index 4820f9fe..53c962b3 100644 --- a/examples/video-resource-server/package.json +++ b/examples/video-resource-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/wiki-explorer-server/package.json b/examples/wiki-explorer-server/package.json index cb5450fa..29e191ce 100644 --- a/examples/wiki-explorer-server/package.json +++ b/examples/wiki-explorer-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external ./server.js --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", From 4bb29a5071807d5b21f79076a260d72ad2bdeed3 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Wed, 14 Jan 2026 15:11:06 +0000 Subject: [PATCH 14/19] fix(build): use */server.js pattern for --external The "./server*" pattern was not matching on Windows. Using "*/server.js" matches any path ending in /server.js which works cross-platform. --- examples/basic-server-preact/package.json | 2 +- examples/basic-server-react/package.json | 2 +- examples/basic-server-solid/package.json | 2 +- examples/basic-server-svelte/package.json | 2 +- examples/basic-server-vanillajs/package.json | 2 +- examples/basic-server-vue/package.json | 2 +- examples/budget-allocator-server/package.json | 2 +- examples/cohort-heatmap-server/package.json | 2 +- examples/customer-segmentation-server/package.json | 2 +- examples/integration-server/package.json | 2 +- examples/map-server/package.json | 2 +- examples/pdf-server/package.json | 2 +- examples/scenario-modeler-server/package.json | 2 +- examples/shadertoy-server/package.json | 2 +- examples/sheet-music-server/package.json | 2 +- examples/system-monitor-server/package.json | 2 +- examples/threejs-server/package.json | 2 +- examples/transcript-server/package.json | 2 +- examples/video-resource-server/package.json | 2 +- examples/wiki-explorer-server/package.json | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/examples/basic-server-preact/package.json b/examples/basic-server-preact/package.json index ecc6f0b4..6c9bab90 100644 --- a/examples/basic-server-preact/package.json +++ b/examples/basic-server-preact/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-react/package.json b/examples/basic-server-react/package.json index 9d9ead56..331fe934 100644 --- a/examples/basic-server-react/package.json +++ b/examples/basic-server-react/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-solid/package.json b/examples/basic-server-solid/package.json index 4a02f9dc..8f8f962c 100644 --- a/examples/basic-server-solid/package.json +++ b/examples/basic-server-solid/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-svelte/package.json b/examples/basic-server-svelte/package.json index 62cb2a9b..3adfa3dd 100644 --- a/examples/basic-server-svelte/package.json +++ b/examples/basic-server-svelte/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vanillajs/package.json b/examples/basic-server-vanillajs/package.json index 9650a758..2a8f7e5e 100644 --- a/examples/basic-server-vanillajs/package.json +++ b/examples/basic-server-vanillajs/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vue/package.json b/examples/basic-server-vue/package.json index 428ba7b9..b9fce386 100644 --- a/examples/basic-server-vue/package.json +++ b/examples/basic-server-vue/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/budget-allocator-server/package.json b/examples/budget-allocator-server/package.json index c65b239f..423b28df 100644 --- a/examples/budget-allocator-server/package.json +++ b/examples/budget-allocator-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/cohort-heatmap-server/package.json b/examples/cohort-heatmap-server/package.json index c3fc3fee..55590396 100644 --- a/examples/cohort-heatmap-server/package.json +++ b/examples/cohort-heatmap-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/customer-segmentation-server/package.json b/examples/customer-segmentation-server/package.json index aa3b6874..deba215e 100644 --- a/examples/customer-segmentation-server/package.json +++ b/examples/customer-segmentation-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/integration-server/package.json b/examples/integration-server/package.json index 45c88cfa..72f79997 100644 --- a/examples/integration-server/package.json +++ b/examples/integration-server/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/map-server/package.json b/examples/map-server/package.json index adedcd81..bf3727f5 100644 --- a/examples/map-server/package.json +++ b/examples/map-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/pdf-server/package.json b/examples/pdf-server/package.json index 7ff21154..e93037d0 100644 --- a/examples/pdf-server/package.json +++ b/examples/pdf-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/scenario-modeler-server/package.json b/examples/scenario-modeler-server/package.json index 34ca760c..ba440266 100644 --- a/examples/scenario-modeler-server/package.json +++ b/examples/scenario-modeler-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/shadertoy-server/package.json b/examples/shadertoy-server/package.json index 1f1d3917..d3bc677c 100644 --- a/examples/shadertoy-server/package.json +++ b/examples/shadertoy-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/sheet-music-server/package.json b/examples/sheet-music-server/package.json index 42f9756b..a3c2765c 100644 --- a/examples/sheet-music-server/package.json +++ b/examples/sheet-music-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/system-monitor-server/package.json b/examples/system-monitor-server/package.json index fd668e96..ae23a91a 100644 --- a/examples/system-monitor-server/package.json +++ b/examples/system-monitor-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/threejs-server/package.json b/examples/threejs-server/package.json index b04f0518..2a4cc5f5 100644 --- a/examples/threejs-server/package.json +++ b/examples/threejs-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/transcript-server/package.json b/examples/transcript-server/package.json index 30cf777d..87e88b1d 100644 --- a/examples/transcript-server/package.json +++ b/examples/transcript-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/video-resource-server/package.json b/examples/video-resource-server/package.json index 53c962b3..822337f3 100644 --- a/examples/video-resource-server/package.json +++ b/examples/video-resource-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/wiki-explorer-server/package.json b/examples/wiki-explorer-server/package.json index 29e191ce..9cfd2243 100644 --- a/examples/wiki-explorer-server/package.json +++ b/examples/wiki-explorer-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server*\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", From e8bd2e2f94894da136c7f07a660164f0f97dd7f7 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Wed, 14 Jan 2026 15:20:04 +0000 Subject: [PATCH 15/19] fix(build): use *server.js pattern without slash for Windows compatibility --- examples/basic-server-preact/package.json | 2 +- examples/basic-server-react/package.json | 2 +- examples/basic-server-solid/package.json | 2 +- examples/basic-server-svelte/package.json | 2 +- examples/basic-server-vanillajs/package.json | 2 +- examples/basic-server-vue/package.json | 2 +- examples/budget-allocator-server/package.json | 2 +- examples/cohort-heatmap-server/package.json | 2 +- examples/customer-segmentation-server/package.json | 2 +- examples/integration-server/package.json | 2 +- examples/map-server/package.json | 2 +- examples/pdf-server/package.json | 2 +- examples/scenario-modeler-server/package.json | 2 +- examples/shadertoy-server/package.json | 2 +- examples/sheet-music-server/package.json | 2 +- examples/system-monitor-server/package.json | 2 +- examples/threejs-server/package.json | 2 +- examples/transcript-server/package.json | 2 +- examples/video-resource-server/package.json | 2 +- examples/wiki-explorer-server/package.json | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/examples/basic-server-preact/package.json b/examples/basic-server-preact/package.json index 6c9bab90..2b7caeba 100644 --- a/examples/basic-server-preact/package.json +++ b/examples/basic-server-preact/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-react/package.json b/examples/basic-server-react/package.json index 331fe934..7d8d11fe 100644 --- a/examples/basic-server-react/package.json +++ b/examples/basic-server-react/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-solid/package.json b/examples/basic-server-solid/package.json index 8f8f962c..d5c44c45 100644 --- a/examples/basic-server-solid/package.json +++ b/examples/basic-server-solid/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-svelte/package.json b/examples/basic-server-svelte/package.json index 3adfa3dd..686364e9 100644 --- a/examples/basic-server-svelte/package.json +++ b/examples/basic-server-svelte/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vanillajs/package.json b/examples/basic-server-vanillajs/package.json index 2a8f7e5e..9d79497e 100644 --- a/examples/basic-server-vanillajs/package.json +++ b/examples/basic-server-vanillajs/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vue/package.json b/examples/basic-server-vue/package.json index b9fce386..30ff5fb3 100644 --- a/examples/basic-server-vue/package.json +++ b/examples/basic-server-vue/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/budget-allocator-server/package.json b/examples/budget-allocator-server/package.json index 423b28df..70df0df6 100644 --- a/examples/budget-allocator-server/package.json +++ b/examples/budget-allocator-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/cohort-heatmap-server/package.json b/examples/cohort-heatmap-server/package.json index 55590396..c8bbb08b 100644 --- a/examples/cohort-heatmap-server/package.json +++ b/examples/cohort-heatmap-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/customer-segmentation-server/package.json b/examples/customer-segmentation-server/package.json index deba215e..f848dbdd 100644 --- a/examples/customer-segmentation-server/package.json +++ b/examples/customer-segmentation-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/integration-server/package.json b/examples/integration-server/package.json index 72f79997..64dceb66 100644 --- a/examples/integration-server/package.json +++ b/examples/integration-server/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/map-server/package.json b/examples/map-server/package.json index bf3727f5..d39a9847 100644 --- a/examples/map-server/package.json +++ b/examples/map-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/pdf-server/package.json b/examples/pdf-server/package.json index e93037d0..ddabc51c 100644 --- a/examples/pdf-server/package.json +++ b/examples/pdf-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/scenario-modeler-server/package.json b/examples/scenario-modeler-server/package.json index ba440266..89f0b91c 100644 --- a/examples/scenario-modeler-server/package.json +++ b/examples/scenario-modeler-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/shadertoy-server/package.json b/examples/shadertoy-server/package.json index d3bc677c..d90a1956 100644 --- a/examples/shadertoy-server/package.json +++ b/examples/shadertoy-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/sheet-music-server/package.json b/examples/sheet-music-server/package.json index a3c2765c..81e81a82 100644 --- a/examples/sheet-music-server/package.json +++ b/examples/sheet-music-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/system-monitor-server/package.json b/examples/system-monitor-server/package.json index ae23a91a..a80b33bb 100644 --- a/examples/system-monitor-server/package.json +++ b/examples/system-monitor-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/threejs-server/package.json b/examples/threejs-server/package.json index 2a4cc5f5..cb5cdd91 100644 --- a/examples/threejs-server/package.json +++ b/examples/threejs-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/transcript-server/package.json b/examples/transcript-server/package.json index 87e88b1d..cd4b5eb2 100644 --- a/examples/transcript-server/package.json +++ b/examples/transcript-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/video-resource-server/package.json b/examples/video-resource-server/package.json index 822337f3..98b400fb 100644 --- a/examples/video-resource-server/package.json +++ b/examples/video-resource-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/wiki-explorer-server/package.json b/examples/wiki-explorer-server/package.json index 9cfd2243..4696e311 100644 --- a/examples/wiki-explorer-server/package.json +++ b/examples/wiki-explorer-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*/server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", From 421309f4926640b1c1394df2c83ab309151ec378 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Wed, 14 Jan 2026 17:50:12 +0000 Subject: [PATCH 16/19] update package-lock --- package-lock.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 89481fae..ca6cfad5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -579,17 +579,20 @@ "dependencies": { "@modelcontextprotocol/ext-apps": "^0.4.0", "@modelcontextprotocol/sdk": "^1.24.0", + "cors": "^2.8.5", + "express": "^5.1.0", "pdfjs-dist": "^5.0.0", "zod": "^4.1.13" }, + "bin": { + "mcp-pdf-server": "dist/index.js" + }, "devDependencies": { "@types/cors": "^2.8.19", "@types/express": "^5.0.0", "@types/node": "^22.0.0", "concurrently": "^9.2.1", - "cors": "^2.8.5", "cross-env": "^10.1.0", - "express": "^5.1.0", "typescript": "^5.9.3", "vite": "^6.0.0", "vite-plugin-singlefile": "^2.3.0" From a4d443e5b2205e0dee4c5efb60ecde46791b4071 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Wed, 14 Jan 2026 22:32:58 +0000 Subject: [PATCH 17/19] chore: regenerate package-lock.json for cross-platform compatibility --- package-lock.json | 94 +++++++++++++---------------------------------- 1 file changed, 25 insertions(+), 69 deletions(-) diff --git a/package-lock.json b/package-lock.json index ca6cfad5..4930413f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -105,8 +105,6 @@ }, "examples/basic-host/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -147,8 +145,6 @@ }, "examples/basic-server-preact/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -192,8 +188,6 @@ }, "examples/basic-server-react/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -234,8 +228,6 @@ }, "examples/basic-server-solid/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -276,8 +268,6 @@ }, "examples/basic-server-svelte/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -316,8 +306,6 @@ }, "examples/basic-server-vanillajs/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -358,8 +346,6 @@ }, "examples/basic-server-vue/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -399,8 +385,6 @@ }, "examples/budget-allocator-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -444,8 +428,6 @@ }, "examples/cohort-heatmap-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -485,8 +467,6 @@ }, "examples/customer-segmentation-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -527,8 +507,6 @@ }, "examples/integration-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -567,8 +545,6 @@ }, "examples/map-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -608,8 +584,6 @@ }, "examples/pdf-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -654,8 +628,6 @@ }, "examples/scenario-modeler-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -694,8 +666,6 @@ }, "examples/shadertoy-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -735,8 +705,6 @@ }, "examples/sheet-music-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -777,8 +745,6 @@ }, "examples/system-monitor-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -824,8 +790,6 @@ }, "examples/threejs-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -865,15 +829,11 @@ }, "examples/transcript-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, "examples/transcript-server/node_modules/zod": { "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -914,8 +874,6 @@ }, "examples/video-resource-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -956,8 +914,6 @@ }, "examples/wiki-explorer-server/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -1829,9 +1785,9 @@ } }, "node_modules/@hono/node-server": { - "version": "1.19.8", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.8.tgz", - "integrity": "sha512-0/g2lIOPzX8f3vzW1ggQgvG5mjtFBDBHFAzI5SFAi2DzSqS9luJwqg9T6O/gKYLi+inS7eNxBeIFkkghIPvrMA==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", + "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", "license": "MIT", "engines": { "node": ">=18.14.1" @@ -2850,9 +2806,9 @@ ] }, "node_modules/@oven/bun-linux-aarch64": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64/-/bun-linux-aarch64-1.3.5.tgz", - "integrity": "sha512-zkcHPI23QxJ1TdqafhgkXt1NOEN8o5C460sVeNnrhfJ43LwZgtfcvcQE39x/pBedu67fatY8CU0iY00nOh46ZQ==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64/-/bun-linux-aarch64-1.3.6.tgz", + "integrity": "sha512-YaQEAYjBanoOOtpqk/c5GGcfZIyxIIkQ2m1TbHjedRmJNwxzWBhGinSARFkrRIc3F8pRIGAopXKvJ/2rjN1LzQ==", "cpu": [ "arm64" ], @@ -2863,9 +2819,9 @@ ] }, "node_modules/@oven/bun-linux-aarch64-musl": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64-musl/-/bun-linux-aarch64-musl-1.3.5.tgz", - "integrity": "sha512-HKBeUlJdNduRkzJKZ5DXM+pPqntfC50/Hu2X65jVX0Y7hu/6IC8RaUTqpr8FtCZqqmc9wDK0OTL+Mbi9UQIKYQ==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64-musl/-/bun-linux-aarch64-musl-1.3.6.tgz", + "integrity": "sha512-FR+iJt17rfFgYgpxL3M67AUwujOgjw52ZJzB9vElI5jQXNjTyOKf8eH4meSk4vjlYF3h/AjKYd6pmN0OIUlVKQ==", "cpu": [ "arm64" ], @@ -3559,13 +3515,13 @@ } }, "node_modules/@types/bun": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.3.5.tgz", - "integrity": "sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.3.6.tgz", + "integrity": "sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA==", "dev": true, "license": "MIT", "dependencies": { - "bun-types": "1.3.5" + "bun-types": "1.3.6" } }, "node_modules/@types/chai": { @@ -3662,9 +3618,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.0.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.6.tgz", - "integrity": "sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q==", + "version": "25.0.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.8.tgz", + "integrity": "sha512-powIePYMmC3ibL0UJ2i2s0WIbq6cg6UyVFQxSCpaPxxzAaziRfimGivjdF943sSGV6RADVbk0Nvlm5P/FB44Zg==", "dev": true, "license": "MIT", "dependencies": { @@ -4049,9 +4005,9 @@ "license": "MIT" }, "node_modules/@webgpu/types": { - "version": "0.1.68", - "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.68.tgz", - "integrity": "sha512-3ab1B59Ojb6RwjOspYLsTpCzbNB3ZaamIAxBMmvnNkiDoLTZUOBXZ9p5nAYVEkQlDdf6qAZWi1pqj9+ypiqznA==", + "version": "0.1.69", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.69.tgz", + "integrity": "sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ==", "dev": true, "license": "BSD-3-Clause" }, @@ -4433,9 +4389,9 @@ } }, "node_modules/bun-types": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.3.5.tgz", - "integrity": "sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.3.6.tgz", + "integrity": "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5053,9 +5009,9 @@ } }, "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.1.tgz", + "integrity": "sha512-ryitBnaRbXQtgZ/gU50GSn6jQRwinSCQclpakXymvLd8ytTgE5bmSfgYcUxD7XYL34qHhFDyVk71qqKsfSyvmA==", "dev": true, "license": "ISC", "engines": { From 3e5ebbc304a87d233ac8f908375cf8f411a82496 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Wed, 14 Jan 2026 22:45:05 +0000 Subject: [PATCH 18/19] fix(build): use ./server.js instead of glob pattern for Windows compatibility --- examples/basic-server-preact/package.json | 2 +- examples/basic-server-react/package.json | 2 +- examples/basic-server-solid/package.json | 2 +- examples/basic-server-svelte/package.json | 2 +- examples/basic-server-vanillajs/package.json | 2 +- examples/basic-server-vue/package.json | 2 +- examples/budget-allocator-server/package.json | 2 +- examples/cohort-heatmap-server/package.json | 2 +- examples/customer-segmentation-server/package.json | 2 +- examples/integration-server/package.json | 2 +- examples/map-server/package.json | 2 +- examples/pdf-server/package.json | 2 +- examples/scenario-modeler-server/package.json | 2 +- examples/shadertoy-server/package.json | 2 +- examples/sheet-music-server/package.json | 2 +- examples/system-monitor-server/package.json | 2 +- examples/threejs-server/package.json | 2 +- examples/transcript-server/package.json | 2 +- examples/video-resource-server/package.json | 2 +- examples/wiki-explorer-server/package.json | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/examples/basic-server-preact/package.json b/examples/basic-server-preact/package.json index 2b7caeba..968e52ae 100644 --- a/examples/basic-server-preact/package.json +++ b/examples/basic-server-preact/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-react/package.json b/examples/basic-server-react/package.json index 7d8d11fe..afe79e28 100644 --- a/examples/basic-server-react/package.json +++ b/examples/basic-server-react/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-solid/package.json b/examples/basic-server-solid/package.json index d5c44c45..ba58d4ce 100644 --- a/examples/basic-server-solid/package.json +++ b/examples/basic-server-solid/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-svelte/package.json b/examples/basic-server-svelte/package.json index 686364e9..d1aa267c 100644 --- a/examples/basic-server-svelte/package.json +++ b/examples/basic-server-svelte/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vanillajs/package.json b/examples/basic-server-vanillajs/package.json index 9d79497e..56bc77e1 100644 --- a/examples/basic-server-vanillajs/package.json +++ b/examples/basic-server-vanillajs/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vue/package.json b/examples/basic-server-vue/package.json index 30ff5fb3..c71b13fd 100644 --- a/examples/basic-server-vue/package.json +++ b/examples/basic-server-vue/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/budget-allocator-server/package.json b/examples/budget-allocator-server/package.json index 70df0df6..4c54894e 100644 --- a/examples/budget-allocator-server/package.json +++ b/examples/budget-allocator-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/cohort-heatmap-server/package.json b/examples/cohort-heatmap-server/package.json index c8bbb08b..0b381d57 100644 --- a/examples/cohort-heatmap-server/package.json +++ b/examples/cohort-heatmap-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/customer-segmentation-server/package.json b/examples/customer-segmentation-server/package.json index f848dbdd..8ed0c5cd 100644 --- a/examples/customer-segmentation-server/package.json +++ b/examples/customer-segmentation-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/integration-server/package.json b/examples/integration-server/package.json index 64dceb66..29a12468 100644 --- a/examples/integration-server/package.json +++ b/examples/integration-server/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/map-server/package.json b/examples/map-server/package.json index d39a9847..cb4c1f80 100644 --- a/examples/map-server/package.json +++ b/examples/map-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/pdf-server/package.json b/examples/pdf-server/package.json index ddabc51c..262e3798 100644 --- a/examples/pdf-server/package.json +++ b/examples/pdf-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/scenario-modeler-server/package.json b/examples/scenario-modeler-server/package.json index 89f0b91c..ff25d113 100644 --- a/examples/scenario-modeler-server/package.json +++ b/examples/scenario-modeler-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/shadertoy-server/package.json b/examples/shadertoy-server/package.json index d90a1956..e9534d00 100644 --- a/examples/shadertoy-server/package.json +++ b/examples/shadertoy-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/sheet-music-server/package.json b/examples/sheet-music-server/package.json index 81e81a82..21ba505f 100644 --- a/examples/sheet-music-server/package.json +++ b/examples/sheet-music-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/system-monitor-server/package.json b/examples/system-monitor-server/package.json index a80b33bb..ff24adc3 100644 --- a/examples/system-monitor-server/package.json +++ b/examples/system-monitor-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/threejs-server/package.json b/examples/threejs-server/package.json index cb5cdd91..dce0a03f 100644 --- a/examples/threejs-server/package.json +++ b/examples/threejs-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/transcript-server/package.json b/examples/transcript-server/package.json index cd4b5eb2..e743d00a 100644 --- a/examples/transcript-server/package.json +++ b/examples/transcript-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/video-resource-server/package.json b/examples/video-resource-server/package.json index 98b400fb..a00dc297 100644 --- a/examples/video-resource-server/package.json +++ b/examples/video-resource-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/wiki-explorer-server/package.json b/examples/wiki-explorer-server/package.json index 4696e311..a795883e 100644 --- a/examples/wiki-explorer-server/package.json +++ b/examples/wiki-explorer-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"*server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", From f90f9f5e9f126ff83ea3c06325d523d398a91762 Mon Sep 17 00:00:00 2001 From: Olivier Chafik Date: Wed, 14 Jan 2026 22:57:34 +0000 Subject: [PATCH 19/19] fix(build): use double quotes for banner to fix Windows cmd.exe compatibility --- examples/basic-server-preact/package.json | 2 +- examples/basic-server-react/package.json | 2 +- examples/basic-server-solid/package.json | 2 +- examples/basic-server-svelte/package.json | 2 +- examples/basic-server-vanillajs/package.json | 2 +- examples/basic-server-vue/package.json | 2 +- examples/budget-allocator-server/package.json | 2 +- examples/cohort-heatmap-server/package.json | 2 +- examples/customer-segmentation-server/package.json | 2 +- examples/integration-server/package.json | 2 +- examples/map-server/package.json | 2 +- examples/pdf-server/package.json | 2 +- examples/scenario-modeler-server/package.json | 2 +- examples/shadertoy-server/package.json | 2 +- examples/sheet-music-server/package.json | 2 +- examples/system-monitor-server/package.json | 2 +- examples/threejs-server/package.json | 2 +- examples/transcript-server/package.json | 2 +- examples/video-resource-server/package.json | 2 +- examples/wiki-explorer-server/package.json | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/examples/basic-server-preact/package.json b/examples/basic-server-preact/package.json index 968e52ae..2ec4738f 100644 --- a/examples/basic-server-preact/package.json +++ b/examples/basic-server-preact/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-react/package.json b/examples/basic-server-react/package.json index afe79e28..62312332 100644 --- a/examples/basic-server-react/package.json +++ b/examples/basic-server-react/package.json @@ -24,7 +24,7 @@ } }, "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-solid/package.json b/examples/basic-server-solid/package.json index ba58d4ce..3ee1c6f3 100644 --- a/examples/basic-server-solid/package.json +++ b/examples/basic-server-solid/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-svelte/package.json b/examples/basic-server-svelte/package.json index d1aa267c..33bf3b4b 100644 --- a/examples/basic-server-svelte/package.json +++ b/examples/basic-server-svelte/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vanillajs/package.json b/examples/basic-server-vanillajs/package.json index 56bc77e1..f71899f0 100644 --- a/examples/basic-server-vanillajs/package.json +++ b/examples/basic-server-vanillajs/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/basic-server-vue/package.json b/examples/basic-server-vue/package.json index c71b13fd..386c7c63 100644 --- a/examples/basic-server-vue/package.json +++ b/examples/basic-server-vue/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/budget-allocator-server/package.json b/examples/budget-allocator-server/package.json index 4c54894e..843701ab 100644 --- a/examples/budget-allocator-server/package.json +++ b/examples/budget-allocator-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/cohort-heatmap-server/package.json b/examples/cohort-heatmap-server/package.json index 0b381d57..833afb9c 100644 --- a/examples/cohort-heatmap-server/package.json +++ b/examples/cohort-heatmap-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/customer-segmentation-server/package.json b/examples/customer-segmentation-server/package.json index 8ed0c5cd..50afe8df 100644 --- a/examples/customer-segmentation-server/package.json +++ b/examples/customer-segmentation-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/integration-server/package.json b/examples/integration-server/package.json index 29a12468..b1c12688 100644 --- a/examples/integration-server/package.json +++ b/examples/integration-server/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/map-server/package.json b/examples/map-server/package.json index cb4c1f80..e2f372c0 100644 --- a/examples/map-server/package.json +++ b/examples/map-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/pdf-server/package.json b/examples/pdf-server/package.json index 262e3798..bead4234 100644 --- a/examples/pdf-server/package.json +++ b/examples/pdf-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/scenario-modeler-server/package.json b/examples/scenario-modeler-server/package.json index ff25d113..44b00b53 100644 --- a/examples/scenario-modeler-server/package.json +++ b/examples/scenario-modeler-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/shadertoy-server/package.json b/examples/shadertoy-server/package.json index e9534d00..c3f18666 100644 --- a/examples/shadertoy-server/package.json +++ b/examples/shadertoy-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/sheet-music-server/package.json b/examples/sheet-music-server/package.json index 21ba505f..ba0d57b1 100644 --- a/examples/sheet-music-server/package.json +++ b/examples/sheet-music-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/system-monitor-server/package.json b/examples/system-monitor-server/package.json index ff24adc3..a42ecbc7 100644 --- a/examples/system-monitor-server/package.json +++ b/examples/system-monitor-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/threejs-server/package.json b/examples/threejs-server/package.json index dce0a03f..25a3b8ee 100644 --- a/examples/threejs-server/package.json +++ b/examples/threejs-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio", diff --git a/examples/transcript-server/package.json b/examples/transcript-server/package.json index e743d00a..43e17fe8 100644 --- a/examples/transcript-server/package.json +++ b/examples/transcript-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/video-resource-server/package.json b/examples/video-resource-server/package.json index a00dc297..27ab7703 100644 --- a/examples/video-resource-server/package.json +++ b/examples/video-resource-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve": "bun --watch main.ts", "start": "cross-env NODE_ENV=development npm run build && npm run serve", diff --git a/examples/wiki-explorer-server/package.json b/examples/wiki-explorer-server/package.json index a795883e..d5666ba8 100644 --- a/examples/wiki-explorer-server/package.json +++ b/examples/wiki-explorer-server/package.json @@ -14,7 +14,7 @@ "dist" ], "scripts": { - "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner '#!/usr/bin/env node'", + "build": "tsc --noEmit && cross-env INPUT=mcp-app.html vite build && tsc -p tsconfig.server.json && bun build server.ts --outdir dist --target node && bun build main.ts --outfile dist/index.js --target node --external \"./server.js\" --banner \"#!/usr/bin/env node\"", "watch": "cross-env INPUT=mcp-app.html vite build --watch", "serve:http": "bun --watch server.ts", "serve:stdio": "bun server.ts --stdio",