We run Scento (https://www.scento.com), a European online retailer of authentic designer and niche fragrance decants, on Next.js 16 hosted on Vercel, with a Medusa 2 backend, Supabase Postgres, Sanity for content, Tailwind CSS, Stripe and Cloudflare. The storefront is served in ten languages from one app: English at the root, then /de, /fr, /es, /it, /ro, /gr, /hu, /cz and /pl.
The part I wanted to share is a remote MCP server that lives inside the same Next.js app, with no separate service. https://www.scento.com/developers documents a free, read-only perfume API (no key, no sign-up), and /mcp is the MCP endpoint over streamable HTTP with twelve read-only tools.
What made it work cleanly on Vercel:
- /mcp is a plain App Router route handler. POST carries JSON-RPC and answers with a JSON body. The server is stateless, so any instance can answer any request.
- GET, PUT, PATCH and DELETE return 405 with
Allow: POST, OPTIONS. Streamable-HTTP clients may try a GET to open a server-to-client event stream; a fast 405 tells them there is none, so they fall back instead of waiting. - The path is excluded from our locale proxy (proxy.ts). Otherwise the proxy that adds locale prefixes would treat /mcp like a page and rewrite or redirect it.
- POST responses carry
Cache-Control: no-storeandX-Robots-Tag: noindex, and bodies over 64 KB get a 413 before any parsing.
Happy to answer questions about the setup. Sebastian Dobrincu, founder of Scento