@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
JavaScript
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,
},
};