Skip to main content
Glama
cloud9-labs

MCP Supabase Server

by cloud9-labs
README.md
# 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

```bash
npm install @cloud9-labs/mcp-supabase
```

## Configuration

Set the following environment variables:

```bash
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:

```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, pagination
- `supabase_insert`: Insert rows into a table
- `supabase_update`: Update rows matching filter conditions
- `supabase_delete`: Delete rows matching filter conditions
- `supabase_rpc`: Call stored functions/RPC endpoints

### Schema Introspection

- `supabase_list_tables`: List all tables in public schema
- `supabase_get_table_schema`: Get column definitions for a table

### Storage Operations

- `supabase_upload_file`: Upload a file to storage bucket
- `supabase_list_files`: List files in a bucket
- `supabase_delete_file`: Delete a file from storage
- `supabase_list_buckets`: List all storage buckets

### Advanced Operations

- `supabase_execute_sql`: Execute raw SQL (requires RPC function setup)

## Usage Examples

### Query a table

```json
{
  "table": "users",
  "select": "id,name,email",
  "filter": { "status": "active" },
  "order": "created_at.desc",
  "limit": 10
}
```

### Insert data

```json
{
  "table": "posts",
  "data": {
    "title": "Hello World",
    "content": "My first post",
    "author_id": 123
  }
}
```

### Upload a file

```json
{
  "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:

```sql
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

```bash
# Install dependencies
npm install

# Build
npm run build

# Run locally
node dist/index.js
```

## License

MIT