For most small remote MCP servers, host on Cloudflare Workers. The 2026-07-28 MCP spec made servers stateless, which suits Workers, and the paid plan’s $5 a month covers 10 million requests. Pick Vercel if the server belongs inside a Next.js app you already run there, and Fly.io or a plain VPS if your tools run long jobs, need a full Linux box, or must sit next to a database in one region.
The bigger factor is often where your code runs, not whose platform it is. From Pakistan, servers that answered from a nearby edge location replied in about 40 to 55 ms after the connection opened. Servers whose code runs in one US region took 240 to 320 ms. We measured that on 2026-10-13. Details below.
Who this is for: teams about to put an MCP server on the internet, and owners comparing hosting quotes. Who should look elsewhere: if the server only runs on one person’s machine (stdio), it needs no hosting. If you want someone else to run and secure it end to end, look at managed MCP hosts. Scalar’s hosting guide covers several, and says plainly that Scalar sells one.
What we measured, and what we didn’t
We wanted to deploy one server four ways and time each. We haven’t done that yet, so this post doesn’t claim it. What we did do on 2026-10-13:
- Read the pricing and limits pages for Cloudflare Workers, Vercel, Fly.io, and DigitalOcean, and worked out the monthly bill for two example workloads.
- Timed seven public MCP servers with known hosting from a machine in Pakistan: 20 requests each, recording the time from an open connection to the first byte back.
- Read the response headers of 36 public MCP servers to see what sits in front of them.
The pages that rank for “where to host an MCP server” today are mostly written by companies that sell hosting, and the ones we read compare limits from docs without any measured numbers. The timings and header survey here are ours.
The short answer by situation
| Your situation | Host on | Why |
|---|---|---|
| Small stateless server, a few tools, calls other APIs | Cloudflare Workers | $5 a month covers most small servers. Code runs near each user. No charge for time spent waiting on other APIs. |
| The server is a route in a Next.js app on Vercel | Vercel | One deploy, one domain. Vercel’s MCP guide and mcp-handler package cover tools and auth. Set the function region near your users or your database. |
| Tools run for minutes, use native binaries, or need a disk | Fly.io | A real VM, billed by the second, from $2.19 a month. Can stop when idle. |
| You want a fixed bill and are happy to run Linux yourself | A VPS such as DigitalOcean | $4 a month for the smallest droplet. You handle TLS, updates, restarts, and backups. |
| The tools query one database in one region | The same region as the database, on any of the four | A tool call that waits on a database across an ocean is slow no matter how fast the front door is. |
Cost for two example workloads
Prices checked 2026-10-13, in US dollars, from each vendor’s own page: Workers pricing, Vercel pricing and Fluid compute pricing, Fly.io pricing, DigitalOcean droplets.
Our assumptions for each tool call: 15 ms of CPU, 400 ms of total time (most of it waiting on your own API or database), and a 5 KB response. These are our example numbers, not measurements. Change them to match your server.
| A: 300,000 calls a month (about 10,000 a day) | B: 10 million calls a month | |
|---|---|---|
| Cloudflare Workers, Paid | $5.00. Requests and CPU fit in the included 10M requests and 30M CPU ms. | $7.40. $5 base plus 120M extra CPU ms at $0.02 per million. Requests still included. |
| Vercel Pro, function in iad1 | $20. Usage comes to about $1.05, inside the $20 monthly usage credit included with Pro. One seat costs $20. | Up to about $35. $6 invocations, $5.33 active CPU, and up to $23.56 memory at the 2 GB default if no requests share an instance. Sharing lowers the memory part. |
| Fly.io, 2 machines, shared-cpu-1x | About $4.41. Two 256 MB machines at $2.19 each in the cheapest US regions, plus $0.03 egress. | About $8.38. Two 512 MB machines at $3.69 each, plus 50 GB egress at $0.02. Asia egress is $0.04 per GB. |
| DigitalOcean, smallest droplet | $4.00. 1 vCPU, 512 MiB, 500 GiB transfer. One machine, no failover. | $4.00 if one small machine keeps up. You add a second machine and a load balancer yourself for failover. |
What the table hides:
- Workers’ free plan allows 100,000 requests a day, but only 10 ms of CPU per request. A light server can live there. Ours would not, at 15 ms per call.
- Vercel’s Hobby plan is free, but Vercel’s pricing FAQ says “Our Hobby plan is for personal, non-commercial use.” A business server belongs on Pro.
- Fly has no free tier. Its docs say “New organizations don’t have a free tier or a monthly free usage allowance.”
- The VPS is cheapest on paper. Every hour you spend patching it costs more than the gap.
Limits that matter for MCP
MCP over Streamable HTTP is a normal POST that may stream its answer. The 2026-07-28 spec removed sessions and the old GET stream, so any platform that runs stateless HTTP handlers works. The limits that bite are time and memory.
| Cloudflare Workers | Vercel Functions | Fly.io | VPS | |
|---|---|---|---|---|
| Longest request | ”No limit” while the client stays connected. CPU capped at 30 s by default, 5 min max on Paid. | 300 s default. Up to 800 s on Pro, 1,800 s in beta. | None set by the platform | None set by the platform |
| Memory | 128 MB per isolate | 2 GB default. Up to 4 GB on Pro. | What you choose, from 256 MB | What you buy |
| Request and response size | Not the usual limit for MCP | 4.5 MB | No platform cap | No platform cap |
| Where code runs | Near each user, across Cloudflare’s network | One region by default (iad1, Washington), more on Pro | Regions you pick | Where the machine is |
| Stateful option | Durable Objects, $0.15 per million requests plus duration | Bring your own (Redis, Postgres) | Volumes, your own database | Your own database |
| Startup | Must start within 1 second | Vercel doesn’t publish a cold-start number | Stopped machines restart on the next request. Fly gives no time. | Always on |
Sources: Workers limits, Vercel limits, Fly auto stop and start. All checked 2026-10-13.
Two notes for MCP in particular:
- Workers bills CPU, not waiting. A tool that waits 2 seconds on a slow API costs the same as one that waits 20 ms, as long as CPU time is the same. Vercel bills active CPU the same way, but keeps billing memory while you wait.
- Cloudflare’s own guide now steers new servers away from its older stateful class. The remote MCP guide says “Use
createMcpHandlerfor a new stateless server” and callsMcpAgentthe path for “Deprecated Durable Object and RPC servers”.
Latency: where the code runs
How we measured: on 2026-10-13 we sent 20 POST requests in a row to each server from a machine in Pakistan using curl, and took the time between the TLS connection being ready and the first byte of the answer. That’s one round trip plus the server’s own work. Cloudflare’s CF-RAY header showed requests landing in Lahore or Karachi. Vercel’s X-Vercel-Id header, which Vercel documents as listing the regions a request passed through, read bom1::iad1: in at Mumbai, run in Washington.
What it can’t tell you: these are seven different servers. Ours returned a full answer. Most of the others returned a 401 because we sent no login. So the chart shows how much distance adds, not which platform is fastest. A Vercel function set to the Mumbai region, or a Fly machine in Singapore, would answer much faster from here. We didn’t test that.
For a user near Washington, the Vercel and Stripe numbers would shrink and the gap would mostly disappear. Hosting choice matters most when your users are spread out, or far from the default region.
What 36 public MCP servers sit behind
We read the response headers of 36 public MCP servers on 2026-10-13. Headers show what’s in front of a server, not always where its code runs. A Server: cloudflare header can mean Workers or just Cloudflare’s CDN in front of another origin.
| In the request path | Servers | Examples |
|---|---|---|
| Cloudflare | 21 | dawloom.com, Linear, Notion, PayPal, Square, Sentry, Supabase, Intercom, Webflow, Wix, Canva, monday.com, HubSpot, Shopify, Atlassian |
| Amazon CloudFront | 4 | Asana (v2), Hugging Face, Semgrep, Zapier |
| Vercel | 2 | Vercel, Neon |
| Azure | 1 | Microsoft Learn |
| Google Cloud | 1 | Box |
| GitHub’s own | 1 | GitHub |
| Not clear from headers | 6 | Stripe (nginx), Plaid, Prisma, Xero, DeepWiki, Context7 |
One thing changed since 2025. At Cloudflare’s MCP Demo Day in May 2025, Asana and Stripe were among ten companies “launching their own MCP Servers” on Cloudflare. In October 2026, Asana’s v2 endpoint answers through CloudFront and Envoy, and Stripe’s through nginx. Companies move servers as they grow, which is one reason to keep yours portable.
Keep the MCP server portable between hosts
Write the server against the standard Request and Response web APIs, keep state in a database rather than in memory, and keep platform features at the edges. Then moving from Workers to Fly, or from Vercel to a VPS, is a deploy change, not a rewrite. Our Go, Node, or Bun post covers the runtime side, and why we default to Postgres the state side.
Our own server at dawloom.com/mcp runs on Cloudflare Workers as one stateless handler with two tools. Its developer page shows the tools and rate limits. Our MCP server checker will test yours wherever you host it.
FAQ
Can I host an MCP server for free?
Yes, for small loads. Cloudflare Workers’ free plan allows 100,000 requests a day with 10 ms of CPU each. Vercel’s Hobby plan is free but limited to non-commercial use. Fly.io has no free tier. For a business server, plan on $5 a month or more.
Do MCP servers need WebSockets or long-lived connections?
Not since the 2026-07-28 spec. Each request is its own POST. The old GET stream and session IDs are gone, and an optional subscriptions/listen stream replaced change notifications. A server that answers within a few seconds works on any of these hosts.
Should my MCP server run in the same region as my database?
Yes, if most tool calls hit that database. Each query pays the round trip between server and database. On Workers, Smart Placement can run the code near a backend instead of near the user. On Vercel and Fly, set the region yourself.
Is a VPS more secure than serverless for an MCP server?
Not by default. On a VPS you own TLS, OS updates, firewall rules, and secrets. On Workers or Vercel, the platform patches the runtime. Security for an MCP server is mostly about login, scopes, and approval for writes. Our 12-point safety checklist covers those.
How do I add login to a hosted MCP server?
Make the server check tokens and let an authorization server issue them. Our step-by-step guide to adding OAuth 2.1 to an MCP server has tested code that works on any of these hosts.
If you’d like us to build and host one, we build MCP servers from a written scope, billed hourly or by milestone.