Metabase

offiziell

Offizieller Metabase MCP-Server zum Durchsuchen von Daten, Erstellen von Abfragen auf der semantischen Ebene und Visualisieren von Ergebnissen über MCP-Clients.

Was kann man mit Metabase MCP machen?

  • Nach Metabase-Inhalten suchen — Finden Sie Tabellen, Metriken, Karten, Dashboards und Sammlungen mithilfe von Schlüsselwörtern oder natürlichsprachlichen Abfragen mit search.
  • Entitäten navigieren und inspizieren — Lesen Sie Metadaten für Datenbanken, Schemata, Tabellen, Fragen, Dashboards und Metriken über read_resource mit metabase://-URIs.
  • Abfragen erstellen und ausführen — Erstellen Sie eine Abfrage gegen eine Tabelle oder Metrik mit construct_query und führen Sie sie dann über execute_query aus, um Ergebnisse und Spaltenmetadaten zu erhalten.
  • Rohes SQL ausführen — Führen Sie eine native SQL-Abfrage gegen eine Datenbank mit execute_sql aus (erfordert die Berechtigung für native Abfragen und die Aktivierung der Instanzeinstellung).
  • Fragen speichern und aktualisieren — Erstellen oder ändern Sie gespeicherte Fragen (Karten) aus erstellten Abfragen mit create_question und update_question, einschließlich Verschieben oder Archivieren.
  • Dashboards erstellen und verwalten — Erstellen Sie neue Dashboards mit automatisch positionierten gespeicherten Fragen über create_dashboard und aktualisieren Sie deren Metadaten oder archivieren Sie sie mit update_dashboard.

Dokumentation

Metabase MCP-Server

Metabase enthält einen integrierten Model Context Protocol (MCP)-Server, der es KI-Clients ermöglicht, sich direkt mit einer Metabase-Instanz zu verbinden. Er verwendet den https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http und baut auf der Agent-API von Metabase auf, um Werkzeuge zum Suchen, Navigieren, Abfragen, Visualisieren und Erstellen/Aktualisieren von Inhalten bereitzustellen – alles beschränkt auf die Berechtigungen des verbundenen Benutzers.

Endpunkt

Der MCP-Server ist verfügbar unter:

https://{your-metabase.example.com}/api/metabase-mcp

Der veraltete Pfad /api/mcp funktioniert weiterhin als Alias für bestehende Clients, aber /api/metabase-mcp ist die kanonische URL, die angegeben werden sollte.

Verbinden eines Clients

Richten Sie einen beliebigen MCP-kompatiblen Client auf den Endpunkt /api/metabase-mcp aus. Zum Beispiel mit Claude Code:

claude mcp add metabase https://{your-metabase.example.com}/api/metabase-mcp --transport streamable-http

Erstellen Sie für Claude Desktop einen benutzerdefinierten Connector mit derselben URL.

Öffnen Sie für Cursor Einstellungen > MCP und fügen Sie einen neuen Server hinzu, wobei Sie den Typ auf streamable-http und die URL auf Folgendes setzen:

https://{your-metabase.example.com}/api/metabase-mcp

Authentifizierung

MCP-Clients authentifizieren sich über OAuth 2.0. Metabase betreibt einen eigenen eingebetteten OAuth-Server – es wird kein externer Anbieter benötigt.

Der Ablauf für eine erstmalige Verbindung:

  1. Der Client entdeckt die OAuth-Endpunkte von Metabase.
  2. Der Client registriert sich selbst bei Metabase.
  3. Der Benutzer wird zu Metabase weitergeleitet, um sich anzumelden und die Verbindung zu genehmigen.
  4. Der Client erhält ein Zugriffstoken, das auf die Metabase-Berechtigungen des Benutzers beschränkt ist.

Browserbasierte Sitzungen (Cookie-Authentifizierung) werden ebenfalls unterstützt und erhalten uneingeschränkte Bereiche.

Bereiche

Zugriffstoken sind auf bestimmte Bereiche beschränkt, um einzuschränken, welche Werkzeuge ein Client verwenden kann:

BereichGewährt Zugriff auf
agent:searchsearch
agent:resource:readread_resource (wird jedem authentifizierten Aufrufer immer gewährt; Berechtigungsprüfungen pro URI finden im Dispatcher statt)
agent:query:constructconstruct_query
agent:queryquery
agent:query:executeexecute_query
agent:sql:constructconstruct_native_query
agent:sql:executeexecute_sql
agent:question:createcreate_question
agent:question:updateupdate_question (umfasst auch „Karte in Sammlung verschieben“ und Archivierung)
agent:question:executeexecute_question
agent:metric:createcreate_metric
agent:metric:updateupdate_metric (umfasst auch „Metrik in Sammlung verschieben“ und Archivierung)
agent:dashboard:createcreate_dashboard
agent:dashboard:updateupdate_dashboard (umfasst auch Archivierung)
agent:collection:createcreate_collection

Wildcard-Muster (z. B. agent:*) stimmen mit jedem Bereich überein, der dieses Präfix hat.

Metadaten zu geschützten OAuth-Ressourcen sind verfügbar unter:

/.well-known/oauth-protected-resource/api/metabase-mcp

Standardmäßig gewährt unser Zustimmungsbildschirm Zugriff auf alle Bereiche, ohne die Möglichkeit zur Anpassung.

Verfügbare Werkzeuge

Der MCP-Server stellt die folgenden Werkzeuge bereit, die dynamisch aus den Metadaten der Agent-API-Endpunkte generiert werden:

Erkennung + Lesen

WerkzeugBeschreibung
searchSuche nach Tabellen, Metriken, Karten, Dashboards und Sammlungen mit Schlüsselwort- oder natürlichsprachlichen Abfragen.
read_resourceLesen einer oder mehrerer Metabase-Entitäten anhand der metabase://-URI. Deckt die Navigation in Datenbank/Schema/Tabelle/Sammlung/Frage/Dashboard/Metrik/Transformation ab. Bis zu 5 URIs pro Aufruf.

Abfrageerstellung + -ausführung

WerkzeugBeschreibung
construct_queryErstellt eine Abfrage für eine Tabelle oder Metrik. Akzeptiert die ursprüngliche prompt des Benutzers, falls verfügbar. Gibt ein undurchsichtiges query_handle zur Verwendung mit execute_query oder visualize_query zurück.
construct_native_queryErstellt eine native (reines SQL) Abfrage für eine Datenbank. Gibt ein undurchsichtiges query_handle zurück, um create_question zu füttern und zu speichern. Führt das SQL nicht aus; native Handles werden von execute_query/query abgelehnt (verwenden Sie execute_sql, um reines SQL auszuführen).
queryFragt eine Tabelle oder Metrik direkt ab. Unterstützt Paginierung über Fortsetzungstoken.
execute_queryFührt eine zuvor erstellte Abfrage aus und gibt Ergebnisse mit Spaltenmetadaten zurück.
execute_sqlFührt eine reine SQL-Abfrage für eine Datenbank aus. Erfordert, dass der Benutzer die Berechtigung für native Abfragen auf der Zieldatenbank hat. Kann instanzweit über die Einstellung mcp-execute-sql-enabled deaktiviert werden.
execute_questionFührt eine gespeicherte Frage anhand der ID aus und gibt ihre Zeilen + Spaltenmetadaten zurück. Wird unter den Berechtigungen des Aufrufers ausgeführt. Parametrisierte Fragen werden nicht unterstützt (gibt einen Fehler zurück).

Schreiben

WerkzeugBeschreibung
create_metricSpeichert eine Abfrage als wiederverwendbare Metrik. Akzeptiert ein query_handle von construct_query. Die Abfrage benötigt eine Aggregation und höchstens eine Datumsgruppierung.
update_metricAktualisiert eine gespeicherte Metrik. Patch-Semantik. Das Setzen von collection_id verschiebt sie; das Setzen von archived: true archiviert sie – ein reversibles Soft-Delete, das verwendet wird, wenn das Löschen einer Metrik angefordert wird. Ein Ersatz-query muss weiterhin eine gültige Metrik sein.
create_questionSpeichert eine Abfrage als benannte Frage (Karte). Akzeptiert ein query_handle von construct_query (MBQL) oder construct_native_query (natives SQL). Das Speichern nativer Abfragen erfordert die DB-Berechtigung für native Abfragen.
update_questionAktualisiert eine gespeicherte Frage. Patch-Semantik. Das Setzen von collection_id verschiebt die Karte. Das Setzen von archived: true archiviert sie – ein reversibles Soft-Delete, das verwendet wird, wenn das Löschen einer Frage angefordert wird. Das Ersetzen der Abfrage akzeptiert ein construct_query- oder construct_native_query-Handle.
create_dashboardErstellt ein neues Dashboard, optional bestückt mit gespeicherten Fragen (automatisch im Raster positioniert).
update_dashboardAktualisiert die Metadaten eines Dashboards (Name, Beschreibung, Sammlung, archiviert – ein reversibles Soft-Delete, das verwendet wird, wenn das Löschen eines Dashboards angefordert wird).
create_collectionErstellt eine neue Sammlung. Optional verschachtelt unter einer parent_collection_id.

Abfrageergebnisse sind auf 200 Zeilen pro Anfrage begrenzt. Wenn mehr Zeilen verfügbar sind, enthält die Antwort ein continuation_token, das zurückgegeben werden kann, um die nächste Seite abzurufen.

read_resource-Listenantworten sind auf 25 Elemente mit truncated / total-Signalen begrenzt; gehen Sie tiefer in bestimmte URIs, um mehr zu sehen, oder verfeinern Sie die Ergebnisse über search.

Ressourcen

Der Server stellt MCP-Ressourcen bereit, damit Clients ergänzende Inhalte per URI abrufen können, ohne die Werkzeugbeschreibungen aufzublähen.

Ressourcen-URIBeschreibung
metabase://docs/construct-query.mdProgrammsyntax für construct_query und query: Quellen, Operationen, Operatorformen, Arbeitsbeispiele, Fallstricke.

Das read_resource-Werkzeug (oben) verwendet ein separates URI-Schema, um Metabase-Entitäten zu navigieren (metabase://question/{id}, metabase://database/{id}/tables usw.). Die beiden URI-Namensräume sind unabhängig: metabase://docs/... ist für statische Referenzinhalte, die über MCP resources/read abgerufen werden, während metabase://table/... und ähnliche Entitäts-URIs sind, die an das read_resource-Werkzeug übergeben werden.

Unterstützte JSON-RPC-Methoden

MethodeBeschreibung
initializeInitialisiert die MCP-Verbindung. Gibt Serverfähigkeiten und eine Sitzungs-ID zurück.
notifications/initializedClient-Benachrichtigung, dass die Initialisierung abgeschlossen ist.
tools/listListet verfügbare Werkzeuge auf (gefiltert nach den Bereichen des Tokens).
tools/callRuft ein Werkzeug mit Argumenten auf.
resources/listListet verfügbare Ressourcen auf (gefiltert nach den Bereichen des Tokens).
resources/readLiest eine Ressource anhand der URI. Erfordert eine initialisierte Sitzung.
pingKeepalive-Ping.

Anfragen können einzeln oder als JSON-RPC-Stapel gesendet werden. Der Server antwortet je nach Accept-Header mit JSON oder SSE.

Architektur

Die Implementierung befindet sich in diesen Dateien:

  • api.clj - Der HTTP-Handler. Parst JSON-RPC-Anfragen, validiert Authentifizierungs- und Sitzungsheader, erzwingt Ursprungsprüfungen (DNS-Rebinding-Schutz) und leitet an die entsprechende Methode weiter. Unterstützt sowohl JSON- als auch SSE-Antwortformate.

  • tools.clj - Werkzeug-Dispatch und Manifest-Generierung. Erstellt die Werkzeugliste aus den Metadaten der Agent-API-Endpunkte, prüft Bereiche und leitet Werkzeugaufrufe über synthetische Agent-API-Anfragen weiter.

  • resources.clj - MCP-Ressourcen-Registry und -Handler. Enthält Dokumentationsressourcen (wie die construct_query-Referenz), die nach URI verschlüsselt sind, mit bereichsbasierter Zugriffskontrolle für resources/list und resources/read.

  • scope.clj – Bereichsabgleichslogik. Unterstützt exakte Übereinstimmungen, Platzhaltermuster und den ::unrestricted-Sentinel für sitzungsbasierte Authentifizierung.

Anfrageablauf

MCP client
  -> POST /api/metabase-mcp (JSON-RPC)
  -> Origin + session validation
  -> Auth: OAuth bearer token or browser session
  -> Scope check against requested tool
  -> Synthetic request to Agent API endpoint
  -> Response materialized as MCP content
  -> JSON or SSE back to client

Weiterführende Informationen