UNPKG

@mseep/railway-mcp

Version:

Model Context Protocol server for Railway.app - Enables AI agents to manage Railway infrastructure through natural language

179 lines (178 loc) 6.94 kB
import { z } from "zod"; /** * NOTE: ALL NON-METAL RAILWAY REGIONS -- TODO: Update when they've fully migrated to metal 🔄 */ export const RegionCodeSchema = z.enum([ "asia-southeast1", "asia-southeast1-eqsg3a", "europe-west4", "europe-west4-drams3a", "us-east4", "us-east4-eqdc4a", "us-west1", "us-west2" ]); export const ServiceInstanceSchema = z.object({ id: z.string(), serviceId: z.string(), serviceName: z.string(), environmentId: z.string(), buildCommand: z.string().optional(), startCommand: z.string().optional(), rootDirectory: z.string().optional(), region: RegionCodeSchema.optional(), healthcheckPath: z.string().optional(), sleepApplication: z.boolean().optional(), numReplicas: z.number().optional(), builder: z.string().optional(), cronSchedule: z.string().optional(), healthcheckTimeout: z.number().optional(), isUpdatable: z.boolean().optional(), railwayConfigFile: z.string().optional(), restartPolicyType: z.string().optional(), restartPolicyMaxRetries: z.number().optional(), upstreamUrl: z.string().optional(), watchPatterns: z.array(z.string()).optional() }); // Database types export var DatabaseType; (function (DatabaseType) { DatabaseType["POSTGRES"] = "postgres"; DatabaseType["MYSQL"] = "mysql"; DatabaseType["MONGODB"] = "mongodb"; DatabaseType["REDIS"] = "redis"; DatabaseType["MINIO"] = "minio"; DatabaseType["SQLITE3"] = "sqlite3"; DatabaseType["POCKETBASE"] = "pocketbase"; DatabaseType["CLICKHOUSE"] = "clickhouse"; DatabaseType["MARIADB"] = "mariadb"; DatabaseType["PGVECTOR"] = "pgvector"; })(DatabaseType || (DatabaseType = {})); export const DATABASE_CONFIGS = { [DatabaseType.POSTGRES]: { source: 'ghcr.io/railwayapp-templates/postgres-ssl:15', defaultName: 'PostgreSQL', description: 'PostgreSQL database service', category: 'SQL Databases', port: 5432, variables: { // Variables for Railway DATABASE_PUBLIC_URL: "postgresql://${{PGUSER}}:${{POSTGRES_PASSWORD}}@${{RAILWAY_TCP_PROXY_DOMAIN}}:${{RAILWAY_TCP_PROXY_PORT}}/${{PGDATABASE}}", DATABASE_URL: "postgresql://${{PGUSER}}:${{POSTGRES_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:${{PGPORT}}/${{PGDATABASE}}", PGDATA: "/var/lib/postgresql/data/pgdata", // for Volume Mounting in Railway PGDATABASE: "${{POSTGRES_DB}}", PGHOST: "${{RAILWAY_PRIVATE_DOMAIN}}", PGPASSWORD: "${{POSTGRES_PASSWORD}}", PGPORT: "5432", PGUSER: "${{POSTGRES_USER}}", // Docker variables POSTGRES_DB: "postgres-db", POSTGRES_PASSWORD: "postgres-password", POSTGRES_USER: "postgres-user", } }, [DatabaseType.MYSQL]: { source: 'mysql:latest', defaultName: 'MySQL', description: 'MySQL database service', category: 'SQL Databases', port: 3306, variables: { // Railway variables MYSQLHOST: "${{RAILWAY_PRIVATE_DOMAIN}}", MYSQLPASSWORD: "${{MYSQL_ROOT_PASSWORD}}", MYSQLDATABASE: "${{MYSQL_DATABASE}}", // Docker variables MYSQL_DATABASE: "mysql-db", MYSQL_PUBLIC_URL: "mysql://${{MYSQLUSER}}:${{MYSQL_ROOT_PASSWORD}}@${{RAILWAY_TCP_PROXY_DOMAIN}}:${{RAILWAY_TCP_PROXY_PORT}}/${{MYSQL_DATABASE}}", MYSQL_URL: "mysql://${{MYSQLUSER}}:${{MYSQL_ROOT_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:${{MYSQLPORT}}/${{MYSQL_DATABASE}}", MYSQL_ROOT_PASSWORD: "mysql-password", MYSQLUSER: "root", MYSQLPORT: "3306", }, }, [DatabaseType.MONGODB]: { source: 'mongo:7', defaultName: 'MongoDB', description: 'MongoDB NoSQL database service', category: 'NoSQL Databases', port: 27017, variables: { // Docker MONGO_INITDB_ROOT_PASSWORD: "mongo-password", MONGO_INITDB_ROOT_USERNAME: "mongo-user", MONGO_PUBLIC_URL: "mongodb://${{MONGO_INITDB_ROOT_USERNAME}}:${{MONGO_INITDB_ROOT_PASSWORD}}@${{RAILWAY_TCP_PROXY_DOMAIN}}:${{RAILWAY_TCP_PROXY_PORT}}", MONGO_URL: "mongodb://${{MONGO_INITDB_ROOT_USERNAME}}:${{MONGO_INITDB_ROOT_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:${{MONGO_PORT}}", // Railway MONGOHOST: "${{RAILWAY_PRIVATE_DOMAIN}}", MONGOPASSWORD: "${{MONGO_INITDB_ROOT_PASSWORD}}", MONGOPORT: "27017", MONGOUSER: "${{MONGO_INITDB_ROOT_USERNAME}}", }, }, [DatabaseType.REDIS]: { source: 'bitnami/redis:7.2.5', defaultName: 'Redis', description: 'Redis in-memory data store', category: 'In-Memory Stores', port: 6379, variables: { // Docker REDIS_PASSWORD: "redis-password", REDIS_PORT: "6379", REDISUSER: "default", REDIS_RDB_POLICY: "3600#1 300#100 60#10000", REDISPORT: "6379", REDIS_AOF_ENABLED: "no", // Railway REDISPASSWORD: "${{REDIS_PASSWORD}}", REDISHOST: "${{RAILWAY_PRIVATE_DOMAIN}}", RAILWAY_RUN_UID: "0", REDIS_PUBLIC_URL: "redis://${{REDISUSER}}:${{REDIS_PASSWORD}}@${{RAILWAY_TCP_PROXY_DOMAIN}}:${{RAILWAY_TCP_PROXY_PORT}}", REDIS_URL: "redis://${{REDISUSER}}:${{REDIS_PASSWORD}}@${{RAILWAY_PRIVATE_DOMAIN}}:${{REDISPORT}}", RAILWAY_RUN_AS_ROOT: "true", }, }, [DatabaseType.MINIO]: { source: 'minio:latest', defaultName: 'MinIO', description: 'MinIO object storage service', category: 'Object Storage', port: 9000, }, [DatabaseType.SQLITE3]: { source: 'sqlite:latest', defaultName: 'SQLite', description: 'SQLite relational database', category: 'SQL Databases', port: 5432, }, [DatabaseType.POCKETBASE]: { source: 'pocketbase/pocketbase:latest', defaultName: 'PocketBase', description: 'PocketBase lightweight, open-source, self-hosted backend', category: 'SQL Databases', port: 8080, }, [DatabaseType.CLICKHOUSE]: { source: 'clickhouse/clickhouse-server:23', defaultName: 'ClickHouse', description: 'ClickHouse column-oriented database', category: 'Analytics Databases', port: 8123, }, [DatabaseType.MARIADB]: { source: 'mariadb:10', defaultName: 'MariaDB', description: 'MariaDB relational database', category: 'SQL Databases', port: 3306, }, [DatabaseType.PGVECTOR]: { source: 'postgres:14', defaultName: 'PGVector', description: 'PGVector vector database', category: 'Vector Databases', port: 5432, }, };