Supabase MCP Server

by Cappahccino
Verified
# 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