Compare

What "just self-host it" actually costs

Self-hosting an MCP server is a real option, and this is what it actually involves next to a foro.sh deploy: whose cloud it runs on, how long it takes to get live, what a rushed setup gets wrong, and what you can see once it's running.

foro.sh compared with self-hosting an MCP server, by dimension
Dimensionforo.shSelf-hosting it
Time to a live URLAbout a minute, from a Git repo you already haveDays to weeks: a Dockerfile, a reverse proxy, TLS, and a redeploy flow, before the first real deploy
Where it runsOVH Groupe SAS, France - no non-EU parent anywhere in the ownership chainUsually a US-incorporated hyperscaler, even inside its "EU region" - still reachable by a US CLOUD Act warrant
Container & network isolationOne container and one private network per project, by constructionWhatever you design - commonly one shared network until isolation is deliberately built in
SecretsEncrypted at rest with libsodium, injected at container start, redacted from every logYour own design - a real risk window is a .env committed to git, or a value baked into an image before a secrets pipeline exists
TLS & routingAutomatic Let's Encrypt wildcard certificate and routing on every deployYour own reverse proxy config, certificate renewal, and DNS to keep working
ObservabilityPer-tool metrics, p95 latency, and live deploy/build/runtime logs, with nothing to instrumentNothing, until it is built - commonly the piece a first deploy defers past launch
Ongoing maintenancePush to redeploy; health-checked before it goes live, the previous version keeps serving until thenYours to patch, update, and watch - a skipped update is how a server goes down or stays exposed

The same fourteen, named on each cloud

Those rows are fourteen separate pieces of infrastructure. Here is what each one is called on AWS, GCP and Azure, so you can price the work rather than take our word for it. Three of the fourteen have no managed equivalent anywhere.

What each piece of MCP hosting infrastructure is called on AWS, GCP and Azure
What you needAWSGCPAzure
Isolated compute per projectECS Fargate service per project, or an EKS namespaceCloud Run service per project, or a GKE namespaceContainer Apps revision per project, or an AKS namespace
Container registryECRArtifact RegistryACR
Build pipelineCodeBuild, or a self-hosted Actions runnerCloud BuildACR Tasks or Azure Pipelines
Reverse proxy and routingALB with host-based listener rules, updated on every deployCloud Load Balancing with a URL map per projectApplication Gateway or Front Door, rules per project
TLS certificateACM wildcard certificateCertificate Manager, self-managed: Google-managed certificates do not cover wildcardsKey Vault issued wildcard certificate
DNS recordsRoute 53 wildcard recordCloud DNS wildcard recordAzure DNS wildcard record
Private network per projectVPC subnet and security group per projectVPC and firewall rules per projectVNet and NSG per project
Secrets at rest and injectionSecrets Manager with KMSSecret Manager with Cloud KMSKey Vault
Auth gate on every endpointNothing managed on any of the three. No cloud ships "gate every endpoint by default" - this is code you write and then own.
Log storage and retentionCloudWatch Logs with an S3 archiveCloud Logging with a GCS archiveAzure Monitor Logs with Blob Storage
Live log streamingNothing managed on any of the three. A streaming relay you build, run and keep up.
Per-tool metricsCloudWatch custom metrics, plus a sidecar you write to read the protocolCloud Monitoring custom metrics, plus that same sidecarAzure Monitor custom metrics, plus that same sidecar
Health-checked rollout and rollbackECS deployment circuit breaker, configured per serviceCloud Run traffic split between revisionsContainer Apps revision traffic split
Quotas across projectsNothing managed on any of the three. Your own accounting, so one runaway agent cannot take the others down.

Managed services shorten some of these. None of them removes the wiring, the per-project provisioning on a first deploy, or the upkeep afterwards. And a push-triggered GitHub Actions workflow is free on all three clouds, but it still has to build the image, roll it out, wait on the health check, roll back when that fails, and create the routing, isolation and secret resources the first time a project deploys.

Build this for more than one team and three more join the list: a state database, a job queue with a worker, and the sign-in and session glue. That is where the number people quote as fifteen comes from, and it is the point at which you have stopped shipping your product and started running a platform.

Whose cloud it actually is

Picking an "EU region" from a US-incorporated hyperscaler satisfies a residency checkbox; it doesn't change which legal system can compel that provider to produce data. A US CLOUD Act warrant reaches the company, not the country the disks sit in - so a self-hosted server on AWS, GCP, or Azure stays reachable that way regardless of region.

foro.sh runs on OVH Groupe SAS, a company incorporated in France, and is operated by a Netherlands sole proprietorship with no US parent anywhere above it. There is no entity in that chain for a CLOUD Act warrant to reach. The full breakdown names the provider, the operating entity, and the narrow paths that do cross a border.

The first afternoon, or the first month

A first self-hosted deploy is usually a Dockerfile, a reverse proxy, a TLS certificate and its renewal, a decision about how containers get isolated from each other, and a redeploy path that doesn't take the server down while it runs - built once, by whoever is doing this for the first time.

foro.sh is that stack, already built: a Git repo becomes a live URL in about a minute, with the reverse proxy, the certificate, and the health-checked redeploy already wired up.

How a rushed deploy leaks data

The common failure mode in a first self-hosted setup isn't a sophisticated attack - it's a container that shares a network with services it has no reason to reach, or a secret that ends up in an image layer or a Dockerfile ARG before anyone builds a real secrets pipeline. Isolation and secrets handling are both things a first deploy tends to defer, not skip on purpose.

Every foro.sh project gets its own container and its own private network by construction, and every secret is encrypted at rest and redacted from logs from the first deploy, not the one after an incident.

What you can't see until it breaks

Metrics and structured logs are rarely part of a first deploy - they get added later, often only once something has already gone wrong and there's nothing to look at. Until then, a self-hosted MCP server is a container you can restart, not one you can actually watch.

foro.sh reports per-tool metrics, p95 latency, and live deploy, build, and runtime logs from the first deploy, with nothing to instrument in your own code.

When self-hosting still makes sense

If isolation, secrets management, and observability are already solved on infrastructure your team operates for other services, adding an MCP server to that stack can be genuinely cheaper than a first deploy elsewhere - the setup cost above is mostly sunk already. foro.sh is aimed at the far more common case: a team without that stack, or one that would rather not put an MCP server on it.

Isn't self-hosting cheaper?

Compute alone, maybe. What that doesn't price in is your time: a Dockerfile, TLS, isolation, secrets handling, and observability are all still yours to build first, and yours to keep patched afterward. Free starts at one server with no payment method - the same comparison with the setup time removed.

We already run infrastructure for everything else - doesn't that make self-hosting cheap for us?

Often, yes. If isolation, secrets, and observability are already solved on a stack you operate, adding one more workload there can genuinely be cheaper than a first deploy. foro.sh is built for the common case: a team without that stack, or one that would rather not put an MCP server on it.

Can I move my server off foro.sh later?

Yes. A project on foro.sh is a Git repo, its own pyproject.toml or package.json, and a standard container image - nothing proprietary to unwind. Leaving is a docker build away, not a migration project.

Your first server, live in a minute.

Sign in, pick your project, click Deploy. No credit card required.