MCP Supabase Server
Model Context Protocol (MCP) server for Supabase database and storage operations.
Features
- Database Operations: Query, insert, update, delete rows
- Schema Introspection: List tables, get column definitions
- Storage Operations: Upload, list, delete files and buckets
- RPC Support: Call stored functions
- Raw SQL: Execute custom SQL queries (requires setup)
Installation
npm install @cloud9-labs/mcp-supabase
Configuration
Set the following environment variables:
export SUPABASE_URL="https://your-project.supabase.co"
export SUPABASE_SERVICE_KEY="your-service-role-key"
Claude Desktop Configuration
Add to your claude_desktop_config.json:
{
"mcpServers": {
"supabase": {
"command": "npx",
"args": ["-y", "@cloud9-labs/mcp-supabase"],
"env": {
"SUPABASE_URL": "https://your-project.supabase.co",
"SUPABASE_SERVICE_KEY": "your-service-role-key"
}
}
}
}
Available Tools
Database Operations
supabase_query: Execute SELECT with filters, ordering, paginationsupabase_insert: Insert rows into a tablesupabase_update: Update rows matching filter conditionssupabase_delete: Delete rows matching filter conditionssupabase_rpc: Call stored functions/RPC endpoints
Schema Introspection
supabase_list_tables: List all tables in public schemasupabase_get_table_schema: Get column definitions for a table
Storage Operations
supabase_upload_file: Upload a file to storage bucketsupabase_list_files: List files in a bucketsupabase_delete_file: Delete a file from storagesupabase_list_buckets: List all storage buckets
Advanced Operations
supabase_execute_sql: Execute raw SQL (requires RPC function setup)
Usage Examples
Query a table
{
"table": "users",
"select": "id,name,email",
"filter": { "status": "active" },
"order": "created_at.desc",
"limit": 10
}
Insert data
{
"table": "posts",
"data": {
"title": "Hello World",
"content": "My first post",
"author_id": 123
}
}
Upload a file
{
"bucket": "avatars",
"path": "user123/profile.jpg",
"data": "<base64-encoded-data>",
"contentType": "image/jpeg"
}
Raw SQL Setup
To use supabase_execute_sql, create this function in your Supabase SQL Editor:
CREATE OR REPLACE FUNCTION execute_sql(query text)
RETURNS json AS $$
DECLARE
result json;
BEGIN
EXECUTE query INTO result;
RETURN result;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
Development
# Install dependencies
npm install
# Build
npm run build
# Run locally
node dist/index.js
License
MIT






