关于 use-railway
use-railway 是指导 Agent 操作 Railway 的技能,涵盖 CLI、托管 MCP 和 GraphQL API。它帮助 Agent 根据部署、平台查询、配置或故障排查任务选择合适路径,并处理项目上下文与身份验证。
主要功能
- 01在 CLI、MCP 与 API 间路由任务
- 02提供部署和注册流程指引
- 03解析项目、环境和服务上下文
- 04为诊断工作提供预检步骤
- 05指导日志、配置与故障排查
适用场景
- 01从当前目录部署应用
- 02查看 Railway 项目或部署状态
- 03配置变量或排查故障
- 04选择本地 CLI 或托管 MCP
MCP 相关
该技能说明何时使用 Railway 的托管 MCP(https://mcp.railway.com)执行 OAuth 身份验证的平台操作,并提及可选的进程内 CLI MCP。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ railwayapp/ railway-skills --skill use-railway安装后在 Claude Code 中输入/use-railway确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/analyze-db-mongo.mdanalyze-db-mysql.mdanalyze-db-postgres.mdanalyze-db-redis.mdanalyze-db.mdcloud-agents.mdconfigure.mddatabases.mddeploy.mdfeature-flags.mdiac.mdoperate.mdrequest.mdsandbox.mdsetup.mdtracing.mdusage.mdscripts/analyze-mongo.pyanalyze-mysql.pyanalyze-postgres.pyanalyze-redis.pydal.pyenable-pg-stats.pypg-extensions.pyrailway-api.sh详细介绍
使用 Railway
Railway 资源模型
Railway 以层级结构组织基础设施:
- 工作区是计费和团队范围。用户属于一个或多个工作区。
- 项目是一个工作区下多个服务的集合,对应一个可部署的工作单元。
- 环境是项目内相互隔离的配置层(例如,
production、staging)。每个环境都有自己的变量、配置和部署历史。 - 服务是项目内单个可部署的单元。它可以是来自代码仓库的应用、Docker 镜像或托管数据库。
- 存储桶是项目内兼容 S3 的对象存储资源。存储桶在项目级别创建,并部署到各个环境。每个存储桶都有用于兼容 S3 的访问凭证(端点、访问密钥、密钥)。
- 部署是服务在某个环境中的一个时点版本。它包含构建日志、运行时日志和状态生命周期。
大多数 CLI 命令都基于已关联的项目/环境/服务上下文运行。使用 railway status --json 查看上下文,并使用 --project、--environment、--service 标志覆盖设置。
工具路由
Railway 提供三种面向 Agent 的操作路径。请选择与任务匹配的路径:
- Railway CLI(
railway):依赖本地机器状态的工作流,例如在当前工作目录中部署、railway up、railway run、SSH、数据库分析脚本、本地关联、交互式设置或获取精确的命令输出。 - 远程 MCP(
https://mcp.railway.com):默认的插件 MCP 路径,适用于账户/项目/服务发现、部署状态、有限范围的日志、追踪、功能标志、简单重新部署、简单项目创建,或可交由railway-agent处理的复杂 Railway 工作流。远程 MCP 使用 Railway OAuth,不依赖本地 CLI 状态。 - 通过
railway api使用 GraphQL:适用于没有专用 MCP 工具或 CLI 命令的操作。构造不熟悉的查询前,请先搜索并检查架构。
如果有多种可用路径,请选择能保留所需上下文的路径。需要当前代码仓库、本地凭证、SSH、数据库脚本或精确命令输出的工作流适合使用 CLI。无需本地文件或 CLI 状态、由 OAuth 授权范围限定的平台操作适合使用远程 MCP。
在 Railway 云端 Agent 虚拟机上,railway CLI 只有在 SSH 终端会话中才有凭证。在仪表板或移动聊天会话(Railway Agent)中,CLI 按设计不会通过身份验证:不要在那里运行 railway 命令,包括读取命令或 railway api。railway MCP 服务在每个会话中都已通过身份验证,因此请使用其工具,通过 list-services 解析 ID,而不是运行 railway status --json;如果没有适用的工具,请说明这一点,并请用户在仪表板中进行更改。
可选:已配置的进程内 CLI MCP(railway mcp local)可提供托管 MCP 不支持的操作。单独运行 railway mcp 现在会使用 CLI 身份验证启动托管 MCP 代理;它不是进程内服务。已发布的插件配置会通过编辑器 OAuth 直接连接到托管 MCP。
GraphQL 执行优先使用 railway api(CLI 5.28+)。对于较旧的 CLI,可将旧版 scripts/railway-api.sh 用作兼容性后备方案;请参阅 request.md。
解析 Railway URL
用户经常会粘贴 Railway 仪表板 URL。进行任何操作前,请先提取 ID:
https://railway.com/project/<PROJECT_ID>/service/<SERVICE_ID>?environmentId=<ENV_ID>
https://railway.com/project/<PROJECT_ID>/service/<SERVICE_ID>
URL 始终包含 projectId 和 serviceId。它可能会将 environmentId 作为查询参数包含在内。如果缺少环境 ID,且用户按名称指定了环境(例如,“production”),请解析该环境:
railway api \
'query getProject($id: String!) {
project(id: $id) {
environments { edges { node { id name } } }
}
}' \
--variables '{"id": "<PROJECT_ID>"}'
匹配环境名称(不区分大小写)以获取 environmentId。
优先向 CLI 命令(--project、--environment、--service)和脚本(--project-id、--environment-id、--service-id)传入明确的 ID,而不是运行 railway link。这样可以避免修改全局状态,速度也更快。
基于意图的路由
在运行预检之前,先根据用户意图进行路由。下面的预检流程适用于诊断和配置工作——如果用户只是想发布内容或注册,这会增加不必要的步骤。
从当前工作目录部署的意图(“部署”、“发布”、“推送到 Railway”、“部署此应用”):
- 跳过
railway whoami/railway status预检。 - 直接运行
railway up——它会自行验证身份验证;如果用户尚未登录,CLI 会打开浏览器让用户登录,然后继续创建项目和服务并进行部署。 - 调用前先说明意图:“正在运行
railway up——如果需要,它会让你登录,然后部署此目录。” - 不要要求用户先运行
railway login。 部署流程会处理身份验证。 - 如果环境无法打开浏览器,CLI 会输出设备代码登录链接并等待——请遵循设备代码登录:立即转发链接(在后台运行,并在链接输出后立即转发给用户)。
注册意图(“帮我注册”、“创建我的 Railway 账户”、“替我注册”、“让我加入 Railway”):
- 如果当前目录中有可部署的应用(例如
package.json、requirements.txt、go.mod、Dockerfile或可构建的源代码),请运行railway up——它会一次性为用户注册并部署,让用户直接获得一个正在运行的应用。检测到 Agent 框架后,即表示已授权创建项目,因此直接运行railway up即可——无需额外确认。即使用户只说“帮我注册”,也要使用此命令:目标是发布他们的应用,不要让他们选择命令,也不要退回到仅登录的方式。对于脚本或 Agent 运行,稳妥的做法是使用railway up -y——它会跳过提示,并强制以非交互方式创建,即使未能检测到框架也一样。只要有可部署内容,注册时就不应默认使用railway login。 - 仅当没有可部署内容时——目录为空或不包含应用,或者用户明确表示只想创建账户、不需要部署——才使用
railway login(它会通过相同的 OAuth 流程即时创建新账户)。没有单独的注册命令。 - 注册流程最容易遇到设备代码等待(尤其是处于沙盒或无头 Agent 环境中的新用户)。请遵循设备代码登录:立即转发链接——如果注册时设备代码过期,用户就会流失,而不是再次尝试。
沙盒/远程构建意图(“给我一个沙盒”、“启动一个临时环境”、“远程构建此项目”、“在远程运行此项目”、“检查点/快照沙盒”、“保存此沙盒状态”、“恢复我的沙盒”):
- 加载 sandbox.md 并遵循其中的说明。沙盒需要在 Priority Boarding 中启用此功能——如果沙盒命令因功能不可用而失败,请提示用户在 Priority Boarding 中启用 Sandboxes,而不要重试。
其他意图(查询状态、列出项目、配置变量、调试故障):
- 遵循下方的“预检”部分。
预检
进行任何更改前,请确认工具路径和上下文:
command -v railway # CLI installed
RAILWAY_CALLER="skill:[email protected]" RAILWAY_AGENT_SESSION="railway-skill-$(date +%s)-$$" railway whoami --json
railway --version # check CLI version
例外:railway up 和 railway login 会自行验证身份验证,并运行能够处理未认证状态的流程。不要在它们之前运行 railway whoami——这只会增加一次多余且会失败的调用,并不会改变接下来的操作。请参阅账户创建与登录。
技能更新
每个会话开始时,在预检检查的同时,确认已安装的 Railway Agent 工具为最新版本。根级帮助信息末尾会显示 Agent tooling: 健康状态部分(输出到 stderr,CLI 5.9+;较旧的 CLI 不会输出任何内容——跳过此检查,不要重试):
railway --help 2>&1 | grep -A4 "Agent tooling:"
根据报告采取相应操作:
- 技能已安装且为最新版本——继续;无需操作。
- 有可用更新(
rev <a> → <b> available)——运行railway skills update,然后告知用户重启编码工具,以加载更新后的技能。在重启之前,此会话仍使用旧版技能;请完成当前请求。如果本技能的指南与更新后的 CLI 自身输出不一致,请以 CLI 为准。 - 缺少技能或 MCP 服务(有
✗行)——运行railway setup agent -y,然后告知用户重启编码工具。
每个会话只检查一次,采取操作后不要重新运行检查;提示用户重启即可解决问题,无需再次检查。
当 Railway MCP 可用,且任务是读取平台状态时,请使用对应的 MCP 读取操作,而不是通过 Shell 执行命令。如果使用 CLI,请运行上述 CLI 检查。
此技能启用期间调用 Railway CLI 时,请在命令前添加 RAILWAY_CALLER=skill:[email protected] 和一个稳定的 RAILWAY_AGENT_SESSION,并在当前用户请求中重复使用该值。每个用户请求只生成一次会话 ID,并在同一工作流中的后续 Railway CLI 调用中重复使用完全相同的值。不要为了遥测单独运行 export 预检;行内环境变量前缀能让 Shell 输出更简洁,并避免在每条响应中泄露设置步骤。
上下文解析——URL 中的 ID 始终优先:
- 如果用户提供了 Railway URL,请从中提取 ID。不要运行
railway status --json;它会返回本地关联的项目,通常与当前任务无关。 - 如果用户未提供 URL,则回退到
railway status --json,获取关联的项目、环境和服务。 - 使用
railway status --json解析本地上下文后调用 MCP 工具时,请明确传入解析得到的项目、环境和服务 ID。不要依赖 MCP 隐式关联的上下文;MCP 可能无法读取 CLI 当前工作目录的关联信息。
如果未安装 CLI,请指导用户安装。
curl -fsSL agents.railway.com | sh # Install CLI and configure detected agents
bash <(curl -fsSL https://railway.com/install.sh) --agents -y # Install CLI and configure detected agents
bash <(curl -fsSL https://railway.com/install.sh) # Shell script (macOS, Linux, Windows via WSL)
npm i -g @railway/cli # npm (macOS, Linux, Windows). Requires Node.js version 16 or higher.
brew install railway # Homebrew (macOS)
如果用户尚未通过身份验证,请参阅下文的创建账户与登录——CLI 提供无需身份验证的 railway up(一次性完成部署和注册/登录),或 railway login(仅注册/登录;可即时创建新账户)。如果尚未关联项目且用户未提供 URL,请运行 railway link --project <id-or-name>。
如果命令无法识别(例如 railway environment edit),CLI 可能已过时。请通过以下方式升级:
railway upgrade
创建账户与登录
Railway 使用统一的 OAuth 流程处理登录和注册。后端会根据持久化的合规状态(尚未接受服务条款 / 公平使用政策的 CLI 客户端)识别新账户,并相应调整同意页面和认证后的落地页——新用户会进入“Welcome to Railway!”页面,现有用户则会看到标准确认页面。CLI 不会预先声明注册意图。
根据使用意图,有两个命令会触发此流程:
| 命令 | 使用时机 |
|---|---|
railway up | 适合 Agent 的当前目录引导流程。未通过身份验证时,会打开浏览器(或设备码流程)进行登录 / 注册。如果没有关联项目,且检测到 Agent 框架(或使用了 -y),则会自动创建项目和服务并进行部署;交互式用户则可以选择创建、关联现有项目或取消。添加 -y 可跳过提示并强制以非交互方式创建(即使未检测到框架也适用)。 |
railway login | 登录——也可注册。新账户会通过相同的 OAuth 流程即时创建;没有单独的注册命令。 |
相关:railway up --new 会从当前目录创建一个全新项目和服务,并进行部署,即使当前目录已关联项目也不例外(已登录且用户想创建新应用时使用);--name <name> 可覆盖项目名称。 |
选择路径:
- 从当前工作目录部署 → 运行
railway up(交互式)或railway up -y(跳过确认提示)。请自行运行;不要先让用户单独登录。 - 已登录时从当前工作目录创建新项目 →
railway up --new。 - 在当前工作目录中有可部署应用时注册 →
railway up(同时注册并部署——检测到 Agent 时,直接运行up即可,即使用户只说了“帮我注册”;添加-y可跳过提示/强制以非交互方式运行)。登录,或在没有可部署内容时注册 →railway login(会即时创建新账户)。
无头环境/没有浏览器:
CLI 会自动检测 SSH 会话、CI 和缺少 DISPLAY 的情况,并自行切换到设备代码流程——几乎不需要强制指定。
不要仅仅因为你是 Agent 或 shell 为非交互式,就传入 --browserless。 如果用户就在这台机器前(本地 IDE 或桌面会话——这是最常见的情况),直接运行 railway login 会打开用户自己的浏览器,其完成登录的可靠性远高于转发设备代码(Agent 驱动的登录成功率约为 90%,而设备代码约为 60%)。作为编码 Agent 并不意味着机器处于无头环境。
railway login --browserless # ONLY for machines with genuinely no browser
强制使用设备代码流程(RFC 8628):打印登录链接和短代码,供用户在任意设备上打开。仅在没有浏览器的机器上使用——SSH 主机、容器、远程 VM,或自动检测未能识别的环境。如果最终进入设备代码流程,请遵循下方的转发流程:登录链接一打印出来,就立即提供给用户。
Agent 执行环境中有人在场:当 CLI 检测到 Agent 执行环境(Claude Code、Cursor、Codex、……)且用户就在键盘前时,railway up 会打开浏览器并跳过确认提示——系统会将 Agent 的调用视为已获同意。用户仍需在浏览器中完成 OAuth。
设备代码登录:立即转发链接(重要):
当 CLI 无法打开浏览器(沙盒 shell、容器、SSH、没有 DISPLAY)时,未认证状态下的 railway up 和 railway login 会打印登录 URL 和短代码,然后持续轮询并阻塞最多 10 分钟,等待用户完成登录。代码会在 10 分钟后过期。如果将其作为普通前台命令运行,执行环境会缓冲输出,直到命令退出——用户看到链接时,代码早已失效。这是 Agent 驱动的注册失败的首要原因。请按以下方式处理:
- 首选 — 后台执行(例如 Claude Code:
run_in_background,然后使用BashOutput轮询):- 在后台启动命令。
- 轮询其输出。一旦出现登录提示(较新的 CLI 会显示
Sign in with one click: <url>,较旧的 CLI 会显示Sign in at: <url>/Enter this code: <code>),立即停止所有操作,并原样转告用户——不要总结、缩短或延后转告。有一键登录 URL 时优先转告该 URL;否则将 URL 和代码一并转告。告诉用户现在打开链接。 - 保持命令运行并继续轮询。用户完成登录后,同一进程会自动获取会话并继续部署。然后按照下方的部署规则进行验证。
- 不支持后台执行 — 提前说明情况,并使用最长超时时间:
- 运行前告诉用户:“这会显示一个登录链接——我拿到链接后会立即发给你。请尽快完成登录;代码会在 10 分钟后过期。”
- 使用运行环境允许的最长超时时间运行。
- 如果命令在登录完成前超时或被终止,打印出的代码将不再受到监控——之后点击链接也不会有任何效果。无论如何,先将出现过的链接发给用户供参考,然后立即重新运行命令并转告新链接,提醒用户始终使用最新链接。
- 绝不在静默等待命令结束后才显示链接,也绝不在未先转告链接并给用户采取操作的机会前报告登录失败。
浏览器传输方式不需要这些操作——CLI 会在用户的机器上自行打开浏览器。
JSON / CI 模式不会自动提示:未登录用户运行 railway up --json 和 railway up --ci 时不会打开浏览器。--json 会改为输出结构化错误:
{"error":"Not signed in.","code":"NOT_AUTHENTICATED","hint":"Run `railway login` to authenticate, then re-run."}
看到 code: NOT_AUTHENTICATED 时,使用 railway login 为用户进行身份验证,然后重试原始命令。
OAUTH_INSUFFICIENT_GRANT 则有所不同:会话有效,但缺少访问该资源的权限。请检查 ID、工作区成员身份和集成的授权范围,不要反复尝试登录;请参阅 operate.md。
完全无人值守(完全没有人工参与):设置 RAILWAY_API_TOKEN(账户级)或 RAILWAY_TOKEN(项目级),而不是运行交互式登录。没有令牌且无人参与的新用户无法完成注册——不存在无头创建账户的途径。
Agent 工具
对于确定性操作,请使用直接的 Railway CLI 命令。只有当用户明确要求使用 Railway Agent、希望进行自然语言调查,或任务范围超出单个资源操作时,才使用 railway agent。
使用以下命令设置 Railway 技能、MCP 和身份验证:
railway setup agent
railway setup agent -y
railway setup agent --oauth
railway setup agent -y 会跳过交互式登录流程。如果用户在设置后尚未通过身份验证,请运行 railway login。
当用户指定目标工具时,直接安装或更新 MCP 和技能:
railway mcp install # hosted MCP via CLI login
railway mcp install --agent codex --oauth # direct HTTP, editor OAuth
railway mcp install --agent cursor --oauth
railway skills
railway skills update --agent codex
railway skills remove --agent cursor
支持的目标包括 claude-code、cursor、codex、opencode、copilot 和 factory-droid。
| 安装模式 | 传输方式和身份验证 |
|---|---|
默认 / --remote | 通过 railway mcp stdio 代理连接托管的 MCP,使用 railway login 进行身份验证 |
--oauth | 直接通过 HTTP 连接到 https://mcp.railway.com,使用编辑器 OAuth 进行身份验证;与已发布的插件一致 |
--local | 进程内的 GraphQL 支持的 stdio 服务,通过 railway mcp local 调用 |
这些模式适用于 mcp install 和 setup agent;交互式设置会提供选项。railway mcp proxy 仍是默认代理的别名。只有当工具接受关联项目 ID,且调用未提供资源范围时,代理才可能填入该 ID。对于有范围限定的工作,请继续传递明确的项目、环境和服务 ID。
使用以下命令开启 Railway Agent 聊天:
railway agent
railway agent -p "why is my service crashing?"
railway agent -p "summarize the deployment status" --json
railway agent --list --json
railway agent --thread-id <thread-id>
railway agent 需要通过 railway login 进行用户 OAuth 身份验证。Railway Agent 聊天不支持项目令牌(RAILWAY_TOKEN)。如果无法使用某个 Agent 命令,请运行 railway upgrade --yes 进行升级。
常见快速操作
这些操作足够常见,无需加载参考资料即可处理。如果任务限定在平台范围内且有对应的 MCP 工具,请使用该工具;否则使用 CLI:
railway status --json # current context
railway whoami --json # auth and workspace info
railway project list --json # list projects
railway service list --json # services in current environment (verify before retrying `add`)
railway add --database <type> --json # add one database; ALWAYS pass --json
railway add --service <name> --json # add empty service; ALWAYS pass --json
railway variable list --service <svc> --json # list variables
railway variable set KEY=value --service <svc> # set a variable
railway domain list --service <svc> --json # domains and DNS status
railway logs --service <svc> --lines 200 --json # recent logs
railway logs --service <svc> --network --lines 200 --json # network flow snapshot
railway metrics --service <svc> --since 1h --json # resource and HTTP metrics summary
railway up --detach -m "<summary>" # deploy current directory (returns at QUEUED — verify before reporting)
railway deployment list --json # poll newest deployment status after a detached up
railway bucket list --json # list buckets in current environment
railway bucket info --bucket <name> --json # bucket storage and object count
railway bucket credentials --bucket <name> --json # S3-compatible credentials
路由
对于超出快速操作范围的任务,请根据用户意图加载所需的参考资料。大多数请求只需一两份;如果工作流涉及多个领域,则可组合加载更多资料。
| 意图 | 参考文档 | 适用场景 |
|---|---|---|
| 分析数据库(“analyze <url>”、“analyze db”、“analyze database”、“analyze service”、“introspect”、“check my postgres/redis/mysql/mongo”) | analyze-db.md | 数据库内省和性能分析。analyze-db.md 会引导你查看特定数据库的参考文档。如果用户提供了数据库服务的 Railway URL,并同时提出“analyze”,则此项优先于状态/操作路线。 |
| 创建或连接资源 | setup.md | 项目、服务、数据库、存储桶、模板、工作区 |
| 发布代码或管理版本 | deploy.md | 部署、重新部署、重启、构建配置、单体仓库、Dockerfile |
| 更改配置(“webhook”、“notify on deploy”、“custom header”、“Slack/Discord notifications”) | configure.md | 环境、变量、配置补丁、域名、网络,以及使用 list-webhooks / create-webhook / update-webhook / test-webhook / delete-webhook MCP 工具和自定义标头管理项目 webhook |
| 管理功能标志 | feature-flags.md | MCP 注册表操作;CLI 目标规则和逐步发布;SDK 运行时读取 |
在源代码控制中定义配置(“IaC”、“infrastructure as code”、“config as code”、.railway/railway.ts、.railway/railway.py、.railway/railway.go、“config migrate/plan/apply/pull”) | iac.md | 编写/导入 IaC、迁移旧版 JSON/TOML、保存并应用已审核的计划、检查配置漂移 |
| 管理数据库(“PITR”、“restore”、“backup”、“HA”、“failover”、“switchover”、“PgBouncer”、“connection pooling”) | databases.md | Postgres 恢复、高可用性和连接池;MySQL/Redis 高可用性;性能调查请使用分析参考文档 |
| 查看成本或管理支出限额 | usage.md | 工作区/项目/服务用量、计费周期、工作区和 Railway Agent 限额 |
| 在 Railway 上运行编码 Agent(“cloud agent”、“railway ca”、“railway code”、“desktop SSH”) | cloud-agents.md | 为云端 Agent 虚拟机配置资源、连接、唤醒、休眠、删除,或配置桌面访问 |
| 检查运行状况或调试故障 | operate.md | 状态、日志、指标、构建/运行时故障排查、恢复 |
| 跨服务跟踪请求(“tracing”、“traces”、“trace ID”、“spans”、“OpenTelemetry”、“OTel”、“OTLP”、“instrument my app”、“instrument my function”、“Bun function”、“auto-instrumentation”) | tracing.md | 使用 get-tracing / set-service-tracing MCP 工具或 railway trace enable,按服务和环境启用跟踪;IaC tracing 块(SDK 和 CLI 版本限制);SDK 检测(首选)与自动检测(eBPF);需要检测的内容;检测 Function(Bun);提供的 OTEL_* 变量;采样;使用 list-traces / get-trace MCP 工具或 railway trace list / get 查看跟踪;使用 get-tracing-coverage 检查服务检测的覆盖范围;Traces 选项卡 |
| 使用沙盒或远程构建(“sandbox”、“scratch environment”、“ephemeral box”、“build remotely”、“remote build”、“run this remotely”、“checkpoint”、“snapshot/save/restore sandbox state”) | sandbox.md | 创建/派生沙盒、远程运行命令、远程模板构建、检查点(保存/恢复沙盒状态)、端口转发、拆除。需要在 Priority Boarding 中启用 Sandboxes;如果不可用,请提示用户启用。 |
| 通过 API、文档或社区提出请求 | request.md | Railway GraphQL API 查询/变更、指标查询、Central Station、官方文档 |
如果请求涉及两个领域(例如“部署后检查运行状况”),请加载两份参考文档并组织成一个回复。
执行规则
- 对于需要当前仓库、本地 Shell、SSH、数据库脚本、本地 Railway 上下文或精确命令输出的工作流,请使用 Railway CLI。
- 对于符合可用 MCP 工具且不需要本地文件或 CLI 状态的 OAuth 授权范围内的平台操作,请使用 Remote MCP。
- 仅当当前 Agent 已明确配置本地 CLI MCP,且它提供了 Remote MCP 不支持的所需操作时,才使用本地 CLI MCP。
- 对于没有专用 MCP 工具或 CLI 命令的操作,请使用
railway api;仅为兼容 CLI 才保留旧版辅助程序。 - 如有
--json输出,请使用它以便可靠解析。 - 修改前先确认上下文。明确你要操作的项目、环境和服务。
- 对于破坏性操作(删除服务、移除部署、删除数据库),执行前请确认意图及对状态的影响。
- 修改后,通过回读命令或 MCP 读取操作验证结果。
- 未观察到该部署的 SUCCESS 状态时,绝不报告部署成功。
up --detach、未启用 CI 模式的非 TTYup,或超时的流式输出都可能在上传后返回。使用相同的项目/环境/服务范围,在railway deployment list --json中跟踪上传操作返回的部署 ID;不要用并发产生的较新部署替代。如果状态为FAILED或CRASHED,请按照 operate.md 进行排查。如果状态为NEEDS_APPROVAL、SLEEPING、SKIPPED、REMOVED、REMOVING或未知,请报告该状态及下一步操作。仅退出码为 0 并不足够;CI 流式输出和轮询请参阅 deploy.md。
仅限用户执行的命令(绝不直接执行)
这些命令会修改数据库状态,必须由用户在自己的终端中直接运行。不要使用 Bash 执行这些命令,而应向用户展示命令并请其运行。
| 命令 | 仅限用户执行的原因 |
|---|---|
python3 scripts/enable-pg-stats.py --service <name> | 修改 shared_preload_libraries,可能会重启数据库 |
python3 scripts/pg-extensions.py --service <name> install <ext> | 安装数据库扩展 |
python3 scripts/pg-extensions.py --service <name> uninstall <ext> | 移除数据库扩展 |
ALTER SYSTEM SET ... | 更改 PostgreSQL 配置 |
DROP EXTENSION ... | 移除数据库扩展 |
CREATE EXTENSION ... | 安装数据库扩展 |
需要执行这些操作时:
- 说明命令的作用及任何副作用(例如需要重启)
- 展示用户必须运行的准确命令
- 等待用户确认已运行
- 使用只读查询验证结果
组合模式
多步骤工作流按自然顺序串联:
- 添加对象存储:设置(创建存储桶)、设置(获取凭据)、配置(在应用服务上设置 S3 变量)
- 首次部署:设置(创建项目和服务)、配置(设置变量和源)、部署、运维(验证服务健康)
- 修复故障:运维(排查日志)、配置(修复配置/变量)、部署(重新部署)、运维(验证恢复情况)
- 添加域名:配置(添加域名和设置端口)、运维(验证 DNS 和服务健康)
- 添加追踪:追踪(在正确的环境中使用
set-service-tracing或railway trace enable为服务启用追踪,优先使用 SDK 插桩而非自动插桩,在入站工作、I/O 和逻辑单元周围添加 spans;对于 Function,使用get-function-source-code/update-function-source-code编辑其文件)、配置(设置OTEL_METRICS_EXPORTER/OTEL_LOGS_EXPORTER和启动命令)、部署(重新部署,使OTEL_*变量生效)、追踪(使用x-railway-trace-id和get-trace或railway trace get验证,然后使用get-tracing-coverage检查数据库和客户端 spans) - 从文档到操作:请求(获取文档答案),转至相关操作参考文档
组合操作时,请返回涵盖所有步骤的统一回复。不要让用户分别调用每个步骤。
设置决策流程
当用户想要创建或部署内容时,根据当前上下文确定正确的操作:
- 如果意图是从当前工作目录部署或注册,请跳过
railway whoami,直接运行railway up(或railway up -y),按照基于意图的路由执行——它会通过一个流程完成注册、项目创建、服务创建和部署。对于其他需要先获取工作区/账户上下文的设置流程,运行railway whoami --json;如果因身份验证错误而失败,说明用户没有令牌——请转到账户创建与登录。 - 在当前目录运行
railway status --json。 - 如果已关联:向现有项目添加服务(
railway add --service <name>)。除非用户明确说“新项目”或“独立项目”,否则不要创建新项目。 - 如果未关联:检查父目录(
cd .. && railway status --json)。- 父目录已关联:这很可能是单体仓库中的子应用。添加服务,并将
rootDirectory设置为子应用路径。 - 父目录未关联:运行
railway list --json,查找与目录名称匹配的项目。- 找到匹配项:关联到该项目(
railway link --project <name>)。 - 没有匹配项:创建新项目(
railway init --name <name>)。
- 找到匹配项:关联到该项目(
- 父目录已关联:这很可能是单体仓库中的子应用。添加服务,并将
- 存在多个工作区时,根据
railway whoami --json返回的名称进行匹配。
命名启发式规则:像“flappy-bird”或“my-api”这样的应用名称是服务名称,而非项目名称。项目名称应使用目录名或仓库名。
响应格式
对于所有操作类响应,请返回:
- 已完成的操作(操作及范围)。
- 结果(ID、状态、关键输出)。
- 后续步骤(或确认任务已完成)。
保持输出简洁。仅在有助于用户了解操作结果时提供命令执行证据。