UNPKG

@crazyrabbitltc/railway-mcp

Version:

Railway MCP Server - 146+ tools with 100% Railway API coverage, comprehensive MCP testing framework, and real infrastructure management through AI assistants. Enhanced version with enterprise features, based on original work by Jason Tan.

133 lines (132 loc) 6.64 kB
import { createTool, formatToolDescription } from '../utils/tools.js'; import { z } from 'zod'; import { variableService } from '../services/variable.service.js'; export const variableTools = [ 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); }), createTool("variable_set", formatToolDescription({ type: 'API', description: "Create or update an environment variable", bestFor: [ "Setting configuration values", "Updating connection strings", "Managing service secrets" ], notFor: [ "Bulk variable updates (use variable_bulk_set)", "Temporary configuration changes" ], relations: { prerequisites: ["service_list"], nextSteps: ["deployment_trigger", "service_restart"], alternatives: ["variable_bulk_set"], related: ["variable_list", "variable_delete"] } }), { projectId: z.string().describe("ID of the project containing the service"), environmentId: z.string().describe("ID of the environment for the variable (usually obtained from service_list)"), name: z.string().describe("Name of the environment variable"), value: z.string().describe("Value to set for the variable"), serviceId: z.string().optional().describe("Optional: ID of the service for the variable, if omitted creates/updates a shared variable") }, async ({ projectId, environmentId, name, value, serviceId }) => { return variableService.upsertVariable(projectId, environmentId, name, value, serviceId); }), createTool("variable_delete", formatToolDescription({ type: 'API', description: "Delete a variable for a service in a specific environment", bestFor: [ "Removing unused configuration", "Security cleanup", "Configuration management" ], notFor: [ "Temporary variable disabling", "Bulk variable removal" ], relations: { prerequisites: ["service_list"], nextSteps: ["deployment_trigger", "service_restart"], related: ["variable_list", "variable_set"] } }), { projectId: z.string().describe("ID of the project"), environmentId: z.string().describe("ID of the environment to delete the variable from (usually obtained from service_list)"), name: z.string().describe("Name of the variable to delete"), serviceId: z.string().optional().describe("ID of the service (optional, if omitted deletes a shared variable)") }, async ({ projectId, environmentId, name, serviceId }) => { return variableService.deleteVariable(projectId, environmentId, name, serviceId); }), // TODO: Test this better createTool("variable_bulk_set", formatToolDescription({ type: 'WORKFLOW', description: "Create or update multiple environment variables at once", bestFor: [ "Migrating configuration between services", "Initial service setup", "Bulk configuration updates" ], notFor: [ "Single variable updates (use variable_set)", "Temporary configuration changes" ], relations: { prerequisites: ["service_list"], nextSteps: ["deployment_trigger", "service_restart"], alternatives: ["variable_set"], related: ["variable_list", "service_update"] } }), { projectId: z.string().describe("ID of the project containing the service"), environmentId: z.string().describe("ID of the environment for the variables (usually obtained from service_list)"), variables: z.record(z.string()).describe("Object mapping variable names to values"), serviceId: z.string().optional().describe("Optional: ID of the service for the variables, if omitted updates shared variables)") }, async ({ projectId, environmentId, variables, serviceId }) => { return variableService.bulkUpsertVariables(projectId, environmentId, variables, serviceId); }), // TODO: Test this createTool("variable_copy", formatToolDescription({ type: 'WORKFLOW', description: "Copy variables from one environment to another", bestFor: [ "Environment migration", "Configuration sharing", "Environment duplication" ], notFor: [ "Single variable updates (use variable_set)", "Temporary configuration changes" ], relations: { prerequisites: ["service_list"], nextSteps: ["deployment_trigger", "service_restart"], alternatives: ["variable_set"], related: ["variable_list", "service_update"] } }), { projectId: z.string().describe("ID of the project"), sourceEnvironmentId: z.string().describe("ID of the source environment (usually obtained from project_info)"), targetEnvironmentId: z.string().describe("ID of the target environment (usually obtained from project_info)"), serviceId: z.string().optional().describe("ID of the service (optional, if omitted copies shared variables)"), overwrite: z.boolean().optional().default(false).describe("Whether to overwrite existing variables in the target environment") }, async ({ projectId, sourceEnvironmentId, targetEnvironmentId, serviceId, overwrite = false }) => { return variableService.copyVariables(projectId, sourceEnvironmentId, targetEnvironmentId, serviceId, overwrite); }) ];