Host an MCP server.
Where can I host an MCP server?
A remote MCP server is a web service that speaks the Model Context Protocol over Streamable HTTP at a public HTTPS URL, so any host that keeps a process running behind HTTPS can run one: a virtual server you manage, a platform-as-a-service, an edge or serverless runtime, or hosting your agent buys for itself. Euphoric is the last kind: an agent deploys the server's container image by API, under a spending ceiling, on servers in EU data centres. Euphoric is not open yet; MCP server hosting is part of its launch scope.
What a hosted MCP server needs
- An HTTPS URL that MCP clients such as Claude, ChatGPT and Cursor can reach.
- Streamable HTTP: one endpoint, commonly
/mcp, that accepts POST and GET and may hold a server-sent events stream open. - Authentication when tools touch private data: the MCP authorization specification uses OAuth 2.1. Public, read-only tools can run without it.
- Secrets for the upstream APIs the tools call, kept out of the image and the logs.
- An always-on process with logs, restarts and a way to replace the running version.
- A cost limit, if an agent rather than a person is the one paying.
The options compared
| Option | Good for | You take on |
|---|---|---|
| Virtual server you manage | Full control, lowest raw price | Operating system updates, TLS, process supervision, firewalls |
| Platform-as-a-service (Render, Railway, Fly.io and similar) | Deploying from a repository or image with HTTPS included | An account and card per platform; a person usually sets it up |
| Edge or serverless runtime (Cloudflare Workers and similar) | Servers written for that runtime, global reach | Runtime-specific code and request time limits |
| Agent-provisioned hosting (Euphoric, planned) | An agent deploying and paying for its own MCP server in the EU | Packaging the server as a digest-pinned container image |
How an agent will deploy an MCP server on Euphoric
The agent generates its own credential, adds prepaid credit and creates an application from the server's image with a lifetime spending ceiling. It polls the returned operation until it succeeds, then reads the application's HTTPS URL and gives the MCP endpoint on that URL to its client. These requests are the implemented contract; they work against a development deployment of Euphoric with simulated servers, and every /v1 route on euphoric-host.eu currently returns HTTP 404 foundation_closed.
export EUPHORIC_URL=http://localhost:3000 # a development deployment
export EUPHORIC_TOKEN="eph_$(openssl rand -hex 32)"
curl -sS "$EUPHORIC_URL/v1/bootstrap" \
-H "Authorization: Bearer $EUPHORIC_TOKEN" \
-H 'Idempotency-Key: bootstrap-1' -H 'Content-Type: application/json' \
-d '{"contact":"agent@example.test"}'
curl -sS "$EUPHORIC_URL/v1/sandbox/funding" \
-H "Authorization: Bearer $EUPHORIC_TOKEN" \
-H 'Idempotency-Key: fund-1' -H 'Content-Type: application/json' \
-d '{"amount_minor":1000}'
# Replace the image with your MCP server, pinned by digest.
response=$(curl -sS "$EUPHORIC_URL/v1/applications" \
-H "Authorization: Bearer $EUPHORIC_TOKEN" \
-H 'Idempotency-Key: mcp-app-1' -H 'Content-Type: application/json' \
-d '{"name":"weather-mcp","image":"registry.example/euphoric/hello@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","plan_id":"test-runtime-v1","spend_limit_micro":10000000}')
APP_ID=$(echo "$response" | jq -r .application_id)
STATUS_URL=$(echo "$response" | jq -r .status_url)
curl -sS "$EUPHORIC_URL$STATUS_URL" -H "Authorization: Bearer $EUPHORIC_TOKEN"
# Repeat that read until state is succeeded, failed or cancelled, then read the URL.
curl -sS "$EUPHORIC_URL/v1/applications/$APP_ID" \
-H "Authorization: Bearer $EUPHORIC_TOKEN"
Development deployments return url: null because nothing really runs. In private tests on real servers, the application received an address of the form https://<name>.euphoric-app.eu, which is where the MCP client would connect. The full walkthrough, errors and recovery rules are in the API documentation.
What works today, and what launch adds
| Capability | Status |
|---|---|
| Deploy a digest-pinned container image to its own virtual machine, with an HTTPS address | Verified privately known test images |
| Prepaid billing per second under a lifetime spending ceiling; container logs; release replacement | Verified privately with test credit |
| Environment variables and secrets for upstream API keys and OAuth credentials | Launch scope |
| Streamable HTTP and long-lived event streams verified end to end with real MCP clients | Launch scope |
| A published container contract: port, health check, user, filesystem and limits | Launch scope |
| Public hosting that any agent can buy, with real payments | Planned |
| Custom domains, builds from source, databases | Planned |
Packaging an MCP server for Euphoric
Build the server as a container image that serves HTTP and push it to a registry. Deploy it by digest, not by tag: repository@sha256: followed by 64 hexadecimal characters. In the private tests, containers served HTTP on port 8080 as an unprivileged user with a read-only root filesystem, so a server that keeps its state outside the container and writes nothing to disk is the safest shape. The exact port, health check and limits become a published contract at launch.
Questions
Can an AI agent deploy its own MCP server here?
That is the design: no signup form, a credential the agent generates itself, prepaid credit and a spending ceiling its owner can rely on. It becomes possible when Euphoric opens.
Where do the servers run?
In EU data centres. Each application will get its own virtual machine rather than sharing a container host, as in the private tests.
What will it cost?
Planned launch pricing starts at €0.0432 an hour (€31.54 for a full month), excluding VAT, billed per second from prepaid credit. It is not purchasable yet; see pricing.
Is Euphoric itself an MCP server?
Not yet. An MCP server for managing Euphoric is planned separately. This page is about hosting yours.
Read the API, see how it works or read /llms.txt.