Skip to main content
Glama
dj-pearson

Supabase Coolify MCP Server

by dj-pearson
resources.ts4.91 kB
/** * MCP Resources registration for exposing Supabase and Coolify entities */ import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { ListResourcesRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js'; import { CoolifyClient } from './coolify-client.js'; import { SupabaseManager } from './supabase-client.js'; export function registerResources( server: Server, coolify: CoolifyClient, supabase: SupabaseManager ) { // Handle resource list requests server.setRequestHandler(ListResourcesRequestSchema, async () => { return { resources: [ { uri: 'supabase://migrations', name: 'Database Migrations', description: 'All database migrations', mimeType: 'application/json', }, { uri: 'supabase://edge-functions', name: 'Edge Functions', description: 'All deployed edge functions', mimeType: 'application/json', }, { uri: 'supabase://storage-buckets', name: 'Storage Buckets', description: 'All storage buckets', mimeType: 'application/json', }, { uri: 'supabase://auth-config', name: 'Auth Configuration', description: 'Authentication configuration', mimeType: 'application/json', }, { uri: 'supabase://health', name: 'Service Health', description: 'Health status of all Supabase services', mimeType: 'application/json', }, { uri: 'coolify://applications', name: 'Coolify Applications', description: 'All Coolify applications', mimeType: 'application/json', }, { uri: 'coolify://services', name: 'Coolify Services', description: 'All Coolify services', mimeType: 'application/json', }, { uri: 'coolify://databases', name: 'Coolify Databases', description: 'All Coolify databases', mimeType: 'application/json', }, ], }; }); // Handle resource read requests server.setRequestHandler(ReadResourceRequestSchema, async (request) => { const { uri } = request.params; try { let data: any; let description: string; switch (uri) { case 'supabase://migrations': { const result = await supabase.listMigrations(); data = result.data || []; description = 'All database migrations'; break; } case 'supabase://edge-functions': { const result = await supabase.listEdgeFunctions(); data = result.data || []; description = 'All deployed edge functions'; break; } case 'supabase://storage-buckets': { const result = await supabase.listStorageBuckets(); data = result.data || []; description = 'All storage buckets'; break; } case 'supabase://auth-config': { const result = await supabase.getAuthConfig(); data = result.data || {}; description = 'Authentication configuration'; break; } case 'supabase://health': { const result = await supabase.checkHealth(); data = result.data || []; description = 'Service health status'; break; } case 'coolify://applications': { const result = await coolify.listApplications(); data = result.data || []; description = 'All Coolify applications'; break; } case 'coolify://services': { const result = await coolify.listServices(); data = result.data || []; description = 'All Coolify services'; break; } case 'coolify://databases': { const result = await coolify.listDatabases(); data = result.data || []; description = 'All Coolify databases'; break; } default: throw new Error(`Unknown resource: ${uri}`); } return { contents: [ { uri, mimeType: 'application/json', text: JSON.stringify( { description, data, timestamp: new Date().toISOString(), }, null, 2 ), }, ], }; } catch (error) { return { contents: [ { uri, mimeType: 'application/json', text: JSON.stringify( { error: error instanceof Error ? error.message : 'Unknown error', }, null, 2 ), }, ], }; } }); }

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/dj-pearson/supabase-coolify-mcp-server'

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