mcpField
U
use-railway

use-railway

github.com/railwayapp云与 DevOps3388.9k 次安装2 周前更新
代码仓库

关于 use-railway

use-railway 是指导 Agent 操作 Railway 的技能,涵盖 CLI、托管 MCP 和 GraphQL API。它帮助 Agent 根据部署、平台查询、配置或故障排查任务选择合适路径,并处理项目上下文与身份验证。

主要功能

  1. 01在 CLI、MCP 与 API 间路由任务
  2. 02提供部署和注册流程指引
  3. 03解析项目、环境和服务上下文
  4. 04为诊断工作提供预检步骤
  5. 05指导日志、配置与故障排查

适用场景

  1. 01从当前目录部署应用
  2. 02查看 Railway 项目或部署状态
  3. 03配置变量或排查故障
  4. 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.md
analyze-db-mysql.md
analyze-db-postgres.md
analyze-db-redis.md
analyze-db.md
cloud-agents.md
configure.md
databases.md
deploy.md
feature-flags.md
iac.md
operate.md
request.md
sandbox.md
setup.md
tracing.md
usage.md
scripts/
analyze-mongo.py
analyze-mysql.py
analyze-postgres.py
analyze-redis.py
dal.py
enable-pg-stats.py
pg-extensions.py
railway-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 驱动的注册失败的首要原因。请按以下方式处理:

  1. 首选 — 后台执行(例如 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 和代码一并转告。告诉用户现在打开链接。
    • 保持命令运行并继续轮询。用户完成登录后,同一进程会自动获取会话并继续部署。然后按照下方的部署规则进行验证。
  2. 不支持后台执行 — 提前说明情况,并使用最长超时时间:
    • 运行前告诉用户:“这会显示一个登录链接——我拿到链接后会立即发给你。请尽快完成登录;代码会在 10 分钟后过期。”
    • 使用运行环境允许的最长超时时间运行。
    • 如果命令在登录完成前超时或被终止,打印出的代码将不再受到监控——之后点击链接也不会有任何效果。无论如何,先将出现过的链接发给用户供参考,然后立即重新运行命令并转告新链接,提醒用户始终使用最新链接。
  3. 绝不在静默等待命令结束后才显示链接,也绝不在未先转告链接并给用户采取操作的机会前报告登录失败。

浏览器传输方式不需要这些操作——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.mdMCP 注册表操作;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.mdPostgres 恢复、高可用性和连接池;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.mdRailway GraphQL API 查询/变更、指标查询、Central Station、官方文档

如果请求涉及两个领域(例如“部署后检查运行状况”),请加载两份参考文档并组织成一个回复。

执行规则

  1. 对于需要当前仓库、本地 Shell、SSH、数据库脚本、本地 Railway 上下文或精确命令输出的工作流,请使用 Railway CLI。
  2. 对于符合可用 MCP 工具且不需要本地文件或 CLI 状态的 OAuth 授权范围内的平台操作,请使用 Remote MCP。
  3. 仅当当前 Agent 已明确配置本地 CLI MCP,且它提供了 Remote MCP 不支持的所需操作时,才使用本地 CLI MCP。
  4. 对于没有专用 MCP 工具或 CLI 命令的操作,请使用 railway api;仅为兼容 CLI 才保留旧版辅助程序。
  5. 如有 --json 输出,请使用它以便可靠解析。
  6. 修改前先确认上下文。明确你要操作的项目、环境和服务。
  7. 对于破坏性操作(删除服务、移除部署、删除数据库),执行前请确认意图及对状态的影响。
  8. 修改后,通过回读命令或 MCP 读取操作验证结果。
  9. 未观察到该部署的 SUCCESS 状态时,绝不报告部署成功。 up --detach、未启用 CI 模式的非 TTY up,或超时的流式输出都可能在上传后返回。使用相同的项目/环境/服务范围,在 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 ...安装数据库扩展

需要执行这些操作时:

  1. 说明命令的作用及任何副作用(例如需要重启)
  2. 展示用户必须运行的准确命令
  3. 等待用户确认已运行
  4. 使用只读查询验证结果

组合模式

多步骤工作流按自然顺序串联:

  • 添加对象存储:设置(创建存储桶)、设置(获取凭据)、配置(在应用服务上设置 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)
  • 从文档到操作:请求(获取文档答案),转至相关操作参考文档

组合操作时,请返回涵盖所有步骤的统一回复。不要让用户分别调用每个步骤。

设置决策流程

当用户想要创建或部署内容时,根据当前上下文确定正确的操作:

  1. 如果意图是从当前工作目录部署或注册,请跳过 railway whoami,直接运行 railway up(或 railway up -y),按照基于意图的路由执行——它会通过一个流程完成注册、项目创建、服务创建和部署。对于其他需要先获取工作区/账户上下文的设置流程,运行 railway whoami --json;如果因身份验证错误而失败,说明用户没有令牌——请转到账户创建与登录。
  2. 在当前目录运行 railway status --json。
  3. 如果已关联:向现有项目添加服务(railway add --service <name>)。除非用户明确说“新项目”或“独立项目”,否则不要创建新项目。
  4. 如果未关联:检查父目录(cd .. && railway status --json)。
    • 父目录已关联:这很可能是单体仓库中的子应用。添加服务,并将 rootDirectory 设置为子应用路径。
    • 父目录未关联:运行 railway list --json,查找与目录名称匹配的项目。
      • 找到匹配项:关联到该项目(railway link --project <name>)。
      • 没有匹配项:创建新项目(railway init --name <name>)。
  5. 存在多个工作区时,根据 railway whoami --json 返回的名称进行匹配。

命名启发式规则:像“flappy-bird”或“my-api”这样的应用名称是服务名称,而非项目名称。项目名称应使用目录名或仓库名。

响应格式

对于所有操作类响应,请返回:

  1. 已完成的操作(操作及范围)。
  2. 结果(ID、状态、关键输出)。
  3. 后续步骤(或确认任务已完成)。

保持输出简洁。仅在有助于用户了解操作结果时提供命令执行证据。

评论

支持 Markdown