Railway plugin

The Railway plugin lets a Vaubaan Gateway mission use Railway without handing the agent a credential. Deploy, redeploy, read logs and manage variables of Railway projects through the official Railway MCP server and GraphQL API.

One account is one Railway account reached through the company Railway app, or a workspace token (or an account token) pasted by hand; every tool runs either way. One resource is one project. Its owner labels each project with an environment (prod, staging, preview or dev); deploys and variable changes are held per label, and a project without a label can only be inspected.

Permissions

Each permission is a named risk of the plugin's catalog: a mission holds an explicit list of them, never "all". The severity is computed from the permission's six axes (undo, blast radius, data, cost, visible to, lasts); nothing is decided from it.

PermissionWhat it allowsSeverityWhy it is a risk
railway.read-accountRead the account and the list of projectslowAccount metadata only (`whoami`, `list-projects`). No secret is returned ; the blast radius is the whole workspace because the call is not scoped to a project.
railway.read-runtimeRead services, deployments and statuseslowRuntime metadata of a project (services, deployments, status). No secret payload. Broad by design : it co-matches every project-scoped read, so a more specific read permission (logs, variables) is required on top of it.
railway.read-logsRead the logs of a deploymentlowApplication logs often contain printed secrets (DSN, JWT, stack traces with PII). Classified `data` rather than `secret` because a well-run project does not log its secrets ; a strict creator leaves it out.
railway.read-variablesRead environment variables (including secrets)low (only for staging, preview, dev, prod)Returns variable values in clear by default. The main exfiltration surface for production credentials, hence env-scoped : holding it on staging says nothing about prod.
railway.deployRedeploy a service or accept staged changes (deploy)medium (high on prod; only for staging, preview, dev, prod)Reversible : a new deploy fixes a bad one, and Railway bills usage. On prod the deployed state is visible to customers until reverted, hence the per-env vector override.
railway.upsert-variableCreate, modify or delete an environment variablemedium (high on prod; only for staging, preview, dev, prod)Scalar change of named variables (upsert or delete). Triggers an implicit redeploy unless `skipDeploys` is set. On prod a wrong value breaks the service immediately.
railway.bulk-variables-replaceReplace every environment variable in bulk (replace=true)highDESTRUCTIVE : every variable absent from the payload is deleted. Detected from `replace` set on `upsert-variables`, from an empty or malformed variable payload, and on every `railway-agent` call. Any environment, prod or not.
railway.create-projectCreate a new Railway projecthighAccount-level write. Not reversible from the MCP surface (deleting a project needs the dashboard) and may generate unbounded cost.
railway.agent-actionInvoke the Railway agent (conversational meta-tool)highThe upstream agent decides alone what to mutate ; no fine classification is possible. Catch-all by construction : the classifier also emits the deployment, variable write and variable replace slices, so a mission must hold those permissions too. Explicit opt-in only ; absent from every preset.
railway.uncategorized-writeUncategorized Railway writemedium (the catch-all: touched only by a call no other permission covers)Catch-all for writes without a dedicated entry. Seen in production, it means a tool classifies to a slice no fine-grained entry covers : add the entry.

Presets

A preset pre-fills the permissions of a mission for one account, with a limit per period, a rate and whether each permission runs freely or asks the mission creator first. The person creating the mission adjusts it; the mission stores the explicit list.

Read-only

read-only — Inspect projects, services, deployments and logs. No variable values, no write.

PermissionWhat it allowsLimit per periodRateRuns
railway.read-accountRead the account and the list of projects100060 per minuteruns freely
railway.read-runtimeRead services, deployments and statuses2000120 per minuteruns freely
railway.read-logsRead the logs of a deployment50030 per minuteruns freely

Developer

developer — One mission per code project — deploy, redeploy and manage variables on non-production environments freely; read logs; production deploys and variable writes ask first.

PermissionWhat it allowsLimit per periodRateRuns
railway.read-accountRead the account and the list of projects100060 per minuteruns freely
railway.read-runtimeRead services, deployments and statuses5000120 per minuteruns freely
railway.read-logsRead the logs of a deployment200060 per minuteruns freely
railway[dev].read-variables20020 per minuteruns freely
railway[preview].read-variables20020 per minuteruns freely
railway[staging].read-variables20020 per minuteruns freely
railway[dev].deploy30010 per minuteruns freely
railway[preview].deploy30010 per minuteruns freely
railway[staging].deploy30010 per minuteruns freely
railway[prod].deploy202 per minuteask me first
railway[dev].upsert-variable20020 per minuteruns freely
railway[preview].upsert-variable20020 per minuteruns freely
railway[staging].upsert-variable20020 per minuteruns freely
railway[prod].upsert-variable205 per minuteask me first

Operator

operator — Run production — every read including production variables, deploys everywhere, destructive variable replacement and project creation asking first.

PermissionWhat it allowsLimit per periodRateRuns
railway.read-accountRead the account and the list of projects200060 per minuteruns freely
railway.read-runtimeRead services, deployments and statuses10000120 per minuteruns freely
railway.read-logsRead the logs of a deployment500060 per minuteruns freely
railway[dev].read-variables50030 per minuteruns freely
railway[preview].read-variables50030 per minuteruns freely
railway[staging].read-variables50030 per minuteruns freely
railway[prod].read-variables505 per minuteruns freely
railway[dev].deploy50010 per minuteruns freely
railway[preview].deploy50010 per minuteruns freely
railway[staging].deploy50010 per minuteruns freely
railway[prod].deploy505 per minuteask me first
railway[dev].upsert-variable50030 per minuteruns freely
railway[preview].upsert-variable50030 per minuteruns freely
railway[staging].upsert-variable50030 per minuteruns freely
railway[prod].upsert-variable505 per minuteask me first
railway.bulk-variables-replaceReplace every environment variable in bulk (replace=true)51 per minuteask me first
railway.create-projectCreate a new Railway project51 per minuteask me first

Tools

ToolWhat it does
railway__whoamiRead who the account is
railway__list-projectsList projects
railway__create-projectCreate a project
railway__list-servicesList services and environments
railway__list-deploymentsList deployments
railway__get-statusRead the deployment status
railway__get-logsRead logs
railway__redeployRedeploy a service
railway__accept-deployCommit staged changes and deploy
railway__railway-agentAsk Railway's agent to act
railway__list-variablesList environment variables
railway__upsert-variableSet an environment variable
railway__upsert-variablesSet several environment variables
railway__delete-variableDelete an environment variable

Health

Health: not enough reports yet. A plugin version is deemed validated by the community with at least 200 reports and 90 % of them successful, over the last 90 days, as reported by the instances whose operators turned community telemetry on. It is a community signal, not a security guarantee.

Last changed 2026-10-16. This page as Markdown: /plugins/railway.md