set-variables
Set 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
TableJSON 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"); } };