Unofficial MCP server for Supabase providing basic schema, table, and column management.
Project description
Supabase MCP Server
Let Cursor & Windsurf interact with Supabase
Implementation of Supabase MCP server that enables Cursor and Windsurf to interact directly with Supabase PostgreSQL database. It provides a set of database management tools that work seamlessly with these IDEs through the MCP protocol.
✨ 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
- Download and install PostgreSQL 16+ from https://www.postgresql.org/download/windows/
- Ensure "PostgreSQL Server" and "Command Line Tools" are selected during installation
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.
Migration from 0.1.0 to 0.2.0
The simplest way to migrate is to do a clean install using package manager:
# Remove old installation
rm -rf supabase-mcp-server
# Install via UV (recommended)
uv pip install supabase-mcp-server
However you can still install from source if you prefer.
Using Package Managers (Recommended)
# Using UV
uv pip install supabase-mcp-server
# Using pipx
pipx install supabase-mcp-server
Why these package managers?
pipx: Installs CLI tools in isolated environments, making them available globally without conflictsuv: Fast, reliable Python package installer with dependency resolution, perfect for development
Installing from Source
- Clone the repository
git clone https://github.com/alexander-zuev/supabase-mcp-server.git
cd supabase-mcp-server
- Create and activate virtual environment
# Create venv
uv venv
# Activate it
# On Mac/Linux
source .venv/bin/activate
# On Windows
.venv\Scripts\activate
- Install in editable mode
uv pip install -e .
Installing via Smithery (not tested)
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.
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:
# UV
uv run supabase-mcp-server
# Pipx
pipx run supabase-mcp-server
Setup Cursor
💡 Setting environment variables: For Cursor....
- Create a new MCP server
- Add the following configuration:
name: supabase
protocol: command
command: uv run supabase-mcp-server
Setup Windsurf
💡 Setting environment variables: For Windsurf, it's recommended to set environment variables directly in the
mcp_config.jsonas shown below. This is cleaner than using.envfiles and keeps all Windsurf-specific configuration in one place.
- Add / modify
mcp_config.jsonfile:
{
"mcpServers": {
"supabase": {
"command": "/Users/az/.local/bin/uv", # Path to UV executable
"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 uvin terminal- On Windows: Run
where uvin 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
- Create a new MCP server
- 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
- Add / modify
mcp_config.jsonfile:
{
"mcpServers": {
"supabase": {
"command": "/Users/az/.local/bin/uv", # Path to UV executable
"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.
Connection to different Supabase projects is configured via environment variables:
SUPABASE_PROJECT_REFSUPABASE_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 as environment variables in your shell
- For local development: Use
.envin 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
Set the environment variables in your shell:
# Set directly in your shell
export SUPABASE_PROJECT_REF=your-project-ref
export SUPABASE_DB_PASSWORD=your-db-password
- 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
- 🐍 Support methods and objects available in native Python SDK
- 🔍 Improve SQL syntax validation
- 📦 Simplified installation via package manager - ✅ (0.2.0)
- Support for creating edge functions, managing secrets (similar to Loveble integration)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file supabase_mcp_server-0.2.0.dev0.tar.gz.
File metadata
- Download URL: supabase_mcp_server-0.2.0.dev0.tar.gz
- Upload date:
- Size: 51.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c09f1a7350b232ea168f81ec39eb2188b0891b77469b9ce78affd9f4132f6280
|
|
| MD5 |
8af5b41e814f0e40bcddbb6d8f02b224
|
|
| BLAKE2b-256 |
792936d534bc6ff62078bc229f9661db8f3676680453025e0beeb38afaa9cdac
|
File details
Details for the file supabase_mcp_server-0.2.0.dev0-py3-none-any.whl.
File metadata
- Download URL: supabase_mcp_server-0.2.0.dev0-py3-none-any.whl
- Upload date:
- Size: 16.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c82a01d8e1c9c44821c96d29f84d8d0cda0ed974d0e08d18cbc5b875327390e
|
|
| MD5 |
54b9e563f08dd17fdbbf954623faa42d
|
|
| BLAKE2b-256 |
71d06ef20a8f57116bf66875b99cfe42d9e68b1dc5eae301a6f1509fc75c25ba
|