A Model Context Protocol (MCP) server that provides database and storage capabilities for Supabase.
- Execute SQL queries on Supabase databases
- Manage Supabase storage buckets and files
- Secure connection handling with SSL support
- Structured response format with row data, field information, and metadata
- Error handling and connection management
- Node.js and npm/pnpm
- A Supabase project with connection string
Create a .env.local file in the project root with one of the following configurations:
# Connection mode
DATABASE_MODE=management-api
# Required for management-api mode
SUPABASE_PROJECT_REF=your-project-ref
SUPABASE_ACCESS_TOKEN=your-access-token
SUPABASE_API_URL=https://api.supabase.com
# Required for storage tools
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=your-service-role-keyHow to get your access token:
- Go to https://supabase.com/dashboard/account/tokens
- Generate a new access token
- Copy the token to
SUPABASE_ACCESS_TOKEN
Advantages:
- Works over HTTPS (port 443)
- No firewall/VPN issues with port 5432
- Uses official Supabase Management API
# Connection mode (or omit this line - defaults to postgres)
DATABASE_MODE=postgres
# Required for postgres mode
SUPABASE_CONNECTION_STRING=your_supabase_connection_string_here
# Required for storage tools
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=your-service-role-keyLimitations:
- Requires port 5432 to be accessible
- May be blocked by corporate firewalls/VPNs
Choose one of the following installation methods:
# Install to all supported applications (Claude Desktop, Cursor, Claude Code)
npm run install-server
# Or install to specific applications
npm run install-desktop # Claude Desktop only
npm run install-cursor # Cursor IDE only
npm run install-code # Claude Code onlyThe installation script will:
- Build the TypeScript code
- Make the executable file executable
- Update the appropriate MCP configuration files
- Include environment variables from
.env.local
Once installed, you can use the various tools in your MCP-enabled application:
- Tool name:
execute-sql - Description: Execute SQL queries on Supabase database
- Parameters:
query(string): The SQL query to execute
SELECT * FROM users LIMIT 10;
INSERT INTO posts (title, content) VALUES ('Hello', 'World');
UPDATE users SET last_login = NOW() WHERE id = 1;The tool returns a JSON response with:
rowCount: Number of affected/returned rowsrows: Array of result rowsfields: Array of field metadata (name, dataTypeID)command: SQL command type (SELECT, INSERT, etc.)
The server is configured in your MCP client's configuration file:
- Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json - Cursor:
~/.cursor/mcp.json - Claude Code:
~/.claude.json
# Build the project
npm run build
# Start the server directly
npm start- The server uses SSL connections with
rejectUnauthorized: falsefor Supabase compatibility - Environment variables are loaded from
.env.localand passed securely to the MCP configuration - Connection strings should never be committed to version control