Skip to main content
Glama

databases

Manage and control database operations for Coolify deployments, including creating, updating, deleting, and monitoring databases like PostgreSQL, MySQL, Redis, and more via CLI or programmatic access.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bodyNoJSON request body
idNoDatabase UUID
operationYesOperation to perform

Implementation Reference

  • Core handler function that implements all database operations by parsing arguments and calling the appropriate generated SDK functions via safeApiCall.
    export async function databasesHandler(args: DatabasesToolArgs) { const { operation, id, body } = args; // Helper to parse body if provided const parseBody = (body?: string) => { if (!body) return undefined; try { return JSON.parse(body); } catch (error) { throw new Error(`Invalid JSON in body parameter: ${error instanceof Error ? error.message : String(error)}`); } }; // Special operation to get available database types if (operation === 'get_database_types') { return { success: true, data: { database_types: DATABASE_TYPES, count: DATABASE_TYPES.length, description: "All available database types supported by Coolify" } }; } // Route to appropriate generated service method switch (operation) { case 'list': return await safeApiCall(() => listDatabases()); case 'get': if (!id) throw new Error('ID required for get operation'); return await safeApiCall(() => getDatabaseByUuid({ path: { uuid: id } })); case 'update': if (!id || !body) throw new Error('ID and body required for update operation'); const updateData = parseBody(body); return await safeApiCall(() => updateDatabaseByUuid({ path: { uuid: id }, body: updateData })); case 'delete': if (!id) throw new Error('ID required for delete operation'); return await safeApiCall(() => deleteDatabaseByUuid({ path: { uuid: id } })); case 'create_postgresql': if (!body) throw new Error('Body required for create_postgresql operation'); const postgresqlData = parseBody(body); return await safeApiCall(() => createDatabasePostgresql({ body: postgresqlData })); case 'create_clickhouse': if (!body) throw new Error('Body required for create_clickhouse operation'); const clickhouseData = parseBody(body); return await safeApiCall(() => createDatabaseClickhouse({ body: clickhouseData })); case 'create_dragonfly': if (!body) throw new Error('Body required for create_dragonfly operation'); const dragonflyData = parseBody(body); return await safeApiCall(() => createDatabaseDragonfly({ body: dragonflyData })); case 'create_redis': if (!body) throw new Error('Body required for create_redis operation'); const redisData = parseBody(body); return await safeApiCall(() => createDatabaseRedis({ body: redisData })); case 'create_keydb': if (!body) throw new Error('Body required for create_keydb operation'); const keydbData = parseBody(body); return await safeApiCall(() => createDatabaseKeydb({ body: keydbData })); case 'create_mariadb': if (!body) throw new Error('Body required for create_mariadb operation'); const mariadbData = parseBody(body); return await safeApiCall(() => createDatabaseMariadb({ body: mariadbData })); case 'create_mysql': if (!body) throw new Error('Body required for create_mysql operation'); const mysqlData = parseBody(body); return await safeApiCall(() => createDatabaseMysql({ body: mysqlData })); case 'create_mongodb': if (!body) throw new Error('Body required for create_mongodb operation'); const mongodbData = parseBody(body); return await safeApiCall(() => createDatabaseMongodb({ body: mongodbData })); case 'start': if (!id) throw new Error('ID required for start operation'); return await safeApiCall(() => startDatabaseByUuid({ path: { uuid: id } })); case 'stop': if (!id) throw new Error('ID required for stop operation'); return await safeApiCall(() => stopDatabaseByUuid({ path: { uuid: id } })); case 'restart': if (!id) throw new Error('ID required for restart operation'); return await safeApiCall(() => restartDatabaseByUuid({ path: { uuid: id } })); default: throw new Error(`Unknown operation: ${operation}`); } }
  • MCP server registration of the 'databases' tool, including inline Zod input schema and wrapper handler that delegates to databasesHandler.
    // Register databases tool with proper Zod schema format server.tool( 'databases', { operation: z.enum([ 'list', 'get', 'update', 'delete', 'create_postgresql', 'create_clickhouse', 'create_dragonfly', 'create_redis', 'create_keydb', 'create_mariadb', 'create_mysql', 'create_mongodb', 'start', 'stop', 'restart' ]).describe("Operation to perform"), id: z.string().optional().describe("Database UUID"), body: z.string().optional().describe("JSON request body") }, async ({ operation, id, body }) => { try { console.error('Databases tool received args:', JSON.stringify({ operation, id, body }, null, 2)); const result = await databasesHandler({ operation, id, body }); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } catch (error) { return { content: [{ type: 'text', text: `Error: ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } } );
  • Zod schema defining the input parameters for the databases tool (imported but uses inline schema in registration).
    export const databasesToolSchema = z.object({ operation: z.enum([ 'list', 'get', 'update', 'delete', 'create_postgresql', 'create_clickhouse', 'create_dragonfly', 'create_redis', 'create_keydb', 'create_mariadb', 'create_mysql', 'create_mongodb', 'start', 'stop', 'restart', 'get_database_types' ]).describe("Operation to perform"), id: z.string().optional().describe("Database UUID"), body: z.string().optional().describe("JSON request body") });
  • Constant array of supported database types used in get_database_types operation.
    export const DATABASE_TYPES = [ 'clickhouse', 'dragonfly', 'keydb', 'mariadb', 'mongodb', 'mysql', 'postgresql', 'redis' ] as const;

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/FelixAllistar/coolify-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server