[email protected] is now available with support for the 2026-07-28 Model Context Protocol specification and MCP TypeScript SDK v2.
We originally built mcp-handler to make it easier to spin up MCP servers on popular web frameworks including Next, Nuxt, Svelte, and more.
With the new 2.0 release, the handler now supports:
The stateless
2026-07-28protocol, served natively, including per-request metadata and server/discoverA stateless compatibility layer for clients using 2025-era Streamable HTTP
Both protocols with no Redis dependency or session storage
Existing stateless Streamable HTTP clients can continue connecting to the same /mcp endpoint while servers adopt the latest protocol.
Install the new packages:
npm install mcp-handler@^2 @modelcontextprotocol/server@^2 zod@^4
Create a Next.js route handler:
import { createMcpHandler } from 'mcp-handler';
import { z } from 'zod';
const handler = createMcpHandler(
(server) => {
server.registerTool(
'roll_dice',
{
description: 'Roll an N-sided die',
inputSchema: z.object({
sides: z.number().int().min(2),
}),
},
async ({ sides }) => {
const value = 1 + Math.floor(Math.random() * sides);
return {
content: [
{
type: 'text',
text: `🎲 You rolled a ${value}!`,
},
],
};
},
);
},
{},
{
basePath: '/api',
},
);
export { handler as GET, handler as POST };
MCP clients can connect to /api/mcp.
Get started with the Next.js MCP server template, updated for mcp-handler 2.0.
Copy link to headingBefore you upgrade
Version 2 requires Node.js 20 or later and zod4, and replaces @modelcontextprotocol/sdk with @modelcontextprotocol/server.
Tool, prompt, and resource definitions now use the SDK v2 registration APIs and Standard Schema inputs, such as registerTool with z.object(...).
The deprecated HTTP+SSE transport has been removed. Requests to /sse and /message return 410 Gone. If your clients still depend on that transport, remain on mcp-handler 1.x while migrating them to Streamable HTTP.
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.