Supabase MCP

offiziell

Offizieller Supabase MCP-Server zur Verwaltung von Supabase-Projekten, Datenbanken, Authentifizierung, Speicher, Edge Functions und SQL-Workflows über KI-Agenten.

Was kann man mit Supabase MCP machen?

  • Datenbanktabellen verwalten — Bitten Sie Ihren Assistenten, Tabellen in der Datenbank Ihres Supabase-Projekts zu erstellen, zu ändern oder zu löschen.
  • Daten abfragen und prüfen — Lassen Sie Ihren Assistenten SQL-Abfragen ausführen oder Tabelleninhalte abrufen, um Fragen zu Ihren Daten zu beantworten.
  • Projektkonfiguration abrufen — Fragen Sie nach Details zu Ihren Supabase-Projekteinstellungen, wie Verbindungsinformationen oder Feature-Flags.
  • Zugriffsbereich einschränken — Konfigurieren Sie den Server mit read_only=true oder project_ref, um Tools auf sichere, projektspezifische Operationen zu beschränken.

Gehosteter MCP-Server

npx add-mcp 'https://mcp.supabase.com/mcp'

Installiert in Claude Code, Codex, Cursor und mehr

Dokumentation

Supabase MCP Server

MCP Registry Version

Verbinden Sie Ihre Supabase-Projekte mit Cursor, Claude, Windsurf und anderen KI-Assistenten.

supabase-mcp-demo

Das Model Context Protocol (MCP) standardisiert, wie Large Language Models (LLMs) mit externen Diensten wie Supabase kommunizieren. Es verbindet KI-Assistenten direkt mit Ihrem Supabase-Projekt und ermöglicht ihnen Aufgaben wie das Verwalten von Tabellen, das Abrufen von Konfigurationen und das Abfragen von Daten. Siehe die vollständige Liste der Tools.

Einrichtung

1. Befolgen Sie unsere Sicherheits-Best Practices

Bevor Sie den MCP-Server einrichten, empfehlen wir Ihnen, unsere Sicherheits-Best Practices zu lesen, um die Risiken der Verbindung eines LLM mit Ihren Supabase-Projekten und deren Minderung zu verstehen.

2. Konfigurieren Sie Ihren MCP-Client

Um den Supabase MCP-Server auf Ihrem Client zu konfigurieren, besuchen Sie unsere Einrichtungsdokumentation. Sie können auch eine benutzerdefinierte MCP-URL für Ihr Projekt generieren, indem Sie den MCP-Verbindungs-Tab im Supabase-Dashboard besuchen.

Ihr MCP-Client wird Sie während der Einrichtung automatisch auffordern, sich bei Supabase anzumelden. Stellen Sie sicher, dass Sie die Organisation auswählen, die das Projekt enthält, mit dem Sie arbeiten möchten.

Die meisten MCP-Clients benötigen die folgenden Informationen:

{
  "mcpServers": {
    "supabase": {
      "type": "http",
      "url": "https://mcp.supabase.com/mcp"
    }
  }
}

Wenn Sie Ihren MCP-Client nicht in unserer Dokumentation aufgeführt finden, prüfen Sie die MCP-Dokumentation Ihres Clients und kopieren Sie die obigen MCP-Informationen in das erwartete Format (json, yaml usw.).

CLI

Wenn Sie Supabase lokal mit Supabase CLI ausführen, können Sie auf den MCP-Server unter http://localhost:54321/mcp zugreifen. Derzeit bietet der MCP-Server in CLI-Umgebungen eine begrenzte Teilmenge von Tools und kein OAuth 2.1.

Selbst gehostet

Für selbst gehostetes Supabase lesen Sie die Seite Aktivieren des MCP-Servers. Derzeit bietet der MCP-Server in selbst gehosteten Umgebungen eine begrenzte Teilmenge von Tools und kein OAuth 2.1.

Konfigurationsoptionen und Tools

Siehe die Supabase MCP Server-Dokumentation für die vollständige Liste der verfügbaren Tools und Konfigurationsoptionen.

Die Dokumentation enthält auch einen interaktiven URL-Builder, um Konfigurationsoptionen für Sie auszufüllen.

Verwendung mit dem MCP-Client des AI SDK

Das Paket @supabase/mcp-server-supabase exportiert createToolSchemas(), um Eingabe- und Ausgabeschemata für den MCP-Client des Vercel AI SDK zu befüllen. Dies ermöglicht es, Supabase MCP-Tools als statische Tools mit clientseitiger Validierung und abgeleiteten TypeScript-Typen für ihre Eingaben und Ausgaben zu behandeln.

import { createToolSchemas } from '@supabase/mcp-server-supabase';
import { createMCPClient } from '@ai-sdk/mcp';
import { streamText } from 'ai';

const mcpClient = await createMCPClient({
  transport: {
    type: 'http',
    url: 'https://mcp.supabase.com/mcp',
  },
});

const tools = await mcpClient.tools({
  schemas: createToolSchemas(),
});

const result = streamText({ model, tools, prompt: '...' });

for (const step of await result.steps) {
  for (const toolResult of step.staticToolResults) {
    if (toolResult.toolName === 'get_project_url') {
      toolResult.input;  // { project_id: string }
      toolResult.output; // { url: string }
    }
  }
}

createToolSchemas() akzeptiert ähnliche Filteroptionen wie die URL-Parameter des MCP-Servers:

  • features: Einschränken auf bestimmte Feature-Gruppen (z. B. ['database', 'docs']). Standardmäßig alle Standard-Feature-Gruppen.
  • projectScoped: Wenn true, lässt project_id aus den Tool-Eingabeschemata weg und schließt Kontoebenen-Tools aus – verwenden Sie dies, wenn Sie eine Verbindung zu einem Server herstellen, der mit project_ref konfiguriert ist. Standardmäßig false.
  • readOnly: Wenn true, schließt mutierende Tools aus – verwenden Sie dies, wenn Sie eine Verbindung zu einem Server herstellen, der mit read_only=true konfiguriert ist. Standardmäßig false.
const mcpClient = await createMCPClient({
  transport: {
    type: 'http',
    url: 'https://mcp.supabase.com/mcp?project_ref=<project-ref>&read_only=true&features=database,docs',
  },
});

const tools = await mcpClient.tools({
  schemas: createToolSchemas({
    features: ['database', 'docs'],
    projectScoped: true,
    readOnly: true,
  }),
});

[!NOTE] Dieser Server sendet kein structuredContent in MCP-Tool-Ergebnissen. Das AI SDK fällt auf das Parsen von JSON aus content-Text zurück.

Weitere Informationen finden Sie unter Schema-Definition und Typisierte Tool-Ausgaben in der AI SDK-Dokumentation.

Selbsthosting des MCP-Endpunkts

Das Paket @supabase/mcp-server-supabase exportiert createSupabaseMcpHandler(), um die Tools über HTTP von Ihrem eigenen Endpunkt bereitzustellen. Es akzeptiert dieselben SupabaseMcpServerOptions wie createSupabaseMcpServer(), am wichtigsten platform.

Der Handler spricht nur die aktuelle Protokollrevision. Er wird mit legacy: 'reject' erstellt, sodass ein Client, der nur das Protokoll aus der 2025-Ära spricht, ein HTTP 400 erhält, anstatt bedient zu werden.

Wenn platform eine Anmeldeinformation pro Anfrage trägt, erstellen Sie den Handler pro Anfrage und schließen Sie ihn, wenn die Antwort abgeschlossen ist. Der Handler schließt über das platform, das Sie bereitstellen, sodass ein gemeinsamer Handler jede Anfrage mit dieser Plattform bedient.

Ein langlebiger Handler ist in Ordnung, wenn das platform geteilt werden soll, z. B. ein Dienstkonto-Token. Erstellen Sie ihn einmal und close() Sie ihn beim Herunterfahren und nicht pro Antwort, da close() den Abonnement-Router abbaut und spätere Anfragen ablehnt.

import { createServer } from 'node:http';
import { toNodeHandler } from '@modelcontextprotocol/node';
import { createSupabaseMcpHandler } from '@supabase/mcp-server-supabase';
import { createSupabaseApiPlatform } from '@supabase/mcp-server-supabase/platform/api';

const server = createServer((req, res) => {
  const accessToken = getAccessTokenFromRequest(req); // your own auth

  const handler = createSupabaseMcpHandler({
    platform: createSupabaseApiPlatform({ accessToken }),
  });

  // `close()` aborts in-flight exchanges, so close on `res` finishing rather
  // than when the handler resolves, which would cut streaming responses short.
  res.on('close', () => {
    handler.close().catch((error) => console.error(error));
  });

  toNodeHandler(handler)(req, res).catch((error) => console.error(error));
});

toNodeHandler stammt aus @modelcontextprotocol/node. Ihr Code importiert es direkt, also installieren Sie es daneben.

Beobachtbarkeit

Übergeben Sie ein observer an createSupabaseMcpServer, um Ergebnisse des Anforderungslebenszyklus und die integrierten Fakten von Supabase zu sammeln. Hier ist platform Ihr bestehender Plattform-Adapter:

import { createSupabaseMcpServer } from '@supabase/mcp-server-supabase';

const server = createSupabaseMcpServer({
  platform,
  observer: (context) => ({
    record(fact) {
      console.info(fact);
    },
    end(result) {
      console.info({ ...context, ...result });
    },
  }),
});

Der Server leitet Anforderungs- oder Antwort-Payloads nicht automatisch an den Beobachter weiter. Die integrierten Fakten von Supabase verwenden einen geschlossenen Satz begrenzter Felder und Werte; benutzerdefinierte Fakten erhalten keine automatische Datenschutzvalidierung. Das Weglassen von observer überspringt alle Beobachtungsarbeit. Fehler bei Beobachter, Klassifizierer und Senke ändern das Anforderungsverhalten nicht, aber synchrone Beobachter- und Klassifiziererarbeit kann Anforderungen blockieren.

Andere MCP-Server

@supabase/mcp-server-postgrest

Der PostgREST MCP-Server ermöglicht es Ihnen, Ihre eigenen Benutzer über die REST-API mit Ihrer App zu verbinden. Weitere Details finden Sie in der Projekt-README.

Ressourcen

Für Entwickler

Siehe CONTRIBUTING für Details, wie Sie zu diesem Projekt beitragen können.

Lizenz

Dieses Projekt ist unter Apache 2.0 lizenziert. Siehe die LICENSE-Datei für Details.