xmcp vs Vercel mcp-handler: Which MCP Solution Is Right for You?

A focused comparison of xmcp and Vercel's mcp-handler — two very different takes on MCP in TypeScript. One is a standalone framework; the other bolts MCP onto an existing Next.js or Nuxt app.

If you're building an MCP server in TypeScript and you're anywhere near the Vercel ecosystem, you've probably encountered both mcp-handler and xmcp. They're not competing for the same job. Understanding the difference takes about five minutes.

The short answer

xmcpmcp-handler
ShapeStandalone MCP frameworkAdapter for Next.js / Nuxt
Use caseNew standalone MCP serverAdd MCP to an existing app
Tool definitionFile-based (src/tools/)Imperative, in a route handler
Scaffolding CLIcreate-xmcp-app
Auth pluginsBetter Auth, Clerk, Auth0, WorkOS, Scalekit
Monetizationx402, Polar
DeployZero-config vc deployThrough existing Next.js deploy
TransportsSTDIO + Streamable HTTPStreamable HTTP + SSE

What mcp-handler is

mcp-handler is Vercel's official adapter that adds an MCP endpoint to an existing Next.js 13+ or Nuxt 3+ application. You define tools with Zod schemas inside an API route, and the handler wires up Streamable HTTP (with an optional Redis integration for SSE resumability).

app/api/[transport]/route.ts

The key word is "existing." If your MCP capabilities naturally belong inside a Next.js app you're already running — shared auth session, shared database connection, same deployment — this adapter is the natural fit. You're not standing up a new service; you're adding a route.

Choose mcp-handler when: you already have a Next.js or Nuxt app and want to expose MCP tools from within it without running a separate server.

What xmcp is

xmcp is a standalone MCP framework. Its defining feature is file-based discovery: drop a file in src/tools/ and it becomes a tool — no central registry, no server.tool() calls, no boilerplate.

src/tools/greet.ts

The same file-based convention extends to resources and prompts. xmcp also brings a batteries-included setup that mcp-handler doesn't: five auth plugins, two monetization integrations, and vc deploy that works out of the box without any framework-level configuration in your Next.js app.

Choose xmcp when: you're building a standalone MCP server — one that exists on its own, not as a feature of an existing app.

The deployment story

Both deploy to Vercel. The difference is what you're deploying.

With mcp-handler, your MCP endpoint is part of your Next.js app. The deploy is the same one you already do. The MCP route lives at a path like /api/mcp.

With xmcp, you run vc deploy from your xmcp project root. It's a standalone deployment — its own Vercel project, its own URL. That separation is useful when your MCP server serves multiple products or clients, or when you don't have a Next.js app to begin with.

How to decide

  • You have a Next.js or Nuxt app and want to add MCP tools to it? Use mcp-handler. It's the right tool for that job.
  • You're building a standalone MCP server from scratch, or you need auth plugins / monetization / file-based DX? Use xmcp.

The two can also coexist: an xmcp server for your standalone MCP service, and mcp-handler inside a Next.js app that reuses some of the same business logic.

Next steps

One framework to rule them all