Skip to main content
Glama

Supabase MCP Server

by Sentry01

Plan de implementación del servidor Supabase MCP

Este documento describe el plan para crear un servidor de Protocolo de contexto de modelo (MCP) que se conecta a Supabase, lo que permite que los asistentes de IA como GitHub Copilot interactúen con su base de datos de Supabase.

Tabla de contenido

Descripción general

El servidor MCP de Supabase actuará como puente entre los asistentes de IA (como GitHub Copilot) y su base de datos de Supabase. Esto permite que la IA:

  1. Comprenda el esquema de su base de datos
  2. Conozca las tablas y relaciones
  3. Ayudar con la redacción de consultas
  4. Proporcionar sugerencias sensibles al contexto relacionadas con su modelo de datos

Prerrequisitos

  • Node.js 18+ instalado
  • gestor de paquetes npm o yarn
  • Proyecto Supabase con clave API de administrador
  • VS Code con soporte para Copilot/MCP
  • Git

Pasos de implementación

1. Crear paquete de servidor

mkdir mcp-server-supabase cd mcp-server-supabase npm init -y

2. Instalar dependencias

npm install @supabase/supabase-js @modelcontextprotocol/server dotenv

3. Estructura básica del servidor

Crea estos archivos:

  • src/index.js - Punto de entrada principal
  • src/supabase-client.js - Manejo de conexión de Supabase
  • src/schema-provider.js - Extracción del esquema de la base de datos
  • src/query-handler.js - Ejecución segura de consultas
  • .env.example - Plantilla de variable de entorno
  • config.js - Gestión de configuración

4. Detalles de la implementación del servidor

src/index.js

Este archivo inicializará el servidor MCP y conectará los componentes:

const { MCPServer } = require('@modelcontextprotocol/server'); const { getSupabaseClient } = require('./supabase-client'); const { SchemaProvider } = require('./schema-provider'); const { QueryHandler } = require('./query-handler'); const config = require('./config'); async function main() { try { // Initialize Supabase client const supabaseClient = getSupabaseClient(config.supabase.url, config.supabase.key); // Create providers const schemaProvider = new SchemaProvider(supabaseClient); const queryHandler = new QueryHandler(supabaseClient, config.security.allowedQueries); // Initialize MCP server const server = new MCPServer({ name: 'mcp-server-supabase', version: '1.0.0', }); // Register handlers server.registerHandler('getSchema', async () => { return await schemaProvider.getFullSchema(); }); server.registerHandler('getTableInfo', async (params) => { return await schemaProvider.getTableInfo(params.tableName); }); server.registerHandler('executeQuery', async (params) => { return await queryHandler.execute(params.query, params.params); }); // Start the server await server.start(); console.log('MCP Supabase server is running'); } catch (error) { console.error('Failed to start MCP server:', error); process.exit(1); } } main();
src/subabase-client.js
const { createClient } = require('@supabase/supabase-js'); function getSupabaseClient(url, apiKey) { if (!url || !apiKey) { throw new Error('Supabase URL and API key must be provided'); } return createClient(url, apiKey, { auth: { persistSession: false }, }); } module.exports = { getSupabaseClient };
src/schema-provider.js
class SchemaProvider { constructor(supabaseClient) { this.supabase = supabaseClient; } async getFullSchema() { // Query Supabase for full database schema const { data, error } = await this.supabase .rpc('get_schema_information', {}); if (error) throw new Error(`Failed to get schema: ${error.message}`); return data; } async getTableInfo(tableName) { // Get detailed information about a specific table const { data, error } = await this.supabase .rpc('get_table_information', { table_name: tableName }); if (error) throw new Error(`Failed to get table info: ${error.message}`); return data; } } module.exports = { SchemaProvider };
src/query-handler.js
class QueryHandler { constructor(supabaseClient, allowedQueryTypes = ['SELECT']) { this.supabase = supabaseClient; this.allowedQueryTypes = allowedQueryTypes; } validateQuery(queryString) { // Basic SQL injection prevention and query type validation const normalizedQuery = queryString.trim().toUpperCase(); // Check if the query starts with allowed query types const isAllowed = this.allowedQueryTypes.some( type => normalizedQuery.startsWith(type) ); if (!isAllowed) { throw new Error(`Query type not allowed. Allowed types: ${this.allowedQueryTypes.join(', ')}`); } return true; } async execute(queryString, params = {}) { // Validate query before execution this.validateQuery(queryString); // Execute the query through Supabase const { data, error } = await this.supabase .rpc('execute_query', { query_string: queryString, query_params: params }); if (error) throw new Error(`Query execution failed: ${error.message}`); return data; } } module.exports = { QueryHandler };
config.js
require('dotenv').config(); module.exports = { supabase: { url: process.env.SUPABASE_URL, key: process.env.SUPABASE_SERVICE_KEY, }, server: { port: process.env.PORT || 3000, }, security: { allowedQueries: process.env.ALLOWED_QUERY_TYPES ? process.env.ALLOWED_QUERY_TYPES.split(',') : ['SELECT'], } };
.env.ejemplo
SUPABASE_URL=https://your-project-ref.supabase.co SUPABASE_SERVICE_KEY=your-service-key PORT=3000 ALLOWED_QUERY_TYPES=SELECT

5. Funciones de la base de datos Supabase

Necesitarás crear estos procedimientos almacenados en Supabase:

  1. get_schema_information() - Devuelve el esquema de la base de datos
  2. get_table_information(table_name TEXT) - Devuelve información sobre una tabla específica
  3. execute_query(query_string TEXT, query_params JSONB) - Ejecuta consultas de forma segura

Arquitectura del servidor

┌─────────────────────┐ ┌───────────────────┐ │ │ │ │ │ VS Code + Copilot │◄────►│ MCP Protocol │ │ │ │ │ └─────────────────────┘ └─────────┬─────────┘ │ ▼ ┌─────────────────────┐ │ │ │ Supabase MCP Server │ │ │ └─────────┬───────────┘ │ ▼ ┌─────────────────────┐ │ │ │ Supabase Database │ │ │ └─────────────────────┘

Configuración

Agregue el servidor Supabase MCP a su settings.json de VS Code:

"mcp": { "inputs": [], "servers": { // ...existing servers... "mcp-server-supabase": { "command": "node", "args": [ "/path/to/mcp-server-supabase/src/index.js" ], "env": { "SUPABASE_URL": "https://your-project-ref.supabase.co", "SUPABASE_SERVICE_KEY": "your-service-key", "ALLOWED_QUERY_TYPES": "SELECT" } } } }

Consideraciones de seguridad

  1. Gestión de claves API :
    • Utilice una clave API con alcance y con los permisos mínimos requeridos
    • Almacene las claves API de forma segura, nunca se comprometa con el control de versiones
    • Considere utilizar una estrategia de rotación de claves
  2. Restricciones de consulta :
    • El valor predeterminado es SELECCIONAR únicamente por seguridad
    • Considere implementar un enfoque de lista de consultas permitidas
    • Añadir limitación de velocidad para evitar el abuso
  3. Protección de datos :
    • Evite exponer información personal identificable (PII) o datos confidenciales
    • Implementar seguridad a nivel de fila en Supabase
    • Considere agregar enmascaramiento de datos para campos sensibles

Guía de instalación

Desarrollo local

  1. Clonar el repositorio
    git clone https://github.com/yourusername/mcp-server-supabase.git cd mcp-server-supabase
  2. Instalar dependencias
    npm install
  3. Crear un archivo .env a partir del ejemplo
    cp .env.example .env
  4. Edite .env con sus credenciales de Supabase
  5. Iniciar el servidor
    node src/index.js

Integración de VS Code

  1. Actualice su settings.json de VS Code con la configuración del servidor
  2. Reiniciar VS Code
  3. Verifique que el servidor se esté ejecutando en el panel MCP de VS Code

Ejemplos de uso

Una vez integrado, puede utilizar el servidor Supabase MCP de varias maneras:

  1. Exploración de esquemas:
    What tables do I have in my Supabase database?
  2. Información de la tabla:
    What columns are in the users table?
  3. Asistencia en consultas:
    Help me write a query to get all users who signed up in the last 7 days

Solución de problemas

El servidor no se inicia

  • Comprueba tu versión de Node.js (debe ser mayor de 18 años)
  • Verifique sus credenciales de Supabase
  • Comprobar registros de errores en la terminal

El esquema no se carga

  • Verifique que su clave de servicio de Supabase tenga los permisos necesarios
  • Compruebe que las funciones de la base de datos se hayan creado correctamente

VS Code no se puede conectar

  • Verifique que la ruta del servidor en settings.json sea correcta
  • Reiniciar VS Code después de los cambios de configuración
  • Verifique que el proceso del servidor se esté ejecutando
-
security - not tested
F
license - not found
-
quality - not tested

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Un puente entre los asistentes de IA como GitHub Copilot y las bases de datos Supabase, que permite a la IA comprender el esquema, ayudar con la redacción de consultas y brindar sugerencias conscientes del contexto relacionadas con su modelo de datos.

  1. Tabla de contenido
    1. Descripción general
      1. Prerrequisitos
        1. Pasos de implementación
          1. Crear paquete de servidor
          2. Instalar dependencias
          3. Estructura básica del servidor
          4. Detalles de la implementación del servidor
          5. Funciones de la base de datos Supabase
        2. Arquitectura del servidor
          1. Configuración
            1. Consideraciones de seguridad
              1. Guía de instalación
                1. Desarrollo local
                2. Integración de VS Code
              2. Ejemplos de uso
                1. Solución de problemas

                  Related MCP Servers

                  • A
                    security
                    A
                    license
                    A
                    quality
                    Allows AI assistants to list tables, read data, and execute SQL queries through a controlled interface, making database exploration and analysis safer and more structured.
                    Last updated -
                    1
                    567
                    Python
                    MIT License
                    • Linux
                    • Apple
                  • -
                    security
                    F
                    license
                    -
                    quality
                    Enables AI assistants to interact with Metabase databases and dashboards, allowing users to list and execute queries, access data visualizations, and interact with database resources through natural language.
                    Last updated -
                    25
                    JavaScript
                    • Apple
                  • -
                    security
                    F
                    license
                    -
                    quality
                    Enables AI assistants to interact with Metabase, providing access to dashboards, questions, databases, and tools for executing queries and viewing data through natural language.
                    Last updated -
                    JavaScript
                    • Apple
                  • -
                    security
                    F
                    license
                    -
                    quality
                    A Model Context Protocol server that enables querying feature suggestions from a Supabase database, allowing AI tools like Cursor and Claude to access and display feature request data.
                    Last updated -
                    TypeScript

                  View all related MCP servers

                  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/Sentry01/Supabase-MCP-for-Copilot'

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