Cómo alojar un servidor MCP gratis con Vercel, Cloudflare o Docker
Tres formas gratuitas de poner un servidor MCP en línea: Vercel Hobby, Cloudflare Workers y hosts Docker como Render, Cloud Run y Hugging Face Spaces. Límites reales revisados en octubre de 2026, código funcional, seguridad de tokens y una tabla que muestra qué opción se agota primero.
Tu servidor MCP funciona a la perfección en tu equipo portátil. Claude Desktop lo inicia por stdio, cada herramienta responde y, luego, te planteas una pregunta más difícil: ¿cómo dejas que Cursor en otra máquina, un compañero de equipo o un conector de ChatGPT lleguen a las mismas herramientas sin pagar por un servidor? Necesitas una URL HTTPS pública, y te gustaría que la factura marcara $0.
Puedes alojar un servidor MCP gratis en tres plataformas muy distintas: Vercel, Cloudflare Workers y cualquier host Docker con plan gratuito. Cada una encaja con un tipo distinto de servidor, y cada una tiene un límite con el que tarde o temprano te toparás. A continuación encontrarás las cifras reales, verificadas con la documentación de los proveedores en octubre de 2026, código funcional para cada camino y una lista breve de lo que falla primero.
💡 Los planes gratuitos cambian con frecuencia. Cada límite de este artículo procede de la documentación oficial a octubre de 2026. Revisa la página de precios antes de lanzar nada público.
Por qué los servidores locales dejan de ser suficientes
Stdio frente a HTTP remoto
Un servidor stdio es un proceso hijo. El cliente lo lanza, se comunica por la entrada y salida estándar, y lo apaga al terminar la sesión. Nada sale de tu equipo, lo que hace de stdio una opción perfecta para leer archivos locales e inútil para compartir.
Un servidor remoto escucha en una sola URL, normalmente /mcp o /api/mcp, y habla Streamable HTTP. Cualquier cliente que tenga la dirección y el token correcto puede llamarlo desde cualquier lugar. El transporte HTTP+SSE, más antiguo, está quedando atrás: la v2 de mcp-handler de Vercel lo eliminó, y la documentación actual de Cloudflare describe solo Streamable HTTP en /mcp. Si construyes con ese transporte, no tendrás que reescribir todo el próximo año.
Lo que debe ofrecer un host gratuito
Antes de comparar plataformas, anota lo que tu servidor necesita de verdad:
Una URL HTTPS estable que puedas pegar en la configuración de un cliente
Arranque rápido, porque un cliente con un tiempo de espera corto falla el handshake si tu servidor tarda un minuto en arrancar
Almacenamiento seguro de secretos para los tokens que usan tus herramientas
Tiempo de CPU suficiente por solicitud para la lógica de tus herramientas, no para ejecutar un modelo
Registros legibles para el día en que una llamada falle y nadie sepa por qué
El alojamiento es un problema de red antes que de código: una dirección, un puerto abierto y un proceso que responde. Cada opción siguiente resuelve esas tres cosas de una manera distinta.
Las tres rutas gratuitas de un vistazo
Vercel y Cloudflare ejecutan tu código como funciones sin servidor: sin máquina que gestionar, facturación por uso y gratis hasta un tope. Los hosts Docker ejecutan tu código como un contenedor: un proceso completo con su propio sistema de archivos y el lenguaje que quieras. Esa diferencia decide la mayoría de las contrapartidas.
Opción
Asignación gratuita
Arranque
Ideal para
Principal pega
Vercel Hobby
1 M de invocaciones, 4 horas de CPU, 300 s por llamada
Breve, las instancias se reutilizan
Equipos de Next.js, despliegues rápidos
Solo uso personal y no comercial
Cloudflare Workers Free
100.000 solicitudes al día, 10 ms de CPU cada una
Insignificante
Herramientas ligeras, muchas llamadas
10 ms de CPU, 50 subsolicitudes
Render Free
750 horas de instancia al mes
Alrededor de 1 minuto tras 15 minutos de inactividad
Cualquier Dockerfile
Se duerme cuando está inactivo
Google Cloud Run
2 M de solicitudes, 180.000 segundos de vCPU
Escala a cero, primera llamada más lenta
Contenedores con tráfico a ráfagas
Requiere una cuenta de facturación
Hugging Face Spaces
CPU Basic gratuita (2 vCPU, 16 GB de RAM)
Los Spaces inactivos pueden pausarse
Demos públicas
El disco se borra al reiniciar
Lee la tabla por filas, no por columnas. La columna de arranque predice cómo responde el servidor dentro de un chat: Workers y Vercel responden en milisegundos, mientras que un contenedor dormido hace que la primera llamada a una herramienta se quede colgada. La columna de asignación gratuita predice cuánto tiempo sigues sin pagar: 100.000 solicitudes al día suenan enormes hasta que un agente parlanchín hace un bucle de cuarenta llamadas a una herramienta por tarea.
💡 Las cinco opciones cuestan $0 el primer día, así que el precio es un mal criterio de desempate. Elige según lo que hace una sola llamada a una herramienta: una consulta rápida, un cálculo pesado o una larga espera a otra API.
Vercel: la ruta más rápida del repositorio a la URL
Si tu proyecto ya vive en una aplicación de Next.js con App Router, un servidor MCP es un archivo más. Vercel lo ejecuta como una Function con Fluid compute, que factura la CPU activa por separado del tiempo de memoria. Eso encaja bien con el tráfico MCP: largos periodos inactivos y, después, una ráfaga de llamadas.
Instalar y escribir la ruta
Necesitas Node.js 20 o posterior. La documentación de Vercel fija estas versiones:
npm i mcp-handler@2.1.1 @modelcontextprotocol/server@2 zod@4
Crea app/api/mcp/route.ts:
import { createMcpHandler } from 'mcp-handler';
import { z } from 'zod';
const handler = createMcpHandler((server) => {
server.registerTool(
'roll_dice',
{
description: 'Roll an N-sided die',
inputSchema: z.object({ sides: z.number().int().min(2) }),
},
async ({ sides }) => {
const value = 1 + Math.floor(Math.random() * sides);
return { content: [{ type: 'text', text: `You rolled a ${value}` }] };
},
);
});
export { handler as GET, handler as POST };
Sube el código a Git, importa el repositorio en Vercel y el servidor responderá en https://your-app.vercel.app/api/mcp. En Cursor, la configuración es una sola línea: {"mcpServers": {"dice": {"url": "https://your-app.vercel.app/api/mcp"}}}. Prueba primero en local con npx @modelcontextprotocol/inspector@latest, elige Streamable HTTP y apúntalo a http://localhost:3000/api/mcp.
Límites de Hobby que importan
1.000.000 de invocaciones de funciones al mes
4 horas de CPU activa y 360 GB-hora de memoria aprovisionada
300 segundos de duración máxima por función
Solo uso personal no comercial, según las normas de uso justo de Vercel
Si superas un límite, lo habitual es esperar 30 días hasta que esa función vuelva a funcionar
Una herramienta que pasa la mayor parte del tiempo esperando a otra API apenas toca las 4 horas de CPU. Una herramienta que analiza archivos grandes las consume rápido. Planifica también según el límite de 300 segundos: devuelve pronto un ID de trabajo y deja que una segunda herramienta lo consulte, en lugar de mantener una llamada abierta durante minutos.
💡 Si un cliente recibe una página de inicio de sesión en lugar de JSON, revisa Deployment Protection. Los proyectos Hobby pueden tener activado Vercel Authentication, que bloquea a los llamantes anónimos, incluido tu cliente MCP.
Cloudflare Workers: gratis y con velocidad de edge
Los Workers se ejecutan dentro de isolates de V8, así que no hay ningún contenedor que arrancar. Eso encaja con la forma sin estado de solicitud y respuesta de la mayoría de los servidores MCP, y explica por qué el tiempo de arranque es casi cero.
La plantilla sirve Streamable HTTP en /mcp. La documentación de Cloudflare recomienda ahora createMcpHandler para los servidores nuevos: es sin estado y crea un servidor MCP por solicitud. La clase McpAgent, más antigua, está documentada como obsoleta y congelada en funcionalidades, así que evítala en cualquier proyecto nuevo.
Envuelve el handler dentro de un método fetch. Si exportas la función invocable directamente, Wrangler lee una exportación por defecto de función como una clase WorkerEntrypoint y el despliegue se comporta mal.
Cifras del plan gratuito
100.000 solicitudes al día, que se reinician a medianoche UTC, con un límite de ráfaga de 1.000 solicitudes por minuto
10 ms de tiempo de CPU por solicitud HTTP
50 subsolicitudes por solicitud
128 MB de memoria por isolate
Hasta 100 Workers por cuenta
Esperar una llamada a fetch() no cuenta como tiempo de CPU, así que una herramienta que llama a una API externa y devuelve la respuesta cabe sin problemas. El análisis pesado o el procesamiento de imágenes no. Al superar el tope diario, Cloudflare devuelve Error 1027.
La autenticación ya está resuelta aquí. Las plantillas OAuth admiten GitHub, Google, Slack, Auth0, Stytch, WorkOS y Cloudflare Access, con un namespace de KV que guarda las sesiones. El estado, si lo necesitas, puede vivir en KV o en Durable Objects con SQLite, que están disponibles en el plan gratuito.
Docker: cuando necesitas un proceso real
Elige un contenedor cuando tu servidor necesite bibliotecas nativas, archivos locales, un trabajo de larga duración o un lenguaje distinto de TypeScript. Cambias el arranque instantáneo por libertad.
Un Dockerfile mínimo
FROM node:22-slim AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY --from=build /app/dist ./dist
ENV PORT=8080
EXPOSE 8080
CMD ["node", "dist/http.js"]
Hay dos reglas que importan. Escucha en el puerto que te asigna el host leyendo PORT, y enlaza a 0.0.0.0, no a localhost. Después ejecuta el servidor en modo Streamable HTTP sin estado, para que cualquier instancia pueda responder a cualquier solicitud. Los hosts que escalan a cero descartarán sin aviso las sesiones en memoria.
Render, Cloud Run y Spaces
Render Free: 750 horas de instancia por espacio de trabajo cada mes, una sola instancia, sin disco persistente, sin SSH y sin SMTP saliente. Las bases de datos Postgres gratuitas caducan a los 30 días.
Google Cloud Run: el nivel siempre gratuito ofrece cada mes 2 millones de solicitudes, 180.000 segundos de vCPU, 360.000 GiB-segundos y 1 GB de tráfico saliente desde Norteamérica. Escala a cero por defecto, pero debes vincular una cuenta de facturación.
Hugging Face Spaces: añade sdk: docker y app_port: 7860 al encabezado YAML de tu README. El contenedor se ejecuta como el usuario 1000 y todo lo que se escriba en disco se pierde al reiniciar.
Los arranques en frío rompen los handshakes
El servicio gratuito de Render se detiene tras 15 minutos sin tráfico, y despertarlo tarda alrededor de un minuto. Un cliente con un tiempo de espera corto falla la primera solicitud y luego funciona a la segunda. Ese error es muy difícil de rastrear si no conoces la causa.
Tienes tres opciones:
Aceptarlo y reintentar la primera llamada
Dividir el servidor: pon las herramientas sensibles a la latencia en Workers y las pesadas en el contenedor
Hacer ping a un endpoint de salud cada 10 minutos. Así un servicio se mantiene despierto dentro de las 750 horas (un mes de 31 días tiene 744), pero revisa las normas del host antes de confiar en ello
Asegúralo antes de compartir la URL
Una URL MCP es un mando a distancia para todo lo que pueden hacer tus herramientas. Cualquiera que la encuentre puede pulsar los botones, y los planes gratuitos no tienen un tope de presupuesto que impida que un desconocido consuma tu cuota.
Añade un token de portador
En Vercel, envuelve el handler con withMcpAuth, define required: true y devuelve el cliente verificado desde verifyToken. Las solicitudes sin un token válido reciben un 401. Un token al que le falte un scope requerido recibe un 403. El ejemplo de la documentación lee un token de demostración desde una variable de entorno y advierte de que, en producción, hay que comprobar el emisor, la audiencia, la caducidad y los scopes contra un servidor de autorización real. mcp-handler no emite tokens por sí mismo.
Para cumplir con la especificación de MCP, publica también los metadatos del recurso protegido de OAuth en /.well-known/oauth-protected-resource, para que los clientes compatibles encuentren tu servidor de autorización.
Mantén los secretos fuera del repositorio
Vercel: variables de entorno del proyecto
Cloudflare:npx wrangler secret put PICASSOIA_TOKEN
Render y Spaces: secretos del panel, leídos como variables de entorno en tiempo de ejecución
Nunca pegues un token en la descripción de una herramienta ni en un prompt. Los clientes muestran las descripciones de las herramientas al modelo, y el modelo puede repetirlas. Añade también un contador de llamadas por token, ya que todos los que llaman comparten la cuota gratuita.
Elige la opción gratuita adecuada
Elige Vercel si el proyecto ya está en Next.js, el tráfico es personal y quieres una URL de vista previa para cada pull request.
Elige Cloudflare si quieres un arranque casi nulo, hasta 100.000 llamadas al día y herramientas que sobre todo reenvían solicitudes a otras API.
Elige un host de contenedores si necesitas binarios nativos, archivos en disco o un trabajo que dure más que una solicitud rápida.
Nada te impide combinarlos. Una configuración habitual es un Worker que responde las consultas baratas y reenvía las solicitudes pesadas a un contenedor, así el cliente siempre recibe una primera respuesta rápida. Empieza con la plataforma más sencilla que encaje, mide durante una semana y cambia solo cuando un límite realmente te afecte.
Qué falla primero
Plataforma
Primer muro con el que topas
Señal de alerta
Vercel Hobby
4 horas de CPU, o la norma de uso no comercial
Funciones pausadas, espera de 30 días
Workers Free
10 ms de CPU en herramientas pesadas
Errores de límite de CPU al analizar
Render Free
Retraso de arranque
La primera llamada falla tras un periodo de inactividad
Cloud Run
Uso por encima de la asignación gratuita
Cargos en la factura
Spaces
Reinicio del disco
El estado desaparece tras un reinicio
Pruébalo con Picasso IA
Un servidor alojado solo es útil si sus herramientas hacen algo que merezca la pena invocar. La generación de imágenes es una buena primera herramienta, porque puedes ver de inmediato si todo el ciclo funciona.
Una herramienta que llama a un modelo de imagen
PicassoIA expone una API de estilo Replicate en https://api.picassoia.com/v1. Te autenticas con un token Bearer que empieza por pia_sk_, creas una predicción y luego la consultas. El modelo PicassoIA Image acepta un objeto input con un prompt y un aspect_ratio:
En Workers, lee el token desde env en lugar de process.env. Las predicciones son asíncronas, así que divide el trabajo en dos herramientas: make_image devuelve el ID de la predicción, y check_image llama a GET /v1/predictions/{id} y devuelve el estado y las URL de salida. Los estados son starting, processing, succeeded, failed y canceled. Cada llamada termina en milisegundos, lo que cabe en el presupuesto de 10 ms de CPU de Workers y nunca mantiene una solicitud abierta. El límite de la cuenta es 5 predicciones a la vez, compartidas entre tokens y conexiones MCP.
💡 La documentación de la API dice que las predicciones son actualmente gratuitas y no usan créditos, y también dice que se necesita un plan Infinite para crearlas. Revisa la página de precios antes de construir una herramienta pública sobre ella.
Despliega esta noche el servidor de dados y luego abre Picasso IA y crea algo con él. Escribe un prompt, pásalo por Seedream 5 Pro y Nano Banana 2 Lite, y compara los dos resultados lado a lado. Cuando tu propia herramienta MCP devuelva una URL de imagen desde un servidor que no cuesta nada, tendrás todo el ciclo funcionando, y cada nueva herramienta que añadas después llevará minutos. Prueba varios prompts, rompe algunos límites a propósito y comprueba qué host gratuito aguanta mejor tu proyecto.