El Model Context Protocol (MCP) permite que los asistentes de IA llamen a herramientas y lean datos de servidores que tú ejecutas. Muchos servidores MCP se ejecutan en local, pero uno remoto en un VPS es útil cuando varias personas, herramientas o agentes necesitan compartir las mismas capacidades. Esta guía cubre las decisiones de configuración y una base segura.
¿MCP local o remoto?
- Local (stdio). El cliente inicia el servidor como proceso hijo en tu propia máquina. Es simple y privado, pero solo funciona en esa máquina.
- Remoto (HTTP). El servidor se ejecuta en un VPS y los clientes se conectan por HTTPS. Esto es lo que alojas. Conviene para herramientas compartidas, trabajos de larga duración y herramientas que necesitan una IP fija.
Consulta la especificación MCP vigente para ver el transporte que admite tu cliente. Streamable HTTP es la opción habitual para servidores remotos. Los tamaños para cargas de trabajo típicas están en nuestra página de hosting para servidores MCP.
Paso 1: prepara el servidor
Usa un servidor Ubuntu LTS nuevo y los pasos de cómo proteger un VPS nuevo. Crea un usuario para el servicio.
sudo adduser --disabled-password --gecos "" mcp
Paso 2: ejecuta el servidor
Usa el SDK oficial o un servidor existente. Este ejemplo en Python usa el helper FastMCP del SDK de 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")
Paso 3: ejecútalo como servicio
[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
Guárdalo como /etc/systemd/system/mcp.service y ejecuta sudo systemctl enable --now mcp.
Paso 4: HTTPS y autenticación
Un servidor MCP puede ejecutar código y leer datos, así que nunca lo dejes abierto. Ponlo detrás de un proxy inverso con TLS y exige un token:
mcp.example.com {
@noauth not header Authorization "Bearer YOUR_LONG_RANDOM_TOKEN"
respond @noauth 401
reverse_proxy 127.0.0.1:8000
}
Para una configuración de producción, usa OAuth como describe la especificación de autorización de MCP en lugar de un único token compartido.
Lista de verificación de seguridad
- Da a las herramientas el menor acceso que necesiten. No des acceso al shell a una herramienta salvo que ese sea el objetivo.
- Guarda los secretos en archivos de entorno con
chmod 600. - Registra las llamadas a las herramientas para poder ver qué pasó.
- Mantén el puerto vinculado a 127.0.0.1 y expón solo el proxy.