Documentación

Todo lo que necesitas para llevar un servidor MCP de tu laptop a un endpoint de producción.

Inicio rápido

Cuatro comandos. El adaptador viene dentro del CLI, así que tu proyecto no necesita nada de la plataforma.

$_terminal
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, release

El deploy narra cada etapa y termina con tu endpoint vivo. Cualquier cliente MCP que hable Streamable HTTP puede llamarlo con un bearer token.

Referencia del CLI

Todos los comandos leen mcp.toml del directorio actual.

runscale init <nombre>
Crea mcp.toml y un entrypoint de ejemplo. ¿Ya tienes servidor? Apunta entrypoint a él.
runscale deploy
Construye, sube y libera. Narra el pipeline; termina con la URL viva.
runscale deploy --preview
Aprovisiona y verifica salud, pero retiene el tráfico. Imprime una URL pública de preview.
runscale deploy --open
Abre la página del build en el dashboard.
runscale promote [id]
Libera a producción un deployment --preview (cambio de tráfico atómico).
runscale logs -m <minutos>
Logs de runtime de este servidor, leídos en su región.
runscale secrets set NOMBRE
Escribe un secreto (valor por stdin o --value). Nunca vuelve a leerse.
runscale secrets list
Nombres, versiones y último uso. Los valores nunca se muestran.
runscale secrets rm NOMBRE
Borra un secreto. Los deploys que lo requieran fallan antes de construir.

Referencia de mcp.toml

El manifiesto se valida en tu laptop antes de subir nada.

TOMLmcp.toml
[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.

El adaptador

Tres líneas envuelven el SDK oficial. Nada más cambia en tu servidor.

TSsrc/index.ts
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.

Regiones

Eliges la región una vez, por servidor. Todo lo de ese servidor se queda ahí.

mx · mx-central-1
Querétaro, México. Residencia de datos para cargas CNSF, banca y salud. Forma del endpoint: https://<id>.execute-api.mx-central-1.amazonaws.com/mcp/
us · us-east-1
N. Virginia. La más cercana a los hosts de modelos, cómputo más barato, sin promesa de residencia. Forma del endpoint: https://<id>.execute-api.us-east-1.amazonaws.com/

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.

Secretos y tokens de acceso

Dos credenciales distintas, a propósito.

Secretos (bóveda)
Valores que tu servidor necesita en runtime. Solo escritura: cifrados por organización, nunca se leen de vuelta — ni por la API ni por un propietario. Rotar un secreto se propaga sin redeploy.
Tokens de acceso
Credenciales que un cliente presenta para llamar a UN servidor. Se muestran una sola vez, se revocan y mueren en el momento.
API keys
Credenciales del CLI y de la API REST. Las keys de deploy publican código; nunca pueden destruir infraestructura.

Conectar un cliente

Cualquier cliente Streamable HTTP funciona. Para Claude Code, Cursor y similares:

{}.mcp.json
{  "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.

Logs, métricas y bitácora

Lo que muestra el dashboard y de dónde sale.

Logs de runtime
Cola en vivo y ventanas de tiempo, parseados por petición: duración, memoria, arranques en frío y tu propia salida de consola. Leídos en región.
Métricas
Invocaciones, errores, p50/p95 y arranques en frío por servidor, directo de la telemetría del motor.
Bitácora
Registro append-only de cada acción en la organización, incluidos los intentos rechazados. Se conserva 400 días.

Tools programadas

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.