Metabase

oficial

Servidor MCP oficial do Metabase para pesquisar dados, criar consultas na camada semântica e visualizar resultados por meio de clientes MCP.

O que você pode fazer com Metabase MCP?

  • Pesquisar conteúdo do Metabase — Encontre tabelas, métricas, cartões, painéis e coleções usando palavras-chave ou consultas em linguagem natural com search.
  • Navegar e inspecionar entidades — Leia metadados de bancos de dados, esquemas, tabelas, perguntas, painéis e métricas via read_resource com URIs metabase://.
  • Criar e executar consultas — Construa uma consulta contra uma tabela ou métrica com construct_query e execute-a via execute_query para obter resultados e metadados das colunas.
  • Executar SQL bruto — Execute uma consulta SQL nativa contra um banco de dados usando execute_sql (requer permissão de consulta nativa e que a configuração da instância esteja ativada).
  • Salvar e atualizar perguntas — Crie ou modifique perguntas salvas (cartões) a partir de consultas construídas usando create_question e update_question, incluindo movê-las ou arquivá-las.
  • Criar e gerenciar painéis — Construa novos painéis com perguntas salvas posicionadas automaticamente via create_dashboard e atualize seus metadados ou arquive-os com update_dashboard.

Documentação

Servidor MCP do Metabase

O Metabase inclui um servidor Model Context Protocol (MCP) integrado que permite que clientes de IA se conectem diretamente a uma instância do Metabase. Ele usa o https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http e se baseia na API de Agente do Metabase para expor ferramentas de busca, navegação, consulta, visualização e criação/atualização de conteúdo — tudo limitado às permissões do usuário conectado.

Endpoint

O servidor MCP está disponível em:

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

O caminho legado /api/mcp ainda funciona como um alias para clientes existentes, mas /api/metabase-mcp é a URL canônica a ser divulgada.

Conectando um cliente

Aponte qualquer cliente compatível com MCP para o endpoint /api/metabase-mcp. Por exemplo, com o Claude Code:

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

Para o Claude Desktop, crie um conector personalizado usando a mesma URL.

Para o Cursor, abra Configurações > MCP e adicione um novo servidor com o tipo definido como streamable-http e a URL:

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

Autenticação

Clientes MCP se autenticam via OAuth 2.0. O Metabase executa seu próprio servidor OAuth embutido — nenhum provedor externo é necessário.

O fluxo para uma primeira conexão:

  1. O cliente descobre os endpoints OAuth do Metabase.
  2. O cliente se registra no Metabase.
  3. O usuário é redirecionado para o Metabase para fazer login e aprovar a conexão.
  4. O cliente recebe um token de acesso limitado às permissões do usuário no Metabase.

Sessões baseadas em navegador (autenticação por cookie) também são suportadas e recebem escopos irrestritos.

Escopos

Os tokens de acesso são limitados para restringir quais ferramentas um cliente pode usar:

EscopoConcede acesso a
agent:searchsearch
agent:resource:readread_resource (sempre concedido a qualquer chamador autenticado; verificações de permissão por URI ocorrem dentro do despachante)
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 (também cobre "mover cartão para coleção" e arquivamento)
agent:question:executeexecute_question
agent:metric:createcreate_metric
agent:metric:updateupdate_metric (também cobre "mover métrica para coleção" e arquivamento)
agent:dashboard:createcreate_dashboard
agent:dashboard:updateupdate_dashboard (também cobre arquivamento)
agent:collection:createcreate_collection

Padrões curinga (ex.: agent:*) correspondem a qualquer escopo com esse prefixo.

Os metadados do recurso protegido OAuth estão disponíveis em:

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

Por padrão, nossa tela de consentimento concede acesso a todos os escopos sem a oportunidade de personalizar.

Ferramentas disponíveis

O servidor MCP expõe estas ferramentas, geradas dinamicamente a partir dos metadados do endpoint da API de Agente:

Descoberta + leitura

FerramentaDescrição
searchPesquisa tabelas, métricas, cartões, dashboards e coleções usando palavras-chave ou consultas em linguagem natural.
read_resourceLê uma ou mais entidades do Metabase por URI metabase://. Cobre navegação em banco de dados/esquema/tabela/coleção/pergunta/dashboard/métrica/transformação. Até 5 URIs por chamada.

Construção e execução de consultas

FerramentaDescrição
construct_queryConstrói uma consulta em uma tabela ou métrica. Aceita a prompt original do usuário quando disponível. Retorna um query_handle opaco para uso com execute_query ou visualize_query.
construct_native_queryConstrói uma consulta nativa (SQL bruto) para um banco de dados. Retorna um query_handle opaco para alimentar create_question e salvá-lo. Não executa o SQL; manipuladores nativos são rejeitados por execute_query/query (use execute_sql para executar SQL bruto).
queryConsulta uma tabela ou métrica diretamente. Suporta paginação via tokens de continuação.
execute_queryExecuta uma consulta previamente construída e retorna resultados com metadados de coluna.
execute_sqlExecuta uma consulta SQL bruta em um banco de dados. Requer que o usuário tenha permissão de consulta nativa no banco de dados alvo. Pode ser desabilitado em toda a instância via configuração mcp-execute-sql-enabled.
execute_questionExecuta uma pergunta salva por id e retorna suas linhas + metadados de coluna. Executa sob as permissões do chamador. Perguntas parametrizadas não são suportadas (retorna um erro).

Escrita

FerramentaDescrição
create_metricSalva uma consulta como uma métrica reutilizável. Aceita um query_handle de construct_query. A consulta precisa de uma agregação e no máximo um agrupamento por data.
update_metricAtualiza uma métrica salva. Semântica de patch. Definir collection_id a move; definir archived: true a arquiva — uma exclusão suave reversível, usada quando solicitado a excluir uma métrica. Um query substituto ainda deve ser uma métrica válida.
create_questionSalva uma consulta como uma pergunta nomeada (cartão). Aceita um query_handle de construct_query (MBQL) ou construct_native_query (SQL nativo). Salvar nativo requer permissão de consulta nativa no BD.
update_questionAtualiza uma pergunta salva. Semântica de patch. Definir collection_id move o cartão. Definir archived: true o arquiva — uma exclusão suave reversível, usada quando solicitado a excluir uma pergunta. Substituir a consulta aceita um manipulador construct_query ou construct_native_query.
create_dashboardCria um novo dashboard, opcionalmente preenchido com perguntas salvas (posicionadas automaticamente na grade).
update_dashboardAtualiza os metadados de um dashboard (nome, descrição, coleção, arquivado — uma exclusão suave reversível, usada quando solicitado a excluir um dashboard).
create_collectionCria uma nova coleção. Opcionalmente aninhada sob um parent_collection_id.

Os resultados da consulta são limitados a 200 linhas por solicitação. Quando mais linhas estão disponíveis, a resposta inclui um continuation_token que pode ser passado de volta para buscar a próxima página.

As respostas de lista read_resource são limitadas a 25 itens com sinais truncated / total; aprofunde-se em URIs específicas para ver mais ou refine via search.

Recursos

O servidor expõe recursos MCP para que os clientes possam buscar conteúdo suplementar por URI sem inflar as descrições das ferramentas.

URI do recursoDescrição
metabase://docs/construct-query.mdSintaxe do programa para construct_query e query: fontes, operações, formas de operador, exemplos práticos, armadilhas.

A ferramenta read_resource (acima) usa um esquema de URI separado para navegar pelas entidades do Metabase (metabase://question/{id}, metabase://database/{id}/tables, etc.). Os dois namespaces de URI são independentes: metabase://docs/... é para conteúdo de referência estático obtido via resources/read MCP, enquanto metabase://table/... e similares são URIs de entidade passadas para a ferramenta read_resource.

Métodos JSON-RPC suportados

MétodoDescrição
initializeInicializa a conexão MCP. Retorna as capacidades do servidor e um ID de sessão.
notifications/initializedNotificação do cliente de que a inicialização está completa.
tools/listLista as ferramentas disponíveis (filtradas pelos escopos do token).
tools/callChama uma ferramenta com argumentos.
resources/listLista os recursos disponíveis (filtrados pelos escopos do token).
resources/readLê um recurso por URI. Requer uma sessão inicializada.
pingPing de keepalive.

As solicitações podem ser enviadas individualmente ou como um lote JSON-RPC. O servidor responde com JSON ou SSE dependendo do cabeçalho Accept.

Arquitetura

A implementação reside nestes arquivos:

  • api.clj - O manipulador HTTP. Analisa solicitações JSON-RPC, valida cabeçalhos de autenticação e sessão, impõe verificações de origem (proteção contra rebinding de DNS) e despacha para o método apropriado. Suporta formatos de resposta JSON e SSE.

  • tools.clj - Despacho de ferramentas e geração de manifesto. Constrói a lista de ferramentas a partir dos metadados do endpoint da API de Agente, verifica escopos e roteia chamadas de ferramentas através de solicitações sintéticas da API de Agente.

  • resources.clj - Registro e manipuladores de recursos MCP. Mantém recursos de documentação (como a referência construct_query) indexados por URI, com controle de acesso baseado em escopo em resources/list e resources/read.

  • scope.clj - Lógica de correspondência de escopo. Suporta correspondências exatas, padrões curinga e o sentinela ::unrestricted para autenticação baseada em sessão.

Fluxo da requisição

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

Leitura adicional