Skip to main content
Glama

Supabase MCP Server

README.mdโ€ข9.59 kB
# Supabase MCP Server A Model Context Protocol (MCP) server that provides seamless integration between AI assistants and Supabase databases. This server enables LLMs to perform CRUD operations on any Supabase database through standardized, well-documented tools. ## ๐Ÿš€ Features - **Full CRUD Operations**: Read, Create, Update, and Delete records in any Supabase table - **Advanced Filtering**: Support for complex queries with multiple filter conditions - **Safety First**: Built-in safety checks for destructive operations - **Type Safety**: Full type hints and Pydantic validation - **Comprehensive Error Handling**: Detailed error messages and logging - **Flexible Querying**: Support for pagination, ordering, and column selection - **Upsert Support**: Insert or update records in a single operation ## ๐Ÿ“‹ Prerequisites - Python 3.11 or higher - A Supabase project (self-hosted or cloud) - Supabase service role key with appropriate permissions ## ๐Ÿ› ๏ธ Installation 1. **Clone or download the project**: ```bash git clone <repository-url> cd supabase-mcp-server ``` 2. **Install dependencies**: ```bash pip install -r requirements.txt ``` 3. **Set up environment variables**: ```bash cp .env.example .env # Edit .env with your Supabase credentials ``` 4. **Configure your environment**: Edit the `.env` file with your Supabase credentials: ```env SUPABASE_URL=https://your-project-id.supabase.co SUPABASE_SERVICE_ROLE_KEY=your-service-role-key-here ``` ## ๐Ÿ”ง Configuration ### Environment Variables Edit `.env` file with your configuration: ```env # Required: Your existing Supabase instance SUPABASE_URL=https://your-project-id.supabase.co SUPABASE_SERVICE_ROLE_KEY=your-service-role-key-here # Optional: Server configuration LOG_LEVEL=INFO ``` ### Finding Your Supabase Credentials 1. Go to your Supabase project dashboard 2. Navigate to **Settings** โ†’ **API** 3. Copy the **Project URL** for `SUPABASE_URL` 4. Copy the **service_role secret** for `SUPABASE_SERVICE_ROLE_KEY` โš ๏ธ **Important**: Use the `service_role` key, not the `anon` key, as it has full database access. ## ๐Ÿ“ GitHub Repository Setup ๐Ÿ”— **[Complete GitHub Setup & SSH Deployment Guide](GITHUB_SETUP.md)** Quick setup: 1. Create GitHub repository 2. Push code: `git init && git add . && git commit -m "Initial commit" && git push` 3. SSH deploy: `git clone YOUR_REPO && cd PROJECT && ./scripts/deploy.sh` ๐Ÿ’ก **[SSH Quick Deploy Reference](SSH_QUICK_DEPLOY.md)** - 3-command deployment ## ๐Ÿš€ Usage ### Local Development #### Running the Server ```bash python src/server.py ``` The server will start with stdio transport, which is the standard for MCP servers. #### Installing in Claude Desktop 1. Add to your Claude Desktop MCP configuration: ```json { "servers": { "supabase": { "command": "python", "args": ["path/to/supabase-mcp-server/src/server.py"], "env": { "SUPABASE_URL": "https://your-project-id.supabase.co", "SUPABASE_SERVICE_ROLE_KEY": "your-service-role-key" } } } } ``` #### Using with MCP Inspector For development and testing: ```bash npx @modelcontextprotocol/inspector python src/server.py ``` ### ๐Ÿณ Cloud Deployment Deploy to your cloud Docker instance in minutes! #### Quick Deploy (Automated) 1. **Upload files to your cloud server**: ```bash scp -r supabase-mcp-server/ user@your-server.com:/home/user/ ``` 2. **SSH and deploy**: ```bash ssh user@your-server.com cd supabase-mcp-server chmod +x scripts/deploy.sh ./scripts/deploy.sh ``` #### Manual Deploy ```bash # Configure environment cp .env.production .env nano .env # Add your Supabase credentials # Deploy MCP server only (recommended) docker-compose -f docker-compose.mcp-only.yml up -d # Or deploy full stack (includes self-hosted Supabase) docker-compose up -d ``` **Access**: Server available on port 8085 ๐Ÿ“– **[Complete Deployment Guide](DEPLOYMENT.md)** - Includes security, monitoring, scaling, and troubleshooting ## ๐Ÿ”จ Available Tools ### 1. Read Table Rows Query data from any table with filtering, ordering, and pagination. **Usage**: "Show me all users where status is 'active'" ```json { "table_name": "users", "filters": [{"column": "status", "operator": "eq", "value": "active"}], "order_by": "created_at", "limit": 10 } ``` ### 2. Create Table Records Insert new records into any table, with optional upsert functionality. **Usage**: "Create a new user with name 'John' and email 'john@example.com'" ```json { "table_name": "users", "records": [{"name": "John", "email": "john@example.com"}] } ``` ### 3. Update Table Records Modify existing records based on specified conditions. **Usage**: "Update the status to 'completed' for task with id 123" ```json { "table_name": "tasks", "set_data": {"status": "completed"}, "where_conditions": [{"column": "id", "operator": "eq", "value": 123}] } ``` ### 4. Delete Table Records Remove records from tables with safety checks and confirmation. **Usage**: "Delete all inactive users created before 2023" ```json { "table_name": "users", "where_conditions": [ {"column": "status", "operator": "eq", "value": "inactive"}, {"column": "created_at", "operator": "lt", "value": "2023-01-01"} ], "confirm_delete": true } ``` ## ๐Ÿ” Filter Operators The server supports various filter operators for precise querying: | Operator | Description | Example | |----------|-------------|---------| | `eq` | Equal to | `{"column": "status", "operator": "eq", "value": "active"}` | | `neq` | Not equal to | `{"column": "status", "operator": "neq", "value": "deleted"}` | | `gt` | Greater than | `{"column": "age", "operator": "gt", "value": 18}` | | `gte` | Greater than or equal | `{"column": "score", "operator": "gte", "value": 80}` | | `lt` | Less than | `{"column": "price", "operator": "lt", "value": 100}` | | `lte` | Less than or equal | `{"column": "discount", "operator": "lte", "value": 50}` | | `like` | Pattern matching (case-sensitive) | `{"column": "name", "operator": "like", "value": "%john%"}` | | `ilike` | Pattern matching (case-insensitive) | `{"column": "email", "operator": "ilike", "value": "%@gmail.com"}` | | `in` | Value in list | `{"column": "category", "operator": "in", "value": ["tech", "science"]}` | | `is` | Is null/true/false | `{"column": "deleted_at", "operator": "is", "value": null}` | ## ๐Ÿงช Testing Run the test suite: ```bash pytest tests/ ``` Run with coverage: ```bash pytest tests/ --cov=src ``` ## ๐Ÿ›ก๏ธ Security Features - **Environment Variable Validation**: Ensures required credentials are set - **Input Validation**: Pydantic models validate all input data - **Safety Checks**: Requires confirmation for destructive operations - **Where Clause Requirements**: Updates and deletes require explicit conditions - **Error Handling**: Comprehensive error handling with detailed logging ## ๐Ÿ“ Project Structure ``` supabase-mcp-server/ โ”œโ”€โ”€ src/ โ”‚ โ””โ”€โ”€ server.py # Main MCP server implementation โ”œโ”€โ”€ tests/ โ”‚ โ””โ”€โ”€ test_server.py # Comprehensive test suite โ”œโ”€โ”€ requirements.txt # Python dependencies โ”œโ”€โ”€ .env.example # Environment variables template โ”œโ”€โ”€ README.md # This file โ”œโ”€โ”€ PLANNING.md # Project planning and architecture โ”œโ”€โ”€ TASK.md # Task breakdown and progress โ””โ”€โ”€ GLOBAL_RULES.md # Development rules and standards ``` ## ๐Ÿ”„ Example Usage Scenarios ### Scenario 1: Content Management "Show me all published blog posts from this year, ordered by publication date" ### Scenario 2: User Management "Create a new admin user and update their permissions" ### Scenario 3: Data Cleanup "Find and delete all expired session tokens" ### Scenario 4: Analytics "Get user count by registration month for the past year" ## ๐Ÿ› Troubleshooting ### Common Issues 1. **Environment Variables Not Set** - Error: "Missing environment variables" - Solution: Ensure `.env` file exists with correct `SUPABASE_URL` and `SUPABASE_SERVICE_ROLE_KEY` 2. **Database Connection Failed** - Error: "Failed to initialize Supabase client" - Solution: Verify your Supabase URL and service role key are correct 3. **Permission Denied** - Error: Various permission-related errors - Solution: Ensure your service role key has appropriate permissions for the tables you're accessing 4. **Table Not Found** - Error: Table-specific errors - Solution: Verify the table name exists in your Supabase database ## ๐Ÿ“š Development ### Code Style - Follow PEP 8 standards - Use type hints for all functions - Include comprehensive docstrings - Maximum 500 lines per file ### Testing Requirements - Minimum 95% test coverage - Test all CRUD operations - Include edge cases and error scenarios - Use pytest for all tests ## ๐Ÿค Contributing 1. Follow the global rules defined in `GLOBAL_RULES.md` 2. Ensure all tests pass before submitting changes 3. Update documentation for any new features 4. Add appropriate error handling and logging ## ๐Ÿ“„ License This project is licensed under the MIT License - see the LICENSE file for details. ## ๐Ÿ™ Acknowledgments - Built with the [Model Context Protocol](https://modelcontextprotocol.io/) - Uses the [Supabase Python Client](https://github.com/supabase/supabase-py) - Based on [FastMCP](https://github.com/modelcontextprotocol/python-sdk) framework

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CloudMediaServices/supabase-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server