Skip to main content
Glama

Clipboard to Supabase MCP Helper

test-supabase.js7.48 kB
#!/usr/bin/env node /** * This script tests connectivity to Supabase and verifies bucket access. * It's useful for troubleshooting connection issues. * * Usage: * $ node scripts/test-supabase.js */ import { createClient } from '@supabase/supabase-js'; import { config } from 'dotenv'; import fs from 'fs'; import path from 'path'; import https from 'https'; import { URL } from 'url'; // Load environment variables from .env file config(); const SUPABASE_URL = process.env.SUPABASE_URL; const SUPABASE_KEY = process.env.SUPABASE_SERVICE_ROLE_KEY; const BUCKET = process.env.BUCKET || 'media'; async function runTests() { console.log('╔════════════════════════════════════════════╗'); console.log('║ Supabase Connection Test Script ║'); console.log('╚════════════════════════════════════════════╝\n'); // Check if environment variables are set console.log('Step 1: Checking environment variables...'); if (!SUPABASE_URL) { console.error('❌ SUPABASE_URL is not set. Please add it to your .env file.'); process.exit(1); } if (!SUPABASE_KEY) { console.error('❌ SUPABASE_SERVICE_ROLE_KEY is not set. Please add it to your .env file.'); process.exit(1); } console.log('✅ Environment variables are set.\n'); // Create Supabase client console.log('Step 2: Testing network connectivity to Supabase...'); try { // Parse the Supabase URL to get the hostname const supabaseUrl = new URL(SUPABASE_URL); const hostname = supabaseUrl.hostname; // Test simple HTTPS connectivity await new Promise((resolve, reject) => { const req = https.get(`https://${hostname}`, res => { if (res.statusCode >= 200 && res.statusCode < 300) { console.log(`✅ Network connectivity test successful (status: ${res.statusCode}).\n`); resolve(); } else { reject(new Error(`HTTP status ${res.statusCode}`)); } res.resume(); // Consume response to free up memory }); req.on('error', e => { reject(e); }); // Set a timeout of 10 seconds req.setTimeout(10000, () => { req.destroy(); reject(new Error('Connection timeout')); }); }); } catch (error) { console.error(`❌ Network connectivity test failed: ${error.message}`); console.log('This indicates network connectivity issues. Check your internet connection.'); console.log('If you are behind a proxy or firewall, ensure it allows connections to Supabase.\n'); } console.log('Step 3: Creating Supabase client...'); const supabase = createClient(SUPABASE_URL, SUPABASE_KEY, { auth: { persistSession: false, autoRefreshToken: false, } }); console.log('✅ Supabase client created.\n'); // Check bucket exists console.log(`Step 4: Checking if bucket "${BUCKET}" exists...`); console.log(` Connecting to: ${SUPABASE_URL}`); console.log(` Using bucket: ${BUCKET}`); try { console.log(' Attempting connection...'); const { data, error } = await supabase.storage.getBucket(BUCKET); if (error) { console.error(`❌ Error accessing bucket: ${error.message}`); if (error.message === 'fetch failed') { console.log('\n🔍 TROUBLESHOOTING "fetch failed" ERROR:'); console.log('1. Make sure your Supabase project is not paused (visit the dashboard to wake it)'); console.log('2. Verify your SUPABASE_URL is correct in .env file'); console.log('3. Check that your SUPABASE_SERVICE_ROLE_KEY is valid'); console.log('4. Ensure you have internet connectivity'); console.log('5. Check if Supabase is experiencing an outage: https://status.supabase.com/'); console.log('\nℹ️ For free tier Supabase projects, you may need to visit the project dashboard to wake it up.'); } process.exit(1); } console.log(`✅ Bucket "${BUCKET}" exists.\n`); } catch (error) { console.error(`❌ Error checking bucket: ${error.message}`); console.log('\n🔍 TROUBLESHOOTING STEPS:'); console.log('1. Make sure your Supabase project is not paused'); console.log('2. Verify your SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY in .env file'); console.log('3. Check if you can access the Supabase dashboard in your browser'); process.exit(1); } // Test small upload console.log('Step 5: Testing 1-byte upload...'); try { const tiny = new Uint8Array([1]).buffer; const { error } = await supabase.storage .from(BUCKET) .upload('test/health-check.txt', tiny, { upsert: true }); if (error) { console.error(`❌ Upload test failed: ${error.message}`); process.exit(1); } console.log('✅ Upload test successful.\n'); } catch (error) { console.error(`❌ Upload test error: ${error.message}`); process.exit(1); } // Test download console.log('Step 6: Testing download of uploaded file...'); try { const { data, error } = await supabase.storage .from(BUCKET) .download('test/health-check.txt'); if (error) { console.error(`❌ Download test failed: ${error.message}`); process.exit(1); } console.log('✅ Download test successful.\n'); } catch (error) { console.error(`❌ Download test error: ${error.message}`); process.exit(1); } // Test get URL console.log('Step 7: Testing public URL generation...'); try { const { data } = supabase.storage .from(BUCKET) .getPublicUrl('test/health-check.txt'); console.log(`✅ Public URL generated: ${data.publicUrl}\n`); } catch (error) { console.error(`❌ URL generation error: ${error.message}`); process.exit(1); } // Test list files console.log('Step 8: Testing listing files in test directory...'); try { const { data, error } = await supabase.storage .from(BUCKET) .list('test'); if (error) { console.error(`❌ List test failed: ${error.message}`); process.exit(1); } console.log(`✅ List test successful. Found ${data.length} files in test directory.\n`); } catch (error) { console.error(`❌ List test error: ${error.message}`); process.exit(1); } // Test cleanup console.log('Step 9: Cleaning up test file...'); try { const { error } = await supabase.storage .from(BUCKET) .remove(['test/health-check.txt']); if (error) { console.error(`❌ Cleanup failed: ${error.message}`); process.exit(1); } console.log('✅ Cleanup successful.\n'); } catch (error) { console.error(`❌ Cleanup error: ${error.message}`); process.exit(1); } console.log('╔════════════════════════════════════════════╗'); console.log('║ All Tests Passed! ║'); console.log('╚════════════════════════════════════════════╝'); console.log('Your Supabase configuration is working correctly.'); console.log(`Bucket "${BUCKET}" is accessible and functioning properly.`); } runTests().catch(err => { console.error('Test script error:', err); process.exit(1); });

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/martinbowling/clipboard-to-supabase-mcp-helper'

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