set-variables
Defines environment variables for active environments on Railway MCP Server. Specify workspace paths, key-value pairs, and optional parameters like service, environment, or deploy triggers.
Instructions
Set environment variables for the active environment
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| environment | No | The environment to set variables for (optional) | |
| service | No | The service to set variables for (optional) | |
| skipDeploys | No | Skip triggering deploys when setting variables (optional) | |
| variables | Yes | Array of '{key}={value}' environment variable pairs to set | |
| workspacePath | Yes | The path to the workspace to set variables in |
Implementation Reference
- src/tools/set-variables.ts:30-61 (handler)The MCP tool handler for 'set-variables', which calls the CLI helper setRailwayVariables and formats success/error responses using createToolResponse.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.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 tools (including set-variables) on the MCP server by iterating over exports from src/tools/index.ts.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)Supporting utility function that constructs and executes the Railway CLI 'variables --set' command to set environment variables.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"); } };