railway-mcp

by jason-tan-swe
Verified
// src/tools/database.tool.ts import { createTool, formatToolDescription } from '@/utils/tools.js'; import { z } from 'zod'; import { databaseService } from '@/services/database.service.js'; import { DatabaseType, RegionCodeSchema } from '@/types.js'; export const databaseTools = [ createTool( "database_list_types", formatToolDescription({ type: 'QUERY', description: "List all available database types that can be deployed using Railway's official templates", bestFor: [ "Discovering supported database types", "Planning database deployments", "Checking template availability" ], notFor: [ "Listing existing databases", "Getting database connection details" ], relations: { nextSteps: ["database_deploy"], alternatives: ["service_create_from_image"], related: ["database_deploy", "service_create_from_image"] } }), {}, async () => { return databaseService.listDatabaseTypes(); } ), createTool( "database_deploy_from_template", formatToolDescription({ type: 'WORKFLOW', description: "Deploy a pre-configured database using Railway's official templates and best practices", bestFor: [ "Standard database deployments", "Quick setup with security defaults", "Common database types (PostgreSQL, MongoDB, Redis)" ], notFor: [ "Custom database versions", "Complex configurations", "Unsupported database types" ], relations: { prerequisites: ["database_list_types"], alternatives: ["service_create_from_image"], nextSteps: ["variable_list", "service_info"], related: ["volume_create", "service_update"] } }), { projectId: z.string().describe( "ID of the project where the database will be deployed" ), type: z.nativeEnum(DatabaseType).describe( "Type of database to deploy (e.g., postgresql, mongodb, redis). Use service_create_from_image for other types." ), region: RegionCodeSchema.describe( "Region where the database should be deployed, try us-west1 before all other regions" ), environmentId: z.string().describe( "Environment ID where the database will be deployed (usually obtained from project_info)" ), name: z.string().optional().describe( "Optional custom name for the database service. Default: {type}-database" ) }, async ({ projectId, type, environmentId, region, name }) => { return databaseService.createDatabaseFromTemplate(projectId, type, region, environmentId, name); } ) ];