Todo lo que necesitas para llevar un servidor MCP de tu laptop a un endpoint de producción.
Cuatro comandos. El adaptador viene dentro del CLI, así que tu proyecto no necesita nada de la plataforma.
npm i -g runscalerunscale init mi-servidor # escribe mcp.toml + src/index.tsexport RUNSCALE_API_KEY=<key> # dashboard → API Keysrunscale deploy # bundle, subida, provisión, health, releaseEl deploy narra cada etapa y termina con tu endpoint vivo. Cualquier cliente MCP que hable Streamable HTTP puede llamarlo con un bearer token.
Todos los comandos leen mcp.toml del directorio actual.
El manifiesto se valida en tu laptop antes de subir nada.
[server]name = "mi-servidor" # kebab-case en minúsculas, 3-40 caracteresruntime = "typescript"entrypoint = "src/index.ts"transport = "streamable-http" [deploy]tier = "sovereign" # fijo en UNA región, elegida una vezregion = "mx" # mx = Querétaro · us = N. Virginia [deploy.resources]memory_gb = 0.5 # 0.125 – 10min_instances = 0 # 0 = escala a ceromax_instances = 3 # tope de concurrencia = techo de costo [secrets]required = ["API_KEY"] # el deploy falla temprano si falta alguno [network]egress = "none" # none | vpn | tunnel [[triggers.crons]] # hasta 5, en UTCschedule = "0 */3 * * *"tool = "sync"arguments = { full = false }Tier y región son inmutables por servidor: cambiarlos significa crear un servidor con otro nombre. Esa inmutabilidad es lo que hace auditable la promesa de residencia.
Tres líneas envuelven el SDK oficial. Nada más cambia en tu servidor.
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'import { createMcpLambdaHandler } from 'runscale/adapter' function createServer() { const server = new McpServer({ name: 'mi-servidor', version: '1.0.0' }) server.tool('hola', async () => ({ content: [{ type: 'text', text: 'hola' }], })) return server} export const handler = createMcpLambdaHandler({ createServer })El adaptador resuelve transporte, TLS y autenticación bearer — y falla cerrado: una petición sin token válido nunca llega a tu código. Los secretos llegan como variables de entorno antes de la primera petición.
Eliges la región una vez, por servidor. Todo lo de ese servidor se queda ahí.
Logs, secretos y métricas se leen en la región propia del servidor. El control plane y los metadatos de tu organización viven en mx-central-1.
Dos credenciales distintas, a propósito.
Cualquier cliente Streamable HTTP funciona. Para Claude Code, Cursor y similares:
{ "mcpServers": { "mi-servidor": { "type": "http", "url": "https://<id>.execute-api.mx-central-1.amazonaws.com/mcp/", "headers": { "Authorization": "Bearer <token de acceso>" } } }}Crea el token de acceso en el dashboard (servidor → Tokens de acceso) o por la API. Mantenlo fuera del repositorio.
Lo que muestra el dashboard y de dónde sale.
Declara crons en mcp.toml y la plataforma invoca la tool según el horario (UTC), autenticada con un token dedicado.
Hasta cinco horarios por servidor. Cada disparo es un tools/call normal, visible en los logs y medido como cualquier petición. Los fallos se registran con su motivo.