Skip to content

Commit 690b5dc

Browse files
ochafikclaude
andcommitted
refactor(examples): update server files to use main() pattern with stdio support
Update all example server files to use the new main() pattern that supports both HTTP and stdio transports: - Add StdioServerTransport import - Remove getPort import (replaced with direct env var parsing) - Replace direct startServer call with async main() function - Add --stdio flag detection to choose between transports - Use PORT env var with default 3001 for HTTP mode Updated servers: - basic-server-vanillajs - wiki-explorer-server - threejs-server - system-monitor-server - cohort-heatmap-server - budget-allocator-server - customer-segmentation-server - scenario-modeler-server Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 3d9f548 commit 690b5dc

File tree

8 files changed

+120
-16
lines changed

8 files changed

+120
-16
lines changed

examples/basic-server-vanillajs/server.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
23
import type { CallToolResult, ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
34
import fs from "node:fs/promises";
45
import path from "node:path";
56
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
6-
import { getPort, startServer } from "../shared/server-utils.js";
7+
import { startServer } from "../shared/server-utils.js";
78

89
const DIST_DIR = path.join(import.meta.dirname, "dist");
910

@@ -52,4 +53,16 @@ const server = new McpServer({
5253
);
5354
}
5455

55-
startServer(server, { port: getPort(), name: "Basic MCP App Server (Vanilla JS)" }).catch((e) => { console.error(e); process.exit(1); });
56+
async function main() {
57+
if (process.argv.includes("--stdio")) {
58+
await server.connect(new StdioServerTransport());
59+
} else {
60+
const port = parseInt(process.env.PORT ?? "3001", 10);
61+
await startServer(server, { port, name: "Basic MCP App Server (Vanilla JS)" });
62+
}
63+
}
64+
65+
main().catch((e) => {
66+
console.error(e);
67+
process.exit(1);
68+
});

examples/budget-allocator-server/server.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* and industry benchmarks by company stage.
66
*/
77
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
89
import type {
910
CallToolResult,
1011
ReadResourceResult,
@@ -13,7 +14,7 @@ import fs from "node:fs/promises";
1314
import path from "node:path";
1415
import { z } from "zod";
1516
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
16-
import { getPort, startServer } from "../shared/server-utils.js";
17+
import { startServer } from "../shared/server-utils.js";
1718

1819
const DIST_DIR = path.join(import.meta.dirname, "dist");
1920

@@ -292,4 +293,16 @@ server.registerResource(
292293
// Server Startup
293294
// ---------------------------------------------------------------------------
294295

295-
startServer(server, { port: getPort(), name: "Budget Allocator Server" }).catch((e) => { console.error(e); process.exit(1); });
296+
async function main() {
297+
if (process.argv.includes("--stdio")) {
298+
await server.connect(new StdioServerTransport());
299+
} else {
300+
const port = parseInt(process.env.PORT ?? "3001", 10);
301+
await startServer(server, { port, name: "Budget Allocator Server" });
302+
}
303+
}
304+
305+
main().catch((e) => {
306+
console.error(e);
307+
process.exit(1);
308+
});

examples/cohort-heatmap-server/server.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
23
import type { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
34
import fs from "node:fs/promises";
45
import path from "node:path";
56
import { z } from "zod";
67
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
7-
import { getPort, startServer } from "../shared/server-utils.js";
8+
import { startServer } from "../shared/server-utils.js";
89

910
const DIST_DIR = path.join(import.meta.dirname, "dist");
1011

@@ -201,4 +202,16 @@ const server = new McpServer({
201202
);
202203
}
203204

204-
startServer(server, { port: getPort(), name: "Cohort Heatmap Server" }).catch((e) => { console.error(e); process.exit(1); });
205+
async function main() {
206+
if (process.argv.includes("--stdio")) {
207+
await server.connect(new StdioServerTransport());
208+
} else {
209+
const port = parseInt(process.env.PORT ?? "3001", 10);
210+
await startServer(server, { port, name: "Cohort Heatmap Server" });
211+
}
212+
}
213+
214+
main().catch((e) => {
215+
console.error(e);
216+
process.exit(1);
217+
});

examples/customer-segmentation-server/server.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
23
import type {
34
CallToolResult,
45
ReadResourceResult,
@@ -7,7 +8,7 @@ import fs from "node:fs/promises";
78
import path from "node:path";
89
import { z } from "zod";
910
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
10-
import { getPort, startServer } from "../shared/server-utils.js";
11+
import { startServer } from "../shared/server-utils.js";
1112
import {
1213
generateCustomers,
1314
generateSegmentSummaries,
@@ -100,4 +101,16 @@ const server = new McpServer({
100101
);
101102
}
102103

103-
startServer(server, { port: getPort(), name: "Customer Segmentation Server" }).catch((e) => { console.error(e); process.exit(1); });
104+
async function main() {
105+
if (process.argv.includes("--stdio")) {
106+
await server.connect(new StdioServerTransport());
107+
} else {
108+
const port = parseInt(process.env.PORT ?? "3001", 10);
109+
await startServer(server, { port, name: "Customer Segmentation Server" });
110+
}
111+
}
112+
113+
main().catch((e) => {
114+
console.error(e);
115+
process.exit(1);
116+
});

examples/scenario-modeler-server/server.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
23
import type {
34
CallToolResult,
45
ReadResourceResult,
@@ -7,7 +8,7 @@ import fs from "node:fs/promises";
78
import path from "node:path";
89
import { z } from "zod";
910
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
10-
import { getPort, startServer } from "../shared/server-utils.js";
11+
import { startServer } from "../shared/server-utils.js";
1112

1213
const DIST_DIR = path.join(import.meta.dirname, "dist");
1314

@@ -308,4 +309,16 @@ const server = new McpServer({
308309
// Server Startup
309310
// ============================================================================
310311

311-
startServer(server, { port: getPort(), name: "SaaS Scenario Modeler Server" }).catch((e) => { console.error(e); process.exit(1); });
312+
async function main() {
313+
if (process.argv.includes("--stdio")) {
314+
await server.connect(new StdioServerTransport());
315+
} else {
316+
const port = parseInt(process.env.PORT ?? "3001", 10);
317+
await startServer(server, { port, name: "SaaS Scenario Modeler Server" });
318+
}
319+
}
320+
321+
main().catch((e) => {
322+
console.error(e);
323+
process.exit(1);
324+
});

examples/system-monitor-server/server.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
23
import type {
34
CallToolResult,
45
ReadResourceResult,
@@ -9,7 +10,7 @@ import path from "node:path";
910
import si from "systeminformation";
1011
import { z } from "zod";
1112
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
12-
import { getPort, startServer } from "../shared/server-utils.js";
13+
import { startServer } from "../shared/server-utils.js";
1314

1415
// Schemas - types are derived from these using z.infer
1516
const CpuCoreSchema = z.object({
@@ -171,4 +172,16 @@ const server = new McpServer({
171172
);
172173
}
173174

174-
startServer(server, { port: getPort(), name: "System Monitor Server" }).catch((e) => { console.error(e); process.exit(1); });
175+
async function main() {
176+
if (process.argv.includes("--stdio")) {
177+
await server.connect(new StdioServerTransport());
178+
} else {
179+
const port = parseInt(process.env.PORT ?? "3001", 10);
180+
await startServer(server, { port, name: "System Monitor Server" });
181+
}
182+
}
183+
184+
main().catch((e) => {
185+
console.error(e);
186+
process.exit(1);
187+
});

examples/threejs-server/server.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
* Provides tools for rendering interactive 3D scenes using Three.js.
55
*/
66
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
78
import type { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
89
import fs from "node:fs/promises";
910
import path from "node:path";
1011
import { z } from "zod";
1112
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
12-
import { getPort, startServer } from "../shared/server-utils.js";
13+
import { startServer } from "../shared/server-utils.js";
1314

1415
const DIST_DIR = path.join(import.meta.dirname, "dist");
1516

@@ -181,4 +182,16 @@ const server = new McpServer({
181182
);
182183
}
183184

184-
startServer(server, { port: getPort(), name: "Three.js Server" }).catch((e) => { console.error(e); process.exit(1); });
185+
async function main() {
186+
if (process.argv.includes("--stdio")) {
187+
await server.connect(new StdioServerTransport());
188+
} else {
189+
const port = parseInt(process.env.PORT ?? "3001", 10);
190+
await startServer(server, { port, name: "Three.js Server" });
191+
}
192+
}
193+
194+
main().catch((e) => {
195+
console.error(e);
196+
process.exit(1);
197+
});

examples/wiki-explorer-server/server.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
23
import type {
34
CallToolResult,
45
ReadResourceResult,
@@ -8,7 +9,7 @@ import fs from "node:fs/promises";
89
import path from "node:path";
910
import { z } from "zod";
1011
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
11-
import { getPort, startServer } from "../shared/server-utils.js";
12+
import { startServer } from "../shared/server-utils.js";
1213

1314
const DIST_DIR = path.join(import.meta.dirname, "dist");
1415

@@ -138,4 +139,16 @@ const server = new McpServer({
138139
);
139140
}
140141

141-
startServer(server, { port: getPort(), name: "Wiki Explorer" }).catch((e) => { console.error(e); process.exit(1); });
142+
async function main() {
143+
if (process.argv.includes("--stdio")) {
144+
await server.connect(new StdioServerTransport());
145+
} else {
146+
const port = parseInt(process.env.PORT ?? "3001", 10);
147+
await startServer(server, { port, name: "Wiki Explorer" });
148+
}
149+
}
150+
151+
main().catch((e) => {
152+
console.error(e);
153+
process.exit(1);
154+
});

0 commit comments

Comments
 (0)