Skip to content

Commit 46a1596

Browse files
ochafikclaude
andcommitted
refactor(examples): use getPort() helper for transport selection
- Add getPort() helper that returns undefined for --stdio, else port - Caller now explicitly passes port to startServer() - port: undefined → stdio mode, port: number → HTTP mode This makes the transport selection explicit at the call site. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent 7a1eb61 commit 46a1596

File tree

10 files changed

+31
-29
lines changed

10 files changed

+31
-29
lines changed

examples/basic-server-react/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { CallToolResult, ReadResourceResult } from "@modelcontextprotocol/s
33
import fs from "node:fs/promises";
44
import path from "node:path";
55
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
6-
import { startServer } from "../shared/server-utils.js";
6+
import { getPort, startServer } from "../shared/server-utils.js";
77

88
const DIST_DIR = path.join(import.meta.dirname, "dist");
99

@@ -52,4 +52,4 @@ const server = new McpServer({
5252
);
5353
}
5454

55-
startServer(server, { name: "Basic MCP App Server (React-based)" });
55+
startServer(server, { port: getPort(), name: "Basic MCP App Server (React-based)" });

examples/basic-server-vanillajs/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { CallToolResult, ReadResourceResult } from "@modelcontextprotocol/s
33
import fs from "node:fs/promises";
44
import path from "node:path";
55
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
6-
import { startServer } from "../shared/server-utils.js";
6+
import { getPort, startServer } from "../shared/server-utils.js";
77

88
const DIST_DIR = path.join(import.meta.dirname, "dist");
99

@@ -52,4 +52,4 @@ const server = new McpServer({
5252
);
5353
}
5454

55-
startServer(server, { name: "Basic MCP App Server (Vanilla JS)" });
55+
startServer(server, { port: getPort(), name: "Basic MCP App Server (Vanilla JS)" });

examples/budget-allocator-server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import fs from "node:fs/promises";
1313
import path from "node:path";
1414
import { z } from "zod";
1515
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
16-
import { startServer } from "../shared/server-utils.js";
16+
import { getPort, startServer } from "../shared/server-utils.js";
1717

1818
const DIST_DIR = path.join(import.meta.dirname, "dist");
1919

@@ -292,4 +292,4 @@ server.registerResource(
292292
// Server Startup
293293
// ---------------------------------------------------------------------------
294294

295-
startServer(server, { name: "Budget Allocator Server" });
295+
startServer(server, { port: getPort(), name: "Budget Allocator Server" });

examples/cohort-heatmap-server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import fs from "node:fs/promises";
44
import path from "node:path";
55
import { z } from "zod";
66
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
7-
import { startServer } from "../shared/server-utils.js";
7+
import { getPort, startServer } from "../shared/server-utils.js";
88

99
const DIST_DIR = path.join(import.meta.dirname, "dist");
1010

@@ -201,4 +201,4 @@ const server = new McpServer({
201201
);
202202
}
203203

204-
startServer(server, { name: "Cohort Heatmap Server" });
204+
startServer(server, { port: getPort(), name: "Cohort Heatmap Server" });

examples/customer-segmentation-server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import fs from "node:fs/promises";
77
import path from "node:path";
88
import { z } from "zod";
99
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
10-
import { startServer } from "../shared/server-utils.js";
10+
import { getPort, startServer } from "../shared/server-utils.js";
1111
import {
1212
generateCustomers,
1313
generateSegmentSummaries,
@@ -100,4 +100,4 @@ const server = new McpServer({
100100
);
101101
}
102102

103-
startServer(server, { name: "Customer Segmentation Server" });
103+
startServer(server, { port: getPort(), name: "Customer Segmentation Server" });

examples/scenario-modeler-server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import fs from "node:fs/promises";
77
import path from "node:path";
88
import { z } from "zod";
99
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
10-
import { startServer } from "../shared/server-utils.js";
10+
import { getPort, startServer } from "../shared/server-utils.js";
1111

1212
const DIST_DIR = path.join(import.meta.dirname, "dist");
1313

@@ -308,4 +308,4 @@ const server = new McpServer({
308308
// Server Startup
309309
// ============================================================================
310310

311-
startServer(server, { name: "SaaS Scenario Modeler Server" });
311+
startServer(server, { port: getPort(), name: "SaaS Scenario Modeler Server" });

examples/shared/server-utils.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Shared utilities for running MCP servers with multiple transports.
33
*
44
* Supports:
5-
* - stdio transport (--stdio flag)
5+
* - stdio transport (when port is undefined)
66
* - Streamable HTTP transport (/mcp) - stateful sessions
77
* - Legacy SSE transport (/sse, /messages) - backwards compatibility
88
*/
@@ -18,7 +18,7 @@ import { randomUUID } from "node:crypto";
1818
import type { Request, Response } from "express";
1919

2020
export interface ServerOptions {
21-
/** Port to listen on. Defaults to PORT env var or 3001. */
21+
/** Port to listen on. If undefined, uses stdio transport. */
2222
port?: number;
2323
/** Server name for logging. */
2424
name?: string;
@@ -27,21 +27,18 @@ export interface ServerOptions {
2727
type Transport = StreamableHTTPServerTransport | SSEServerTransport;
2828

2929
/**
30-
* Starts an MCP server with stdio and HTTP transports.
30+
* Starts an MCP server.
3131
*
32-
* HTTP mode provides:
33-
* - /mcp (GET/POST/DELETE): Streamable HTTP with stateful sessions
34-
* - /sse (GET) + /messages (POST): Legacy SSE for older clients
32+
* - If port is undefined: uses stdio transport
33+
* - If port is provided: HTTP server with Streamable HTTP + legacy SSE
3534
*/
3635
export async function startServer(
3736
server: McpServer,
3837
options: ServerOptions = {},
3938
): Promise<void> {
40-
const port =
41-
options.port ?? (process.env.PORT ? parseInt(process.env.PORT, 10) : 3001);
42-
const name = options.name ?? "MCP Server";
39+
const { port, name = "MCP Server" } = options;
4340

44-
if (process.argv.includes("--stdio")) {
41+
if (port === undefined) {
4542
await server.connect(new StdioServerTransport());
4643
console.error(`${name} running in stdio mode`);
4744
return;
@@ -51,7 +48,6 @@ export async function startServer(
5148
const sessions = new Map<string, Transport>();
5249

5350
// Express app - bind to all interfaces for development/testing
54-
// (allows connections from Android emulators, other devices, etc.)
5551
const app = createMcpExpressApp({ host: "0.0.0.0" });
5652
app.use(cors());
5753

@@ -157,3 +153,9 @@ export async function startServer(
157153
process.on("SIGINT", shutdown);
158154
process.on("SIGTERM", shutdown);
159155
}
156+
157+
/** Helper to get port from args/env, returns undefined for stdio mode */
158+
export function getPort(defaultPort = 3001): number | undefined {
159+
if (process.argv.includes("--stdio")) return undefined;
160+
return process.env.PORT ? parseInt(process.env.PORT, 10) : defaultPort;
161+
}

examples/system-monitor-server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import path from "node:path";
99
import si from "systeminformation";
1010
import { z } from "zod";
1111
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
12-
import { startServer } from "../shared/server-utils.js";
12+
import { getPort, startServer } from "../shared/server-utils.js";
1313

1414
// Schemas - types are derived from these using z.infer
1515
const CpuCoreSchema = z.object({
@@ -171,4 +171,4 @@ const server = new McpServer({
171171
);
172172
}
173173

174-
startServer(server, { name: "System Monitor Server" });
174+
startServer(server, { port: getPort(), name: "System Monitor Server" });

examples/threejs-server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import fs from "node:fs/promises";
99
import path from "node:path";
1010
import { z } from "zod";
1111
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
12-
import { startServer } from "../shared/server-utils.js";
12+
import { getPort, startServer } from "../shared/server-utils.js";
1313

1414
const DIST_DIR = path.join(import.meta.dirname, "dist");
1515

@@ -181,4 +181,4 @@ const server = new McpServer({
181181
);
182182
}
183183

184-
startServer(server, { name: "Three.js Server" });
184+
startServer(server, { port: getPort(), name: "Three.js Server" });

examples/wiki-explorer-server/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import fs from "node:fs/promises";
88
import path from "node:path";
99
import { z } from "zod";
1010
import { RESOURCE_MIME_TYPE, RESOURCE_URI_META_KEY } from "../../dist/src/app";
11-
import { startServer } from "../shared/server-utils.js";
11+
import { getPort, startServer } from "../shared/server-utils.js";
1212

1313
const DIST_DIR = path.join(import.meta.dirname, "dist");
1414

@@ -138,4 +138,4 @@ const server = new McpServer({
138138
);
139139
}
140140

141-
startServer(server, { name: "Wiki Explorer" });
141+
startServer(server, { port: getPort(), name: "Wiki Explorer" });

0 commit comments

Comments
 (0)