Metabase

resmi

Server MCP resmi Metabase untuk mencari data, membangun kueri pada lapisan semantik, dan memvisualisasikan hasil melalui klien MCP.

Apa yang bisa Anda lakukan dengan Metabase MCP?

  • Cari konten Metabase — Temukan tabel, metrik, kartu, dasbor, dan koleksi menggunakan kata kunci atau kueri bahasa alami dengan search.
  • Navigasi dan periksa entitas — Baca metadata untuk basis data, skema, tabel, pertanyaan, dasbor, dan metrik melalui read_resource dengan URI metabase://.
  • Bangun dan jalankan kueri — Buat kueri terhadap tabel atau metrik dengan construct_query, lalu jalankan melalui execute_query untuk mendapatkan hasil dan metadata kolom.
  • Jalankan SQL mentah — Jalankan kueri SQL asli terhadap basis data menggunakan execute_sql (memerlukan izin kueri asli dan pengaturan instance harus diaktifkan).
  • Simpan dan perbarui pertanyaan — Buat atau ubah pertanyaan tersimpan (kartu) dari kueri yang telah dibuat menggunakan create_question dan update_question, termasuk memindahkan atau mengarsipkannya.
  • Buat dan kelola dasbor — Bangun dasbor baru dengan pertanyaan tersimpan yang diposisikan secara otomatis melalui create_dashboard, dan perbarui metadata atau arsipkan dengan update_dashboard.

Dokumentasi

Server MCP Metabase

Metabase menyertakan server bawaan Model Context Protocol (MCP) yang memungkinkan klien AI terhubung langsung ke instans Metabase. Server ini menggunakan https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http dan dibangun di atas Agent API Metabase untuk mengekspos alat-alat untuk mencari, menavigasi, melakukan kueri, memvisualisasikan, dan membuat/memperbarui konten - semuanya dibatasi oleh izin pengguna yang terhubung.

Endpoint

Server MCP tersedia di:

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

Jalur lawas /api/mcp masih berfungsi sebagai alias untuk klien yang sudah ada, tetapi /api/metabase-mcp adalah URL kanonis yang diiklankan.

Menghubungkan klien

Arahkan klien yang kompatibel dengan MCP ke endpoint /api/metabase-mcp. Misalnya, dengan Claude Code:

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

Untuk Claude Desktop, buat konektor kustom menggunakan URL yang sama.

Untuk Cursor, buka Settings > MCP dan tambahkan server baru dengan tipe yang diatur ke streamable-http dan URL:

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

Autentikasi

Klien MCP melakukan autentikasi melalui OAuth 2.0. Metabase menjalankan server OAuth tertanamnya sendiri - tidak diperlukan penyedia eksternal.

Alur untuk koneksi pertama kali:

  1. Klien menemukan endpoint OAuth Metabase.
  2. Klien mendaftarkan dirinya ke Metabase.
  3. Pengguna dialihkan ke Metabase untuk masuk dan menyetujui koneksi.
  4. Klien menerima token akses yang dibatasi oleh izin Metabase pengguna.

Sesi berbasis browser (auth cookie) juga didukung dan menerima cakupan tanpa batasan.

Cakupan

Token akses dibatasi untuk membatasi alat apa yang dapat digunakan klien:

CakupanMemberikan akses ke
agent:searchsearch
agent:resource:readread_resource (selalu diberikan kepada pemanggil terautentikasi; pemeriksaan izin per-URI terjadi di dalam dispatcher)
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 (juga mencakup "pindahkan kartu ke koleksi" dan pengarsipan)
agent:question:executeexecute_question
agent:metric:createcreate_metric
agent:metric:updateupdate_metric (juga mencakup "pindahkan metrik ke koleksi" dan pengarsipan)
agent:dashboard:createcreate_dashboard
agent:dashboard:updateupdate_dashboard (juga mencakup pengarsipan)
agent:collection:createcreate_collection

Pola wildcard (mis. agent:*) cocok dengan cakupan apa pun dengan prefiks tersebut.

Metadata sumber daya yang dilindungi OAuth tersedia di:

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

Secara default, layar persetujuan kami memberikan akses ke semua cakupan tanpa kesempatan untuk menyesuaikan.

Alat yang tersedia

Server MCP mengekspos alat-alat ini, yang dihasilkan secara dinamis dari metadata endpoint Agent API:

Penemuan + baca

AlatDeskripsi
searchCari tabel, metrik, kartu, dasbor, dan koleksi menggunakan kueri kata kunci atau bahasa alami.
read_resourceBaca satu atau lebih entitas Metabase berdasarkan URI metabase://. Mencakup navigasi database/skema/tabel/koleksi/pertanyaan/dasbor/metrik/transformasi. Hingga 5 URI per panggilan.

Konstruksi + eksekusi kueri

AlatDeskripsi
construct_queryBuat kueri terhadap tabel atau metrik. Menerima prompt asli pengguna jika tersedia. Mengembalikan query_handle buram untuk digunakan dengan execute_query atau visualize_query.
construct_native_queryBuat kueri native (SQL mentah) untuk database. Mengembalikan query_handle buram untuk diumpankan ke create_question dan menyimpannya. Tidak mengeksekusi SQL; handle native ditolak oleh execute_query/query (gunakan execute_sql untuk menjalankan SQL mentah).
queryKueri tabel atau metrik secara langsung. Mendukung paginasi melalui token lanjutan.
execute_queryJalankan kueri yang telah dibuat sebelumnya dan kembalikan hasilnya dengan metadata kolom.
execute_sqlJalankan kueri SQL mentah terhadap database. Memerlukan izin native-query pengguna pada database target. Dapat dinonaktifkan di seluruh instans melalui pengaturan mcp-execute-sql-enabled.
execute_questionJalankan pertanyaan tersimpan berdasarkan id dan kembalikan baris + metadata kolomnya. Berjalan di bawah izin pemanggil. Pertanyaan berparameter tidak didukung (mengembalikan error).

Tulis

AlatDeskripsi
create_metricSimpan kueri sebagai metrik yang dapat digunakan kembali. Menerima query_handle dari construct_query. Kueri memerlukan satu agregasi dan maksimal satu pengelompokan tanggal.
update_metricPerbarui metrik tersimpan. Semantik patch. Mengatur collection_id akan memindahkannya; mengatur archived: true akan mengarsipkannya — soft delete yang dapat dibalikkan, digunakan saat diminta untuk menghapus metrik. query pengganti harus tetap berupa metrik yang valid.
create_questionSimpan kueri sebagai pertanyaan bernama (kartu). Menerima query_handle dari construct_query (MBQL) atau construct_native_query (SQL native). Menyimpan native memerlukan izin DB native-query.
update_questionPerbarui pertanyaan tersimpan. Semantik patch. Mengatur collection_id akan memindahkan kartu. Mengatur archived: true akan mengarsipkannya — soft delete yang dapat dibalikkan, digunakan saat diminta untuk menghapus pertanyaan. Mengganti kueri menerima handle construct_query atau construct_native_query.
create_dashboardBuat dasbor baru, secara opsional diisi dengan pertanyaan tersimpan (diposisikan otomatis di grid).
update_dashboardPerbarui metadata dasbor (nama, deskripsi, koleksi, diarsipkan — soft delete yang dapat dibalikkan, digunakan saat diminta untuk menghapus dasbor).
create_collectionBuat koleksi baru. Secara opsional bersarang di bawah parent_collection_id.

Hasil kueri dibatasi hingga 200 baris per permintaan. Ketika lebih banyak baris tersedia, respons menyertakan continuation_token yang dapat diteruskan kembali untuk mengambil halaman berikutnya.

Respons daftar read_resource dibatasi pada 25 item dengan sinyal truncated / total; telusuri URI spesifik untuk melihat lebih banyak, atau sempurnakan melalui search.

Sumber daya

Server mengekspos sumber daya MCP sehingga klien dapat mengambil konten tambahan berdasarkan URI tanpa memperbesar deskripsi alat.

URI Sumber DayaDeskripsi
metabase://docs/construct-query.mdSintaks program untuk construct_query dan query: sumber, operasi, bentuk operator, contoh kerja, jebakan.

Alat read_resource (di atas) menggunakan skema URI terpisah untuk menavigasi entitas Metabase (metabase://question/{id}, metabase://database/{id}/tables, dll.). Kedua ruang nama URI bersifat independen: metabase://docs/... adalah untuk konten referensi statis yang diambil melalui resources/read MCP, sementara metabase://table/... dan sejenisnya adalah URI entitas yang diteruskan ke alat read_resource.

Metode JSON-RPC yang didukung

MetodeDeskripsi
initializeInisialisasi koneksi MCP. Mengembalikan kapabilitas server dan ID sesi.
notifications/initializedNotifikasi klien bahwa inisialisasi selesai.
tools/listDaftar alat yang tersedia (difilter berdasarkan cakupan token).
tools/callPanggil alat dengan argumen.
resources/listDaftar sumber daya yang tersedia (difilter berdasarkan cakupan token).
resources/readBaca sumber daya berdasarkan URI. Memerlukan sesi yang diinisialisasi.
pingPing keepalive.

Permintaan dapat dikirim secara individual atau sebagai batch JSON-RPC. Server merespons dengan JSON atau SSE tergantung pada header Accept.

Arsitektur

Implementasi terdapat dalam file-file ini:

  • api.clj - Handler HTTP. Mem-parsing permintaan JSON-RPC, memvalidasi header autentikasi dan sesi, memberlakukan pemeriksaan origin (perlindungan DNS rebinding), dan mengirimkan ke metode yang sesuai. Mendukung format respons JSON dan SSE.

  • tools.clj - Pengiriman alat dan pembuatan manifes. Membangun daftar alat dari metadata endpoint Agent API, memeriksa cakupan, dan merutekan panggilan alat melalui permintaan Agent API sintetis.

  • resources.clj - Registri dan handler sumber daya MCP. Menyimpan sumber daya dokumentasi (seperti referensi construct_query) yang dikunci berdasarkan URI, dengan kontrol akses berbasis cakupan pada resources/list dan resources/read.

  • scope.clj - Logika pencocokan cakupan. Mendukung pencocokan tepat, pola wildcard, dan sentinel ::unrestricted untuk autentikasi berbasis sesi.

Alur permintaan

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

Bacaan lebih lanjut