runscale
v0.2.0
Published
Runscale CLI — deploy and scale MCP servers: init, deploy, logs and a write-only secrets vault. Includes the Lambda adapter as `runscale/adapter`.
Readme
▲ Runscale
Deploy and scale MCP servers.
From code to a live Model Context Protocol endpoint in minutes — blue/green releases, a write-only secrets vault, and data residency you control.
Quickstart
npm i -g runscale
# in your project folder
runscale init my-server
export RUNSCALE_API_KEY=<your key> # dashboard → API Keys
runscale deploydeploying my-server (sovereign)
building bundle...
48.2 KiB, sha256 3f9c21ab04e1…
deployment dep_01J…
✓ validate
✓ provision
✓ health
✓ release
live: https://…execute-api.mx-central-1.amazonaws.com/mcp/That's it. Your MCP server is running behind a bearer-token gate, released blue/green with one-click rollback from the dashboard.
Commands
| Command | What it does |
| --- | --- |
| runscale init <name> | Scaffold mcp.toml and an example entrypoint |
| runscale deploy | Bundle, upload and release the current directory |
| runscale logs [-m minutes] | Runtime logs, read in-region (CloudWatch) |
| runscale secrets set <NAME> | Write a secret to the vault (value via stdin) |
| runscale secrets list | Names and versions — never values |
| runscale secrets remove <NAME> | Delete a secret |
Writing a server
runscale init gives you a working entrypoint. The adapter ships inside this package —
your project needs nothing from the platform:
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
import { createMcpLambdaHandler } from 'runscale/adapter'
function createServer() {
const server = new McpServer({ name: 'my-server', version: '1.0.0' })
server.tool('hello', async () => ({
content: [{ type: 'text', text: 'hello from my-server' }],
}))
return server
}
export const handler = createMcpLambdaHandler({ createServer })The adapter handles Streamable HTTP transport, rejects requests without a valid access token before your code runs, and injects vault secrets as environment variables.
The manifest (mcp.toml)
[server]
name = "my-server"
runtime = "typescript"
entrypoint = "src/index.ts"
transport = "streamable-http"
[deploy]
tier = "sovereign" # runs in mx-central-1 (Querétaro, Mexico)
[deploy.resources]
memory_gb = 0.5
min_instances = 0
max_instances = 3
[secrets]
required = [] # names your code expects, e.g. ["GITHUB_TOKEN"]
[network]
egress = "none"Security model, in short
- Secrets are write-only. They go in via
runscale secrets set; nobody — including us — reads a value back. Your server receives them at runtime, decrypted in-region. - Access tokens are per-server, shown once, revocable instantly from the dashboard.
- Every release is blue/green: the new version must pass a health check before it receives traffic, and rollback is one click.
- Deploy keys can't destroy. The API key you export can create and deploy servers, never delete them.
Environment
| Variable | Meaning | Default |
| --- | --- | --- |
| RUNSCALE_API_KEY | API key from the dashboard | — (required) |
| RUNSCALE_API_URL | Control-plane URL | https://api.runscale.dev |
Runscale · Hecho en México
