list_service_variables
Retrieve and review all environment variables for a service in Railway projects. Simplify configuration audits, validate connection strings, and assess shared variables.
Instructions
[API] List all environment variables for a service
⚡️ Best for: ✓ Viewing service configuration ✓ Auditing environment variables ✓ Checking connection strings
→ Prerequisites: service_list
→ Next steps: variable_set, variable_delete
→ Related: service_info, variable_bulk_set
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| environmentId | Yes | ID of the environment to list variables from (usually obtained from service_list) | |
| projectId | Yes | ID of the project containing the service | |
| serviceId | No | Optional: ID of the service to list variables for, if not provided, shared variables across all services will be listed |
Input Schema (JSON Schema)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"environmentId": {
"description": "ID of the environment to list variables from (usually obtained from service_list)",
"type": "string"
},
"projectId": {
"description": "ID of the project containing the service",
"type": "string"
},
"serviceId": {
"description": "Optional: ID of the service to list variables for, if not provided, shared variables across all services will be listed",
"type": "string"
}
},
"required": [
"projectId",
"environmentId"
],
"type": "object"
}
Implementation Reference
- src/tools/variable.tool.ts:27-29 (handler)The async handler function for the 'list_service_variables' tool that delegates execution to variableService.listVariables(projectId, environmentId, serviceId).async ({ projectId, environmentId, serviceId }) => { return variableService.listVariables(projectId, environmentId, serviceId); }
- src/tools/variable.tool.ts:22-26 (schema)Zod input schema defining required projectId and environmentId, optional serviceId for the tool.{ projectId: z.string().describe("ID of the project containing the service"), environmentId: z.string().describe("ID of the environment to list variables from (usually obtained from service_list)"), serviceId: z.string().optional().describe("Optional: ID of the service to list variables for, if not provided, shared variables across all services will be listed") },
- src/tools/variable.tool.ts:6-30 (registration)Registration of the 'list_service_variables' tool via createTool, including description, schema, and handler.createTool( "list_service_variables", formatToolDescription({ type: 'API', description: "List all environment variables for a service", bestFor: [ "Viewing service configuration", "Auditing environment variables", "Checking connection strings" ], relations: { prerequisites: ["service_list"], nextSteps: ["variable_set", "variable_delete"], related: ["service_info", "variable_bulk_set"] } }), { projectId: z.string().describe("ID of the project containing the service"), environmentId: z.string().describe("ID of the environment to list variables from (usually obtained from service_list)"), serviceId: z.string().optional().describe("Optional: ID of the service to list variables for, if not provided, shared variables across all services will be listed") }, async ({ projectId, environmentId, serviceId }) => { return variableService.listVariables(projectId, environmentId, serviceId); } ),
- VariableService.listVariables: Fetches variables using the API client, formats them as a newline-separated key=value list, provides context-specific messaging for service or shared variables, and handles empty results and errors.async listVariables(projectId: string, environmentId: string, serviceId?: string) { try { const variables = await this.client.variables.getVariables(projectId, environmentId, serviceId); if (Object.keys(variables).length === 0) { return createSuccessResponse({ text: serviceId ? "No variables found for this service in this environment." : "No shared variables found in this environment.", data: {} }); } const context = serviceId ? "service variables" : "shared environment variables"; const formattedVars = Object.entries(variables) .map(([key, value]) => `${key}=${value}`) .join('\n'); return createSuccessResponse({ text: `Current ${context}:\n\n${formattedVars}`, data: variables }); } catch (error) { return createErrorResponse(`Error listing variables: ${formatError(error)}`); } }
- VariableRepository.getVariables: Performs GraphQL query to retrieve environment variables for a project, environment, and optional service.async getVariables(projectId: string, environmentId: string, serviceId?: string): Promise<Record<string, string>> { const data = await this.client.request<VariablesResponse>(` query variables($projectId: String!, $environmentId: String!, $serviceId: String) { variables(projectId: $projectId, environmentId: $environmentId, serviceId: $serviceId) } `, { projectId, environmentId, serviceId }); return data.variables || {}; }