{
  "data": {
    "a": {
      "slug": "digitalocean-mcp",
      "name": "DigitalOcean MCP Server",
      "vendor": "DigitalOcean, LLC",
      "vendorUrl": "https://www.digitalocean.com",
      "kind": "mcp",
      "category": "infrastructure",
      "summary": "DigitalOcean's official MCP servers let an agent manage Droplets, App Platform apps, Kubernetes, managed databases, networking and other DigitalOcean resources. Each service has a hosted endpoint, and the same MIT server runs locally from npm.",
      "url": "https://www.anchorterminal.com/tools/digitalocean-mcp",
      "markdownUrl": "https://www.anchorterminal.com/tools/digitalocean-mcp.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/digitalocean-mcp.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/digitalocean-mcp.json",
      "repo": "https://github.com/digitalocean-labs/mcp-digitalocean",
      "license": "MIT for the server. The DigitalOcean platform it acts on is a proprietary service under DigitalOcean's Terms of Service Agreement",
      "transports": [
        "streamable-http",
        "stdio"
      ],
      "remoteUrl": "https://apps.mcp.digitalocean.com/mcp",
      "packages": [
        {
          "registry": "npm",
          "name": "@digitalocean/mcp"
        }
      ],
      "auth": "mixed",
      "authNotes": "OAuth or a DigitalOcean API token. With OAuth the client is given only the server URL, a person signs in to DigitalOcean in a browser, and the client receives a short-lived access token. The server's challenge names the scopes `read` and `write`, with cloud.digitalocean.com as the authorisation server. Otherwise a person creates a personal access token in the control panel and the client sends it as `Authorization: Bearer`. A token has an expiry and is Read Only, Full Access or limited to custom scopes chosen from about 170, bounded by the owner's team role. The documentation server needs no credential. The local server reads `DIGITALOCEAN_API_TOKEN`.",
      "pricing": "byo-plan",
      "pricingNotes": "The servers are free. Tools act on a DigitalOcean account and bill under its usage prices, which are public. Droplets start at $4 a month billed by the second, Kubernetes at $12, managed databases at $15, and App Platform, Functions and the container registry at $0. The documentation server works with no account. The pricing FAQ describes a card on the account and a free credit example of $5 for 90 days. Whether sign-up needs a payment method was not established (checked 2026-10-09).",
      "priceSummary": "Your plan",
      "where": "both",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the MCP docs, the repository or the pricing page. A Stablecoin Payment Addendum covers paying an account's bill in stablecoin through Stripe, which is not a machine payment protocol on the endpoints (checked 2026-10-09).",
        "endpoints": []
      },
      "toolCount": 377,
      "popularity": {
        "githubStars": 137,
        "npmWeekly": 6361,
        "pypiWeekly": null,
        "asOf": "2026-10-09"
      },
      "docsUrl": "https://docs.digitalocean.com/reference/mcp/",
      "llmsTxt": "https://docs.digitalocean.com/llms.txt",
      "capabilities": [
        "infra.cloud",
        "code.deploy",
        "db.admin",
        "compute.containers",
        "compute.serverless",
        "code.docs"
      ],
      "tags": [
        "official",
        "hosted",
        "open-source",
        "mcp",
        "oauth",
        "pat",
        "llms-txt",
        "status-page",
        "soc2",
        "bug-bounty",
        "npm"
      ],
      "lastRelease": "2026-10-07",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 60.6,
        "grade": "C",
        "agentReady": false,
        "rank": 503,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 6,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 67,
          "maintenance": 70,
          "payments": 33,
          "reliability": 62,
          "schema": 66,
          "security": 67,
          "transparency": 87
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-09"
        },
        "negative": -3,
        "negativeNotes": [
          "26 May 2026, still open on 9 October 2026. An issue reports that `db-cluster-list`, `db-cluster-get` and the database user tools return passwords in plaintext, so a lookup puts credentials in the model's context. The handlers at v1.2.0 return the API's object with no redaction. A token without `database:view_credentials` limits it. 3 points (https://github.com/digitalocean-labs/mcp-digitalocean/issues/372)."
        ],
        "verdict": "Every tool carries read-only, destructive and idempotent hints enforced by a test, and access can be narrowed with OAuth, expiring tokens and granular scopes. The server has no read-only mode, database tools return cluster objects unredacted, and DigitalOcean's status feed shows several long platform incidents since late July 2026.",
        "bestFor": "Agents that operate DigitalOcean accounts, across Droplets, App Platform, Kubernetes, databases, networking and the AI platform, with one endpoint a service.",
        "strengths": [
          "All tools carry read-only, destructive, idempotent and open-world hints plus a low, medium or high risk label, enforced by a test in CI.",
          "Tools are split across 22 hosted endpoints, and the local server takes `--services`, so a client loads only the services it needs.",
          "Hosted servers accept OAuth sign-in with short-lived tokens, or a personal access token with an expiry and granular custom scopes.",
          "Eight tagged releases between 23 July and 7 October 2026, with the npm package at the same version as the latest tag.",
          "DigitalOcean holds SOC 2 Type II, publishes a valid security.txt and runs a bug bounty on Intigriti."
        ],
        "weaknesses": [
          "No read-only mode on the server. A request for one has been open since 2 March 2026.",
          "`db-cluster-list` and `db-cluster-get` return the API's database object unredacted. An issue reporting plaintext passwords has been open since 26 May 2026.",
          "The status feed lists several long incidents since 24 July 2026, including the public API and control panel on 24 and 25 August.",
          "Many descriptions are one short phrase, such as \"Delete a droplet\", and argument names mix `ID`, `Page` and `per_page` styles.",
          "No DigitalOcean entry was found in the official MCP registry, and no changelog file or MCP release note was found."
        ],
        "agentNotes": [
          "Add only the service endpoints the task needs. Networking has 54 tools, evaluations 47 and Droplets 42.",
          "Pass `--services` to the local server. With no value it loads every service, about 377 tools.",
          "Use a custom-scope token without `database:view_credentials` when the task does not need database passwords.",
          "Use the `insights-alert-rule-*` tools. The `alert-policy-*` tools are marked deprecated and will be removed.",
          "Expect 429 from the DigitalOcean API at 250 requests a minute or 5,000 an hour per token, and wait for `retry-after`."
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 60.6
          }
        ],
        "editorialScores": {
          "ergonomics": 67,
          "maintenance": 70,
          "payments": 33,
          "reliability": 62,
          "schema": 66,
          "security": 67,
          "transparency": 74
        },
        "provenanceScore": 100
      },
      "connect": {
        "install": "npx @digitalocean/mcp --services apps,droplets",
        "claudeCode": "claude mcp add --transport http digitalocean-apps https://apps.mcp.digitalocean.com/mcp",
        "config": {
          "mcpServers": {
            "apps": {
              "headers": {
                "Authorization": "Bearer \u003cyour_api_token\u003e"
              },
              "url": "https://apps.mcp.digitalocean.com/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/infra.cloud",
        "tool": "https://letme.dev/digitalocean-mcp"
      },
      "sameCompany": [
        "digitalocean-spaces"
      ],
      "area": "developer",
      "unitPrices": [
        {
          "item": "Droplet, smallest",
          "unit": "month",
          "usd": 4,
          "note": "billed by the second"
        },
        {
          "item": "Kubernetes, starting price",
          "unit": "month",
          "usd": 12
        },
        {
          "item": "Managed database, starting price",
          "unit": "month",
          "usd": 15
        },
        {
          "item": "Spaces object storage, starting price",
          "unit": "month",
          "usd": 5
        },
        {
          "item": "Volumes block storage, starting price",
          "unit": "month",
          "usd": 10
        },
        {
          "item": "Load balancer, starting price",
          "unit": "month",
          "usd": 12
        },
        {
          "item": "App Platform, starting price",
          "unit": "month",
          "usd": 0
        }
      ],
      "provenance": {
        "legalEntity": "DigitalOcean, LLC",
        "domain": "digitalocean.com",
        "domainRegistered": "2000-04-12",
        "endpointOnVendorDomain": true,
        "terms": "https://www.digitalocean.com/legal/terms-of-service-agreement",
        "privacy": "https://www.digitalocean.com/legal/privacy-policy",
        "statusPage": "https://status.digitalocean.com",
        "changelog": "https://github.com/digitalocean-labs/mcp-digitalocean/releases",
        "securityTxt": "valid",
        "checked": "2026-10-09",
        "notes": [
          "The Terms of Service Agreement (last updated 22 August 2026) names DigitalOcean, LLC, 105 Edgeview Drive, Ste. 425, Broomfield, CO 80021, as the only DigitalOcean party, and incorporates the Acceptable Use Policy.",
          "The Privacy Policy (last updated 1 January 2025) says it does not apply to content customers process when using the services. The Data Processing Agreement of 6 February 2026 covers that.",
          "The hosted servers answer at \u003cservice\u003e.mcp.digitalocean.com, subdomains of digitalocean.com. The Knowledge Bases endpoint the docs list is on do-ai.run.",
          "www.digitalocean.com/.well-known/security.txt names security@digitalocean.com and the Intigriti programme and expires on 5 April 2028.",
          "RDAP for digitalocean.com gives a registration date of 2000-04-12.",
          "The changelog link is the repository's releases page. Release dates here were read from the git tags."
        ],
        "score": 100
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/digitalocean-mcp.json",
      "live": {
        "slug": "digitalocean-mcp",
        "probe": {
          "target": "https://apps.mcp.digitalocean.com/mcp",
          "method": "mcp-initialize",
          "lastAt": "2026-10-10T02:54:53.58033033Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 124,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 147,
          "p95ms24h": 232,
          "samples24h": 115,
          "samples30d": 115,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 85,
              "ok": 85
            },
            {
              "date": "2026-10-10",
              "probes": 30,
              "ok": 30
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.digitalocean.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-10T02:50:12.889966864Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "digitalocean-labs/mcp-digitalocean",
            "version": "v1.3.0",
            "released": "2026-10-09",
            "seenAt": "2026-10-09T16:49:51.841223634Z"
          },
          {
            "registry": "npm",
            "name": "@digitalocean/mcp",
            "version": "1.3.0",
            "seenAt": "2026-10-09T16:49:51.343749713Z"
          }
        ],
        "githubStars": 137,
        "npmWeekly": 6361,
        "pages": [
          {
            "url": "https://www.digitalocean.com/legal/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-09T18:49:33.241909958Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "e56c84134993"
          },
          {
            "url": "https://www.digitalocean.com/legal/terms-of-service-agreement",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:49:35.83154664Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "000e9050bf44"
          }
        ],
        "mcpTools": {
          "url": "https://apps.mcp.digitalocean.com/mcp",
          "checkedAt": "2026-10-09T21:40:21.095323465Z",
          "status": "auth",
          "note": "asks for credentials before listing its tools",
          "changedAt": "2026-10-09T21:40:21.095323465Z"
        },
        "updatedAt": "2026-10-10T02:54:53.58033033Z"
      }
    },
    "answer": "DigitalOcean MCP Server scores 60.6 (C) on agent readiness against Railway MCP Server's 56.7 (C), and leads in 5 of 7 scored categories. Railway MCP Server leads on payments \u0026 pricing and maintenance \u0026 community.",
    "b": {
      "slug": "railway-mcp-server",
      "name": "Railway MCP Server",
      "vendor": "Railway Corporation",
      "vendorUrl": "https://railway.com",
      "kind": "mcp",
      "category": "infrastructure",
      "summary": "Railway's official MCP server is hosted at mcp.railway.com. It lets an agent list and create projects, redeploy services, manage feature flags and hand multi-step work to Railway's own agent, through OAuth or the Railway CLI.",
      "url": "https://www.anchorterminal.com/tools/railway-mcp-server",
      "markdownUrl": "https://www.anchorterminal.com/tools/railway-mcp-server.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/railway-mcp-server.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/railway-mcp-server.json",
      "repo": "https://github.com/railwayapp/cli",
      "license": "Proprietary hosted server under Railway's Terms of Service. The Railway CLI, which carries the stdio proxy and a separate local MCP server, is MIT",
      "transports": [
        "streamable-http",
        "stdio"
      ],
      "remoteUrl": "https://mcp.railway.com",
      "packages": [
        {
          "registry": "npm",
          "name": "@railway/cli"
        }
      ],
      "auth": "oauth",
      "authNotes": "OAuth, either handled by the MCP client or reused from a `railway login` session through the CLI. An unauthenticated request answers 401 with a pointer to the protected-resource metadata, which names the authorisation server at backboard.railway.com and one scope, `workspace:member`. The authorisation server supports the authorisation code grant with PKCE (S256), the device code grant, refresh tokens and dynamic client registration. On the consent screen a person picks which workspaces and projects the client reaches. Access tokens last one hour and refresh tokens rotate. Grants are revoked in the dashboard, and there is no revocation endpoint. Project tokens are refused.",
      "pricing": "byo-plan",
      "pricingNotes": "The server itself has no charge. Tools act on a Railway workspace and bill under its plan. A new account gets a 30-day trial with a one-time $5 credit and no card, then the Free plan with $1 of usage a month. Hobby is $5 a month and Pro $20 a month, each with the same amount of usage included, and Enterprise is priced by sales. Usage is metered by the second. The `railway-agent` tool runs Railway's own agent, which is billed for the model tokens it uses at Anthropic's published rates with no markup (checked 2026-10-09).",
      "priceSummary": "Your plan",
      "where": "both",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the MCP server docs, the CLI docs, llms.txt, auth.md or the pricing file (checked 2026-10-09). Railway can be provisioned through Stripe's Agentic Provisioning Protocol, which is a separate route and not a payment protocol on the MCP endpoint.",
        "endpoints": []
      },
      "toolCount": 11,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 426205,
        "pypiWeekly": null,
        "asOf": "2026-10-09"
      },
      "docsUrl": "https://docs.railway.com/ai/mcp-server",
      "llmsTxt": "https://docs.railway.com/llms.txt",
      "openapi": "https://railway.com/openapi.json",
      "registryName": "com.railway/mcp",
      "capabilities": [
        "infra.cloud",
        "code.deploy",
        "analytics.flags"
      ],
      "tags": [
        "official",
        "hosted",
        "mcp",
        "oauth",
        "llms-txt",
        "openapi",
        "status-page",
        "soc2",
        "free-tier"
      ],
      "lastRelease": "2026-10-08",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 56.7,
        "grade": "C",
        "agentReady": false,
        "rank": 627,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 7,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 59,
          "maintenance": 83,
          "payments": 40,
          "reliability": 60,
          "schema": 56,
          "security": 65,
          "transparency": 73
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-09"
        },
        "negative": -4,
        "negativeNotes": [
          "30 March 2026. A CDN configuration change cached GET responses on about 0.05% of Railway domains for 52 minutes, so pages meant for one user may have been served to another. Railway reverted it, purged the cache and published a report the same day. Fixed and documented, so 4 is deducted (https://blog.railway.com/p/incident-report-march-30-2026-authenticated-user-data-cached)."
        ],
        "verdict": "A small hosted server with 11 tools, OAuth grants limited to chosen workspaces and one-hour tokens. Most infrastructure work goes through the `railway-agent` tool, which is billed by model tokens. The hosted server's source and tool schemas are not public, there is no read-only scope, and the status page lists about 25 incidents in 90 days.",
        "bestFor": "Agents that deploy and operate applications on Railway from an editor and are content to hand multi-step work to Railway's own agent.",
        "strengths": [
          "OAuth with PKCE, dynamic client registration and a device code grant. A person picks the workspaces and projects a client reaches.",
          "Access tokens last one hour, refresh tokens rotate, and the CLI route keeps any long-lived credential out of editor configuration.",
          "Eleven tools keep the context cost low, with `railway-agent` taking multi-step work in one call.",
          "The trial needs no card and prices for CPU, memory, volumes and egress are public and metered by the second.",
          "The CLI that carries the proxy had more than 100 tagged releases in 90 days, the latest on 8 October 2026."
        ],
        "weaknesses": [
          "The hosted server's source and tool schemas are not public, so inputs can only be read after signing in.",
          "The MCP resource lists one scope, `workspace:member`, with no read-only grant.",
          "The docs say the server can deploy templates, manage environments and pull variables, but no hosted tool is named for those. They go through `railway-agent` or the local server.",
          "status.railway.com lists about 25 incidents from 11 July to 8 October 2026, most on builds and deployments.",
          "Railway reported a 52-minute CDN caching error on 30 March 2026 that may have shown one user's pages to another."
        ],
        "agentNotes": [
          "Connect to `https://mcp.railway.com` with OAuth, or run `railway mcp` after `railway login`. Project tokens are refused.",
          "Treat `redeploy`, `accept-deploy`, `delete-feature-flag` and `railway-agent` as actions that change production. Confirm the project and environment first.",
          "`railway-agent` spends model tokens billed to the workspace. Use the single-purpose tools for listing and redeploying.",
          "For variables, domains, volumes, logs or metrics as separate tools, use `railway mcp local`, which has a different tool set.",
          "On a 401, follow the `WWW-Authenticate` challenge and run the OAuth flow again. Access tokens expire after one hour."
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 56.7
          }
        ],
        "editorialScores": {
          "ergonomics": 59,
          "maintenance": 83,
          "payments": 40,
          "reliability": 60,
          "schema": 56,
          "security": 65,
          "transparency": 61
        },
        "provenanceScore": 84
      },
      "connect": {
        "install": "railway mcp install",
        "claudeCode": "claude mcp add railway --transport http https://mcp.railway.com",
        "config": {
          "mcpServers": {
            "railway": {
              "url": "https://mcp.railway.com"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/infra.cloud",
        "tool": "https://letme.dev/railway-mcp-server"
      },
      "area": "developer",
      "unitPrices": [
        {
          "item": "Free plan",
          "unit": "month",
          "usd": 0,
          "note": "$1 of usage included"
        },
        {
          "item": "Hobby plan",
          "unit": "month",
          "usd": 5,
          "note": "$5 of usage included"
        },
        {
          "item": "Pro workspace",
          "unit": "month",
          "usd": 20,
          "note": "$20 of usage included"
        },
        {
          "item": "CPU, one vCPU",
          "unit": "month",
          "usd": 20,
          "note": "metered by the second"
        },
        {
          "item": "Memory",
          "unit": "gb-month",
          "usd": 10,
          "note": "metered by the second"
        },
        {
          "item": "Volume storage",
          "unit": "gb-month",
          "usd": 0.15
        },
        {
          "item": "Network egress",
          "unit": "gb",
          "usd": 0.05
        }
      ],
      "provenance": {
        "legalEntity": "Railway Corporation",
        "domain": "railway.com",
        "domainRegistered": "1996-01-09",
        "endpointOnVendorDomain": true,
        "terms": "https://railway.com/legal/terms",
        "privacy": "https://railway.com/legal/privacy",
        "statusPage": "https://status.railway.com",
        "changelog": "https://railway.com/changelog",
        "securityTxt": "none",
        "checked": "2026-10-09",
        "notes": [
          "The Terms of Service (effective 20 April 2026) are a contract with Railway Corporation under Delaware law and cover the website, products, services and applications. They incorporate the Privacy Policy, and the DPA supplements them.",
          "The Markdown twins of the terms and the privacy policy are summaries that name the HTML pages as the binding text. The terms were read once from the HTML page. The privacy policy's full text was not read, because the terms forbid scraping pages of the Services.",
          "The MCP server answers at mcp.railway.com and its authorisation server at backboard.railway.com, both railway.com subdomains.",
          "railway.com/.well-known/security.txt answered 404. Security reports go to bugbounty@railway.com and an invite-only Bugcrowd programme.",
          "RDAP for railway.com gives a registration date of 1996-01-09.",
          "The status feed at api.railwaystatus.com is on a second domain of Railway's."
        ],
        "score": 84
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/railway-mcp-server.json",
      "live": {
        "slug": "railway-mcp-server",
        "probe": {
          "target": "https://mcp.railway.com",
          "method": "mcp-initialize",
          "lastAt": "2026-10-10T02:55:07.260710249Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 657,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 211,
          "p95ms24h": 596,
          "samples24h": 199,
          "samples30d": 199,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 169,
              "ok": 169
            },
            {
              "date": "2026-10-10",
              "probes": 30,
              "ok": 30
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.railway.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-10T00:51:11.467942216Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "railwayapp/cli",
            "version": "v5.64.2",
            "released": "2026-10-09",
            "seenAt": "2026-10-09T17:15:54.784056647Z"
          },
          {
            "registry": "npm",
            "name": "@railway/cli",
            "version": "5.64.2",
            "seenAt": "2026-10-09T17:15:54.514664674Z"
          }
        ],
        "githubStars": 620,
        "npmWeekly": 359206,
        "securityTxt": {
          "url": "https://railway.com/.well-known/security.txt",
          "state": "unknown",
          "checkedAt": "2026-10-09T15:40:18.243876163Z"
        },
        "llmsTxt": {
          "url": "https://docs.railway.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-09T14:02:38.642178629Z"
        },
        "pages": [
          {
            "url": "https://railway.com/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-09T18:44:14.291619008Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "495125df5feb"
          },
          {
            "url": "https://railway.com/legal/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-09T18:44:16.844992902Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "f9c6e91a7716"
          },
          {
            "url": "https://railway.com/legal/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:44:18.328857112Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "bfdbf36b1f01"
          }
        ],
        "mcpTools": {
          "url": "https://mcp.railway.com",
          "checkedAt": "2026-10-09T21:40:53.758585053Z",
          "status": "ok",
          "protocol": "2026-07-28",
          "tools": [
            {
              "name": "whoami",
              "description": "Get the current authenticated Railway user's profile information",
              "inputSchema": {
                "properties": {},
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "createdAt": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "id": {
                    "type": "string"
                  },
                  "name": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "registrationStatus": {
                    "type": "string"
                  },
                  "username": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "workspace": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "defaultBranch": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "hasRepo": {
                            "type": "boolean"
                          },
                          "openPrs": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "branch": {
                                  "type": "string"
                                },
                                "number": {
                                  "type": "number"
                                },
                                "title": {
                                  "type": "string"
                                },
                                "url": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "number",
                                "branch",
                                "title",
                                "url"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "repo": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "repoUrl": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "hasRepo",
                          "repo",
                          "repoUrl",
                          "defaultBranch",
                          "openPrs"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "name",
                  "username",
                  "email",
                  "registrationStatus",
                  "createdAt",
                  "workspace"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Who am I"
              }
            },
            {
              "name": "list-workspaces",
              "description": "List the Railway workspaces the current user belongs to. Use a workspace ID with create-project to choose where a project is created.",
              "inputSchema": {
                "properties": {},
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "workspaces": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "projectCount": {
                          "type": "number"
                        },
                        "type": {
                          "enum": [
                            "team",
                            "personal"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "type",
                        "projectCount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "workspaces"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List workspaces"
              }
            },
            {
              "name": "list-projects",
              "description": "List all Railway projects accessible to the authenticated user",
              "inputSchema": {
                "properties": {},
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "projects": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "createdAt": {
                          "type": "string"
                        },
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "workspaceId": {
                          "type": "string"
                        },
                        "workspaceName": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "workspaceId",
                        "workspaceName",
                        "createdAt"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "projects"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List projects"
              }
            },
            {
              "name": "create-project",
              "description": "Create a new Railway project",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "defaultEnvironmentName": {
                    "description": "Name of the project's first environment (default: \"production\")",
                    "type": "string"
                  },
                  "description": {
                    "description": "Optional project description",
                    "type": "string"
                  },
                  "isPublic": {
                    "description": "Whether the project should be public (default: false)",
                    "type": "boolean"
                  },
                  "name": {
                    "description": "Name for the new project",
                    "type": "string"
                  },
                  "prDeploys": {
                    "description": "Enable PR deploys: pull requests on services' connected GitHub repos get their own ephemeral environment (default: false)",
                    "type": "boolean"
                  },
                  "workspaceId": {
                    "description": "Workspace ID to create the project in. If omitted, uses the first available workspace.",
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "description": "Default environment ID",
                        "type": "string"
                      },
                      "name": {
                        "description": "Default environment name",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "project": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "description": "Created project ID",
                        "type": "string"
                      },
                      "name": {
                        "description": "Created project name",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "workspaceId": {
                    "description": "Workspace containing the new project",
                    "type": "string"
                  }
                },
                "required": [
                  "project",
                  "environment",
                  "workspaceId"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create project"
              }
            },
            {
              "name": "create-deployment",
              "description": "Create a new service from a GitHub repository and trigger its first deployment. The repo must be one the authenticated user has connected via GitHub. Returns the new service; use get-status or list-deployments to follow the deploy.\n\nBefore calling this tool you MUST have a GitHub repo to deploy. If the user has not provided one, do not guess — first ask them which GitHub repo to deploy (in 'owner/name' form). If they don't have a repo yet, offer to help create one: if you have tools available to create a GitHub repository (e.g. a GitHub MCP server or `gh` CLI), offer to scaffold and push one for them; otherwise point them to create a repo on GitHub and share its 'owner/name'. Only call this tool once a concrete repo has been confirmed.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "branch": {
                    "description": "The branch to deploy. Defaults to 'main'. A branch is required to trigger the first deploy.",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment ID to deploy into. If omitted, the service is created in all non-fork environments.",
                    "type": "string"
                  },
                  "name": {
                    "description": "Name for the new service. If omitted, a name is derived from the repo.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID to deploy into",
                    "type": "string"
                  },
                  "repo": {
                    "description": "The full name of the GitHub repo to deploy. e.g. 'railwayapp/starters'",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "repo"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "deploymentStatus": {
                    "const": "triggered",
                    "description": "Initial deployment was triggered asynchronously",
                    "type": "string"
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Specific environment ID, or null when all non-fork environments are used"
                      },
                      "scope": {
                        "description": "Whether the service was created in one or all non-fork environments",
                        "enum": [
                          "specific",
                          "all_non_fork"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "scope",
                      "id"
                    ],
                    "type": "object"
                  },
                  "project": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "description": "Destination project ID",
                        "type": "string"
                      },
                      "name": {
                        "description": "Destination project name",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "description": "Created service ID",
                        "type": "string"
                      },
                      "name": {
                        "description": "Created service name",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "source": {
                    "additionalProperties": false,
                    "properties": {
                      "branch": {
                        "description": "Git branch selected for deployment",
                        "type": "string"
                      },
                      "repo": {
                        "description": "GitHub repository in owner/name form",
                        "type": "string"
                      }
                    },
                    "required": [
                      "repo",
                      "branch"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "service",
                  "project",
                  "source",
                  "environment",
                  "deploymentStatus"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create deployment"
              }
            },
            {
              "name": "create-service",
              "description": "Create a new service in a project from a Docker image, or an empty service to configure later (e.g. before setting variables and attaching a source). Public images only: credentials for a private registry are not accepted here — the user sets them on the service in the Railway dashboard. Pass staged: true to stage the service in one environment instead of applying it live — it then only becomes real when the staged changes are committed with accept-deploy. To create a service from a GitHub repository, use create-deployment instead.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment ID to create the service in. If omitted, the service is created in all non-fork environments. Required when staged is true.",
                    "type": "string"
                  },
                  "image": {
                    "description": "Docker image to deploy, e.g. 'redis' or 'ghcr.io/org/app:latest'. Omit to create an empty service.",
                    "type": "string"
                  },
                  "name": {
                    "description": "Name for the new service. If omitted, a name is derived from the image or generated.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID to create the service in",
                    "type": "string"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the service in the environment's pending changes instead of applying it live. The service shows up on the canvas immediately but gets no instance until accept-deploy commits the staged changes (or the user applies them in the dashboard). Requires environmentId.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "scope": {
                        "enum": [
                          "specific",
                          "all_non_fork"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "scope",
                      "id"
                    ],
                    "type": "object"
                  },
                  "project": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "source": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "image": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "image"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Docker image source, or null for an empty service"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the service was staged instead of applied. The service exists but has no instance until the staged changes are committed with accept-deploy."
                  }
                },
                "required": [
                  "service",
                  "project",
                  "source",
                  "environment",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create service"
              }
            },
            {
              "name": "update-service",
              "description": "Update a service's configuration: build/start/pre-deploy commands and pre-deploy timeout, builder, healthcheck, sleep mode, root directory, cron schedule, Dockerfile path, restart policy, config file path, watch patterns, replicas per region, resource limits, deployment overlap/draining, outbound IPv6, and the private network endpoint name. Only the fields you pass are changed. Config changes apply on the service's next deployment (use redeploy to apply immediately); regions and limits scale the running deployment right away, and privateNetworkEndpoint is committed to the environment and redeploys the service. Pass staged: true to stage the update in one environment's pending changes instead of writing it to the service — it then applies when the staged changes are committed with accept-deploy. Source changes are not handled by this tool (use connect-service-source), and private registry credentials are set by the user in the Railway dashboard.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "buildCommand": {
                    "description": "Custom build command",
                    "type": "string"
                  },
                  "builder": {
                    "description": "Build system for services without a Dockerfile. RAILPACK is the default; NIXPACKS is the legacy builder.",
                    "enum": [
                      "RAILPACK",
                      "NIXPACKS"
                    ],
                    "type": "string"
                  },
                  "cronSchedule": {
                    "anyOf": [
                      {
                        "minLength": 1,
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Cron schedule, e.g. '0 * * * *'. Minimum interval is 5 minutes. Pass null to remove the schedule and run the service continuously."
                  },
                  "dockerfilePath": {
                    "description": "Path to a custom Dockerfile",
                    "type": "string"
                  },
                  "drainingSeconds": {
                    "anyOf": [
                      {
                        "maximum": 9007199254740991,
                        "minimum": 0,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Seconds between the old deployment's containers receiving SIGTERM and SIGKILL. Pass null to reset to the default."
                  },
                  "environmentId": {
                    "description": "Environment to update. If omitted, the service is updated in all environments. Required when staged is true.",
                    "type": "string"
                  },
                  "healthcheckPath": {
                    "description": "HTTP healthcheck path, e.g. /health",
                    "type": "string"
                  },
                  "healthcheckTimeout": {
                    "anyOf": [
                      {
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Healthcheck timeout in seconds (0-3600). Pass null to reset."
                  },
                  "ipv6EgressEnabled": {
                    "description": "Enable/disable outbound IPv6 internet access",
                    "type": "boolean"
                  },
                  "limits": {
                    "description": "Resource limits per replica, capped by the workspace plan. Only the values you pass change.",
                    "properties": {
                      "memoryGB": {
                        "exclusiveMinimum": 0,
                        "type": "number"
                      },
                      "vCPUs": {
                        "exclusiveMinimum": 0,
                        "type": "number"
                      }
                    },
                    "type": "object"
                  },
                  "overlapSeconds": {
                    "anyOf": [
                      {
                        "maximum": 9007199254740991,
                        "minimum": 0,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Seconds the old deployment keeps serving after the new one is healthy. Pass null to reset to the default."
                  },
                  "preDeployCommand": {
                    "description": "Commands run before each deploy",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "preDeployTimeoutSeconds": {
                    "anyOf": [
                      {
                        "maximum": 9007199254740991,
                        "minimum": -9007199254740991,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "How long the pre-deploy command may run, in seconds (1-3600). Pass null to reset to the default."
                  },
                  "privateNetworkEndpoint": {
                    "description": "The service's private DNS label, reachable as \u003clabel\u003e.railway.internal: lowercase letters, digits and hyphens.",
                    "maxLength": 63,
                    "minLength": 1,
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "railwayConfigFile": {
                    "description": "Path to a railway config file, e.g. railway.toml",
                    "type": "string"
                  },
                  "regions": {
                    "additionalProperties": {
                      "properties": {
                        "numReplicas": {
                          "maximum": 200,
                          "minimum": 1,
                          "type": "integer"
                        }
                      },
                      "required": [
                        "numReplicas"
                      ],
                      "type": "object"
                    },
                    "description": "Replicas per region, e.g. { \"us-west2\": { \"numReplicas\": 2 } }. Replaces the whole region map: a region absent from it is removed. Services with a volume run in one region only.",
                    "propertyNames": {
                      "type": "string"
                    },
                    "type": "object"
                  },
                  "restartPolicyMaxRetries": {
                    "description": "Max restart retries for ON_FAILURE policy",
                    "maximum": 9007199254740991,
                    "minimum": -9007199254740991,
                    "type": "integer"
                  },
                  "restartPolicyType": {
                    "description": "Restart policy for crashed deployments",
                    "enum": [
                      "ALWAYS",
                      "NEVER",
                      "ON_FAILURE"
                    ],
                    "type": "string"
                  },
                  "rootDirectory": {
                    "description": "Root directory for builds, e.g. /packages/api. With staged: true this counts as a source change: committing it recreates the service's deployment triggers and re-resolves its GitHub authorization from whoever commits. Stage it on its own if that matters.",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  },
                  "sleepApplication": {
                    "description": "Enable/disable app sleeping (serverless mode)",
                    "type": "boolean"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the change in the environment's pending changes instead of applying it live. It takes effect only when the staged changes are committed with accept-deploy (or the user applies them in the dashboard).",
                    "type": "boolean"
                  },
                  "startCommand": {
                    "description": "Custom start command",
                    "type": "string"
                  },
                  "watchPatterns": {
                    "description": "File patterns that trigger automatic redeploys",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environmentId": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Environment updated, or null when all environments were"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the change was staged instead of applied. It takes effect only when the staged changes are committed with accept-deploy."
                  },
                  "updatedFields": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "service",
                  "environmentId",
                  "updatedFields",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Update service"
              }
            },
            {
              "name": "delete-service",
              "description": "Permanently delete a service: its deployments stop and are removed, along with its domains, variables and deployment triggers. Any volume attached to it is detached and kept — delete-volume removes a volume and its data. By default the service is deleted in every environment that is not a fork; pass an environmentId to delete it in that one environment only. Pass staged: true to stage the removal in one environment instead of applying it live. A service whose creation is itself still staged is taken back out of the pending changes instead. This cannot be undone.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment to delete the service in. If omitted, it is deleted in every environment that is not a fork. Required when staged is true.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID the service belongs to",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID to delete",
                    "type": "string"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the change in the environment's pending changes instead of applying it live. It takes effect only when the staged changes are committed with accept-deploy (or the user applies them in the dashboard).",
                    "type": "boolean"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "detachedVolumes": {
                    "description": "Volumes detached from the service and kept — on commit, when the removal is staged. Their data outlives the service; delete-volume is what removes it.",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "environmentId": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Environment the service was removed from, or null for all"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the change was staged instead of applied. It takes effect only when the staged changes are committed with accept-deploy."
                  }
                },
                "required": [
                  "service",
                  "environmentId",
                  "detachedVolumes",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Delete service"
              }
            },
            {
              "name": "create-function",
              "description": "Create a Railway Function: a service that runs one file of TypeScript on the Bun runtime, with no repository, Dockerfile or build step. Use this for webhook receivers, small HTTP APIs, cron jobs and scripts. Pass the complete code — a function with no code deploys nothing.\n\nApplies live by default, which deploys the function immediately. Pass staged: true with an environmentId to stage it in that environment's pending changes instead, in which case nothing deploys until the staged changes are committed with accept-deploy.\n\nFor a service built from a repository use create-deployment, and for one from a Docker image use create-service. To change a function's code afterwards use update-function-source-code; for its other settings (variables, cron schedule, healthcheck) use set-variables and update-service.\n\nWriting function code:\n- One file, TypeScript or TSX. The runtime writes it to `index.tsx` and runs it with Bun — Python, Go, Ruby and other languages will not run. For those, use create-service with an image, or create-deployment from a repo.\n- Imports are allowed. The runtime scans them, generates a package.json and installs with Bun, including versioned specifiers like `hono@4` and `zod@3`. Do not reference local files other than this one.\n- An HTTP service must listen: call `Bun.serve`, or default-export a fetch handler or Hono app. Read the port from `Bun.env.PORT`. Use generate-domain to give it a public URL.\n- If it is not an HTTP service, do not start a server. Write a script; it runs to completion.\n- Do not schedule work with a top-level `setInterval` — set a cronSchedule with update-service instead.\n- Prefer Bun globals over Node APIs: `Bun.env` for variables, `Bun.file`/`Bun.write` for file I/O, `Bun.sql` for Postgres, `Bun.s3` for object storage. The function filesystem is not durable — persist to a database or object storage.\n- Top-level await is available. Await every async call.\n- JSX needs the pragma, e.g. `/** @jsx jsx */` with `/** @jsxImportSource hono/jsx */`.\n- Send complete, working code. Placeholders and elided bodies get deployed as written.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "code": {
                    "description": "The function's complete TypeScript/TSX source, as one file. This is what gets deployed.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment ID to create the function in. If omitted, it is created in all non-fork environments. Required when staged is true.",
                    "type": "string"
                  },
                  "name": {
                    "description": "Name for the new function. If omitted, a name is generated.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID to create the function in",
                    "type": "string"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the function in the environment's pending changes instead of deploying it. It shows up on the canvas immediately but gets no instance until accept-deploy commits the staged changes (or the user applies them in the dashboard). Requires environmentId.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "projectId",
                  "code"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "scope": {
                        "enum": [
                          "specific",
                          "all_non_fork"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "scope",
                      "id"
                    ],
                    "type": "object"
                  },
                  "project": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "runtime": {
                    "description": "The function runtime, e.g. 'bun'",
                    "type": "string"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the function was staged instead of deployed. The service exists but has no instance until the staged changes are committed with accept-deploy."
                  },
                  "version": {
                    "description": "The runtime version, e.g. '1.4.0'",
                    "type": "string"
                  }
                },
                "required": [
                  "service",
                  "project",
                  "runtime",
                  "version",
                  "environment",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create function"
              }
            },
            {
              "name": "update-function-source-code",
              "description": "Replace a Railway Function's source code. Send the complete file — this overwrites the function's code, it does not patch it, so anything you leave out is gone. Read the current code with get-function-source-code first if you are modifying rather than rewriting.\n\nApplies live by default, which deploys the new code immediately. Pass staged: true to stage it in the environment's pending changes instead, in which case the current code keeps running until the staged changes are committed with accept-deploy.\n\nUpdates one environment: the one you name, or the default environment. Code is the thing a function is, and a live update deploys it, so this does not fan out across every environment the way update-service does — call it per environment if you need that. For a function's other settings (variables, cron schedule, healthcheck, domains) use set-variables, update-service and generate-domain. For a service built from a repo or image, this is the wrong tool: use connect-service-source or redeploy.\n\nWriting function code:\n- One file, TypeScript or TSX. The runtime writes it to `index.tsx` and runs it with Bun — Python, Go, Ruby and other languages will not run. For those, use create-service with an image, or create-deployment from a repo.\n- Imports are allowed. The runtime scans them, generates a package.json and installs with Bun, including versioned specifiers like `hono@4` and `zod@3`. Do not reference local files other than this one.\n- An HTTP service must listen: call `Bun.serve`, or default-export a fetch handler or Hono app. Read the port from `Bun.env.PORT`. Use generate-domain to give it a public URL.\n- If it is not an HTTP service, do not start a server. Write a script; it runs to completion.\n- Do not schedule work with a top-level `setInterval` — set a cronSchedule with update-service instead.\n- Prefer Bun globals over Node APIs: `Bun.env` for variables, `Bun.file`/`Bun.write` for file I/O, `Bun.sql` for Postgres, `Bun.s3` for object storage. The function filesystem is not durable — persist to a database or object storage.\n- Top-level await is available. Await every async call.\n- JSX needs the pragma, e.g. `/** @jsx jsx */` with `/** @jsxImportSource hono/jsx */`.\n- Send complete, working code. Placeholders and elided bodies get deployed as written.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "code": {
                    "description": "The function's complete new TypeScript/TSX source, as one file. Replaces the existing code entirely.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The function service ID",
                    "type": "string"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the new code in the environment's pending changes instead of deploying it. The currently deployed code keeps running until the staged changes are committed with accept-deploy (or the user applies them in the dashboard).",
                    "type": "boolean"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId",
                  "code"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "changed": {
                    "description": "False when the function already had this exact code, in which case nothing was written or deployed",
                    "type": "boolean"
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "runtime": {
                    "description": "The function runtime, e.g. 'bun'",
                    "type": "string"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the change was staged instead of applied. It takes effect only when the staged changes are committed with accept-deploy."
                  },
                  "version": {
                    "description": "The runtime version, e.g. '1.4.0'",
                    "type": "string"
                  }
                },
                "required": [
                  "service",
                  "environment",
                  "runtime",
                  "version",
                  "changed",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": true,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Update function source code"
              }
            },
            {
              "name": "get-function-source-code",
              "description": "Get a Railway Function's source code and runtime in an environment. Works for a function that is deployed and for one that exists only as a staged change — `code` is whichever is current, `deployedCode` is what is actually running, and `staged` says whether a commit is pending. Read this before update-function-source-code, which replaces the whole file. For a function's other configuration use get-service-config, and for its variables use list-variables. If environmentId is omitted, the default environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The function service ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "code": {
                    "description": "The function's current source: the staged code when a staged change replaces it, otherwise the deployed code",
                    "type": "string"
                  },
                  "codeSource": {
                    "description": "Which of the two `code` came from",
                    "enum": [
                      "deployed",
                      "staged"
                    ],
                    "type": "string"
                  },
                  "deployedCode": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The source that is actually running, or null when the function has never deployed. Equal to `code` unless a staged change replaces it."
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "runtime": {
                    "description": "The function runtime, e.g. 'bun'",
                    "type": "string"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "isCreate": {
                            "description": "True when the function itself is staged — it does not exist live yet",
                            "type": "boolean"
                          },
                          "patchId": {
                            "type": "string"
                          },
                          "patchStatus": {
                            "description": "STAGED, or APPLYING while a commit is in flight",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "patchStatus",
                          "isCreate"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The environment's staged changes for this function, or null when none are pending. Commit them with accept-deploy."
                  },
                  "version": {
                    "description": "The runtime version, e.g. '1.4.0'",
                    "type": "string"
                  }
                },
                "required": [
                  "service",
                  "environment",
                  "code",
                  "codeSource",
                  "deployedCode",
                  "runtime",
                  "version",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get function source code"
              }
            },
            {
              "name": "list-services",
              "description": "List the ids and names of all services and environments in a Railway project. Prefer describe-environment for what is actually in an environment: it includes volumes, buckets, deployments and staged changes.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "projectId": {
                    "description": "The project ID to list services for",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environments": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "project": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "services": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "project",
                  "environments",
                  "services"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List services"
              }
            },
            {
              "name": "describe-environment",
              "description": "Inventory of everything in a Railway environment — services, volumes, buckets, shared variable names — with staged changes applied. Each resource carries a `state`: live, staged-create (exists only in the pending patch), staged-delete, or live-with-staged-changes. Includes each service's source, regions, replicas, cron, volume mounts and latest deployment, and a `staged` summary of the pending patch. Pass `region` to keep only resources in that region. For per-field staged diffs use get-staged-changes; for one service's full config use describe-service; for runtime health use environment-status. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment to describe. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "region": {
                    "description": "Only return services deploying to, and volumes/buckets provisioned in, this region (e.g. us-west2, sjc).",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "buckets": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "region": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "stagedChangeCount": {
                          "maximum": 9007199254740991,
                          "minimum": -9007199254740991,
                          "type": "integer"
                        },
                        "state": {
                          "description": "live: exists and has nothing staged. staged-create: only exists in the staged patch, not provisioned until accept-deploy. staged-delete: live now, removed when the patch is committed. live-with-staged-changes: live with pending config changes.",
                          "enum": [
                            "live",
                            "staged-create",
                            "staged-delete",
                            "live-with-staged-changes"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "state",
                        "region",
                        "stagedChangeCount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "isEphemeral": {
                        "type": "boolean"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name",
                      "isEphemeral"
                    ],
                    "type": "object"
                  },
                  "project": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "workspaceName": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "name",
                      "workspaceName"
                    ],
                    "type": "object"
                  },
                  "region": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The region filter that was applied, if any"
                  },
                  "services": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "cronSchedule": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "id": {
                          "type": "string"
                        },
                        "latestDeployment": {
                          "anyOf": [
                            {
                              "additionalProperties": false,
                              "properties": {
                                "createdAt": {
                                  "type": "string"
                                },
                                "id": {
                                  "type": "string"
                                },
                                "status": {
                                  "type": "string"
                                },
                                "url": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "status",
                                "createdAt",
                                "url"
                              ],
                              "type": "object"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Latest deployment; null for a service that has never deployed"
                        },
                        "name": {
                          "type": "string"
                        },
                        "numReplicas": {
                          "maximum": 9007199254740991,
                          "minimum": -9007199254740991,
                          "type": "integer"
                        },
                        "regions": {
                          "description": "Regions the service deploys to (staged config applied)",
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "source": {
                          "anyOf": [
                            {
                              "additionalProperties": false,
                              "properties": {
                                "branch": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "image": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "repo": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "image",
                                "repo",
                                "branch"
                              ],
                              "type": "object"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "stagedChangeCount": {
                          "maximum": 9007199254740991,
                          "minimum": -9007199254740991,
                          "type": "integer"
                        },
                        "state": {
                          "description": "live: exists and has nothing staged. staged-create: only exists in the staged patch, not provisioned until accept-deploy. staged-delete: live now, removed when the patch is committed. live-with-staged-changes: live with pending config changes.",
                          "enum": [
                            "live",
                            "staged-create",
                            "staged-delete",
                            "live-with-staged-changes"
                          ],
                          "type": "string"
                        },
                        "volumeMounts": {
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "mountPath": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "volumeId": {
                                "type": "string"
                              },
                              "volumeName": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "volumeId",
                              "volumeName",
                              "mountPath"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "state",
                        "source",
                        "regions",
                        "numReplicas",
                        "cronSchedule",
                        "volumeMounts",
                        "latestDeployment",
                        "stagedChangeCount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "sharedVariableNames": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "createdAt": {
                            "type": "string"
                          },
                          "message": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "patchId": {
                            "type": "string"
                          },
                          "status": {
                            "description": "STAGED: pending, commit with accept-deploy. APPLYING: a commit is in progress; wait for it to settle before staging more.",
                            "enum": [
                              "STAGED",
                              "APPLYING"
                            ],
                            "type": "string"
                          },
                          "updatedAt": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "status",
                          "changeCount",
                          "message",
                          "createdAt",
                          "updatedAt"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The environment's pending patch, or null when nothing is staged"
                  },
                  "volumes": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "mountedOn": {
                          "anyOf": [
                            {
                              "additionalProperties": false,
                              "properties": {
                                "mountPath": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "serviceId": {
                                  "type": "string"
                                },
                                "serviceName": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "serviceId",
                                "serviceName",
                                "mountPath"
                              ],
                              "type": "object"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "name": {
                          "type": "string"
                        },
                        "region": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "sizeMB": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "stagedChangeCount": {
                          "maximum": 9007199254740991,
                          "minimum": -9007199254740991,
                          "type": "integer"
                        },
                        "state": {
                          "description": "live: exists and has nothing staged. staged-create: only exists in the staged patch, not provisioned until accept-deploy. staged-delete: live now, removed when the patch is committed. live-with-staged-changes: live with pending config changes.",
                          "enum": [
                            "live",
                            "staged-create",
                            "staged-delete",
                            "live-with-staged-changes"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "state",
                        "region",
                        "sizeMB",
                        "mountedOn",
                        "stagedChangeCount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "project",
                  "environment",
                  "staged",
                  "region",
                  "services",
                  "volumes",
                  "buckets",
                  "sharedVariableNames"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Describe environment"
              }
            },
            {
              "name": "describe-service",
              "description": "Everything about one service in an environment: its config with staged changes applied (source, build, deploy, networking, volume mounts), the per-field staged changes pending on it, mounted volumes, live domains and TCP proxies, the latest deployment, and its tracing state. `state` says whether the service is live, staged-create, staged-delete, or live-with-staged-changes. Variable names are listed but values are not — use list-variables for values. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "config": {
                    "additionalProperties": {},
                    "description": "The service's config in this environment with staged changes applied: source, build, deploy, networking, volume mounts. Variable values and registry credentials are omitted.",
                    "propertyNames": {
                      "type": "string"
                    },
                    "type": "object"
                  },
                  "domains": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "customDomains": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "domain": {
                                  "type": "string"
                                },
                                "id": {
                                  "type": "string"
                                },
                                "targetPort": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "domain",
                                "targetPort"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "serviceDomains": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "domain": {
                                  "type": "string"
                                },
                                "id": {
                                  "type": "string"
                                },
                                "targetPort": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "domain",
                                "targetPort"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "serviceDomains",
                          "customDomains"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Live domains; null when the service is not live yet or the lookup failed"
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "latestDeployment": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "createdAt": {
                            "type": "string"
                          },
                          "id": {
                            "type": "string"
                          },
                          "status": {
                            "type": "string"
                          },
                          "url": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "status",
                          "createdAt",
                          "url"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "state": {
                        "description": "live: exists and has nothing staged. staged-create: only exists in the staged patch, not provisioned until accept-deploy. staged-delete: live now, removed when the patch is committed. live-with-staged-changes: live with pending config changes.",
                        "enum": [
                          "live",
                          "staged-create",
                          "staged-delete",
                          "live-with-staged-changes"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name",
                      "state"
                    ],
                    "type": "object"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "createdAt": {
                            "type": "string"
                          },
                          "message": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "patchId": {
                            "type": "string"
                          },
                          "status": {
                            "description": "STAGED: pending, commit with accept-deploy. APPLYING: a commit is in progress; wait for it to settle before staging more.",
                            "enum": [
                              "STAGED",
                              "APPLYING"
                            ],
                            "type": "string"
                          },
                          "updatedAt": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "status",
                          "changeCount",
                          "message",
                          "createdAt",
                          "updatedAt"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The environment's pending patch, or null when nothing is staged"
                  },
                  "stagedChanges": {
                    "description": "Pending changes to this service, per field",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "destructive": {
                          "type": "boolean"
                        },
                        "displayName": {
                          "type": "string"
                        },
                        "from": {
                          "description": "Live value as displayed; empty when added",
                          "type": "string"
                        },
                        "path": {
                          "description": "Config path, e.g. services.\u003cid\u003e.deploy.startCommand",
                          "type": "string"
                        },
                        "to": {
                          "description": "Staged value as displayed; empty when removed",
                          "type": "string"
                        },
                        "type": {
                          "enum": [
                            "added",
                            "removed",
                            "updated"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "path",
                        "displayName",
                        "type",
                        "from",
                        "to",
                        "destructive"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "tcpProxies": {
                    "anyOf": [
                      {
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "applicationPort": {
                              "type": "number"
                            },
                            "domain": {
                              "type": "string"
                            },
                            "endpoint": {
                              "description": "Public endpoint to connect to, host:port",
                              "type": "string"
                            },
                            "id": {
                              "type": "string"
                            },
                            "proxyPort": {
                              "type": "number"
                            },
                            "syncStatus": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "id",
                            "endpoint",
                            "domain",
                            "proxyPort",
                            "applicationPort",
                            "syncStatus"
                          ],
                          "type": "object"
                        },
                        "type": "array"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Live TCP proxies; null when the service is not live yet or the lookup failed"
                  },
                  "tracing": {
                    "additionalProperties": false,
                    "description": "The service's tracing state in this environment. Change it with set-service-tracing.",
                    "properties": {
                      "autoInstrumentationActive": {
                        "description": "Whether auto-instrumentation is in effect. The switch only does anything while tracing is enabled.",
                        "type": "boolean"
                      },
                      "autoInstrumentationEnabled": {
                        "description": "The service's auto-instrumentation switch: Railway instruments its processes with eBPF (OBI) for supported runtimes, no code changes",
                        "type": "boolean"
                      },
                      "tracingEnabled": {
                        "description": "Whether requests to the service are traced in this environment: the edge records a span per client-facing request and the next deploy provides the OpenTelemetry exporter variables",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "tracingEnabled",
                      "autoInstrumentationEnabled",
                      "autoInstrumentationActive"
                    ],
                    "type": "object"
                  },
                  "variableNames": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "volumes": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "mountPath": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "name": {
                          "type": "string"
                        },
                        "region": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "sizeMB": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "state": {
                          "description": "live: exists and has nothing staged. staged-create: only exists in the staged patch, not provisioned until accept-deploy. staged-delete: live now, removed when the patch is committed. live-with-staged-changes: live with pending config changes.",
                          "enum": [
                            "live",
                            "staged-create",
                            "staged-delete",
                            "live-with-staged-changes"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "mountPath",
                        "sizeMB",
                        "region",
                        "state"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "service",
                  "environment",
                  "staged",
                  "config",
                  "stagedChanges",
                  "variableNames",
                  "volumes",
                  "domains",
                  "tcpProxies",
                  "latestDeployment",
                  "tracing"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Describe service"
              }
            },
            {
              "name": "get-staged-changes",
              "description": "Show the changes staged in a Railway environment that accept-deploy would commit: per resource (service, volume, bucket, group) the action — create, delete, update — and each changed field with its live and staged value. Variable values and registry credentials are redacted to names. Also reports whether the patch is destructive and whether a commit is already applying. Review this before calling accept-deploy. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment to inspect. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "destructive": {
                    "description": "True when committing would delete a service, volume or bucket, or otherwise destroy data. accept-deploy may refuse such commits; the user can apply them from the dashboard.",
                    "type": "boolean"
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "privateNetworkDisabled": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "destructive": {
                            "type": "boolean"
                          },
                          "displayName": {
                            "type": "string"
                          },
                          "from": {
                            "description": "Live value as displayed; empty when added",
                            "type": "string"
                          },
                          "path": {
                            "description": "Config path, e.g. services.\u003cid\u003e.deploy.startCommand",
                            "type": "string"
                          },
                          "to": {
                            "description": "Staged value as displayed; empty when removed",
                            "type": "string"
                          },
                          "type": {
                            "enum": [
                              "added",
                              "removed",
                              "updated"
                            ],
                            "type": "string"
                          }
                        },
                        "required": [
                          "path",
                          "displayName",
                          "type",
                          "from",
                          "to",
                          "destructive"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Staged private-networking toggle, if any"
                  },
                  "project": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "resources": {
                    "description": "Staged changes grouped by the service, volume, bucket or group they touch",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "action": {
                          "enum": [
                            "create",
                            "delete",
                            "update"
                          ],
                          "type": "string"
                        },
                        "changes": {
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "destructive": {
                                "type": "boolean"
                              },
                              "displayName": {
                                "type": "string"
                              },
                              "from": {
                                "description": "Live value as displayed; empty when added",
                                "type": "string"
                              },
                              "path": {
                                "description": "Config path, e.g. services.\u003cid\u003e.deploy.startCommand",
                                "type": "string"
                              },
                              "to": {
                                "description": "Staged value as displayed; empty when removed",
                                "type": "string"
                              },
                              "type": {
                                "enum": [
                                  "added",
                                  "removed",
                                  "updated"
                                ],
                                "type": "string"
                              }
                            },
                            "required": [
                              "path",
                              "displayName",
                              "type",
                              "from",
                              "to",
                              "destructive"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "id": {
                          "type": "string"
                        },
                        "kind": {
                          "enum": [
                            "service",
                            "volume",
                            "bucket",
                            "group"
                          ],
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "kind",
                        "id",
                        "name",
                        "action",
                        "changes"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "sharedVariables": {
                    "description": "Staged shared-variable changes, names only",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "destructive": {
                          "type": "boolean"
                        },
                        "displayName": {
                          "type": "string"
                        },
                        "from": {
                          "description": "Live value as displayed; empty when added",
                          "type": "string"
                        },
                        "path": {
                          "description": "Config path, e.g. services.\u003cid\u003e.deploy.startCommand",
                          "type": "string"
                        },
                        "to": {
                          "description": "Staged value as displayed; empty when removed",
                          "type": "string"
                        },
                        "type": {
                          "enum": [
                            "added",
                            "removed",
                            "updated"
                          ],
                          "type": "string"
                        }
                      },
                      "required": [
                        "path",
                        "displayName",
                        "type",
                        "from",
                        "to",
                        "destructive"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "createdAt": {
                            "type": "string"
                          },
                          "message": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "patchId": {
                            "type": "string"
                          },
                          "status": {
                            "description": "STAGED: pending, commit with accept-deploy. APPLYING: a commit is in progress; wait for it to settle before staging more.",
                            "enum": [
                              "STAGED",
                              "APPLYING"
                            ],
                            "type": "string"
                          },
                          "updatedAt": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "status",
                          "changeCount",
                          "message",
                          "createdAt",
                          "updatedAt"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The environment's pending patch, or null when nothing is staged"
                  }
                },
                "required": [
                  "project",
                  "environment",
                  "staged",
                  "destructive",
                  "resources",
                  "sharedVariables",
                  "privateNetworkDisabled"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get staged changes"
              }
            },
            {
              "name": "get-service-config",
              "description": "Prefer describe-service: it applies the staged changes onto the live config for you and adds mounted volumes, domains, TCP proxies and the latest deployment. Get a service's configuration in an environment: source (repo/image), build settings, deploy settings (start command, healthcheck, replicas, cron, restart policy), networking, and volume mounts. `config` is what is live; `staged` holds the not-yet-deployed changes for this service, or null when nothing is staged. A service created with `staged: true` has an empty `config` until accept-deploy commits it. Variable names are listed but values are not included — use list-variables for values. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "config": {
                    "additionalProperties": {},
                    "description": "The service's live serialized config for this environment (source, build, deploy, networking, volume mounts). Variable values are omitted. Empty when the service exists only as a staged change.",
                    "propertyNames": {
                      "type": "string"
                    },
                    "type": "object"
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Number of pending changes for this service",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "config": {
                            "additionalProperties": {},
                            "description": "Only the fields the staged patch sets, in the live config's shape. A field set to null is being cleared. `isCreated: true` means the service does not exist live yet; `isDeleted: true` means it is being removed.",
                            "propertyNames": {
                              "type": "string"
                            },
                            "type": "object"
                          },
                          "patchId": {
                            "type": "string"
                          },
                          "patchStatus": {
                            "description": "STAGED, or APPLYING while a commit is in flight",
                            "type": "string"
                          },
                          "variableNames": {
                            "description": "Names of variables the staged changes set or remove.",
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "patchId",
                          "patchStatus",
                          "changeCount",
                          "config",
                          "variableNames"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Changes staged in this environment but not deployed yet, or null when nothing is staged for this service. Commit them with accept-deploy."
                  },
                  "variableNames": {
                    "description": "Names of variables defined directly on the service",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "service",
                  "environment",
                  "config",
                  "variableNames",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get service config"
              }
            },
            {
              "name": "get-service-metrics",
              "description": "Get resource usage metrics (CPU, memory, disk, network) for a service, summarized as current/average/min/max over a time window. Defaults to CPU_USAGE and MEMORY_USAGE_GB over the last hour. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "hoursBack": {
                    "description": "Time window in hours, up to 168 (7 days). Defaults to 1.",
                    "maximum": 168,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "measurements": {
                    "description": "Array of measurement names. Example: [\"CPU_USAGE\", \"MEMORY_USAGE_GB\"]. Omit to use those defaults.",
                    "items": {
                      "enum": [
                        "CPU_USAGE",
                        "CPU_USAGE_2",
                        "CPU_LIMIT",
                        "MEMORY_USAGE_GB",
                        "MEMORY_LIMIT_GB",
                        "DISK_USAGE_GB",
                        "NETWORK_RX_GB",
                        "NETWORK_TX_GB"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "sampleRateSeconds": {
                    "description": "Sampling rate in seconds",
                    "maximum": 9007199254740991,
                    "minimum": 30,
                    "type": "integer"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "metrics": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "average": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "current": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Most recent sample"
                        },
                        "max": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "measurement": {
                          "type": "string"
                        },
                        "min": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "sampleCount": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "measurement",
                        "current",
                        "average",
                        "min",
                        "max",
                        "sampleCount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "service",
                  "environment",
                  "metrics"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get service metrics"
              }
            },
            {
              "name": "list-variables",
              "description": "List all environment variables for a service, fully rendered (reference variables like ${{Postgres.DATABASE_URL}} are resolved). With a Railway session or API token, values are returned in plaintext and may contain secrets. Connected OAuth apps receive variable names only. Sealed variables are always listed by name with no value — they are set, but nobody can read them back, so never recreate one. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "sealedVariableNames": {
                    "description": "Names of the sealed variables, sorted. These are already set on the service; their values cannot be read back by anyone, including the user. Do not treat them as missing and do not recreate them.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "valuesRedacted": {
                    "description": "True when values were withheld and only names are returned",
                    "type": "boolean"
                  },
                  "variableNames": {
                    "description": "All variable names, sorted, including sealed ones",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "variables": {
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "Readable variables as a name → value map. Never includes sealed variables. Omitted for OAuth-authenticated clients, which receive names only.",
                    "propertyNames": {
                      "type": "string"
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "service",
                  "environment",
                  "variableNames",
                  "sealedVariableNames",
                  "valuesRedacted"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List variables"
              }
            },
            {
              "name": "set-variables",
              "description": "Set one or more environment variables on a service (or environment-wide shared variables when serviceId is omitted). Existing variables with the same name are overwritten; others are left unchanged. Reference syntax like ${{Postgres.DATABASE_URL}} is supported. Affected services are redeployed unless skipDeploys is true. Pass staged: true to stage the variables in the environment's pending changes instead of setting them live — nothing is written or redeployed until the staged changes are committed with accept-deploy.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment. That default applies to staged: true as well — unlike the other staging tools this one never refuses an omitted environmentId, so pass one explicitly unless you mean to stage onto production.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service to set variables on. Omit to set environment-level shared variables.",
                    "type": "string"
                  },
                  "skipDeploys": {
                    "description": "Skip redeploying the affected services. Implied by staged: true, which deploys nothing until the patch is committed.",
                    "type": "boolean"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the change in the environment's pending changes instead of applying it live. It takes effect only when the staged changes are committed with accept-deploy (or the user applies them in the dashboard).",
                    "type": "boolean"
                  },
                  "variables": {
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "Object mapping variable names to string values. Example: {\"NODE_ENV\":\"production\",\"PORT\":\"3000\"}.",
                    "propertyNames": {
                      "minLength": 1,
                      "type": "string"
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "projectId",
                  "variables"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "serviceId": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Service the variables were set on, or null for shared"
                  },
                  "skippedDeploys": {
                    "type": "boolean"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the change was staged instead of applied. It takes effect only when the staged changes are committed with accept-deploy."
                  },
                  "variableNames": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "environment",
                  "serviceId",
                  "variableNames",
                  "skippedDeploys",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Set variables"
              }
            },
            {
              "name": "create-volume",
              "description": "Create a persistent volume in a project and optionally attach it to a service at a mount path. The attach and redeploy are committed together so the service comes up with the mount applied. Pass staged: true to stage the volume in one environment instead of provisioning it live.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment to provision the volume in. If omitted, the volume is provisioned in all environments. Required when staged is true.",
                    "type": "string"
                  },
                  "mountPath": {
                    "description": "Path in the container to mount the volume at, e.g. /data",
                    "type": "string"
                  },
                  "name": {
                    "description": "Name for the volume. If omitted, a name is derived from the service or generated.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "region": {
                    "description": "Region to place the volume in, e.g. us-west2 or europe-west4. If omitted, the volume follows the attached service's region, or the workspace's default region.",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "Service to attach the volume to. Omit to create an unattached volume.",
                    "type": "string"
                  },
                  "sizeMB": {
                    "description": "Initial size in MB, up to the plan's maximum volume size. If omitted, the plan's default size is used. The volume can be grown later but not shrunk.",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the volume in the environment's pending changes instead of provisioning it live. It becomes real only when the staged changes are committed with accept-deploy (or the user applies them in the dashboard). Requires environmentId.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "projectId",
                  "mountPath"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "scope": {
                        "enum": [
                          "specific",
                          "all"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "scope",
                      "id"
                    ],
                    "type": "object"
                  },
                  "mountPath": {
                    "type": "string"
                  },
                  "region": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Requested region, or null when the default region applies."
                  },
                  "serviceId": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sizeMB": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Requested size in MB, or null when the plan default applies."
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the volume was staged instead of applied. The volume exists but is not provisioned until the staged changes are committed with accept-deploy."
                  },
                  "volume": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "volume",
                  "mountPath",
                  "serviceId",
                  "sizeMB",
                  "region",
                  "environment",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Create volume"
              }
            },
            {
              "name": "update-volume",
              "description": "Update a volume's name, mount path, or which service it is attached to. Pass serviceId with mountPath to attach or move the volume; pass serviceId: null to detach it from its service, keeping the data. Every mount change redeploys the affected service so it takes effect. Only the fields you pass are changed. Pass staged: true with an environmentId to stage the mount change in that environment's pending changes instead of applying it live; the volume's name is not environment-scoped and cannot be staged.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment whose volume instance to update. If omitted, the mount change applies in every environment the volume is provisioned in. Required when staged is true.",
                    "type": "string"
                  },
                  "mountPath": {
                    "description": "New mount path, e.g. /data. Redeploys the mounted service.",
                    "type": "string"
                  },
                  "name": {
                    "description": "New name for the volume",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID the volume belongs to",
                    "type": "string"
                  },
                  "serviceId": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Service to attach or move the volume to, together with mountPath. Pass null to detach the volume from its service: the data is kept and the service redeploys without the mount. If omitted, the volume stays on the service it is already attached to."
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the change in the environment's pending changes instead of applying it live. It takes effect only when the staged changes are committed with accept-deploy (or the user applies them in the dashboard).",
                    "type": "boolean"
                  },
                  "volumeId": {
                    "description": "The volume ID to update",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "volumeId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "detachedFrom": {
                    "description": "Services the volume was unmounted from, when serviceId was null.",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the change was staged instead of applied. It takes effect only when the staged changes are committed with accept-deploy."
                  },
                  "updatedFields": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "volume": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "volume",
                  "updatedFields",
                  "detachedFrom",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Update volume"
              }
            },
            {
              "name": "delete-volume",
              "description": "Permanently delete a volume and its data. The volume is unmounted from any service it is attached to (redeploying that service). By default it is removed from every environment; pass an environmentId to remove it from that one environment only. Pass staged: true to stage the removal in one environment instead of applying it live. Deleting from every environment is irreversible.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment to remove the volume from. If omitted, it is removed from every environment. Required when staged is true.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID the volume belongs to",
                    "type": "string"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the change in the environment's pending changes instead of applying it live. It takes effect only when the staged changes are committed with accept-deploy (or the user applies them in the dashboard).",
                    "type": "boolean"
                  },
                  "volumeId": {
                    "description": "The volume ID to delete",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "volumeId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the change was staged instead of applied. It takes effect only when the staged changes are committed with accept-deploy."
                  },
                  "volume": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "volume",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Delete volume"
              }
            },
            {
              "name": "create-bucket",
              "description": "Create an S3-compatible object storage bucket in a project and provision it in an environment. Default region is sjc. Pass staged: true to stage the bucket in the environment's pending changes instead of provisioning it live — it then only becomes real when the staged changes are committed with accept-deploy.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment to provision the bucket in. Defaults to the production environment.",
                    "type": "string"
                  },
                  "name": {
                    "description": "Name for the bucket. If omitted, a name is generated.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "region": {
                    "description": "Region to provision the bucket in (default: sjc)",
                    "enum": [
                      "sjc",
                      "iad",
                      "ams",
                      "sin"
                    ],
                    "type": "string"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the bucket in the environment's pending changes instead of provisioning it live. It becomes real only when the staged changes are committed with accept-deploy (or the user applies them in the dashboard).",
                    "type": "boolean"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "bucket": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "region": {
                    "type": "string"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the bucket was staged instead of applied. The bucket exists but is not provisioned until the staged changes are committed with accept-deploy."
                  }
                },
                "required": [
                  "bucket",
                  "region",
                  "environment",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Create bucket"
              }
            },
            {
              "name": "update-bucket",
              "description": "Rename a bucket. The name is project-wide (not per environment) and takes effect immediately. Reference variables address the bucket by name (${{BucketName.ACCESS_KEY_ID}} and so on), so after a rename update any service variables that reference the old name and redeploy those services. The S3 bucket name and credentials do not change.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "bucketId": {
                    "description": "The bucket ID to rename",
                    "type": "string"
                  },
                  "name": {
                    "description": "New name for the bucket",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID the bucket belongs to",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "bucketId",
                  "name"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "bucket": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "previousName": {
                    "type": "string"
                  }
                },
                "required": [
                  "bucket",
                  "previousName"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Update bucket"
              }
            },
            {
              "name": "delete-bucket",
              "description": "Permanently delete an object storage bucket and its contents. By default it is removed from every environment it is provisioned in; pass an environmentId to remove it from that one environment only. Pass staged: true to stage the removal in one environment instead of applying it live. Deleting from every environment is irreversible.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "bucketId": {
                    "description": "The bucket ID to delete",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment to remove the bucket from. If omitted, it is removed from every environment it is provisioned in. Required when staged is true.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID the bucket belongs to",
                    "type": "string"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the change in the environment's pending changes instead of applying it live. It takes effect only when the staged changes are committed with accept-deploy (or the user applies them in the dashboard).",
                    "type": "boolean"
                  }
                },
                "required": [
                  "projectId",
                  "bucketId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "bucket": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "environmentIds": {
                    "description": "Environments the bucket was removed from, or — when staged — the single environment the removal is staged in",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the change was staged instead of applied. It takes effect only when the staged changes are committed with accept-deploy."
                  }
                },
                "required": [
                  "bucket",
                  "environmentIds",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Delete bucket"
              }
            },
            {
              "name": "get-bucket-credentials",
              "description": "Get the S3-compatible connection details for a bucket in an environment: endpoint, bucket name, region, URL style, access key and secret. With a Railway session or API token the access key and secret are returned in plaintext; connected OAuth apps receive the connection details only. Services in the same project should normally not copy these values but reference them as variables (${{BucketName.ENDPOINT}}, ${{BucketName.BUCKET}}, ${{BucketName.REGION}}, ${{BucketName.ACCESS_KEY_ID}}, ${{BucketName.SECRET_ACCESS_KEY}}), which also survive a credential reset. To rotate the credentials use reset-bucket-credentials. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "bucketId": {
                    "description": "The bucket ID",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment the bucket is provisioned in. Defaults to the production environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID the bucket belongs to",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "bucketId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "accessKeyId": {
                    "description": "Omitted for OAuth-authenticated clients",
                    "type": "string"
                  },
                  "bucket": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "bucketName": {
                    "description": "The bucket name to use against the S3 API (not the Railway name)",
                    "type": "string"
                  },
                  "credentialsCreatedAt": {
                    "description": "When the current access key was issued (ISO 8601)",
                    "type": "string"
                  },
                  "endpoint": {
                    "description": "S3-compatible API endpoint",
                    "type": "string"
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "region": {
                    "description": "Region to pass to the S3 client",
                    "type": "string"
                  },
                  "secretAccessKey": {
                    "description": "Omitted for OAuth-authenticated clients",
                    "type": "string"
                  },
                  "urlStyle": {
                    "description": "Addressing style the endpoint expects",
                    "enum": [
                      "path",
                      "virtual-host"
                    ],
                    "type": "string"
                  },
                  "valuesRedacted": {
                    "description": "True when the access key and secret were withheld and only the connection details are returned",
                    "type": "boolean"
                  }
                },
                "required": [
                  "bucket",
                  "environment",
                  "endpoint",
                  "bucketName",
                  "region",
                  "urlStyle",
                  "credentialsCreatedAt",
                  "valuesRedacted"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get bucket credentials"
              }
            },
            {
              "name": "reset-bucket-credentials",
              "description": "Regenerate the S3-compatible credentials for a bucket in an environment and return the new ones. The current access key stops working immediately; bucket data is not affected. Every client using the old key needs the new values, and services that reference the bucket through variables keep the old key until redeployed — the result lists them so you can follow up with redeploy. With a Railway session or API token the new access key and secret are returned in plaintext; connected OAuth apps receive the connection details only. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "bucketId": {
                    "description": "The bucket ID",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment whose bucket credentials to reset. Defaults to the production environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID the bucket belongs to",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "bucketId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "accessKeyId": {
                    "description": "Omitted for OAuth-authenticated clients",
                    "type": "string"
                  },
                  "bucket": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "bucketName": {
                    "description": "The bucket name to use against the S3 API (not the Railway name)",
                    "type": "string"
                  },
                  "credentialsCreatedAt": {
                    "description": "When the current access key was issued (ISO 8601)",
                    "type": "string"
                  },
                  "dependentServices": {
                    "description": "Services in this environment whose variables reference this bucket. They keep the old credentials until redeployed.",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "endpoint": {
                    "description": "S3-compatible API endpoint",
                    "type": "string"
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "region": {
                    "description": "Region to pass to the S3 client",
                    "type": "string"
                  },
                  "secretAccessKey": {
                    "description": "Omitted for OAuth-authenticated clients",
                    "type": "string"
                  },
                  "urlStyle": {
                    "description": "Addressing style the endpoint expects",
                    "enum": [
                      "path",
                      "virtual-host"
                    ],
                    "type": "string"
                  },
                  "valuesRedacted": {
                    "description": "True when the access key and secret were withheld and only the connection details are returned",
                    "type": "boolean"
                  }
                },
                "required": [
                  "bucket",
                  "environment",
                  "endpoint",
                  "bucketName",
                  "region",
                  "urlStyle",
                  "credentialsCreatedAt",
                  "valuesRedacted",
                  "dependentServices"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Reset bucket credentials"
              }
            },
            {
              "name": "list-domains",
              "description": "List all domains (Railway-generated service domains and custom domains) for a service in an environment. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "customDomains": {
                    "description": "User-owned custom domains",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "domain": {
                          "type": "string"
                        },
                        "id": {
                          "type": "string"
                        },
                        "targetPort": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "domain",
                        "targetPort"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "serviceDomains": {
                    "description": "Railway-generated *.up.railway.app domains",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "domain": {
                          "type": "string"
                        },
                        "id": {
                          "type": "string"
                        },
                        "targetPort": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "domain",
                        "targetPort"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "service",
                  "environment",
                  "serviceDomains",
                  "customDomains"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List domains"
              }
            },
            {
              "name": "domain-status",
              "description": "Get detailed status for one domain on a service, by hostname, URL, or domain ID: required DNS records and whether they currently match, ownership verification, certificate status, and any certificate error. Use list-domains first if you do not know which domains exist. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "domain": {
                    "description": "Hostname, full URL, or domain ID. For example api.example.com, https://api.example.com, or the id from list-domains.",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId",
                  "domain"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "certificate": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "errorMessage": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "retryable": {
                            "anyOf": [
                              {
                                "type": "boolean"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "status": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "status",
                          "errorMessage",
                          "retryable"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Null for a Railway domain, which has no separate certificate."
                  },
                  "dnsRecords": {
                    "description": "Empty for a Railway domain, which needs no DNS setup.",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "currentValue": {
                          "description": "Empty when the record is unset or has not been checked.",
                          "type": "string"
                        },
                        "fqdn": {
                          "type": "string"
                        },
                        "hostLabel": {
                          "type": "string"
                        },
                        "purpose": {
                          "description": "DNS_RECORD_PURPOSE_TRAFFIC_ROUTE points the domain at Railway, DNS_RECORD_PURPOSE_ACME_DNS01_CHALLENGE lets Railway issue a wildcard certificate, and DNS_RECORD_PURPOSE_OWNERSHIP_VERIFICATION proves the user controls the domain.",
                          "type": "string"
                        },
                        "recordType": {
                          "type": "string"
                        },
                        "requiredValue": {
                          "type": "string"
                        },
                        "status": {
                          "description": "DNS_RECORD_STATUS_UNSPECIFIED means this lookup did not check the record; Railway still checks ownership records in the background.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "hostLabel",
                        "fqdn",
                        "recordType",
                        "purpose",
                        "requiredValue",
                        "currentValue",
                        "status"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "domain": {
                    "additionalProperties": false,
                    "properties": {
                      "domain": {
                        "type": "string"
                      },
                      "id": {
                        "type": "string"
                      },
                      "kind": {
                        "enum": [
                          "service",
                          "custom"
                        ],
                        "type": "string"
                      },
                      "targetPort": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "domain",
                      "kind",
                      "targetPort"
                    ],
                    "type": "object"
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "railwayManaged": {
                    "description": "True for a Railway-generated domain: Railway owns its DNS and certificate, so there is nothing to verify or configure.",
                    "type": "boolean"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "verified": {
                    "anyOf": [
                      {
                        "type": "boolean"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Whether ownership is verified. Null for a Railway domain."
                  }
                },
                "required": [
                  "service",
                  "environment",
                  "domain",
                  "railwayManaged",
                  "verified",
                  "certificate",
                  "dnsRecords"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Domain status"
              }
            },
            {
              "name": "generate-domain",
              "description": "Expose a service publicly. Without `domain`, generates a Railway *.up.railway.app service domain (if the service already has domains, they are returned instead of creating another). With `domain`, attaches a custom domain you own and returns the DNS records the user must create for it to verify. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "domain": {
                    "description": "A custom domain you own (e.g. app.example.com). Omit to generate a Railway domain.",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  },
                  "targetPort": {
                    "description": "Container port the domain routes to. Usually only needed when the service listens on multiple ports.",
                    "maximum": 65535,
                    "minimum": 1,
                    "type": "integer"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "certificateStatus": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created": {
                    "description": "Whether a domain was created (false when existing domains were returned instead)",
                    "type": "boolean"
                  },
                  "dnsRecords": {
                    "description": "For custom domains: the DNS records the user must create, with required vs current values",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "currentValue": {
                          "description": "Empty when the record is unset or has not been checked.",
                          "type": "string"
                        },
                        "fqdn": {
                          "type": "string"
                        },
                        "hostLabel": {
                          "type": "string"
                        },
                        "purpose": {
                          "description": "DNS_RECORD_PURPOSE_TRAFFIC_ROUTE points the domain at Railway, DNS_RECORD_PURPOSE_ACME_DNS01_CHALLENGE lets Railway issue a wildcard certificate, and DNS_RECORD_PURPOSE_OWNERSHIP_VERIFICATION proves the user controls the domain.",
                          "type": "string"
                        },
                        "recordType": {
                          "type": "string"
                        },
                        "requiredValue": {
                          "type": "string"
                        },
                        "status": {
                          "description": "DNS_RECORD_STATUS_UNSPECIFIED means this lookup did not check the record; Railway still checks ownership records in the background.",
                          "type": "string"
                        }
                      },
                      "required": [
                        "hostLabel",
                        "fqdn",
                        "recordType",
                        "purpose",
                        "requiredValue",
                        "currentValue",
                        "status"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "domain": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "domain": {
                            "type": "string"
                          },
                          "id": {
                            "type": "string"
                          },
                          "targetPort": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "domain",
                          "targetPort"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "domainType": {
                    "anyOf": [
                      {
                        "enum": [
                          "service",
                          "custom"
                        ],
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "existingDomains": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "created",
                  "domainType",
                  "domain",
                  "dnsRecords",
                  "certificateStatus",
                  "existingDomains"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Generate domain"
              }
            },
            {
              "name": "update-domain",
              "description": "Repoint or rename an existing domain on a service. targetPort changes which container port the domain routes to (for a service listening on several ports). subdomain renames a Railway-generated service domain to \u003csubdomain\u003e.up.railway.app; custom domains cannot be renamed — delete the old one and add the new one with generate-domain. The change applies live. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "domain": {
                    "description": "Hostname, full URL, or domain ID of the domain to change. For example api.example.com or the id from list-domains.",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  },
                  "subdomain": {
                    "description": "New label for a Railway service domain: `my-api` renames it to my-api.up.railway.app. Service domains only.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "targetPort": {
                    "description": "Container port the domain should route to.",
                    "maximum": 65535,
                    "minimum": 1,
                    "type": "integer"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId",
                  "domain"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "domain": {
                    "additionalProperties": false,
                    "description": "The domain after the update",
                    "properties": {
                      "domain": {
                        "type": "string"
                      },
                      "id": {
                        "type": "string"
                      },
                      "targetPort": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "domain",
                      "targetPort"
                    ],
                    "type": "object"
                  },
                  "kind": {
                    "enum": [
                      "service",
                      "custom"
                    ],
                    "type": "string"
                  },
                  "previous": {
                    "additionalProperties": false,
                    "description": "The hostname and target port before the update",
                    "properties": {
                      "domain": {
                        "type": "string"
                      },
                      "targetPort": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "domain",
                      "targetPort"
                    ],
                    "type": "object"
                  },
                  "updatedFields": {
                    "items": {
                      "enum": [
                        "subdomain",
                        "targetPort"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "domain",
                  "kind",
                  "previous",
                  "updatedFields"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": true,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Update domain"
              }
            },
            {
              "name": "delete-domain",
              "description": "Remove a domain from a service: a Railway-generated *.up.railway.app service domain or a custom domain. Requests to that hostname stop being routed to the service as soon as the removal applies. Pass staged: true to stage the removal of a service domain in the environment's pending changes instead of applying it live. Custom domain removal always applies live. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "domain": {
                    "description": "Hostname, full URL, or domain ID. For example api.example.com, https://api.example.com, or the id from list-domains.",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the change in the environment's pending changes instead of applying it live. It takes effect only when the staged changes are committed with accept-deploy (or the user applies them in the dashboard).",
                    "type": "boolean"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId",
                  "domain"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "domain": {
                    "additionalProperties": false,
                    "description": "The domain that was removed",
                    "properties": {
                      "domain": {
                        "type": "string"
                      },
                      "id": {
                        "type": "string"
                      },
                      "targetPort": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "domain",
                      "targetPort"
                    ],
                    "type": "object"
                  },
                  "kind": {
                    "enum": [
                      "service",
                      "custom"
                    ],
                    "type": "string"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the change was staged instead of applied. It takes effect only when the staged changes are committed with accept-deploy."
                  }
                },
                "required": [
                  "domain",
                  "kind",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Delete domain"
              }
            },
            {
              "name": "retry-domain-certificate",
              "description": "Request a new TLS certificate for a custom domain whose issuance failed. Use domain-status first: it reports the certificate error and whether a retry can help (certificate.retryable). A retry cannot succeed until the domain's DNS records point at Railway. Railway-generated service domains have their certificates managed by Railway and need no retry. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "domain": {
                    "description": "Hostname, full URL, or domain ID of the custom domain. For example api.example.com or the id from list-domains.",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId",
                  "domain"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "certificateStatus": {
                    "description": "The certificate status before this call",
                    "type": "string"
                  },
                  "domain": {
                    "additionalProperties": false,
                    "properties": {
                      "domain": {
                        "type": "string"
                      },
                      "id": {
                        "type": "string"
                      },
                      "targetPort": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "domain",
                      "targetPort"
                    ],
                    "type": "object"
                  },
                  "requested": {
                    "description": "Whether a new certificate issuance was requested. False when the current certificate is already valid.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "domain",
                  "requested",
                  "certificateStatus"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Retry domain certificate"
              }
            },
            {
              "name": "search-docs",
              "description": "Search the Railway documentation (docs.railway.com) for features, configuration, guides, and tutorials. Returns matching sections with URLs — use fetch-docs to read a full page.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "query": {
                    "description": "The search query (e.g. 'environment variables', 'deploy docker', 'postgres connection')",
                    "type": "string"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "results": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "breadcrumb": {
                          "type": "string"
                        },
                        "content": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "title": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url",
                        "title",
                        "breadcrumb"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "results"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": true,
                "readOnlyHint": true,
                "title": "Search Railway docs"
              }
            },
            {
              "name": "fetch-docs",
              "description": "Fetch the full markdown content of a Railway documentation page by URL or slug (e.g. 'https://docs.railway.com/quick-start' or 'reference/variables'). Use search-docs first to find the right page.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "url": {
                    "description": "Documentation page URL or slug from search-docs results",
                    "type": "string"
                  }
                },
                "required": [
                  "url"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "content": {
                    "description": "The markdown content of the page",
                    "type": "string"
                  },
                  "pageFound": {
                    "description": "False when the requested page does not exist and `content` holds search suggestions instead",
                    "type": "boolean"
                  },
                  "size": {
                    "description": "Full size of the page in bytes",
                    "type": "number"
                  },
                  "suggestions": {
                    "description": "Candidate pages, present only when pageFound is false",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "breadcrumb": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "url",
                        "title",
                        "breadcrumb"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "truncated": {
                    "description": "Whether the content was truncated for size",
                    "type": "boolean"
                  }
                },
                "required": [
                  "content",
                  "truncated",
                  "size",
                  "pageFound"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": true,
                "readOnlyHint": true,
                "title": "Fetch Railway docs page"
              }
            },
            {
              "name": "search-templates",
              "description": "Search the Railway template marketplace by name, description or keyword — databases (postgres, mysql, mongo, redis, clickhouse), their high-availability variants, and application templates. Returns published templates ranked by relevance. Use describe-template to read a result's inputs before deploying it with deploy-template.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "limit": {
                    "default": 5,
                    "description": "Maximum templates to return. Defaults to 5.",
                    "maximum": 20,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "query": {
                    "description": "What to search for, e.g. 'postgres', 'high availability redis', 'n8n'.",
                    "type": "string"
                  },
                  "verifiedOnly": {
                    "description": "Only return templates Railway has verified. Prefer this for databases the user will run in production.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "query"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "templates": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "category": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "code": {
                          "description": "Pass this to describe-template or deploy-template",
                          "type": "string"
                        },
                        "deploymentCount": {
                          "maximum": 9007199254740991,
                          "minimum": -9007199254740991,
                          "type": "integer"
                        },
                        "description": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "isVerified": {
                          "description": "Verified templates are reviewed by Railway",
                          "type": "boolean"
                        },
                        "maintainer": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "code",
                        "name",
                        "description",
                        "category",
                        "isVerified",
                        "maintainer",
                        "deploymentCount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "templates"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Search templates"
              }
            },
            {
              "name": "describe-template",
              "description": "Read one Railway template: its name, description, README, the services it creates, every env-var input it takes (which are required and which are optional), and — for clustered database templates like postgres-ha — the HA topology counts deploy-template can size. Call this before deploy-template so required inputs are collected from the user rather than guessed.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "code": {
                    "description": "The template's code (the slug in its railway.com/template/\u003ccode\u003e URL), e.g. 'postgres', 'postgres-ha', 'redis'.",
                    "type": "string"
                  }
                },
                "required": [
                  "code"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "bucketNames": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "highAvailability": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "description": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "roles": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "allowedCounts": {
                                  "description": "Counts the template author published. Empty when it declares no list, in which case any count is passed through and only the quorum rules apply.",
                                  "items": {
                                    "maximum": 9007199254740991,
                                    "minimum": -9007199254740991,
                                    "type": "integer"
                                  },
                                  "type": "array"
                                },
                                "authoredCount": {
                                  "description": "What the template deploys when the count is omitted",
                                  "maximum": 9007199254740991,
                                  "minimum": -9007199254740991,
                                  "type": "integer"
                                },
                                "label": {
                                  "type": "string"
                                },
                                "param": {
                                  "description": "The deploy-template parameter that sets this count",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "param",
                                "label",
                                "authoredCount",
                                "allowedCounts"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          }
                        },
                        "required": [
                          "description",
                          "roles"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when this is a clustered database template whose topology deploy-template can size. Null for everything else."
                  },
                  "services": {
                    "description": "The services this template creates, as authored",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "clusterRole": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Its role in a database cluster: root (primary), replica, internal (coordinator) or edge (proxy). Null for a plain service."
                        },
                        "mountPaths": {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "name": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "slot": {
                          "description": "The service's key in the template config, for reference",
                          "type": "string"
                        },
                        "source": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "`image:\u003cref\u003e` or `repo:\u003cowner/name\u003e[#branch]`"
                        }
                      },
                      "required": [
                        "slot",
                        "name",
                        "source",
                        "clusterRole",
                        "mountPaths"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "template": {
                    "additionalProperties": false,
                    "properties": {
                      "category": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "code": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "isVerified": {
                        "type": "boolean"
                      },
                      "name": {
                        "type": "string"
                      },
                      "readme": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "The template's full README in markdown"
                      },
                      "tags": {
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      }
                    },
                    "required": [
                      "code",
                      "name",
                      "description",
                      "category",
                      "isVerified",
                      "tags",
                      "readme"
                    ],
                    "type": "object"
                  },
                  "variables": {
                    "description": "Env-var inputs, required ones first",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "defaultValue": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "The template's default. A `${{...}}` call is generated at deploy time (e.g. a random secret)."
                        },
                        "description": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "name": {
                          "type": "string"
                        },
                        "required": {
                          "description": "True when deploy-template needs a value for it — no default and not optional",
                          "type": "boolean"
                        },
                        "sealed": {
                          "description": "Sealed values cannot be read back after deployment",
                          "type": "boolean"
                        },
                        "services": {
                          "description": "Services declaring this variable",
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        }
                      },
                      "required": [
                        "name",
                        "services",
                        "description",
                        "defaultValue",
                        "required",
                        "sealed"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "template",
                  "services",
                  "variables",
                  "highAvailability",
                  "bucketNames"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Describe template"
              }
            },
            {
              "name": "deploy-template",
              "description": "Deploy a Railway template into a project — a database (postgres, mysql, redis, mongo), a clustered high-availability database, or an application template. Creates every service the template declares, wired together, and deploys them. Pass staged: true to stage them for the user to review instead.\n\nCall describe-template first: it lists the env-var inputs the template requires and the HA counts it accepts. This tool does not take secrets: never ask the user for, or pass, a password, API key, token or other credential. Use `variables` only for non-secret settings such as names, regions or public URLs. Omit optional inputs to keep the template's defaults — database passwords and other secrets the template declares as generated are created by Railway at deploy time. If a template requires a secret the user must supply, do not deploy it here: give the user the template's dashboard link (in the error this tool returns) so they enter it there.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "code": {
                    "description": "The template's code (the slug in its railway.com/template/\u003ccode\u003e URL), e.g. 'postgres', 'postgres-ha', 'redis'.",
                    "type": "string"
                  },
                  "coordinatorCount": {
                    "description": "For a clustered database template: how many coordinator nodes (etcd/Sentinel-style consensus members). Must be odd and at least 3. Omit to keep the template's authored count.",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "environmentId": {
                    "description": "Environment to deploy into. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project to deploy the template into",
                    "type": "string"
                  },
                  "proxyCount": {
                    "description": "For a clustered database template: how many instances of the proxy/load-balancer tier (e.g. HAProxy). Omit to keep the template's authored count.",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "replicaCount": {
                    "description": "For a clustered database template: how many replicas to deploy alongside the primary (2 replicas = 3 data nodes). Only counts describe-template lists under `allowedCounts` are accepted. Omit to keep the template's authored topology.",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the template's services in the environment's pending changes instead of deploying them. Nothing is provisioned until the staged changes are committed with accept-deploy (or applied in the dashboard).",
                    "type": "boolean"
                  },
                  "variables": {
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "Values for the template's non-secret env-var inputs, keyed by variable name as reported by describe-template. Never pass passwords, API keys, tokens or other credentials here. A name several of the template's services declare gets the same value on each. Unknown names are rejected rather than ignored.",
                    "propertyNames": {
                      "type": "string"
                    },
                    "type": "object"
                  }
                },
                "required": [
                  "code",
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "highAvailability": {
                    "anyOf": [
                      {
                        "additionalProperties": {
                          "maximum": 9007199254740991,
                          "minimum": -9007199254740991,
                          "type": "integer"
                        },
                        "propertyNames": {
                          "type": "string"
                        },
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The member counts applied per role, when any were requested"
                  },
                  "project": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "services": {
                    "description": "Names of the services this deploy creates",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "staged": {
                    "description": "True when the services were staged rather than deployed. Commit them with accept-deploy (or let the user apply them in the dashboard).",
                    "type": "boolean"
                  },
                  "template": {
                    "additionalProperties": false,
                    "properties": {
                      "code": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "code",
                      "name"
                    ],
                    "type": "object"
                  },
                  "variablesApplied": {
                    "description": "Names of the variables set from the `variables` param",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "workflowId": {
                    "description": "The deploy runs asynchronously under this workflow. Follow it with list-services / get-status, or get-staged-changes when staged.",
                    "type": "string"
                  }
                },
                "required": [
                  "template",
                  "project",
                  "environment",
                  "services",
                  "workflowId",
                  "staged",
                  "variablesApplied",
                  "highAvailability"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Deploy template"
              }
            },
            {
              "name": "list-feature-flags",
              "description": "List Railway feature flags (Signals) for a project and optionally the parent workspace. Project flags are editable with admin access; workspace flags are read-only from project context.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "includeWorkspace": {
                    "description": "Include workspace-scoped flags inherited by the project (default true)",
                    "type": "boolean"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "includeWorkspace": {
                    "description": "Whether inherited workspace-scoped flags were requested",
                    "type": "boolean"
                  },
                  "project": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "description": "Project ID",
                        "type": "string"
                      },
                      "name": {
                        "description": "Project name",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "projectFlags": {
                    "description": "Feature flags owned by the project",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "createdAt": {
                          "description": "ISO-8601 creation timestamp",
                          "type": "string"
                        },
                        "defaultValue": {
                          "description": "Current default value"
                        },
                        "id": {
                          "description": "Unique Railway Signal ID",
                          "type": "string"
                        },
                        "name": {
                          "description": "Feature flag name",
                          "type": "string"
                        },
                        "owner": {
                          "description": "Scope owner, such as project:\u003cid\u003e or workspace:\u003cid\u003e",
                          "type": "string"
                        },
                        "rules": {
                          "description": "Ordered targeting rules",
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "expression": {
                                "description": "Rule matching expression"
                              },
                              "id": {
                                "description": "Rule ID",
                                "type": "string"
                              },
                              "source": {
                                "description": "Value source used when the rule matches"
                              }
                            },
                            "required": [
                              "id",
                              "expression",
                              "source"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "type": {
                          "description": "Feature flag value type",
                          "enum": [
                            "bool",
                            "string",
                            "number",
                            "json"
                          ],
                          "type": "string"
                        },
                        "updatedAt": {
                          "description": "ISO-8601 last-update timestamp",
                          "type": "string"
                        },
                        "version": {
                          "description": "Monotonic Signal version",
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "owner",
                        "type",
                        "defaultValue",
                        "rules",
                        "version",
                        "createdAt",
                        "updatedAt"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "workspaceFlags": {
                    "description": "Feature flags inherited from the parent workspace",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "createdAt": {
                          "description": "ISO-8601 creation timestamp",
                          "type": "string"
                        },
                        "defaultValue": {
                          "description": "Current default value"
                        },
                        "id": {
                          "description": "Unique Railway Signal ID",
                          "type": "string"
                        },
                        "name": {
                          "description": "Feature flag name",
                          "type": "string"
                        },
                        "owner": {
                          "description": "Scope owner, such as project:\u003cid\u003e or workspace:\u003cid\u003e",
                          "type": "string"
                        },
                        "rules": {
                          "description": "Ordered targeting rules",
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "expression": {
                                "description": "Rule matching expression"
                              },
                              "id": {
                                "description": "Rule ID",
                                "type": "string"
                              },
                              "source": {
                                "description": "Value source used when the rule matches"
                              }
                            },
                            "required": [
                              "id",
                              "expression",
                              "source"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "type": {
                          "description": "Feature flag value type",
                          "enum": [
                            "bool",
                            "string",
                            "number",
                            "json"
                          ],
                          "type": "string"
                        },
                        "updatedAt": {
                          "description": "ISO-8601 last-update timestamp",
                          "type": "string"
                        },
                        "version": {
                          "description": "Monotonic Signal version",
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "owner",
                        "type",
                        "defaultValue",
                        "rules",
                        "version",
                        "createdAt",
                        "updatedAt"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "project",
                  "includeWorkspace",
                  "projectFlags",
                  "workspaceFlags"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List feature flags"
              }
            },
            {
              "name": "get-feature-flag",
              "description": "Get a Railway feature flag (Signal) by name for a project or its parent workspace scope.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "name": {
                    "description": "Feature flag name",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "scope": {
                    "description": "Owner scope to read from (default \"project\")",
                    "enum": [
                      "project",
                      "workspace"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "name"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "scope": {
                    "description": "Scope from which the feature flag was read",
                    "enum": [
                      "project",
                      "workspace"
                    ],
                    "type": "string"
                  },
                  "signal": {
                    "additionalProperties": false,
                    "properties": {
                      "createdAt": {
                        "description": "ISO-8601 creation timestamp",
                        "type": "string"
                      },
                      "defaultValue": {
                        "description": "Current default value"
                      },
                      "id": {
                        "description": "Unique Railway Signal ID",
                        "type": "string"
                      },
                      "name": {
                        "description": "Feature flag name",
                        "type": "string"
                      },
                      "owner": {
                        "description": "Scope owner, such as project:\u003cid\u003e or workspace:\u003cid\u003e",
                        "type": "string"
                      },
                      "rules": {
                        "description": "Ordered targeting rules",
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "expression": {
                              "description": "Rule matching expression"
                            },
                            "id": {
                              "description": "Rule ID",
                              "type": "string"
                            },
                            "source": {
                              "description": "Value source used when the rule matches"
                            }
                          },
                          "required": [
                            "id",
                            "expression",
                            "source"
                          ],
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "type": {
                        "description": "Feature flag value type",
                        "enum": [
                          "bool",
                          "string",
                          "number",
                          "json"
                        ],
                        "type": "string"
                      },
                      "updatedAt": {
                        "description": "ISO-8601 last-update timestamp",
                        "type": "string"
                      },
                      "version": {
                        "description": "Monotonic Signal version",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name",
                      "owner",
                      "type",
                      "defaultValue",
                      "rules",
                      "version",
                      "createdAt",
                      "updatedAt"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "scope",
                  "signal"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get feature flag"
              }
            },
            {
              "name": "set-feature-flag",
              "description": "Create a project-scoped feature flag or update its default value, optionally replacing its targeting rules. Use list-feature-flags and get-feature-flag to inspect existing flags first.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "defaultValue": {
                    "description": "Default value as text: \"true\"/\"false\", a raw string, a number, or JSON",
                    "type": "string"
                  },
                  "name": {
                    "description": "Feature flag name (letters, numbers, dots, dashes, underscores)",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "rules": {
                    "description": "The flag's complete, ordered list of targeting rules, evaluated before the default. Omit to leave existing rules untouched; pass [] to clear them. Rules not in the list are removed.",
                    "items": {
                      "properties": {
                        "expression": {
                          "description": "Targeting expression in the CEL subset `railway flag set --when` accepts: `workspace_plan == \"enterprise\"`, `region in [\"us-east\", \"eu-west\"]`, `bucket(workspace_id) \u003c 0.25` (percentage rollout), combined with `\u0026\u0026`, `||`, `!`. Raw JSON (a Radar clause or bucket compare) is also accepted.",
                          "type": "string"
                        },
                        "id": {
                          "description": "Stable rule ID. Defaults to a hash of the flag name and expression, so re-sending the same rule updates it in place.",
                          "type": "string"
                        },
                        "value": {
                          "description": "Value served when the rule matches, as text in the flag's type (same format as defaultValue).",
                          "type": "string"
                        }
                      },
                      "required": [
                        "expression",
                        "value"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "type": {
                    "description": "Flag type (required when creating a new flag)",
                    "enum": [
                      "bool",
                      "string",
                      "number",
                      "json"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "name",
                  "defaultValue"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "operation": {
                    "description": "Whether the feature flag was created or its default was updated",
                    "enum": [
                      "created",
                      "updated"
                    ],
                    "type": "string"
                  },
                  "signal": {
                    "additionalProperties": false,
                    "properties": {
                      "createdAt": {
                        "description": "ISO-8601 creation timestamp",
                        "type": "string"
                      },
                      "defaultValue": {
                        "description": "Current default value"
                      },
                      "id": {
                        "description": "Unique Railway Signal ID",
                        "type": "string"
                      },
                      "name": {
                        "description": "Feature flag name",
                        "type": "string"
                      },
                      "owner": {
                        "description": "Scope owner, such as project:\u003cid\u003e or workspace:\u003cid\u003e",
                        "type": "string"
                      },
                      "rules": {
                        "description": "Ordered targeting rules",
                        "items": {
                          "additionalProperties": false,
                          "properties": {
                            "expression": {
                              "description": "Rule matching expression"
                            },
                            "id": {
                              "description": "Rule ID",
                              "type": "string"
                            },
                            "source": {
                              "description": "Value source used when the rule matches"
                            }
                          },
                          "required": [
                            "id",
                            "expression",
                            "source"
                          ],
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "type": {
                        "description": "Feature flag value type",
                        "enum": [
                          "bool",
                          "string",
                          "number",
                          "json"
                        ],
                        "type": "string"
                      },
                      "updatedAt": {
                        "description": "ISO-8601 last-update timestamp",
                        "type": "string"
                      },
                      "version": {
                        "description": "Monotonic Signal version",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name",
                      "owner",
                      "type",
                      "defaultValue",
                      "rules",
                      "version",
                      "createdAt",
                      "updatedAt"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "operation",
                  "signal"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Set feature flag"
              }
            },
            {
              "name": "delete-feature-flag",
              "description": "Delete a project-scoped feature flag. Workspace-scoped flags cannot be deleted from project context.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "name": {
                    "description": "Feature flag name to delete",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "name"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "deleted": {
                    "const": true,
                    "description": "The feature flag was deleted",
                    "type": "boolean"
                  },
                  "name": {
                    "description": "Deleted feature flag name",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "Project from which the flag was deleted",
                    "type": "string"
                  },
                  "scope": {
                    "const": "project",
                    "description": "Deleted feature flag scope",
                    "type": "string"
                  }
                },
                "required": [
                  "deleted",
                  "projectId",
                  "name",
                  "scope"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Delete feature flag"
              }
            },
            {
              "name": "list-deployments",
              "description": "List recent deployments for a Railway project, optionally filtered by environment, service, or status. Returns the most recent first, with who triggered each one, its regions, and whether it can be redeployed or rolled back.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Filter to a specific environment",
                    "type": "string"
                  },
                  "limit": {
                    "description": "Max deployments to return (default 10, max 50)",
                    "maximum": 50,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "Filter to a specific service",
                    "type": "string"
                  },
                  "status": {
                    "description": "Filter to deployments with this status (e.g. SUCCESS, FAILED, CRASHED, BUILDING, DEPLOYING)",
                    "enum": [
                      "WAITING",
                      "NEEDS_APPROVAL",
                      "QUEUED",
                      "INITIALIZING",
                      "SKIPPED",
                      "BUILDING",
                      "DEPLOYING",
                      "SUCCESS",
                      "FAILED",
                      "REMOVED",
                      "CRASHED",
                      "REMOVING",
                      "SLEEPING"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "deployments": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "canRedeploy": {
                          "description": "Whether this deployment's build can be re-run",
                          "type": "boolean"
                        },
                        "canRollback": {
                          "description": "Whether this deployment can be made live again",
                          "type": "boolean"
                        },
                        "createdAt": {
                          "type": "string"
                        },
                        "creator": {
                          "anyOf": [
                            {
                              "additionalProperties": false,
                              "properties": {
                                "email": {
                                  "type": "string"
                                },
                                "id": {
                                  "type": "string"
                                },
                                "name": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "name",
                                "email"
                              ],
                              "type": "object"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "User who triggered the deployment, if one did"
                        },
                        "environmentId": {
                          "type": "string"
                        },
                        "id": {
                          "type": "string"
                        },
                        "meta": {
                          "anyOf": [
                            {
                              "additionalProperties": false,
                              "properties": {
                                "branch": {
                                  "type": "string"
                                },
                                "commitHash": {
                                  "type": "string"
                                },
                                "commitMessage": {
                                  "type": "string"
                                },
                                "image": {
                                  "type": "string"
                                },
                                "reason": {
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "regions": {
                          "description": "Regions the deployment's instances were placed in",
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "serviceId": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "snapshotId": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "status": {
                          "type": "string"
                        },
                        "updatedAt": {
                          "type": "string"
                        },
                        "url": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "status",
                        "createdAt",
                        "updatedAt",
                        "serviceId",
                        "environmentId",
                        "url",
                        "snapshotId",
                        "creator",
                        "canRollback",
                        "canRedeploy",
                        "regions",
                        "meta"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "deployments"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List deployments"
              }
            },
            {
              "name": "get-status",
              "description": "Prefer describe-environment: it also lists services that exist only in the staged patch, unattached volumes, and each resource's staged state. Get the deployment status of a Railway project environment. Returns project + environment metadata, whether the environment has undeployed staged changes, the environment's buckets, and for each live service its latest deployment status, replica count, cron schedule, and attached volumes. Also includes `pendingWork`: the environment's pending (staged/applying) work that is not live yet — a staged patch or a commit still rolling out (poll until the operation leaves this list). If environmentId is omitted, the project's `production` environment is used when present, otherwise the oldest environment.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment to report on. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "buckets": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "id": {
                          "description": "Bucket ID",
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "region": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "region"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "stagedChanges": {
                        "anyOf": [
                          {
                            "additionalProperties": false,
                            "properties": {
                              "changeCount": {
                                "description": "Number of pending change entries in the staged patch across services, volumes, buckets and shared variables (the same entries listed under pendingWork)",
                                "maximum": 9007199254740991,
                                "minimum": -9007199254740991,
                                "type": "integer"
                              },
                              "patchId": {
                                "type": "string"
                              },
                              "patchStatus": {
                                "description": "STAGED, or APPLYING while a commit is in flight",
                                "type": "string"
                              }
                            },
                            "required": [
                              "patchId",
                              "patchStatus",
                              "changeCount"
                            ],
                            "type": "object"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Changes staged in this environment but not deployed yet, or null when nothing is staged. Commit them with accept-deploy, or use get-service-config to see them per service."
                      },
                      "unmergedChangesCount": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Changes not yet merged from a forked environment — unrelated to staged changes"
                      }
                    },
                    "required": [
                      "id",
                      "name",
                      "unmergedChangesCount",
                      "stagedChanges"
                    ],
                    "type": "object"
                  },
                  "pendingWork": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "changes": {
                          "description": "Summary of the changes carried by this operation",
                          "items": {},
                          "type": "array"
                        },
                        "id": {
                          "description": "Operation id (`patch:\u003cpatchId\u003e` or `deploy:\u003cdeploymentId\u003e`), pollable via environmentPendingWork",
                          "type": "string"
                        },
                        "kind": {
                          "description": "Source of the operation (e.g. EnvironmentPatch, Deployment)",
                          "type": "string"
                        },
                        "startedAt": {
                          "description": "When the operation started (ISO 8601)",
                          "type": "string"
                        },
                        "status": {
                          "description": "staged = written but not committed; applying = commit in flight, not live yet",
                          "enum": [
                            "staged",
                            "applying"
                          ],
                          "type": "string"
                        },
                        "workflowId": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Temporal workflow driving the operation, if any"
                        }
                      },
                      "required": [
                        "id",
                        "kind",
                        "status",
                        "changes",
                        "startedAt",
                        "workflowId"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "project": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "workspaceName": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "name",
                      "workspaceName"
                    ],
                    "type": "object"
                  },
                  "services": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "cronSchedule": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "id": {
                          "type": "string"
                        },
                        "latestDeployment": {
                          "anyOf": [
                            {
                              "additionalProperties": false,
                              "properties": {
                                "createdAt": {
                                  "type": "string"
                                },
                                "id": {
                                  "type": "string"
                                },
                                "status": {
                                  "type": "string"
                                },
                                "url": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "status",
                                "createdAt",
                                "url"
                              ],
                              "type": "object"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "name": {
                          "type": "string"
                        },
                        "numReplicas": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "volumes": {
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "id": {
                                "description": "Volume ID",
                                "type": "string"
                              },
                              "mountPath": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              },
                              "region": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "sizeMB": {
                                "maximum": 9007199254740991,
                                "minimum": -9007199254740991,
                                "type": "integer"
                              }
                            },
                            "required": [
                              "id",
                              "name",
                              "mountPath",
                              "sizeMB",
                              "region"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "numReplicas",
                        "cronSchedule",
                        "volumes",
                        "latestDeployment"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "project",
                  "environment",
                  "services",
                  "buckets",
                  "pendingWork"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get project status"
              }
            },
            {
              "name": "get-logs",
              "description": "Get logs from Railway — deploy (runtime), build, http (proxy request), network-flow (per-connection egress/ingress) and dns (name lookups) streams. Pass a deploymentId to read one deployment, or serviceId (+ optional environmentId) to read the service's logs across its recent deployments in that environment. Use `types` to choose which streams to return (default: ['deploy']).",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "deploymentId": {
                    "description": "A specific deployment ID. Omit it and pass serviceId to read the service's logs across its recent deployments.",
                    "type": "string"
                  },
                  "endDate": {
                    "description": "ISO 8601 timestamp with an explicit timezone, at minute precision or finer. Example: \"2026-07-27T15:30:00.000Z\". Fractional seconds are optional; defaults to now.",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment ID to read logs from. Optional — when omitted with a serviceId, the project's production environment is used (or its oldest, if there is no production).",
                    "type": "string"
                  },
                  "filter": {
                    "description": "Optional log filter expression (Loki-style, same syntax as the Railway dashboard). Applies to build and deploy streams; http, network-flow and dns take their own @field filters (e.g. @status:500, @direction:egress, @rcode:NXDOMAIN).",
                    "type": "string"
                  },
                  "limit": {
                    "description": "Max log entries per stream (default 100, max 500)",
                    "maximum": 500,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "Service ID. With no deploymentId, returns the service's logs across its deployments in the environment (build logs come from the latest deployment).",
                    "type": "string"
                  },
                  "startDate": {
                    "description": "ISO 8601 timestamp with an explicit timezone, at minute precision or finer. Example: \"2026-07-27T14:30:00.000Z\". Fractional seconds are optional.",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                    "type": "string"
                  },
                  "types": {
                    "description": "Array of log stream names. Example: [\"build\", \"deploy\"] or [\"http\", \"network-flow\", \"dns\"]. Omit to fetch only deploy logs.",
                    "items": {
                      "enum": [
                        "build",
                        "deploy",
                        "http",
                        "network-flow",
                        "dns"
                      ],
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "build": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "attributes": {
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "key": {
                                "type": "string"
                              },
                              "value": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "key",
                              "value"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "message": {
                          "type": "string"
                        },
                        "severity": {
                          "type": "string"
                        },
                        "timestamp": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "timestamp",
                        "message",
                        "attributes"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "deploy": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "attributes": {
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "key": {
                                "type": "string"
                              },
                              "value": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "key",
                              "value"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "message": {
                          "type": "string"
                        },
                        "severity": {
                          "type": "string"
                        },
                        "timestamp": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "timestamp",
                        "message",
                        "attributes"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "deploymentId": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The deployment read (deployment scope), or the service's latest deployment (service scope)"
                  },
                  "dns": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "answers": {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "cnameChain": {
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "deploymentId": {
                          "type": "string"
                        },
                        "qname": {
                          "type": "string"
                        },
                        "qtype": {
                          "type": "string"
                        },
                        "rcode": {
                          "type": "string"
                        },
                        "timestamp": {
                          "type": "string"
                        },
                        "zone": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "timestamp",
                        "qname",
                        "qtype",
                        "rcode",
                        "zone",
                        "answers",
                        "cnameChain",
                        "deploymentId"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "environmentId": {
                    "type": "string"
                  },
                  "http": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "clientUa": {
                          "type": "string"
                        },
                        "host": {
                          "type": "string"
                        },
                        "httpStatus": {
                          "type": "number"
                        },
                        "method": {
                          "type": "string"
                        },
                        "path": {
                          "type": "string"
                        },
                        "srcIp": {
                          "type": "string"
                        },
                        "timestamp": {
                          "type": "string"
                        },
                        "totalDuration": {
                          "type": "number"
                        },
                        "upstreamErrors": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "timestamp",
                        "method",
                        "path",
                        "host",
                        "httpStatus",
                        "totalDuration",
                        "srcIp",
                        "clientUa",
                        "upstreamErrors"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "networkFlow": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "byteCount": {
                          "type": "number"
                        },
                        "captureEnd": {
                          "type": "string"
                        },
                        "captureStart": {
                          "type": "string"
                        },
                        "deploymentId": {
                          "type": "string"
                        },
                        "direction": {
                          "type": "string"
                        },
                        "dropCause": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "dstAddr": {
                          "type": "string"
                        },
                        "dstPort": {
                          "type": "number"
                        },
                        "flowState": {
                          "type": "string"
                        },
                        "latencyMs": {
                          "type": "number"
                        },
                        "packetCount": {
                          "type": "number"
                        },
                        "peerKind": {
                          "type": "string"
                        },
                        "peerServiceId": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "protocol": {
                          "type": "string"
                        },
                        "srcAddr": {
                          "type": "string"
                        },
                        "srcPort": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "captureStart",
                        "captureEnd",
                        "flowState",
                        "direction",
                        "protocol",
                        "srcAddr",
                        "srcPort",
                        "dstAddr",
                        "dstPort",
                        "byteCount",
                        "packetCount",
                        "latencyMs",
                        "peerKind",
                        "peerServiceId",
                        "dropCause",
                        "deploymentId"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "scope": {
                    "description": "deployment: one deployment's logs. service: the service's logs across its deployments in the environment",
                    "enum": [
                      "deployment",
                      "service"
                    ],
                    "type": "string"
                  },
                  "serviceId": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "status": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "scope",
                  "deploymentId",
                  "serviceId",
                  "environmentId",
                  "status"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get logs"
              }
            },
            {
              "name": "list-traces",
              "description": "List distributed traces of an environment, newest first — one row per request that has at least one span matching the filter. Use it to find slow or failing requests across services, then call get-trace with a traceId for the spans. Defaults to the last hour. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "endDate": {
                    "description": "Latest span start to consider. ISO 8601 with an explicit timezone, e.g. \"2026-07-27T15:30:00.000Z\". Defaults to now.",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment to read traces from. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "filter": {
                    "description": "Filter expression over spans, e.g. @status:error @component:edge @duration:\u003e500 @http.route:/api/users. Built-in fields: trace, span, name, serviceName, service, deployment, replica, component, kind, status, duration (ms). Any other @key looks the key up in the span and resource attributes; free text matches the span name. Prefix a term with - to exclude it.",
                    "type": "string"
                  },
                  "limit": {
                    "description": "Max traces to return (default 100, max 500)",
                    "maximum": 500,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "Only traces with at least one span from this service. Omit for the whole environment.",
                    "type": "string"
                  },
                  "startDate": {
                    "description": "Oldest span start to consider. ISO 8601 with an explicit timezone, e.g. \"2026-07-27T14:30:00.000Z\". Clamped to the project's log retention; defaults to one hour before endDate.",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "traces": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "durationMs": {
                          "description": "From the earliest span start to the latest span end",
                          "type": "number"
                        },
                        "errorCount": {
                          "description": "Spans with an error status",
                          "type": "number"
                        },
                        "hasEdge": {
                          "description": "Whether the edge exported any span",
                          "type": "boolean"
                        },
                        "rootComponent": {
                          "description": "Which hop exported the root span: edge, proxy or service",
                          "type": "string"
                        },
                        "rootServerAddress": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "The root span's server.address, when it set one"
                        },
                        "rootServiceId": {
                          "type": "string"
                        },
                        "rootServiceName": {
                          "description": "The root span's service.name",
                          "type": "string"
                        },
                        "rootSpanName": {
                          "type": "string"
                        },
                        "rootUrlPath": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "The root span's url.path, when it set one"
                        },
                        "serviceName": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "service.name of the earliest span a service exported; null when the request never reached one"
                        },
                        "spanCount": {
                          "type": "number"
                        },
                        "startedAt": {
                          "description": "Start of the earliest span (ISO timestamp)",
                          "type": "string"
                        },
                        "traceId": {
                          "description": "W3C trace id, 32 lower-case hex characters",
                          "type": "string"
                        }
                      },
                      "required": [
                        "traceId",
                        "startedAt",
                        "durationMs",
                        "rootSpanName",
                        "rootServiceName",
                        "rootComponent",
                        "rootServiceId",
                        "rootServerAddress",
                        "rootUrlPath",
                        "serviceName",
                        "hasEdge",
                        "spanCount",
                        "errorCount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "window": {
                    "additionalProperties": false,
                    "properties": {
                      "end": {
                        "type": "string"
                      },
                      "start": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "start",
                      "end"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "environment",
                  "window",
                  "traces"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List traces"
              }
            },
            {
              "name": "get-trace",
              "description": "Get the spans of one distributed trace, as a tree from the edge down through every service that handled the request. Find trace IDs with list-traces. Only spans belonging to the environment are returned. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment the trace belongs to. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "maxSpans": {
                    "description": "Max spans to return, oldest first (default 1000, max 2000)",
                    "maximum": 2000,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "traceId": {
                    "description": "W3C trace id, 32 hex characters",
                    "pattern": "^[0-9a-fA-F]{32}$",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "traceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "spanCount": {
                    "type": "number"
                  },
                  "spans": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "component": {
                          "description": "Which hop exported the span: edge, proxy or service",
                          "type": "string"
                        },
                        "deploymentId": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "deploymentInstanceId": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "durationMs": {
                          "type": "number"
                        },
                        "events": {
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "attributes": {
                                "additionalProperties": {
                                  "type": "string"
                                },
                                "propertyNames": {
                                  "type": "string"
                                },
                                "type": "object"
                              },
                              "name": {
                                "type": "string"
                              },
                              "timestamp": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "timestamp",
                              "name",
                              "attributes"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "kind": {
                          "description": "INTERNAL, SERVER, CLIENT, PRODUCER, CONSUMER or UNSPECIFIED",
                          "type": "string"
                        },
                        "links": {
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "spanId": {
                                "type": "string"
                              },
                              "traceId": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "traceId",
                              "spanId"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "name": {
                          "type": "string"
                        },
                        "parentSpanId": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Null on a root span"
                        },
                        "resourceAttributes": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "propertyNames": {
                            "type": "string"
                          },
                          "type": "object"
                        },
                        "scopeName": {
                          "description": "The instrumentation library that emitted the span (OpenTelemetry scope name)",
                          "type": "string"
                        },
                        "serviceId": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "serviceName": {
                          "description": "The exporter's service.name",
                          "type": "string"
                        },
                        "spanAttributes": {
                          "additionalProperties": {
                            "type": "string"
                          },
                          "propertyNames": {
                            "type": "string"
                          },
                          "type": "object"
                        },
                        "spanId": {
                          "description": "16 lower-case hex characters",
                          "type": "string"
                        },
                        "startedAt": {
                          "description": "ISO timestamp",
                          "type": "string"
                        },
                        "statusCode": {
                          "description": "UNSET, OK or ERROR",
                          "type": "string"
                        },
                        "statusMessage": {
                          "type": "string"
                        },
                        "traceId": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "traceId",
                        "spanId",
                        "parentSpanId",
                        "startedAt",
                        "durationMs",
                        "name",
                        "kind",
                        "scopeName",
                        "component",
                        "serviceName",
                        "serviceId",
                        "deploymentId",
                        "deploymentInstanceId",
                        "statusCode",
                        "statusMessage",
                        "resourceAttributes",
                        "spanAttributes",
                        "events",
                        "links"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "traceId": {
                    "type": "string"
                  },
                  "truncated": {
                    "description": "True when the trace has more spans than maxSpans allowed",
                    "type": "boolean"
                  }
                },
                "required": [
                  "environment",
                  "traceId",
                  "spanCount",
                  "truncated",
                  "spans"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get trace"
              }
            },
            {
              "name": "get-tracing",
              "description": "Read the tracing settings of an environment's services: whether each is traced and its auto-instrumentation switch. Pass serviceId for one service, omit it for every service in the environment. Tracing is set per service and environment; if environmentId is omitted, the production environment is used. Change it with set-service-tracing; use list-traces to see whether spans are arriving.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "The environment ID. Defaults to production.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "One service to read. Omit for every service in the environment.",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "services": {
                    "description": "The requested service, or every service in the environment when serviceId is omitted",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "autoInstrumentationActive": {
                          "description": "Whether auto-instrumentation is in effect. The switch only does anything while tracing is enabled.",
                          "type": "boolean"
                        },
                        "autoInstrumentationEnabled": {
                          "description": "The service's auto-instrumentation switch: Railway instruments its processes with eBPF (OBI) for supported runtimes, no code changes",
                          "type": "boolean"
                        },
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "tracingEnabled": {
                          "description": "Whether requests to the service are traced in this environment: the edge records a span per client-facing request and the next deploy provides the OpenTelemetry exporter variables",
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "tracingEnabled",
                        "autoInstrumentationEnabled",
                        "autoInstrumentationActive",
                        "id",
                        "name"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "environment",
                  "services"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get tracing settings"
              }
            },
            {
              "name": "get-tracing-coverage",
              "description": "Report what one service's own instrumentation covers: the spans its app exported in the window, by span kind, by the remote system they name (database, cache, queue, RPC or HTTP client) and by the instrumentation library that emitted them. Use it after instrumenting a service to prove that its database queries and outgoing calls produce spans, not just its incoming requests. Defaults to the last hour. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "endDate": {
                    "description": "Latest span start to consider. ISO 8601 with an explicit timezone, e.g. \"2026-07-27T15:30:00.000Z\". Defaults to now.",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment to read spans from. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service whose spans to summarise",
                    "type": "string"
                  },
                  "startDate": {
                    "description": "Oldest span start to consider. ISO 8601 with an explicit timezone, e.g. \"2026-07-27T14:30:00.000Z\". Clamped to the project's log retention; defaults to one hour before endDate.",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "kinds": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "kind": {
                          "description": "SERVER, CLIENT, INTERNAL, PRODUCER, CONSUMER or UNSPECIFIED",
                          "type": "string"
                        },
                        "spans": {
                          "maximum": 9007199254740991,
                          "minimum": -9007199254740991,
                          "type": "integer"
                        }
                      },
                      "required": [
                        "kind",
                        "spans"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "lastSpanAt": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "ISO timestamp of the newest one"
                  },
                  "scopes": {
                    "description": "The instrumentation libraries that emitted spans (OpenTelemetry scope names, e.g. @opentelemetry/instrumentation-pg), busiest first",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "scope": {
                          "type": "string"
                        },
                        "spans": {
                          "maximum": 9007199254740991,
                          "minimum": -9007199254740991,
                          "type": "integer"
                        }
                      },
                      "required": [
                        "scope",
                        "spans"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "spanCount": {
                    "description": "Spans the service's own app exported in the window; edge and proxy spans are not counted",
                    "maximum": 9007199254740991,
                    "minimum": -9007199254740991,
                    "type": "integer"
                  },
                  "systems": {
                    "description": "The remote systems the app's spans name, busiest first",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "kind": {
                          "enum": [
                            "db",
                            "messaging",
                            "rpc",
                            "http"
                          ],
                          "type": "string"
                        },
                        "spans": {
                          "maximum": 9007199254740991,
                          "minimum": -9007199254740991,
                          "type": "integer"
                        },
                        "system": {
                          "description": "db.system (postgresql, redis, mongodb, ...), messaging.system, rpc.system, or http for HTTP client spans",
                          "type": "string"
                        }
                      },
                      "required": [
                        "kind",
                        "system",
                        "spans"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "window": {
                    "additionalProperties": false,
                    "properties": {
                      "end": {
                        "type": "string"
                      },
                      "start": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "start",
                      "end"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "environment",
                  "service",
                  "window",
                  "spanCount",
                  "lastSpanAt",
                  "kinds",
                  "systems",
                  "scopes"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get tracing coverage"
              }
            },
            {
              "name": "set-service-tracing",
              "description": "Enable or disable tracing and auto-instrumentation for one service in one environment, each independently. tracingEnabled switches whether the edge traces requests to the service and whether its next deploy gets the OpenTelemetry exporter variables. autoInstrumentationEnabled switches eBPF (OBI) instrumentation of the service's processes, which only takes effect while tracing is enabled. No redeploy is needed for the edge or auto-instrumentation. If environmentId is omitted, the production environment is used. Read the current state with get-tracing.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "autoInstrumentationEnabled": {
                    "description": "Switch auto-instrumentation (eBPF/OBI) for this service in the environment. Omit to leave it alone.",
                    "type": "boolean"
                  },
                  "environmentId": {
                    "description": "The environment ID. Defaults to production.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  },
                  "tracingEnabled": {
                    "description": "Trace requests to this service in the environment. Omit to leave it alone.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "service": {
                    "additionalProperties": false,
                    "description": "The service's state in the environment after the change",
                    "properties": {
                      "autoInstrumentationActive": {
                        "description": "Whether auto-instrumentation is in effect. The switch only does anything while tracing is enabled.",
                        "type": "boolean"
                      },
                      "autoInstrumentationEnabled": {
                        "description": "The service's auto-instrumentation switch: Railway instruments its processes with eBPF (OBI) for supported runtimes, no code changes",
                        "type": "boolean"
                      },
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "tracingEnabled": {
                        "description": "Whether requests to the service are traced in this environment: the edge records a span per client-facing request and the next deploy provides the OpenTelemetry exporter variables",
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "tracingEnabled",
                      "autoInstrumentationEnabled",
                      "autoInstrumentationActive",
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "updatedFields": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "environment",
                  "service",
                  "updatedFields"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Set service tracing"
              }
            },
            {
              "name": "http-requests",
              "description": "Get HTTP request counts for a service, bucketed over time and split by response status class (2xx/3xx/4xx/5xx). Use this for traffic volume and the mix of successful versus failing responses. Defaults to the last hour. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "hoursBack": {
                    "description": "Time window in hours, up to 168 (7 days). Defaults to 1.",
                    "maximum": 168,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "maxDataPoints": {
                    "description": "Target number of buckets across the window. Defaults to 30, max 60 — the same cap the chat agent uses. Buckets are never finer than one minute, so a short window returns fewer than requested.",
                    "maximum": 60,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "method": {
                    "description": "Restrict to one HTTP method, e.g. GET.",
                    "type": "string"
                  },
                  "path": {
                    "description": "Restrict to one request path.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "samples": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "2xx": {
                          "type": "number"
                        },
                        "3xx": {
                          "type": "number"
                        },
                        "4xx": {
                          "type": "number"
                        },
                        "5xx": {
                          "type": "number"
                        },
                        "total": {
                          "type": "number"
                        },
                        "ts": {
                          "description": "Bucket start, unix seconds",
                          "type": "number"
                        }
                      },
                      "required": [
                        "ts",
                        "2xx",
                        "3xx",
                        "4xx",
                        "5xx",
                        "total"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "totals": {
                    "additionalProperties": false,
                    "properties": {
                      "2xx": {
                        "type": "number"
                      },
                      "3xx": {
                        "type": "number"
                      },
                      "4xx": {
                        "type": "number"
                      },
                      "5xx": {
                        "type": "number"
                      },
                      "total": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "2xx",
                      "3xx",
                      "4xx",
                      "5xx",
                      "total"
                    ],
                    "type": "object"
                  },
                  "window": {
                    "additionalProperties": false,
                    "properties": {
                      "bucketCount": {
                        "description": "Buckets actually returned",
                        "type": "number"
                      },
                      "hoursBack": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "hoursBack",
                      "bucketCount"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "service",
                  "environment",
                  "window",
                  "totals",
                  "samples"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "HTTP request counts"
              }
            },
            {
              "name": "http-error-rate",
              "description": "Get the HTTP error rate for a service over time — the share of requests answered with a 5xx. Use this for reliability and to locate error spikes. 4xx responses are reported separately and are not counted in the rate, since a 404 or a rejected payload is usually the caller's doing. Defaults to the last hour. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "hoursBack": {
                    "description": "Time window in hours, up to 168 (7 days). Defaults to 1.",
                    "maximum": 168,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "maxDataPoints": {
                    "description": "Target number of buckets across the window. Defaults to 30, max 60 — the same cap the chat agent uses. Buckets are never finer than one minute, so a short window returns fewer than requested.",
                    "maximum": 60,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "method": {
                    "description": "Restrict to one HTTP method, e.g. GET.",
                    "type": "string"
                  },
                  "path": {
                    "description": "Restrict to one request path.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "overall": {
                    "additionalProperties": false,
                    "properties": {
                      "clientErrorCount": {
                        "description": "4xx responses, not counted in errorRate",
                        "type": "number"
                      },
                      "errorCount": {
                        "description": "5xx responses",
                        "type": "number"
                      },
                      "errorRate": {
                        "description": "Percentage of requests answered 5xx",
                        "type": "number"
                      },
                      "totalRequests": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "errorRate",
                      "totalRequests",
                      "errorCount",
                      "clientErrorCount"
                    ],
                    "type": "object"
                  },
                  "samples": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "clientErrorCount": {
                          "type": "number"
                        },
                        "errorCount": {
                          "type": "number"
                        },
                        "errorRate": {
                          "type": "number"
                        },
                        "totalRequests": {
                          "type": "number"
                        },
                        "ts": {
                          "description": "Bucket start, unix seconds",
                          "type": "number"
                        }
                      },
                      "required": [
                        "ts",
                        "errorRate",
                        "totalRequests",
                        "errorCount",
                        "clientErrorCount"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "window": {
                    "additionalProperties": false,
                    "properties": {
                      "bucketCount": {
                        "description": "Buckets actually returned",
                        "type": "number"
                      },
                      "hoursBack": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "hoursBack",
                      "bucketCount"
                    ],
                    "type": "object"
                  },
                  "worstBucket": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "clientErrorCount": {
                            "type": "number"
                          },
                          "errorCount": {
                            "type": "number"
                          },
                          "errorRate": {
                            "type": "number"
                          },
                          "totalRequests": {
                            "type": "number"
                          },
                          "ts": {
                            "description": "Bucket start, unix seconds",
                            "type": "number"
                          }
                        },
                        "required": [
                          "ts",
                          "errorRate",
                          "totalRequests",
                          "errorCount",
                          "clientErrorCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Bucket with the highest error rate, if any traffic"
                  }
                },
                "required": [
                  "service",
                  "environment",
                  "window",
                  "overall",
                  "worstBucket",
                  "samples"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "HTTP error rate"
              }
            },
            {
              "name": "http-response-time",
              "description": "Get HTTP latency percentiles (p50, p90, p95, p99) for a service, bucketed over time, in milliseconds. Use this for performance and to find slow requests. Defaults to the last hour. If environmentId is omitted, the production environment is used.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment ID. Defaults to `production` if present, otherwise the project's oldest environment.",
                    "type": "string"
                  },
                  "hoursBack": {
                    "description": "Time window in hours, up to 168 (7 days). Defaults to 1.",
                    "maximum": 168,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "maxDataPoints": {
                    "description": "Target number of buckets across the window. Defaults to 30, max 60 — the same cap the chat agent uses. Buckets are never finer than one minute, so a short window returns fewer than requested.",
                    "maximum": 60,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "method": {
                    "description": "Restrict to one HTTP method, e.g. GET.",
                    "type": "string"
                  },
                  "path": {
                    "description": "Restrict to one request path.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  },
                  "statusCode": {
                    "description": "Restrict to one exact response status code, e.g. 200.",
                    "maximum": 9007199254740991,
                    "minimum": -9007199254740991,
                    "type": "integer"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "samples": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "p50": {
                          "type": "number"
                        },
                        "p90": {
                          "type": "number"
                        },
                        "p95": {
                          "type": "number"
                        },
                        "p99": {
                          "type": "number"
                        },
                        "ts": {
                          "description": "Bucket start, unix seconds",
                          "type": "number"
                        }
                      },
                      "required": [
                        "ts",
                        "p50",
                        "p90",
                        "p95",
                        "p99"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "slowestBucket": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "p50": {
                            "type": "number"
                          },
                          "p90": {
                            "type": "number"
                          },
                          "p95": {
                            "type": "number"
                          },
                          "p99": {
                            "type": "number"
                          },
                          "ts": {
                            "description": "Bucket start, unix seconds",
                            "type": "number"
                          }
                        },
                        "required": [
                          "ts",
                          "p50",
                          "p90",
                          "p95",
                          "p99"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Bucket with the highest p95, if any traffic"
                  },
                  "window": {
                    "additionalProperties": false,
                    "properties": {
                      "bucketCount": {
                        "description": "Buckets actually returned",
                        "type": "number"
                      },
                      "hoursBack": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "hoursBack",
                      "bucketCount"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "service",
                  "environment",
                  "window",
                  "slowestBucket",
                  "samples"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "HTTP response times"
              }
            },
            {
              "name": "redeploy",
              "description": "Re-run the most recent deployment of a service in a given environment, reusing that deployment's existing build. Pass deploymentId to redeploy an earlier deployment's build instead (list-deployments has the ids). Only works on a service that has already deployed in that environment — check with list-deployments if you are unsure. This does NOT give a service its first deployment: if it has never deployed, nothing here can deploy it — use the Railway CLI (`railway up --project \u003cid\u003e --environment \u003cid\u003e --service \u003cid\u003e`), or attach a GitHub repo to the service in the dashboard. create-deployment would build a separate new service from a GitHub repo rather than deploying this one.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "deploymentId": {
                    "description": "Redeploy this deployment's build instead of the service's latest one. Must belong to the given service and environment.",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "The environment ID to redeploy in",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID to redeploy",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId",
                  "environmentId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "deployment": {
                    "additionalProperties": false,
                    "properties": {
                      "environmentId": {
                        "description": "Environment receiving the redeployment",
                        "type": "string"
                      },
                      "id": {
                        "description": "New deployment ID",
                        "type": "string"
                      },
                      "serviceId": {
                        "description": "Redeployed service ID",
                        "type": "string"
                      },
                      "status": {
                        "description": "Initial Railway deployment status",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "status",
                      "serviceId",
                      "environmentId"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "deployment"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Redeploy service"
              }
            },
            {
              "name": "restart-service",
              "description": "Restart a service's running deployment in place — the containers restart without rebuilding the image, and no new deployment is created (use redeploy for a fresh build copy). Restarting causes brief downtime; do NOT restart database services (Postgres, MySQL, Redis, MongoDB) or services with attached volumes unless the user explicitly asked, as it can interrupt in-flight queries and transactions.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "deploymentId": {
                    "description": "Specific deployment to restart. If omitted, the latest running or crashed deployment is restarted.",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment whose deployment to restart. Defaults to the production environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID to restart",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "deploymentId": {
                    "description": "The deployment that was restarted",
                    "type": "string"
                  },
                  "environmentId": {
                    "type": "string"
                  },
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "deploymentId",
                  "service",
                  "environmentId"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Restart service"
              }
            },
            {
              "name": "get-deployment-diagnosis",
              "description": "Get the AI-generated diagnosis for a failed deployment: root cause category, analysis, and suggested fixes, along with deployment context (service config, source repo, branch, commit, PR, failure stage and error). Diagnoses run automatically when a deployment fails — if one isn't available yet, fall back to get-logs to inspect the failure directly.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "deploymentId": {
                    "description": "The deployment ID to get the diagnosis for",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "deploymentId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "context": {
                    "description": "Deployment context: service config, source repo/branch/commit, PR info, and failure details"
                  },
                  "deploymentId": {
                    "type": "string"
                  },
                  "deploymentStatus": {
                    "type": "string"
                  },
                  "diagnosis": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "category": {
                            "type": "string"
                          },
                          "details": {
                            "type": "string"
                          },
                          "suggestedFixes": {
                            "items": {
                              "additionalProperties": false,
                              "properties": {
                                "configPatch": {
                                  "description": "A JSON-compatible value"
                                },
                                "description": {
                                  "type": "string"
                                },
                                "documentationUrl": {
                                  "type": "string"
                                },
                                "label": {
                                  "type": "string"
                                },
                                "plan": {
                                  "type": "string"
                                },
                                "type": {
                                  "type": "string"
                                },
                                "url": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "type",
                                "description"
                              ],
                              "type": "object"
                            },
                            "type": "array"
                          },
                          "summary": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The completed diagnosis, or null when none is available"
                  }
                },
                "required": [
                  "deploymentId",
                  "deploymentStatus",
                  "diagnosis",
                  "context"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get deployment diagnosis"
              }
            },
            {
              "name": "environment-status",
              "description": "Health overview of every service in an environment in one call: current LIVE (settled) deployment state, replica status, recent failures, unresolved warnings/criticals, and cron execution results. Also includes `pendingWork`: the environment's pending (staged/applying) work that is not live yet — a staged patch or a commit still rolling out (poll until the operation leaves this list). By default only services with issues are returned — pass includeSuccessful to see everything. For error details, follow up with get-logs on the deployment IDs returned here.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment to check. Defaults to the production environment.",
                    "type": "string"
                  },
                  "hoursBack": {
                    "description": "How many hours back to count failures (default 8)",
                    "maximum": 168,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "includeSuccessful": {
                    "description": "Include healthy services too (default false: only services with issues)",
                    "type": "boolean"
                  },
                  "limit": {
                    "description": "Maximum services to return (default 10)",
                    "maximum": 10,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceFilter": {
                    "description": "Minimatch pattern to filter services by name — NOT fuzzy; wrap in wildcards for substring matching, e.g. \"*api*\". Omit for all services.",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "pendingWork": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "changes": {
                          "description": "Summary of the changes carried by this operation",
                          "items": {},
                          "type": "array"
                        },
                        "id": {
                          "description": "Operation id (`patch:\u003cpatchId\u003e` or `deploy:\u003cdeploymentId\u003e`), pollable via environmentPendingWork",
                          "type": "string"
                        },
                        "kind": {
                          "description": "Source of the operation (e.g. EnvironmentPatch, Deployment)",
                          "type": "string"
                        },
                        "startedAt": {
                          "description": "When the operation started (ISO 8601)",
                          "type": "string"
                        },
                        "status": {
                          "description": "staged = written but not committed; applying = commit in flight, not live yet",
                          "enum": [
                            "staged",
                            "applying"
                          ],
                          "type": "string"
                        },
                        "workflowId": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Temporal workflow driving the operation, if any"
                        }
                      },
                      "required": [
                        "id",
                        "kind",
                        "status",
                        "changes",
                        "startedAt",
                        "workflowId"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "services": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "activeDeployments": {
                          "description": "Active deployments for this service, newest first (max 3)",
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "createdAt": {
                                "description": "When the deployment was created",
                                "type": "string"
                              },
                              "id": {
                                "description": "Deployment ID",
                                "type": "string"
                              },
                              "status": {
                                "description": "Deployment status (SUCCESS, BUILDING, CRASHED, etc.)",
                                "type": "string"
                              },
                              "statusUpdatedAt": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "When the status last changed"
                              }
                            },
                            "required": [
                              "id",
                              "status",
                              "createdAt"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "cronJob": {
                          "anyOf": [
                            {
                              "additionalProperties": false,
                              "properties": {
                                "lastExecutionAt": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "When the last cron execution completed or started"
                                },
                                "lastExecutionStatus": {
                                  "anyOf": [
                                    {
                                      "enum": [
                                        "running",
                                        "succeeded",
                                        "failed"
                                      ],
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "Status of the last cron execution"
                                }
                              },
                              "type": "object"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Cron job execution info (only for cron services)"
                        },
                        "hasIssues": {
                          "description": "Whether this service has any issues (failed/crashed deployments or active notifications)",
                          "type": "boolean"
                        },
                        "hasVolume": {
                          "description": "Whether the service has a volume attached",
                          "type": "boolean"
                        },
                        "isCronJob": {
                          "description": "Whether the service is a cron job",
                          "type": "boolean"
                        },
                        "issues": {
                          "additionalProperties": false,
                          "properties": {
                            "criticalCount": {
                              "description": "Number of active critical notifications",
                              "type": "number"
                            },
                            "warningCount": {
                              "description": "Number of active warning notifications",
                              "type": "number"
                            }
                          },
                          "required": [
                            "warningCount",
                            "criticalCount"
                          ],
                          "type": "object"
                        },
                        "recentFailedDeployments": {
                          "description": "Recent failed/crashed deployments in the time window, newest first (max 3). Use these IDs with log search tools.",
                          "items": {
                            "additionalProperties": false,
                            "properties": {
                              "createdAt": {
                                "description": "When the deployment was created",
                                "type": "string"
                              },
                              "id": {
                                "description": "Deployment ID — pass to log search tools to investigate",
                                "type": "string"
                              },
                              "status": {
                                "description": "FAILED or CRASHED",
                                "type": "string"
                              }
                            },
                            "required": [
                              "id",
                              "status",
                              "createdAt"
                            ],
                            "type": "object"
                          },
                          "type": "array"
                        },
                        "recentFailures": {
                          "description": "Count of FAILED/CRASHED deployments in the time window",
                          "type": "number"
                        },
                        "replicaStatus": {
                          "anyOf": [
                            {
                              "additionalProperties": false,
                              "properties": {
                                "crashed": {
                                  "description": "Number of crashed replicas",
                                  "type": "number"
                                },
                                "running": {
                                  "description": "Number of running replicas",
                                  "type": "number"
                                },
                                "total": {
                                  "description": "Total number of replicas",
                                  "type": "number"
                                }
                              },
                              "required": [
                                "running",
                                "crashed",
                                "total"
                              ],
                              "type": "object"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Replica status (only for SUCCESS/CRASHED deployments)"
                        },
                        "serviceId": {
                          "description": "The service ID",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "type": "string"
                        },
                        "serviceName": {
                          "description": "The service name",
                          "type": "string"
                        },
                        "state": {
                          "description": "The current service state for UI display",
                          "enum": [
                            "online",
                            "crashed",
                            "sleeping",
                            "deploying",
                            "waiting",
                            "needsApproval",
                            "offline",
                            "cronReady",
                            "cronRunning",
                            "cronSucceeded",
                            "cronFailed"
                          ],
                          "type": "string"
                        },
                        "statusText": {
                          "description": "Human-readable status text (e.g., 'Online', '15/15 Online', 'Crashed 2m ago')",
                          "type": "string"
                        }
                      },
                      "required": [
                        "serviceId",
                        "serviceName",
                        "state",
                        "statusText",
                        "activeDeployments",
                        "issues",
                        "recentFailures",
                        "recentFailedDeployments",
                        "hasIssues",
                        "isCronJob",
                        "hasVolume"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "summary": {
                    "additionalProperties": false,
                    "properties": {
                      "servicesWithIssues": {
                        "description": "Number of services with issues",
                        "type": "number"
                      },
                      "totalFailures": {
                        "description": "Total count of failed/crashed deployments",
                        "type": "number"
                      },
                      "totalServices": {
                        "description": "Total number of services checked",
                        "type": "number"
                      }
                    },
                    "required": [
                      "totalServices",
                      "servicesWithIssues",
                      "totalFailures"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "environment",
                  "services",
                  "pendingWork",
                  "summary"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Environment status"
              }
            },
            {
              "name": "list-tcp-proxies",
              "description": "List the TCP proxies exposing a service over the public internet on a raw TCP port (e.g. a database's public endpoint). Returns the public endpoint (host:port) and the application port each proxy forwards to.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "Environment ID. Defaults to the production environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "proxies": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "applicationPort": {
                          "type": "number"
                        },
                        "domain": {
                          "type": "string"
                        },
                        "endpoint": {
                          "description": "Public endpoint to connect to, host:port",
                          "type": "string"
                        },
                        "id": {
                          "type": "string"
                        },
                        "proxyPort": {
                          "type": "number"
                        },
                        "syncStatus": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "endpoint",
                        "domain",
                        "proxyPort",
                        "applicationPort",
                        "syncStatus"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "proxies"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List TCP proxies"
              }
            },
            {
              "name": "create-tcp-proxy",
              "description": "Expose a service on the public internet over a raw TCP port (e.g. make a database reachable externally). Creates a TCP proxy forwarding a public endpoint to the given application port, applied through the environment config so the service redeploys with it active. Pass staged: true to stage the proxy in the environment's pending changes instead — it is only provisioned, and only gets a public endpoint, once the staged changes are committed with accept-deploy. A service can have at most one TCP proxy.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "applicationPort": {
                    "description": "The port the service listens on, e.g. 5432 for Postgres",
                    "maximum": 65535,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "environmentId": {
                    "description": "Environment ID. Defaults to the production environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the change in the environment's pending changes instead of applying it live. It takes effect only when the staged changes are committed with accept-deploy (or the user applies them in the dashboard).",
                    "type": "boolean"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId",
                  "applicationPort"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "committed": {
                    "type": "boolean"
                  },
                  "proxy": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "applicationPort": {
                            "type": "number"
                          },
                          "domain": {
                            "type": "string"
                          },
                          "endpoint": {
                            "description": "Public endpoint to connect to, host:port",
                            "type": "string"
                          },
                          "id": {
                            "type": "string"
                          },
                          "proxyPort": {
                            "type": "number"
                          },
                          "syncStatus": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "id",
                          "endpoint",
                          "domain",
                          "proxyPort",
                          "applicationPort",
                          "syncStatus"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the change was staged instead of applied. It takes effect only when the staged changes are committed with accept-deploy."
                  }
                },
                "required": [
                  "proxy",
                  "committed",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": true,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create TCP proxy"
              }
            },
            {
              "name": "delete-tcp-proxy",
              "description": "Remove a service's TCP proxy, taking its public endpoint offline. Anything connecting through that endpoint (e.g. external database clients) loses access. Pass staged: true to stage the removal in the environment's pending changes instead — that is also how a proxy that is itself only staged gets dropped again.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "applicationPort": {
                    "description": "The application port of the proxy to remove",
                    "maximum": 9007199254740991,
                    "minimum": -9007199254740991,
                    "type": "integer"
                  },
                  "environmentId": {
                    "description": "Environment ID. Defaults to the production environment.",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID",
                    "type": "string"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the change in the environment's pending changes instead of applying it live. It takes effect only when the staged changes are committed with accept-deploy (or the user applies them in the dashboard).",
                    "type": "boolean"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId",
                  "applicationPort"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "proxy": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "applicationPort": {
                            "type": "number"
                          },
                          "domain": {
                            "type": "string"
                          },
                          "endpoint": {
                            "description": "Public endpoint to connect to, host:port",
                            "type": "string"
                          },
                          "id": {
                            "type": "string"
                          },
                          "proxyPort": {
                            "type": "number"
                          },
                          "syncStatus": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "id",
                          "endpoint",
                          "domain",
                          "proxyPort",
                          "applicationPort",
                          "syncStatus"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The proxy that was removed, or null when it was only staged and so never had a public endpoint."
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the change was staged instead of applied. It takes effect only when the staged changes are committed with accept-deploy."
                  }
                },
                "required": [
                  "proxy",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Delete TCP proxy"
              }
            },
            {
              "name": "connect-service-source",
              "description": "Attach a source to an existing service: a GitHub repository (deploys on push, builds immediately) or a Docker image. This is how a service that has never deployed gets its first deployment, and how an existing service's source is switched. Provide exactly one of repo or image. Pass commitSha with repo to pin the service to one commit instead of following the branch. Images must be public: credentials for a private registry are not accepted here — the user sets them on the service in the Railway dashboard. By default it applies to the service in all environments; pass staged: true with an environmentId to stage the source in that one environment's pending changes instead, in which case nothing builds until the staged changes are committed with accept-deploy.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "branch": {
                    "description": "Branch to deploy from. Only valid with repo; defaults to the repository's default branch.",
                    "type": "string"
                  },
                  "commitSha": {
                    "description": "Commit SHA to pin the service to. Only valid with repo. The service deploys exactly this commit and pushes to the branch no longer deploy it, until the source is connected again without commitSha.",
                    "pattern": "^[0-9a-f]{7,40}$",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "Environment to scope a staged source change to. Only valid with staged: true, and required by it — a live connect always applies to every environment.",
                    "type": "string"
                  },
                  "image": {
                    "description": "Docker image to deploy, e.g. ghcr.io/org/app:latest",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "repo": {
                    "description": "GitHub repository as owner/repo, e.g. railwayapp/starters. The user's GitHub account must have access to it.",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "The service ID to attach the source to",
                    "type": "string"
                  },
                  "staged": {
                    "default": false,
                    "description": "Stage the change in the environment's pending changes instead of applying it live. It takes effect only when the staged changes are committed with accept-deploy (or the user applies them in the dashboard).",
                    "type": "boolean"
                  }
                },
                "required": [
                  "projectId",
                  "serviceId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "service": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "source": {
                    "additionalProperties": false,
                    "properties": {
                      "branch": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "commitSha": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "The commit the service is pinned to, if any"
                      },
                      "image": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "repo": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "repo",
                      "branch",
                      "commitSha",
                      "image"
                    ],
                    "type": "object"
                  },
                  "staged": {
                    "anyOf": [
                      {
                        "additionalProperties": false,
                        "properties": {
                          "changeCount": {
                            "description": "Total changes now staged in the environment",
                            "maximum": 9007199254740991,
                            "minimum": -9007199254740991,
                            "type": "integer"
                          },
                          "patchId": {
                            "description": "The environment patch holding the change",
                            "type": "string"
                          }
                        },
                        "required": [
                          "patchId",
                          "changeCount"
                        ],
                        "type": "object"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Present when the change was staged instead of applied. It takes effect only when the staged changes are committed with accept-deploy."
                  }
                },
                "required": [
                  "service",
                  "source",
                  "staged"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": true,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Connect service source"
              }
            },
            {
              "name": "list-webhooks",
              "description": "List a project's webhooks: for each, the URL Railway POSTs to, the deployment, monitor and volume-alert events that trigger it, whether it covers preview (PR) environments, the names of its custom headers (values are write-only), and its ID for update-webhook and delete-webhook.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "webhooks": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "eventTypes": {
                          "description": "The events that trigger it",
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "headerNames": {
                          "description": "Names of the custom headers sent with each delivery. Values are write-only.",
                          "items": {
                            "type": "string"
                          },
                          "type": "array"
                        },
                        "id": {
                          "description": "The webhook ID, used by update-webhook and delete-webhook",
                          "type": "string"
                        },
                        "includesPreviewEnvironments": {
                          "description": "Whether it also fires for preview (PR/ephemeral) environments",
                          "type": "boolean"
                        },
                        "url": {
                          "description": "The URL Railway POSTs to",
                          "type": "string"
                        }
                      },
                      "required": [
                        "id",
                        "url",
                        "eventTypes",
                        "includesPreviewEnvironments",
                        "headerNames"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "webhooks"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List webhooks"
              }
            },
            {
              "name": "create-webhook",
              "description": "Create a project webhook: Railway POSTs a JSON payload to the URL whenever one of the chosen deployment, monitor or volume-alert events happens in the project. Defaults to the deployment failure events (failed, crashed, out of memory) across regular and preview environments. This tool does not take custom headers or other secrets: if the endpoint needs an auth or signature header, the user adds it to the webhook in the Railway dashboard. Discord and Slack incoming-webhook URLs are detected and receive a formatted message. Use test-webhook first to check the URL accepts the payload.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "eventTypes": {
                    "description": "Events that trigger the webhook. Defaults to Deployment.failed, Deployment.crashed and Deployment.oom_killed.",
                    "items": {
                      "enum": [
                        "VolumeAlert.triggered",
                        "VolumeAlert.resolved",
                        "Monitor.triggered",
                        "Monitor.resolved",
                        "Monitor.deleted",
                        "Deployment.crashed",
                        "Deployment.oom_killed",
                        "Deployment.failed",
                        "Deployment.deployed",
                        "Deployment.redeployed",
                        "Deployment.slept",
                        "Deployment.resumed",
                        "Deployment.restarted",
                        "Deployment.removed",
                        "Deployment.building",
                        "Deployment.deploying",
                        "Deployment.waiting",
                        "Deployment.needs_approval",
                        "Deployment.queued"
                      ],
                      "type": "string"
                    },
                    "maxItems": 50,
                    "minItems": 1,
                    "type": "array"
                  },
                  "includePreviewEnvironments": {
                    "description": "Also fire for preview (PR/ephemeral) environments. Defaults to true.",
                    "type": "boolean"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "url": {
                    "description": "The URL Railway POSTs to when a matching event occurs. A Discord or Slack incoming-webhook URL is detected and gets a formatted message instead of the raw JSON.",
                    "format": "uri",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "url"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "webhook": {
                    "additionalProperties": false,
                    "properties": {
                      "eventTypes": {
                        "description": "The events that trigger it",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "headerNames": {
                        "description": "Names of the custom headers sent with each delivery. Values are write-only.",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "id": {
                        "description": "The webhook ID, used by update-webhook and delete-webhook",
                        "type": "string"
                      },
                      "includesPreviewEnvironments": {
                        "description": "Whether it also fires for preview (PR/ephemeral) environments",
                        "type": "boolean"
                      },
                      "url": {
                        "description": "The URL Railway POSTs to",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "url",
                      "eventTypes",
                      "includesPreviewEnvironments",
                      "headerNames"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "webhook"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create webhook"
              }
            },
            {
              "name": "update-webhook",
              "description": "Change a project webhook's URL, the events that trigger it, or whether it covers preview (PR) environments. Only the fields passed change; eventTypes replaces the whole set. Custom headers the user set in the Railway dashboard are kept as they are — this tool does not take header values or other secrets. Get the webhook ID from list-webhooks.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "eventTypes": {
                    "description": "Replaces the events that trigger the webhook. Omit to leave unchanged.",
                    "items": {
                      "enum": [
                        "VolumeAlert.triggered",
                        "VolumeAlert.resolved",
                        "Monitor.triggered",
                        "Monitor.resolved",
                        "Monitor.deleted",
                        "Deployment.crashed",
                        "Deployment.oom_killed",
                        "Deployment.failed",
                        "Deployment.deployed",
                        "Deployment.redeployed",
                        "Deployment.slept",
                        "Deployment.resumed",
                        "Deployment.restarted",
                        "Deployment.removed",
                        "Deployment.building",
                        "Deployment.deploying",
                        "Deployment.waiting",
                        "Deployment.needs_approval",
                        "Deployment.queued"
                      ],
                      "type": "string"
                    },
                    "maxItems": 50,
                    "minItems": 1,
                    "type": "array"
                  },
                  "includePreviewEnvironments": {
                    "description": "Omit to leave unchanged.",
                    "type": "boolean"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "url": {
                    "description": "The URL Railway POSTs to when a matching event occurs. A Discord or Slack incoming-webhook URL is detected and gets a formatted message instead of the raw JSON.",
                    "format": "uri",
                    "type": "string"
                  },
                  "webhookId": {
                    "description": "The webhook ID, from list-webhooks",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "webhookId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "updatedFields": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "webhook": {
                    "additionalProperties": false,
                    "properties": {
                      "eventTypes": {
                        "description": "The events that trigger it",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "headerNames": {
                        "description": "Names of the custom headers sent with each delivery. Values are write-only.",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "id": {
                        "description": "The webhook ID, used by update-webhook and delete-webhook",
                        "type": "string"
                      },
                      "includesPreviewEnvironments": {
                        "description": "Whether it also fires for preview (PR/ephemeral) environments",
                        "type": "boolean"
                      },
                      "url": {
                        "description": "The URL Railway POSTs to",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "url",
                      "eventTypes",
                      "includesPreviewEnvironments",
                      "headerNames"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "webhook",
                  "updatedFields"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": true,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Update webhook"
              }
            },
            {
              "name": "delete-webhook",
              "description": "Delete a project webhook so Railway stops POSTing to its URL. Get the webhook ID from list-webhooks. This cannot be undone; create-webhook makes a new one.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "webhookId": {
                    "description": "The webhook ID, from list-webhooks",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "webhookId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "deleted": {
                    "const": true,
                    "type": "boolean"
                  },
                  "webhook": {
                    "additionalProperties": false,
                    "description": "The webhook that was removed",
                    "properties": {
                      "eventTypes": {
                        "description": "The events that trigger it",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "headerNames": {
                        "description": "Names of the custom headers sent with each delivery. Values are write-only.",
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      "id": {
                        "description": "The webhook ID, used by update-webhook and delete-webhook",
                        "type": "string"
                      },
                      "includesPreviewEnvironments": {
                        "description": "Whether it also fires for preview (PR/ephemeral) environments",
                        "type": "boolean"
                      },
                      "url": {
                        "description": "The URL Railway POSTs to",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "url",
                      "eventTypes",
                      "includesPreviewEnvironments",
                      "headerNames"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "deleted",
                  "webhook"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Delete webhook"
              }
            },
            {
              "name": "test-webhook",
              "description": "POST a sample event payload to a URL and report the HTTP status it answered with, to check a webhook endpoint before creating or after updating a webhook. Pass a URL to try a new endpoint, or a webhookId to send to an existing webhook with its stored URL and any custom headers the user set on it in the dashboard. This tool does not take header values or other secrets. Nothing is stored. Discord and Slack incoming-webhook URLs receive a formatted message, like a real event would.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "eventType": {
                    "description": "The event type of the sample payload. Defaults to Deployment.failed.",
                    "enum": [
                      "VolumeAlert.triggered",
                      "VolumeAlert.resolved",
                      "Monitor.triggered",
                      "Monitor.resolved",
                      "Monitor.deleted",
                      "Deployment.crashed",
                      "Deployment.oom_killed",
                      "Deployment.failed",
                      "Deployment.deployed",
                      "Deployment.redeployed",
                      "Deployment.slept",
                      "Deployment.resumed",
                      "Deployment.restarted",
                      "Deployment.removed",
                      "Deployment.building",
                      "Deployment.deploying",
                      "Deployment.waiting",
                      "Deployment.needs_approval",
                      "Deployment.queued"
                    ],
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "url": {
                    "description": "The URL to POST the sample to. Required unless webhookId is given, in which case it defaults to that webhook's URL.",
                    "format": "uri",
                    "type": "string"
                  },
                  "webhookId": {
                    "description": "An existing webhook to test: its stored URL and custom headers are used. Get it from list-webhooks.",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "delivered": {
                    "description": "Whether the URL answered with a 2xx status",
                    "type": "boolean"
                  },
                  "eventType": {
                    "description": "The sample event type that was sent",
                    "type": "string"
                  },
                  "headerNames": {
                    "description": "Names of the custom headers sent with the sample",
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "statusCode": {
                    "description": "The HTTP status the URL answered with, or 0 when the request failed (unreachable host, timeout, blocked address).",
                    "maximum": 9007199254740991,
                    "minimum": -9007199254740991,
                    "type": "integer"
                  },
                  "url": {
                    "type": "string"
                  }
                },
                "required": [
                  "url",
                  "eventType",
                  "statusCode",
                  "delivered",
                  "headerNames"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Test webhook"
              }
            },
            {
              "name": "accept-deploy",
              "description": "DESTRUCTIVE: Commits all staged changes in a Railway environment and triggers a deploy. Only use this when the user has explicitly confirmed they want to deploy.",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "commitMessage": {
                    "description": "Optional commit message for the deploy",
                    "type": "string"
                  },
                  "environmentId": {
                    "description": "The environment ID to commit staged changes for",
                    "type": "string"
                  }
                },
                "required": [
                  "environmentId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "committed": {
                    "description": "True when staged changes were committed and a deploy was triggered; false when the environment had nothing staged",
                    "type": "boolean"
                  },
                  "deploymentStatus": {
                    "description": "Whether a deployment workflow was started",
                    "enum": [
                      "triggered",
                      "nothing_staged"
                    ],
                    "type": "string"
                  },
                  "environment": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "description": "Environment whose staged changes were committed",
                        "type": "string"
                      },
                      "name": {
                        "description": "Environment name",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "project": {
                    "additionalProperties": false,
                    "properties": {
                      "id": {
                        "description": "Project whose staged changes were committed",
                        "type": "string"
                      },
                      "name": {
                        "description": "Project name",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id",
                      "name"
                    ],
                    "type": "object"
                  },
                  "workflowId": {
                    "description": "Deployment workflow ID, present only when committed",
                    "type": "string"
                  }
                },
                "required": [
                  "committed",
                  "deploymentStatus"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Accept deploy"
              }
            },
            {
              "name": "railway-agent",
              "description": "Hand a multi-step task in one project environment to Railway's own AI agent, for work too open-ended for the direct tools: investigating a failing deploy across services, or planning and making a set of related changes. The agent reads the environment's config, logs, metrics and linked GitHub repository, and searches the web and Railway docs. It can also change the environment as the calling user: create, update and remove services, volumes, buckets and webhooks, set variables, restart services, deploy its staged changes, and open pull requests on the linked repository. Describe the task in plain language and say what it may change; do not put passwords, API keys or other secrets in the message. A call waits up to 4 minutes; if the agent is still working it returns early with a threadId — pass it back as threadId to continue the same conversation, which also works for follow-up questions. For a single read or change, use the direct tool instead (get-logs, set-variables, update-service and so on).",
              "inputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "properties": {
                  "environmentId": {
                    "description": "The environment ID",
                    "type": "string"
                  },
                  "message": {
                    "description": "The message to send to the agent",
                    "type": "string"
                  },
                  "projectId": {
                    "description": "The project ID",
                    "type": "string"
                  },
                  "serviceId": {
                    "description": "Optional service ID to scope the agent's context",
                    "type": "string"
                  },
                  "threadId": {
                    "description": "Thread ID to continue an existing conversation. Omit to start a new one.",
                    "type": "string"
                  }
                },
                "required": [
                  "projectId",
                  "environmentId",
                  "message"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$schema": "https://json-schema.org/draft/2020-12/schema",
                "additionalProperties": false,
                "properties": {
                  "response": {
                    "description": "Railway Agent's final response text",
                    "type": "string"
                  },
                  "threadId": {
                    "description": "Thread ID for continuing the agent conversation",
                    "type": "string"
                  },
                  "toolCalls": {
                    "description": "Sub-tools used while producing the response. Their raw arguments and results stay in the agent's thread: they can hold variable values and internal IDs, and the response text already reports what matters.",
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "isError": {
                          "description": "Whether the sub-tool call failed",
                          "type": "boolean"
                        },
                        "toolName": {
                          "description": "Railway Agent sub-tool name",
                          "type": "string"
                        }
                      },
                      "required": [
                        "toolName",
                        "isError"
                      ],
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "threadId",
                  "response",
                  "toolCalls"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Railway agent"
              }
            }
          ],
          "schemaTokens": 49866,
          "changedAt": "2026-10-09T21:40:53.758585053Z",
          "check": {
            "checker": "anchor-check/1.0",
            "totalTokens": 49866,
            "counts": {
              "error": 0,
              "note": 0,
              "warn": 9
            },
            "findings": [
              {
                "rule": "TC07",
                "severity": "warn",
                "tool": "create-function",
                "message": "the description is about 528 tokens",
                "fix": "Keep the description to what a model needs to choose and call the tool; move the manual to a resource or the docs."
              },
              {
                "rule": "TC07",
                "severity": "warn",
                "tool": "update-function-source-code",
                "message": "the description is about 576 tokens",
                "fix": "Keep the description to what a model needs to choose and call the tool; move the manual to a resource or the docs."
              },
              {
                "rule": "TC14",
                "severity": "warn",
                "tool": "set-feature-flag",
                "message": "allowed values are in the description, not an enum: rules[].expression",
                "fix": "Move them into enum."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "describe-environment",
                "message": "the definition is about 1,649 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "describe-service",
                "message": "the definition is about 1,713 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "environment-status",
                "message": "the definition is about 1,705 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "get-logs",
                "message": "the definition is about 1,585 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "update-service",
                "message": "the definition is about 1,618 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC23",
                "severity": "warn",
                "message": "68 tools, about 49,961 tokens of definitions",
                "fix": "Split the server by job, or offer a smaller default toolset (a read-only set, or a search-then-call pattern)."
              }
            ]
          }
        },
        "updatedAt": "2026-10-10T02:55:07.260710249Z"
      }
    },
    "facts": [
      {
        "a": "MCP server",
        "b": "MCP server",
        "name": "Kind"
      },
      {
        "a": "DigitalOcean, LLC",
        "b": "Railway Corporation",
        "name": "Vendor"
      },
      {
        "a": "https://apps.mcp.digitalocean.com/mcp",
        "b": "https://mcp.railway.com",
        "name": "Hosted endpoint"
      },
      {
        "a": "Streamable HTTP, stdio",
        "b": "Streamable HTTP, stdio",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "OAuth",
        "name": "Auth"
      },
      {
        "a": "Your plan",
        "b": "Your plan",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "MIT for the server. The DigitalOcean platform it acts on is a proprietary service under DigitalOcean's Terms of Service Agreement",
        "b": "Proprietary hosted server under Railway's Terms of Service. The Railway CLI, which carries the stdio proxy and a separate local MCP server, is MIT",
        "name": "Licence"
      },
      {
        "a": "377",
        "b": "11",
        "name": "Tools exposed"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "not listed",
        "b": "com.railway/mcp",
        "name": "MCP registry"
      },
      {
        "a": "2026-10-07",
        "b": "2026-10-08",
        "name": "Last release"
      },
      {
        "a": "2026-08-22",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "2025-01-01",
        "b": "couldn't be read",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "yes",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "137 stars, 6.4k npm/wk",
        "b": "426k npm/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "DigitalOcean MCP Server scores 60.6 (C) on agent readiness against Railway MCP Server's 56.7 (C), and leads in 5 of 7 scored categories. Railway MCP Server leads on payments \u0026 pricing and maintenance \u0026 community.",
        "question": "Which is better for AI agents, DigitalOcean MCP Server or Railway MCP Server?"
      },
      {
        "answer": "DigitalOcean MCP Server takes an API key or an OAuth sign-in. Railway MCP Server uses an OAuth sign-in.",
        "question": "Do DigitalOcean MCP Server and Railway MCP Server need an API key?"
      },
      {
        "answer": "Yes. DigitalOcean MCP Server has a hosted endpoint at https://apps.mcp.digitalocean.com/mcp and Railway MCP Server at https://mcp.railway.com.",
        "question": "Can an agent call DigitalOcean MCP Server and Railway MCP Server without installing anything?"
      },
      {
        "answer": "DigitalOcean MCP Server is open source (MIT for the server. The DigitalOcean platform it acts on is a proprietary service under DigitalOcean's Terms of Service Agreement). No open-source release is listed for Railway MCP Server.",
        "question": "Are DigitalOcean MCP Server and Railway MCP Server open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Schema \u0026 documentation, 66 against 56",
          "Agent ergonomics, 67 against 59",
          "Transparency \u0026 trust, 87 against 73"
        ],
        "also": [
          "Open source"
        ],
        "goodFor": "Agents that operate DigitalOcean accounts, across Droplets, App Platform, Kubernetes, databases, networking and the AI platform, with one endpoint a service.",
        "slug": "digitalocean-mcp",
        "watchFor": "No read-only mode on the server. A request for one has been open since 2 March 2026."
      },
      {
        "aheadOn": [
          "Payments \u0026 pricing, 40 against 33",
          "Maintenance \u0026 community, 83 against 70"
        ],
        "also": null,
        "goodFor": "Agents that deploy and operate applications on Railway from an editor and are content to hand multi-step work to Railway's own agent.",
        "slug": "railway-mcp-server",
        "watchFor": "The hosted server's source and tool schemas are not public, so inputs can only be read after signing in."
      }
    ],
    "job": {
      "capability": "infra.cloud",
      "name": "Cloud hosting"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/azure-mcp-vs-digitalocean-mcp.json",
        "title": "Azure MCP Server vs DigitalOcean MCP Server",
        "url": "https://www.anchorterminal.com/compare/azure-mcp-vs-digitalocean-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-mcp-vs-railway-mcp-server.json",
        "title": "Azure MCP Server vs Railway MCP Server",
        "url": "https://www.anchorterminal.com/compare/azure-mcp-vs-railway-mcp-server"
      },
      {
        "json": "https://www.anchorterminal.com/compare/digitalocean-mcp-vs-render-mcp-server.json",
        "title": "DigitalOcean MCP Server vs Render MCP Server",
        "url": "https://www.anchorterminal.com/compare/digitalocean-mcp-vs-render-mcp-server"
      },
      {
        "json": "https://www.anchorterminal.com/compare/digitalocean-mcp-vs-terraform-mcp.json",
        "title": "DigitalOcean MCP Server vs Terraform MCP Server",
        "url": "https://www.anchorterminal.com/compare/digitalocean-mcp-vs-terraform-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/railway-mcp-server-vs-render-mcp-server.json",
        "title": "Railway MCP Server vs Render MCP Server",
        "url": "https://www.anchorterminal.com/compare/railway-mcp-server-vs-render-mcp-server"
      },
      {
        "json": "https://www.anchorterminal.com/compare/railway-mcp-server-vs-terraform-mcp.json",
        "title": "Railway MCP Server vs Terraform MCP Server",
        "url": "https://www.anchorterminal.com/compare/railway-mcp-server-vs-terraform-mcp"
      }
    ],
    "scores": [
      {
        "by": 2,
        "digitalocean-mcp": 62,
        "edge": "digitalocean-mcp",
        "key": "reliability",
        "name": "Reliability",
        "railway-mcp-server": 60,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 10,
        "digitalocean-mcp": 66,
        "edge": "digitalocean-mcp",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "railway-mcp-server": 56,
        "weight": 13
      },
      {
        "by": 8,
        "digitalocean-mcp": 67,
        "edge": "digitalocean-mcp",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "railway-mcp-server": 59,
        "weight": 13
      },
      {
        "by": 2,
        "digitalocean-mcp": 67,
        "edge": "digitalocean-mcp",
        "key": "security",
        "name": "Security \u0026 auth",
        "railway-mcp-server": 65,
        "weight": 14
      },
      {
        "by": 7,
        "digitalocean-mcp": 33,
        "edge": "railway-mcp-server",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "railway-mcp-server": 40,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 13,
        "digitalocean-mcp": 70,
        "edge": "railway-mcp-server",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "railway-mcp-server": 83,
        "weight": 7
      },
      {
        "by": 14,
        "digitalocean-mcp": 87,
        "edge": "digitalocean-mcp",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "railway-mcp-server": 73,
        "weight": 7
      }
    ],
    "summary": "DigitalOcean MCP Server scores 60.6 (C) on agent readiness against Railway MCP Server's 56.7 (C), and leads in 5 of 7 scored categories. Railway MCP Server leads on payments \u0026 pricing and maintenance \u0026 community. Both do cloud hosting.",
    "verdicts": {
      "digitalocean-mcp": "Every tool carries read-only, destructive and idempotent hints enforced by a test, and access can be narrowed with OAuth, expiring tokens and granular scopes. The server has no read-only mode, database tools return cluster objects unredacted, and DigitalOcean's status feed shows several long platform incidents since late July 2026.",
      "railway-mcp-server": "A small hosted server with 11 tools, OAuth grants limited to chosen workspaces and one-hour tokens. Most infrastructure work goes through the `railway-agent` tool, which is billed by model tokens. The hosted server's source and tool schemas are not public, there is no read-only scope, and the status page lists about 25 incidents in 90 days."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/digitalocean-mcp-vs-railway-mcp-server",
    "json": "https://www.anchorterminal.com/compare/digitalocean-mcp-vs-railway-mcp-server.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/digitalocean-mcp-vs-railway-mcp-server.md",
    "slim": "https://www.anchorterminal.com/compare/digitalocean-mcp-vs-railway-mcp-server.min.md"
  },
  "markdown": "DigitalOcean MCP Server scores 60.6 (C) on agent readiness against Railway MCP Server's 56.7 (C), and leads in 5 of 7 scored categories. Railway MCP Server leads on payments \u0026 pricing and maintenance \u0026 community. Both do cloud hosting.\n\n- DigitalOcean MCP Server: grade C, 60.6/100, rank #503 of 950. Markdown https://www.anchorterminal.com/tools/digitalocean-mcp.md · JSON https://www.anchorterminal.com/api/v1/tools/digitalocean-mcp.json\n- Railway MCP Server: grade C, 56.7/100, rank #627 of 950. Markdown https://www.anchorterminal.com/tools/railway-mcp-server.md · JSON https://www.anchorterminal.com/api/v1/tools/railway-mcp-server.json\n- Best cloud infrastructure tools for AI agents: https://www.anchorterminal.com/best/infrastructure/index.md\n- All 12 infra comparisons: https://www.anchorterminal.com/compare/infrastructure/index.md\n\n## Which one, for what\n\n### DigitalOcean MCP Server (C)\n\nGood for: Agents that operate DigitalOcean accounts, across Droplets, App Platform, Kubernetes, databases, networking and the AI platform, with one endpoint a service.\n\nAhead on:\n- Schema \u0026 documentation, 66 against 56\n- Agent ergonomics, 67 against 59\n- Transparency \u0026 trust, 87 against 73\n\nAlso in its favour:\n- Open source\n\nWatch for: No read-only mode on the server. A request for one has been open since 2 March 2026.\n\n### Railway MCP Server (C)\n\nGood for: Agents that deploy and operate applications on Railway from an editor and are content to hand multi-step work to Railway's own agent.\n\nAhead on:\n- Payments \u0026 pricing, 40 against 33\n- Maintenance \u0026 community, 83 against 70\n\nWatch for: The hosted server's source and tool schemas are not public, so inputs can only be read after signing in.\n\n\n## Score by category\n\n| Category | Weight | DigitalOcean MCP Server | Railway MCP Server | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 62 | 60 | DigitalOcean MCP Server +2 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 66 | 56 | DigitalOcean MCP Server +10 |\n| Agent ergonomics | 13% (16.2 this run) | 67 | 59 | DigitalOcean MCP Server +8 |\n| Security \u0026 auth | 14% (17.5 this run) | 67 | 65 | DigitalOcean MCP Server +2 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 33 | 40 | Railway MCP Server +7 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 70 | 83 | Railway MCP Server +13 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 87 | 73 | DigitalOcean MCP Server +14 |\n| Negative events | ≤15 | -3 | -4 | |\n| **Total** | | **60.6 · C** | **56.7 · C** | |\n\n## Facts side by side\n\n| Fact | DigitalOcean MCP Server | Railway MCP Server |\n| --- | --- | --- |\n| Kind | MCP server | MCP server |\n| Vendor | DigitalOcean, LLC | Railway Corporation |\n| Hosted endpoint | `https://apps.mcp.digitalocean.com/mcp` | `https://mcp.railway.com` |\n| Transports | Streamable HTTP, stdio | Streamable HTTP, stdio |\n| Auth | OAuth or key | OAuth |\n| Pricing | Your plan | Your plan |\n| x402 | no | no |\n| Licence | MIT for the server. The DigitalOcean platform it acts on is a proprietary service under DigitalOcean's Terms of Service Agreement | Proprietary hosted server under Railway's Terms of Service. The Railway CLI, which carries the stdio proxy and a separate local MCP server, is MIT |\n| Tools exposed | 377 | 11 |\n| Read-only variant documented | yes | no |\n| llms.txt | yes | yes |\n| MCP registry | not listed | `com.railway/mcp` |\n| Last release | 2026-10-07 | 2026-10-08 |\n| Terms last updated | 2026-08-22 | couldn't be read |\n| Privacy policy last updated | 2025-01-01 | couldn't be read |\n| Customer content may train models | not found in the text | couldn't be read |\n| Terms restrict automated access | not found in the text | couldn't be read |\n| Terms restrict benchmarking | not found in the text | couldn't be read |\n| Terms or service can change without notice | not found in the text | couldn't be read |\n| Arbitration or class-action waiver | yes | couldn't be read |\n| Popularity | 137 stars, 6.4k npm/wk | 426k npm/wk |\n\n## Verdicts\n\n**DigitalOcean MCP Server.** Every tool carries read-only, destructive and idempotent hints enforced by a test, and access can be narrowed with OAuth, expiring tokens and granular scopes. The server has no read-only mode, database tools return cluster objects unredacted, and DigitalOcean's status feed shows several long platform incidents since late July 2026.\n\n**Railway MCP Server.** A small hosted server with 11 tools, OAuth grants limited to chosen workspaces and one-hour tokens. Most infrastructure work goes through the `railway-agent` tool, which is billed by model tokens. The hosted server's source and tool schemas are not public, there is no read-only scope, and the status page lists about 25 incidents in 90 days.\n\n## Before you call either\n\n### DigitalOcean MCP Server\n\n1. Add only the service endpoints the task needs. Networking has 54 tools, evaluations 47 and Droplets 42.\n2. Pass `--services` to the local server. With no value it loads every service, about 377 tools.\n3. Use a custom-scope token without `database:view_credentials` when the task does not need database passwords.\n4. Use the `insights-alert-rule-*` tools. The `alert-policy-*` tools are marked deprecated and will be removed.\n5. Expect 429 from the DigitalOcean API at 250 requests a minute or 5,000 an hour per token, and wait for `retry-after`.\n\n### Railway MCP Server\n\n1. Connect to `https://mcp.railway.com` with OAuth, or run `railway mcp` after `railway login`. Project tokens are refused.\n2. Treat `redeploy`, `accept-deploy`, `delete-feature-flag` and `railway-agent` as actions that change production. Confirm the project and environment first.\n3. `railway-agent` spends model tokens billed to the workspace. Use the single-purpose tools for listing and redeploying.\n4. For variables, domains, volumes, logs or metrics as separate tools, use `railway mcp local`, which has a different tool set.\n5. On a 401, follow the `WWW-Authenticate` challenge and run the OAuth flow again. Access tokens expire after one hour.\n\n## Questions\n\n### Which is better for AI agents, DigitalOcean MCP Server or Railway MCP Server?\n\nDigitalOcean MCP Server scores 60.6 (C) on agent readiness against Railway MCP Server's 56.7 (C), and leads in 5 of 7 scored categories. Railway MCP Server leads on payments \u0026 pricing and maintenance \u0026 community.\n\n### Do DigitalOcean MCP Server and Railway MCP Server need an API key?\n\nDigitalOcean MCP Server takes an API key or an OAuth sign-in. Railway MCP Server uses an OAuth sign-in.\n\n### Can an agent call DigitalOcean MCP Server and Railway MCP Server without installing anything?\n\nYes. DigitalOcean MCP Server has a hosted endpoint at https://apps.mcp.digitalocean.com/mcp and Railway MCP Server at https://mcp.railway.com.\n\n### Are DigitalOcean MCP Server and Railway MCP Server open source?\n\nDigitalOcean MCP Server is open source (MIT for the server. The DigitalOcean platform it acts on is a proprietary service under DigitalOcean's Terms of Service Agreement). No open-source release is listed for Railway MCP Server.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/digitalocean-mcp-vs-railway-mcp-server.json, and with the fewest tokens: https://www.anchorterminal.com/compare/digitalocean-mcp-vs-railway-mcp-server.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"digitalocean-mcp\", \"b\": \"railway-mcp-server\"}`. From a terminal: `anchor compare digitalocean-mcp railway-mcp-server`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/digitalocean-mcp.json and https://www.anchorterminal.com/api/v1/tools/railway-mcp-server.json\n\n## Other comparisons with DigitalOcean MCP Server or Railway MCP Server\n\n- [Azure MCP Server vs DigitalOcean MCP Server](https://www.anchorterminal.com/compare/azure-mcp-vs-digitalocean-mcp.md)\n- [Azure MCP Server vs Railway MCP Server](https://www.anchorterminal.com/compare/azure-mcp-vs-railway-mcp-server.md)\n- [DigitalOcean MCP Server vs Render MCP Server](https://www.anchorterminal.com/compare/digitalocean-mcp-vs-render-mcp-server.md)\n- [DigitalOcean MCP Server vs Terraform MCP Server](https://www.anchorterminal.com/compare/digitalocean-mcp-vs-terraform-mcp.md)\n- [Railway MCP Server vs Render MCP Server](https://www.anchorterminal.com/compare/railway-mcp-server-vs-render-mcp-server.md)\n- [Railway MCP Server vs Terraform MCP Server](https://www.anchorterminal.com/compare/railway-mcp-server-vs-terraform-mcp.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-10",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "DigitalOcean MCP Server vs Railway MCP Server",
        "url": ""
      }
    ],
    "description": "DigitalOcean scores 60.6 (C) to Railway's 56.7 (C) for cloud hosting. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "DigitalOcean MCP Server C 60.6",
      "Railway MCP Server C 56.7",
      "scores"
    ],
    "h1": "DigitalOcean MCP Server vs Railway MCP Server",
    "image": "https://www.anchorterminal.com/assets/og/compare-digitalocean-mcp-vs-railway-mcp-server.png",
    "path": "/compare/digitalocean-mcp-vs-railway-mcp-server",
    "published": "2026-10-01",
    "section": "tools",
    "title": "DigitalOcean vs Railway for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/digitalocean-mcp-vs-railway-mcp-server"
  },
  "tokens": {
    "markdown": 2350,
    "slim": 780
  },
  "version": 1
}
