OffshoreVps
Tutorial6 ott 20266 min di letturaDi il team di OffshoreVps

Come ospitare un server MCP su un VPS

Esegui un server Model Context Protocol remoto: locale contro remoto, un esempio in Python, un servizio systemd, HTTPS con token e una checklist di sicurezza.

Il Model Context Protocol (MCP) permette agli assistenti IA di chiamare strumenti e leggere dati da server che gestisci tu. Molti server MCP girano in locale, ma uno remoto su un VPS è utile quando più persone, strumenti o agenti devono condividere le stesse funzionalità. Questa guida copre le scelte di configurazione e una base sicura.

Finestra del terminale su un VPS che mostra i comandi usati per ospitare un server MCP, a partire da “sudo adduser --disabled-password --gecos "" mcp”
Il tipo di comandi che eseguirai sul tuo server in questa guida.

MCP locale o remoto?

  • Locale (stdio). Il client avvia il server come processo figlio sulla tua macchina. Semplice e privato, ma funziona solo su quella macchina.
  • Remoto (HTTP). Il server gira su un VPS e i client si connettono via HTTPS. È quello che ospiti. Si adatta a strumenti condivisi, lavori di lunga durata e strumenti che richiedono un IP fisso.

Controlla la specifica MCP attuale per il trasporto supportato dal tuo client. Streamable HTTP è la scelta abituale per i server remoti. Le dimensioni per i carichi di lavoro tipici sono nella nostra pagina hosting per server MCP.

Passo 1: prepara il server

Usa un server Ubuntu LTS nuovo e i passaggi di come mettere in sicurezza un nuovo VPS. Crea un utente per il servizio.

sudo adduser --disabled-password --gecos "" mcp

Passo 2: esegui il server

Usa l’SDK ufficiale o un server esistente. Questo esempio in Python usa l’helper FastMCP dell’SDK MCP:

sudo -iu mcp
python3 -m venv ~/venv && . ~/venv/bin/activate
pip install "mcp[cli]"
# server.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("demo", host="127.0.0.1", port=8000)

@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers."""
    return a + b

if __name__ == "__main__":
    mcp.run(transport="streamable-http")
I passaggi di questa guida in ordine: 1. MCP locale o remoto?; 2. prepara il server; 3. esegui il server; 4. eseguilo come servizio; 5. HTTPS e autenticazione; 6. Checklist di sicurezza
I passaggi di questa guida, in ordine.

Passo 3: eseguilo come servizio

[Unit]
Description=MCP server
After=network-online.target

[Service]
User=mcp
WorkingDirectory=/home/mcp
ExecStart=/home/mcp/venv/bin/python server.py
Restart=always

[Install]
WantedBy=multi-user.target

Salvalo come /etc/systemd/system/mcp.service ed esegui sudo systemctl enable --now mcp.

Passo 4: HTTPS e autenticazione

Un server MCP può eseguire codice e leggere dati, quindi non lasciarlo mai aperto. Mettilo dietro un reverse proxy con TLS e richiedi un token:

mcp.example.com {
  @noauth not header Authorization "Bearer YOUR_LONG_RANDOM_TOKEN"
  respond @noauth 401
  reverse_proxy 127.0.0.1:8000
}

Per una configurazione di produzione, usa OAuth come descritto nella specifica di autorizzazione MCP invece di un unico token condiviso.

Checklist di sicurezza

  • Dai agli strumenti il minimo accesso necessario. Non dare a uno strumento l’accesso alla shell a meno che non sia questo lo scopo.
  • Tieni i segreti in file di ambiente con chmod 600.
  • Registra le chiamate degli strumenti per vedere cosa è successo.
  • Mantieni la porta associata a 127.0.0.1 ed esponi solo il proxy.