Atlas recon

TypeScript MCP Server: Session Quickstart + SDK Comparison

One-page quickstart for a TypeScript MCP server over stdio with MCP Inspector, plus a TS/Python/C# SDK comparison and the Java SDK maturity line.

7 sources ~2 min read mcp · typescript · sdk · quickstart · tooling

Decision: TypeScript is the lowest-friction live-follow for a mixed Java/.NET room. It is one of two Tier-1 official SDKs (~66M npm downloads), zero-install beyond Node, and MCP Inspector ships as a single npx command [1] [6]. Python ties it on maturity but adds a venv/uv step; C# is official and excellent but needs the .NET SDK + project scaffolding. Follow in TS, port after.

Pre-install (tell attendees before the session)

Need Version / command
Node.js ≥ 22.7.5 (Inspector requires it; SDK needs ≥20) [6]
Package manager npm (bundled) — no global installs needed
Editor any; VS Code for inline TS types

Minimal project

mkdir my-mcp && cd my-mcp && npm init -y
npm install @modelcontextprotocol/sdk zod
npm install -D @types/node typescript

package.json: add "type": "module" and "scripts": { "build": "tsc" }. tsconfig.json: target ES2022, module/moduleResolution Node16, outDir ./build, rootDir ./src, strict: true [2].

One tool over stdio — src/index.ts

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({ name: "demo", version: "1.0.0" });

server.registerTool(
  "add",
  {
    title: "Add",
    description: "Add two numbers",
    inputSchema: { a: z.number(), b: z.number() },
  },
  async ({ a, b }) => ({
    content: [{ type: "text", text: String(a + b) }],
  }),
);

const transport = new StdioServerTransport();
await server.connect(transport);
console.error("MCP server on stdio"); // ⚠ stdout carries JSON-RPC — log only to stderr

The stdout/stderr rule is the #1 live gotcha: any console.log corrupts the JSON-RPC stream and silently breaks the server [3] [2].

Wire up MCP Inspector

npm run build
npx @modelcontextprotocol/inspector node build/index.js

UI opens at http://localhost:6274 (proxy on 6277); the Tools tab lists add, lets you fill a/b and see the response — no LLM needed [4] [6]. This is the demo loop: edit tool → npm run build → reconnect in Inspector.

Official SDK comparison

SDK Status ⭐ Stars Live-follow friction
TypeScript Tier-1 official ⭐ 12.6k Lowest — npm i, run node, Inspector via npx [1]
Python Tier-1 official ⭐ 23.2k Equal maturity; +venv/uv setup step [1]
C# Official (Microsoft+Anthropic), v1.2 ⭐ 4.3k More scaffolding: .NET SDK + host builder [5]

Stars are similar size signals; all three are official and feature-complete (tools, resources, prompts, stdio + Streamable HTTP) [1].

For the Java attendees

The official Java SDK ⭐ 3.5k (Jun 2026) is mature and production-ready: 1.0.0 GA, maintained with Spring AI, compliant with the 2025-06-18 spec (tools/resources/prompts/sampling/elicitation, STDIO + Streamable HTTP), with Spring Boot client/server starters [7].