Skip to main content

Supabase MCP Server

Supabase    MCP

Let Cursor & Windsurf interact with Supabase

Star History Chart

PyPI version CI Status Python 3.12+ uv package manager smithery badge MCP Server License

Unofficial Supabase MCP server that enables Cursor and Windsurf to interact directly with Supabase PostgreSQL database. Pre-configured to work with local and production instances.

✨ Key features

  • 💻 Designed to work with Windsurf, Cursor, Cline and other MCP-compatible IDEs
  • ✅ Pre-configured to work with both free and paid Supabase projects (direct and transaction pooling connection)
  • 🔨 Pre-built database exploration tools with schema insights greatly improve LLM 'onboarding experience' into your db
  • 🔐 Enforces read-only mode when executing SQL queries
  • 🔍 Basic QoL features like query validation, retry logic for connection errors
  • 📦 Installation via package manager (uv, pipx, etc.) or from source

Prerequisites

  • Python 3.12+
  • PostgreSQL 16+
  • uv package manager

PostgreSQL Installation

⚠️ Important: PostgreSQL must be installed BEFORE installing project dependencies, as psycopg2 requires PostgreSQL development libraries during compilation.

MacOS

brew install postgresql@16

Windows

MCP Server Installation

⚠️ 0.2.0 Breaking change: Installation and execution methods have changed to support package distribution. The server now runs as a proper Python module instead of a direct script.

You can install Supabase MCP Server either using a package manager (recommended) or from source (just as in v0.1.0).

Using Package Managers (Recommended)

Choose the installation method based on your needs:

# Using pipx (recommended for CLI tools)
pipx install supabase-mcp-server
# → Run with: supabase-mcp-server

# Using UV (if you prefer your current environment)
uv pip install supabase-mcp-server
# → Run with: uv run supabase-mcp-server

Why these package managers?

  • pipx:

    • Creates isolated environments for CLI tools
    • Makes commands globally available as supabase-mcp-server
    • Prevents dependency conflicts
    • Best for end users who just want to use the tool
  • uv:

    • Installs in your current environment
    • Faster installation and dependency resolution
    • Requires uv run prefix to execute
    • Better for development or if you're using uv for other packages

Installing from Source

  1. Clone the repository
git clone https://github.com/alexander-zuev/supabase-mcp-server.git
cd supabase-mcp-server
  1. Create and activate virtual environment
# Create venv
uv venv

# Activate it
# On Mac/Linux
source .venv/bin/activate
# On Windows
.venv\Scripts\activate
  1. Install in editable mode
uv pip install -e .

Installing via Smithery

Please report any issues with Smithery, as I haven't tested it yet.

To install Supabase MCP Server for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @alexander-zuev/supabase-mcp --client claude

Running Supabase MCP Server

This MCP server was designed to be used with AI IDEs like Cursor and Windsurf and not tested with other clients. However, it should work with any MCP-compatible IDE as long as it uses stdio protocol.

You can run the server in several ways:

  • as a package script (if you installed it using package manager)
  • as a python module (if you installed it from source)

💡 0.2.0 Breaking change: Installation and execution methods have changed to support package distribution. The server now runs as a proper Python module instead of a direct script:

  • Old: uv --directory /path/to/supabase-mcp-server run main.py
  • New: uv run supabase-mcp-server (if installed via package manager)
  • New: uv --directory /path/to/supabase-mcp-server run python -m supabase_mcp.main (if installed from source)

Running as a package script (if you installed it using package manager)

If you installed it using package manager, you can run the server with this command:

# Pipx
supabase-mcp-server

# UV
uv run supabase-mcp-server

Setup Cursor

⚠️ Important: Unlike Windsurf's defacto standard JSON configuration, Cursor team had a 'genius' idea to abstract away the underlying configuration into a barebones, poorly documented UI (took me several hours to figure out how to set it up) 😡. So in order to connect to a remote Supabase project, you need to set environment variables globally. I've provided a way to pick up .env file from a global config directory (~/.config/supabase-mcp/.env on macOS/Linux or %APPDATA%\supabase-mcp\.env on Windows).

  1. Set up global config (recommended approach):
# Create config directory
# On macOS/Linux
mkdir -p ~/.config/supabase-mcp && cd ~/.config/supabase-mcp
# On Windows (in PowerShell)
mkdir -Force "$env:APPDATA\supabase-mcp" ; cd "$env:APPDATA\supabase-mcp"

# Create and open .env file
# On macOS/Linux
echo "SUPABASE_PROJECT_REF=your-project-ref
SUPABASE_DB_PASSWORD=your-db-password" > .env && open .
# On Windows (in PowerShell)
echo "SUPABASE_PROJECT_REF=your-project-ref
SUPABASE_DB_PASSWORD=your-db-password" > .env ; explorer .
  1. Create a new MCP server in Cursor:
name: supabase
protocol: command
# if pipx (recommended)
command: supabase-mcp-server
# if uv
command: uv run supabase-mcp-server
  1. Reload Cursor If you encounter connection issues, try closing and reopening Cursor.

Setup Windsurf

💡 Setting environment variables: For Windsurf, it's recommended to set environment variables directly in the mcp_config.json as shown below.

  1. Add / modify mcp_config.json file:
{
    "mcpServers": {
      "supabase": {
        "command": "/Users/az/.local/bin/uv",
        "args": [
          "run",
          "supabase-mcp-server"
        ],
        "env": {
          "SUPABASE_PROJECT_REF": "your-project-ref",
          "SUPABASE_DB_PASSWORD": "your-db-password"
        }
      }
    }
}

💡 Finding UV executable path:

  • On macOS/Linux: Run which uv in terminal
  • On Windows: Run where uv in command prompt The output will show the full path to use in your configuration.

Running as a python module (if you installed it from source)

If you installed from source or want to run the development version, use this command:

uv --directory /path/to/supabase-mcp-server run python -m supabase_mcp.main

Setup Cursor

  1. Create a new MCP server
  2. Add the following configuration:
name: supabase
protocol: command
command: uv --directory /path/to/supabase-mcp-server run python -m supabase_mcp.main

Replace /path/to/supabase-mcp-server with your actual repository path, for example:

command: uv --directory /Users/username/projects/supabase-mcp-server run python -m supabase_mcp.main

Setup Windsurf

  1. Add / modify mcp_config.json file:
{
    "mcpServers": {
      "supabase": {
        "command": "/Users/az/.local/bin/uv",
        "args": [
          "--directory",
          "/path/to/supabase-mcp-server",
          "run",
          "python",
          "-m",
          "supabase_mcp.main"
        ],
        "env": {
          "SUPABASE_PROJECT_REF": "your-project-ref",
          "SUPABASE_DB_PASSWORD": "your-db-password"
        }
      }
    }
}

Configuring connection to different Supabase projects

💡 Tip: Connection to local Supabase project is configured out of the box. You don't need to set environment variables.

To connect to a different Supabase project, you need to set environment variables:

  • SUPABASE_PROJECT_REF
  • SUPABASE_DB_PASSWORD

The recommended way to set these variables depends on your IDE:

  • For Windsurf: Set them directly in mcp_config.json (cleanest approach)
  • For Cursor: Set them using global config directory (see Setup Cursor)
  • For local development: Use .env in the project root (when installed from source)

Local Supabase project

If no configuration is provided, the server defaults to local Supabase settings:

  • Host: 127.0.0.1:54322
  • Password: postgres

This works out of the box with Supabase CLI's local development setup.

Remote Supabase project (staging / production)

When using Windsurf

Set the environment variables directly in your mcp_config.json:

{
    "mcpServers": {
      "supabase": {
        "command": "/Users/az/.local/bin/uv",
        "args": [
          "run",
          "supabase-mcp-server"
        ],
        "env": {
          "SUPABASE_PROJECT_REF": "your-project-ref",
          "SUPABASE_DB_PASSWORD": "your-db-password"
        }
      }
    }
}
When using Cursor

Create a global config file:

# Create config directory and navigate to it
# On macOS/Linux
mkdir -p ~/.config/supabase-mcp && cd ~/.config/supabase-mcp
# On Windows (in PowerShell)
mkdir -Force "$env:APPDATA\supabase-mcp" ; cd "$env:APPDATA\supabase-mcp"

# Create and open .env file
# On macOS/Linux
echo "SUPABASE_PROJECT_REF=your-project-ref
SUPABASE_DB_PASSWORD=your-db-password" > .env && open .
# On Windows (in PowerShell)
echo "SUPABASE_PROJECT_REF=your-project-ref
SUPABASE_DB_PASSWORD=your-db-password" > .env ; explorer .

Then in Cursor's MCP server configuration:

name: supabase
protocol: command
# if pipx (recommended)
command: supabase-mcp-server
# if uv
command: uv run supabase-mcp-server

💡 Note: Unlike Windsurf, Cursor requires configuration via global config file or environment variables. The global config approach is recommended for better maintainability.

Global config
  1. Global config (Lowest precedence)
    # Create in your home config directory for persistent access
    mkdir -p ~/.config/supabase-mcp
    echo "SUPABASE_PROJECT_REF=your-project-ref
    SUPABASE_DB_PASSWORD=your-db-password" > ~/.config/supabase-mcp/.env
    
    Perfect for developers who want to set up once and use across multiple projects.
When developing locally (installed from source)

Create .env file in the root of the cloned repository:

# In the supabase-mcp-server directory (project root)
echo "SUPABASE_PROJECT_REF=your-project-ref
SUPABASE_DB_PASSWORD=your-db-password" > .env

When running from source, it looks for .env in the project root directory (where you cloned the repository).

Troubleshooting

Before connecting to IDEs, verify server functionality using the MCP Inspector:

# Using MCP inspector
mcp dev supabase_mcp.main

# Or run directly
uv --directory /path/to/supabase-mcp-server run python -m supabase_mcp.main

This connects to MCP Inspector which allows you to debug and test the server without a client.

Future improvements

  • 📦 Simplified installation via package manager - ✅ (0.2.0)
  • 🐍 Support methods and objects available in native Python SDK
  • 🔍 Improve SQL syntax validation
  • Support for creating edge functions, managing secrets (similar to Loveble integration)

Metadata

Release files for supabase-mcp-server-kivo 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for supabase-mcp-server-kivo 0.4.0
File Size Uploaded
supabase_mcp_server_kivo-0.4.0.tar.gz 56.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for supabase-mcp-server-kivo 0.4.0
File Interpreter ABI Platform
supabase_mcp_server_kivo-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 73.5 kB

Release files / supabase_mcp_server_kivo-0.4.0.tar.gz

Download URL supabase_mcp_server_kivo-0.4.0.tar.gz
Size 56.4 kB
Tags Source
SHA-256 checksum
How to use checksums
c122d5999eb8993d63a8396734628b85d1b39a73f652f1eac534218e16d90948
BLAKE2b-256 checksum
How to use checksums
bfedec45a2067eadd8ae7e3c11cec43e78326110bf9f161468882beb4fa2f0ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.5.16

Release files / supabase_mcp_server_kivo-0.4.0-py3-none-any.whl

Download URL supabase_mcp_server_kivo-0.4.0-py3-none-any.whl
Size 17.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2fad6a181477c5844c223b41d4f58b84adceb2c08341daff748409635eb92750
BLAKE2b-256 checksum
How to use checksums
c755bb7a64223a09610a9c5ae38fcb8dcdae24d8cbf956200a866132bb04c368
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.5.16

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page