Content
# Supabase MCP Server
A Model Context Protocol (MCP) server that allows Claude and other LLMs to interact with Supabase to perform CRUD operations on Postgres tables.
## Features
- Database operations:
- Query data with filters
- Insert data
- Update data
- Delete data
- List tables
## Prerequisites
- Node.js (v16 or newer)
- npm or yarn
- Supabase project with API keys
## Installation
### Option 1: Install from npm (recommended)
The package is published on npm! You can install it globally with:
```bash
npm install -g supabase-mcp
```
Or locally in your project:
```bash
npm install supabase-mcp
```
### Option 2: Clone the repository
```bash
git clone https://github.com/Cappahccino/SB-MCP.git
cd SB-MCP
npm install
npm run build
```
## Configuration
Create a `.env` file with your Supabase credentials:
```
# Supabase credentials
SUPABASE_URL=your_supabase_project_url
SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key
# MCP server configuration
MCP_SERVER_PORT=3000
MCP_SERVER_HOST=localhost
MCP_API_KEY=your_secret_api_key
```
## Usage with Claude
Claude requires a specific transport mode for compatibility. This package provides a dedicated binary for Claude integration:
### In Claude Desktop MCP Config
```json
"supabase": {
"command": "npx",
"args": [
"-y",
"supabase-mcp@latest",
"supabase-mcp-claude"
],
"env": {
"SUPABASE_URL": "your_supabase_project_url",
"SUPABASE_ANON_KEY": "your_supabase_anon_key",
"SUPABASE_SERVICE_ROLE_KEY": "your_service_role_key",
"MCP_API_KEY": "your_secret_api_key"
}
}
```
Make sure you set the required environment variables in the configuration. Claude will use the stdio transport for communication.
### Manual Testing with Claude Binary
For testing outside of Claude, you can run:
```bash
npm run start:claude
```
Or if installed globally:
```bash
supabase-mcp-claude
```
## Usage as a Standalone Server
After installing globally:
```bash
supabase-mcp
```
This will start the MCP server at http://localhost:3000 (or the port specified in your .env file).
## Usage in Your Code
You can also use supabase-mcp as a library in your own Node.js projects:
```javascript
import { createServer, mcpConfig, validateConfig } from 'supabase-mcp';
// Validate configuration
validateConfig();
// Create the server
const app = createServer();
// Start the server
app.listen(mcpConfig.port, mcpConfig.host, () => {
console.log(`Supabase MCP server running at http://${mcpConfig.host}:${mcpConfig.port}`);
});
```
## Troubleshooting
### Common Issues and Solutions
#### 1. "Port XXXX is already in use"
The HTTP server attempts to find an available port automatically. You can manually specify a different port in your `.env` file by changing the `MCP_SERVER_PORT` value.
#### 2. "Missing required environment variables"
Make sure you have a proper `.env` file with all the required values or that you've set the environment variables in your system.
#### 3. "TypeError: Class constructor Server cannot be invoked without 'new'"
If you see this error, you may be running an older version of the package. Update to the latest version:
```bash
npm install -g supabase-mcp@latest
```
#### 4. JSON parsing errors with Claude
Make sure you're using the Claude-specific binary (`supabase-mcp-claude`) instead of the regular HTTP server (`supabase-mcp`).
#### 5. Request timed out with Claude
This usually means Claude initiated the connection but the server was unable to respond in time. Check:
- Are your Supabase credentials correct?
- Is your server setup properly and running?
- Is there anything blocking the connection?
## Tools Reference
### Database Tools
1. **queryDatabase**
- Parameters:
- `table` (string): Name of the table to query
- `select` (string, optional): Comma-separated list of columns (default: "*")
- `query` (object, optional): Filter conditions
2. **insertData**
- Parameters:
- `table` (string): Name of the table
- `data` (object or array of objects): Data to insert
3. **updateData**
- Parameters:
- `table` (string): Name of the table
- `data` (object): Data to update as key-value pairs
- `query` (object): Filter conditions for the update
4. **deleteData**
- Parameters:
- `table` (string): Name of the table
- `query` (object): Filter conditions for deletion
5. **listTables**
- Parameters: None
## Version History
- 1.0.0: Initial release
- 1.0.1: Added automatic port selection
- 1.0.2: Fixed protocol compatibility issues
- 1.0.3: Added JSON-RPC support
- 1.1.0: Complete rewrite using official MCP SDK
- 1.2.0: Added separate Claude transport and fixed port conflict issues
- 1.3.0: Updated for improved compatibility with TypeScript projects
- 1.4.0: Fixed Claude stdio transport integration based on Supabase community best practices
- 1.5.0: Removed Edge Function support to improve stability and focus on database operations
## License
MIT
Connection Info
You Might Also Like
markitdown
MarkItDown-MCP is a lightweight server for converting URIs to Markdown.
markitdown
Python tool for converting files and office documents to Markdown.
Filesystem
Node.js MCP Server for filesystem operations with dynamic access control.
Sequential Thinking
A structured MCP server for dynamic problem-solving and reflective thinking.
Fetch
Retrieve and process content from web pages by converting HTML into markdown format.
TrendRadar
TrendRadar: Your hotspot assistant for real news in just 30 seconds.