Skip to main content
Dawloom

Where to host an MCP server: Workers, Vercel, Fly, or a VPS

Dawloom engineering 10 min read
Where to host an MCP server: Workers, Vercel, Fly, or a VPS

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:

  1. Read the pricing and limits pages for Cloudflare Workers, Vercel, Fly.io, and DigitalOcean, and worked out the monthly bill for two example workloads.
  2. 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.
  3. 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

The short answer by situation
Your situationHost onWhy
Small stateless server, a few tools, calls other APIsCloudflare 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 VercelVercelOne 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 diskFly.ioA 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 yourselfA 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 regionThe same region as the database, on any of the fourA 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.

Cost for two example workloads
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-1xAbout $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.

Limits that matter for MCP
Cloudflare WorkersVercel FunctionsFly.ioVPS
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 platformNone set by the platform
Memory128 MB per isolate2 GB default. Up to 4 GB on Pro.What you choose, from 256 MBWhat you buy
Request and response sizeNot the usual limit for MCP4.5 MBNo platform capNo platform cap
Where code runsNear each user, across Cloudflare’s networkOne region by default (iad1, Washington), more on ProRegions you pickWhere the machine is
Stateful optionDurable Objects, $0.15 per million requests plus durationBring your own (Redis, Postgres)Volumes, your own databaseYour own database
StartupMust start within 1 secondVercel doesn’t publish a cold-start numberStopped 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 createMcpHandler for a new stateless server” and calls McpAgent the path for “Deprecated Durable Object and RPC servers”.

Latency: where the code runs

Bar chart of time to first byte from Pakistan, median and p95 over 20 requests, 2026-10-13. Answered at a nearby edge: mcp.linear.app 38 ms (p95 58), docs.mcp.cloudflare.com 52 (59), dawloom.com/mcp on Cloudflare Workers 53 (64). Code in one far region: huggingface.co/mcp 243 (261), mcp.neon.tech on Vercel iad1 286 (306), mcp.vercel.com on Vercel iad1 301 (351), mcp.stripe.com 320 (334). Different servers doing different work.

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.

What 36 public MCP servers sit behind
In the request pathServersExamples
Cloudflare21dawloom.com, Linear, Notion, PayPal, Square, Sentry, Supabase, Intercom, Webflow, Wix, Canva, monday.com, HubSpot, Shopify, Atlassian
Amazon CloudFront4Asana (v2), Hugging Face, Semgrep, Zapier
Vercel2Vercel, Neon
Azure1Microsoft Learn
Google Cloud1Box
GitHub’s own1GitHub
Not clear from headers6Stripe (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.

More in MCP servers Need this built? See MCP server development

Got something to build?

Tell us what you need. An engineer replies, not a sales team.

Search the whole site