Skip to main content

Deploying a Remote Claude MCP Server on Liquid Web VPS (2026)

· 8 min read
Yassine El Haddad
Software Developer & Automation Specialist

I build production AI agents, web scrapers, and automation pipelines. Most of what I publish here comes from the actual problems they run into: proxies that get banned, anti-bot stacks that fingerprint your client, RAG that drifts when the underlying data moves. Stack: Python, TypeScript, Go, FastAPI, LangChain, Crawlee, Playwright, deployed on AWS, GCP, and Cloudflare.

Teams often want a shared MCP (Model Context Protocol) server: one deployment the whole team uses instead of each developer running a local server with their own API keys. MCP supports two transports. stdio runs the server as a local process, and remote MCP is reached over HTTP (the current spec uses Streamable HTTP, with older servers still on SSE). A self-hosted server on a VPS exposes its tools over HTTP and shows up in Claude as a remote MCP connector. This guide walks through provisioning a Liquid Web VPS, deploying your MCP server with PM2 or systemd, exposing it via Traefik over HTTPS, and connecting Claude to the remote endpoint with token-based auth. New to Claude? You can try Claude free for a week before committing to a paid plan.

Use Case: Shared MCP for Teams

  • Single deployment: no per-developer local servers
  • Centralized API keys: the server holds Apify, database, or external API keys, so developers don't need them
  • Consistent tools: everyone uses the same MCP tools and versions
  • Easier onboarding: new devs get a config URL instead of local setup

Example: if you want Apify tools for the whole team, Apify already runs a hosted MCP server with OAuth, so you may not need to self-host it at all. Self-hosting on a VPS makes more sense for your own custom MCP server, or when you want one shared Apify token instead of OAuth per person. See Apify Claude Desktop MCP for the Apify-specific setup.

MCP Transport Modes

TransportUse caseAuth
stdioLocal, the client spawns the processN/A
Streamable HTTPRemote over HTTP (current spec)Token recommended
SSE (Server-Sent Events)Remote, older spec still used by some serversToken recommended

For remote deployment, use HTTP transport. Streamable HTTP is the current standard; SSE is the older transport some servers still ship. Claude connects to an HTTPS URL as a remote connector instead of running a local process.

Step-by-Step: Provision and Install

1. Provision Liquid Web VPS

  • OS: Ubuntu 22.04 LTS
  • Resources: 2 GB RAM, 1 vCPU minimum (4 GB for heavier MCP servers)
  • Add SSH key during provisioning

Liquid Web offers managed VPS hosting with proactive monitoring, which suits an always-on MCP server. Check their plan pages for current uptime SLA terms.

2. Install Node.js or Python

Node.js (nvm):

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
nvm install 20
node -v

Python (pyenv):

curl https://pyenv.run | bash
pyenv install 3.11
pyenv global 3.11
python -v

3. Clone and Run MCP Server

git clone https://github.com/your-org/your-mcp-server.git
cd your-mcp-server
npm install # or pip install -r requirements.txt

With PM2:

npm install -g pm2
pm2 start server.js --name mcp-server
pm2 save
pm2 startup

With systemd: Create a unit file and enable the service.

Ensure the server exposes an SSE or HTTP endpoint (e.g. port 3000). Check the MCP server's docs for transport configuration.

4. Expose with Traefik

Install Traefik and add a route for the MCP server. Example Docker label:

labels:
- "traefik.http.routers.mcp.rule=Host(`mcp.yourdomain.com`)"
- "traefik.http.routers.mcp.tls.certresolver=letsencrypt"
- "traefik.http.services.mcp.loadbalancer.server.port=3000"

Point mcp.yourdomain.com to your server. Traefik will handle HTTPS.

5. Token-Based Authentication

Protect the MCP endpoint so only your team can connect. Add middleware to check Authorization: Bearer YOUR_TOKEN (or a custom header). Reject requests without a valid token. Share the token via a secure channel (e.g. 1Password, Vault).

6. Connect Claude to the Remote Server

Claude Desktop and Claude Code both add remote MCP servers as connectors pointed at an HTTPS URL. For Claude Code, the quickest path is the CLI:

claude mcp add --transport http my-server https://mcp.yourdomain.com/mcp \
--header "Authorization: Bearer YOUR_SHARED_TOKEN"

Use --transport sse instead if your server only speaks the older SSE transport. In Claude Desktop, add the same HTTPS URL and Authorization header through Settings, Connectors. Restart Claude and the remote MCP server's tools should appear.

Example: Apify MCP Server Remotely

Before self-hosting, check whether the Apify hosted MCP server covers your needs. It is OAuth-based, maintained by Apify, and gives Claude access to 30,000+ Actors with no server to run. Self-host only when you want a single shared token instead of per-user OAuth, or when you need to pin specific Actors behind your own auth.

If you do self-host, the open-source server is @apify/actors-mcp-server. To share it with the team without individual API keys:

  1. Run the server with npx -y @apify/actors-mcp-server. Use --actors to expose only the one or two Actors your team needs.
  2. Set APIFY_TOKEN in the server env (one team token).
  3. Wrap it in PM2 or systemd, expose the HTTP port, add a Traefik route, and protect the endpoint with your own auth token.
  4. Team members add the remote URL as a Claude connector. No Apify token on their machines.

See Apify Claude Desktop MCP for Apify-specific configuration.

Monitoring

  • PM2: pm2 logs mcp-server, pm2 monit
  • Uptime: use UptimeRobot, Better Uptime, or similar to ping your MCP endpoint
  • Liquid Web: managed monitoring and 24/7 support for incident response

Cost

A small Liquid Web VPS is plenty for a lightweight MCP server. Check their current plans for exact pricing on a 2 to 4 GB RAM instance. Compared to each developer running and maintaining their own local infra, one centralized deployment is usually cheaper to operate and simpler to keep consistent.

Next Steps

Apify Affiliate Banner 728x90Apify Affiliate Banner 728x90Apify Affiliate Banner 300x50Apify Affiliate Banner 300x50
Test locally first

Run the MCP server with SSE transport locally and connect Claude Desktop to http://localhost:3000/sse. Verify tools work before deploying to VPS.

Frequently Asked Questions

stdio runs the MCP server as a local child process. Remote MCP runs it as an HTTP service the client connects to over the network (Streamable HTTP in the current spec, SSE in older servers). Use stdio for personal setups; use a remote HTTP server for shared team access.

Check the Authorization header (Bearer token) or a custom header on each request. Reject requests without a valid token. Use a shared secret stored securely and passed from Claude Desktop config.

Yes, but Apify also runs a hosted MCP server at mcp.apify.com with OAuth, so check that first. To self-host, run @apify/actors-mcp-server on a VPS, set APIFY_TOKEN in the env, expose it via Traefik over HTTPS, and have the team connect Claude to the URL.

2 GB RAM and 1 vCPU is usually enough for lightweight MCP servers. Heavier ones (e.g. with browser automation) may need 4 GB. Monitor with PM2 or systemd.

A small 2 to 4 GB RAM instance is enough for a shared MCP server used by a small team. Check Liquid Web's current plans for exact pricing. Managed monitoring and support are included.

Common mistakes and fixes

Claude Desktop can't connect to remote MCP

Verify HTTPS URL and no mixed content. Check Traefik routing and CORS if applicable. Ensure MCP server returns correct SSE/HTTP transport. Test with curl -N URL.

MCP server crashes after deploy

Check PM2 or systemd logs. Ensure Node.js/Python version matches. Verify env vars (API keys, ports). Run locally first to debug.

Authentication rejected

Ensure token is passed in Authorization header or expected query param. Match server's auth logic. Check for typos in Claude Desktop config.