Set Railway Variables
set-variablesSet environment variables for the active environment in Railway projects to configure application settings and manage deployment configurations.
Instructions
Set environment variables for the active environment
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| workspacePath | Yes | The path to the workspace to set variables in | |
| variables | Yes | Array of '{key}={value}' environment variable pairs to set | |
| service | No | The service to set variables for (optional) | |
| environment | No | The environment to set variables for (optional) | |
| skipDeploys | No | Skip triggering deploys when setting variables (optional) |
Implementation Reference
- src/tools/set-variables.ts:30-61 (handler)The asynchronous handler function for the 'set-variables' tool that invokes setRailwayVariables with provided options, wraps the result in createToolResponse, and provides detailed error handling with next steps.
handler: async ({ workspacePath, variables, service, environment, skipDeploys, }: SetVariablesOptions) => { try { const result = await setRailwayVariables({ workspacePath, variables, service, environment, skipDeploys, }); return createToolResponse(result); } catch (error: unknown) { const errorMessage = error instanceof Error ? error.message : "Unknown error occurred"; return createToolResponse( "❌ Failed to set Railway variables\n\n" + `**Error:** ${errorMessage}\n\n` + "**Next Steps:**\n" + "• Ensure you have a Railway project linked\n" + "• Check that the service and environment exist\n" + "• Verify you have permissions to set variables\n" + "• Ensure variable format is correct (KEY=value)\n" + "• Run `railway link` to ensure proper project connection", ); } }, - src/tools/set-variables.ts:10-29 (schema)Zod schema defining the input parameters for the 'set-variables' tool: workspacePath, variables array, optional service, environment, and skipDeploys.
inputSchema: { workspacePath: z .string() .describe("The path to the workspace to set variables in"), variables: z .array(z.string()) .describe("Array of '{key}={value}' environment variable pairs to set"), service: z .string() .optional() .describe("The service to set variables for (optional)"), environment: z .string() .optional() .describe("The environment to set variables for (optional)"), skipDeploys: z .boolean() .optional() .describe("Skip triggering deploys when setting variables (optional)"), }, - src/index.ts:21-31 (registration)Dynamic registration of all exported tools (including 'set-variables') to the MCP server using server.registerTool with name, schema, and handler.
Object.values(tools).forEach((tool) => { server.registerTool( tool.name, { title: tool.title, description: tool.description, inputSchema: tool.inputSchema, }, tool.handler, ); }); - src/cli/variables.ts:57-93 (helper)Helper function that constructs and executes the 'railway variables --set KEY=value ...' CLI command, checks project linkage, handles errors, and returns output.
export const setRailwayVariables = async ({ workspacePath, variables, service, environment, skipDeploys, }: SetVariablesOptions): Promise<string> => { try { await checkRailwayCliStatus(); const result = await getLinkedProjectInfo({ workspacePath }); if (!result.success) { throw new Error(result.error); } let command = "railway variables"; if (service) { command += ` --service ${service}`; } if (environment) { command += ` --environment ${environment}`; } if (skipDeploys) { command += " --skip-deploys"; } // Add each variable with --set flag variables.forEach((variable) => { command += ` --set "${variable}"`; }); const { output } = await runRailwayCommand(command, workspacePath); return output; } catch (error: unknown) { return analyzeRailwayError(error, "railway variables --set"); } };