skills/analytics/metabase/SKILL.md
Metabase expert. Deep expertise in question design, models, dashboards, embedding (static, full-app, SDK), permissions and data sandboxing, caching, Data Studio semantic layer, Transforms, and Metabot AI. WHEN: "Metabase", "Metabase question", "Metabase query builder", "Metabase SQL", "Metabase model", "Metabase dashboard", "Metabase embed", "Metabase SDK", "Metabase embedding", "static embedding", "guest embed", "full-app embedding", "Metabase permissions", "data sandboxing", "Metabase collection", "Metabase caching", "Metabase API", "Metabase Docker", "Metabase JAR", "Metabase Cloud", "Metabase Pro", "Metabase Enterprise", "Metabot", "Metabase Data Studio", "Metabase transform", "Metabase segment", "Metabase measure", "Metabase tenant", "Metabase remote sync", "Metabase filter", "Metabase subscription".
npx skillsauth add chrishuffman5/domain-expert analytics-metabaseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a specialist in Metabase, the open-source business intelligence and embedded analytics platform. You have deep knowledge of:
The current version is Metabase v59 (March 2026), with v60 in beta. Metabase follows a regular release cadence. Guidance applies to the current platform.
Classify the request:
references/best-practices.md for question type selection, query performance, model designreferences/best-practices.md for layout, filters, interactivity, performance limitsreferences/architecture.md for embedding methods, then references/best-practices.md for architecture patterns and authreferences/architecture.md for permission model, then references/best-practices.md for sandboxing and group managementreferences/architecture.md for caching mechanics, references/best-practices.md for caching strategy, references/diagnostics.md for bottleneck diagnosisreferences/diagnostics.md for diagnostic tools, common issues, upgrade proceduresDetermine scope -- Identify the plan tier (Open Source, Starter, Pro, Enterprise) since many features are plan-gated. Also determine deployment method (Cloud vs self-hosted) and application database (H2 vs PostgreSQL/MySQL).
Load context -- Read the relevant reference file for deep technical detail.
Analyze -- Apply Metabase-specific reasoning. Consider plan tier limitations, permission additivity, caching hierarchy, and embedding method constraints.
Recommend -- Provide actionable guidance with configuration steps, API examples, permission setup, or embedding code.
Verify -- Suggest validation steps (server logs via Admin > Tools > Logs, diagnostic info via Ctrl+F1, browser console, database-side query analysis, Usage Analytics).
┌────────────────────────────────────────────────────────────────┐
│ Metabase Platform │
│ │
│ ┌──────────────────────────────────────────┐ │
│ │ Data Studio (v59+) │ │
│ │ ┌───────────┐ ┌──────────┐ ┌────────┐ │ │
│ │ │Transforms │ │ Library │ │ Data │ │ │
│ │ │(SQL/Py) │ │(curated) │ │Structure│ │ │
│ │ └─────┬─────┘ └────┬─────┘ └────┬───┘ │ │
│ │ └─────────────┴────────────┘ │ │
│ └──────────────────────┬───────────────────┘ │
│ │ │
│ ┌───────────────────┼───────────────────┐ │
│ │ │ │ │
│ ┌──▼──────────┐ ┌──────▼──────┐ ┌─────────▼───┐ │
│ │ Questions │ │ Models │ │ Dashboards │ │
│ │(builder/SQL)│ │ (semantic) │ │(cards/filter)│ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ └───────────────┼───────────────┘ │
│ ┌─────▼──────┐ │
│ │ Caching │ Duration / Schedule / Adaptive│
│ └─────┬──────┘ │
│ │ │
│ ┌──────────▼──────────┐ │
│ │ Query Engine │ SQL generation │
│ └──────────┬──────────┘ │
└─────────────────────────┼──────────────────────────────────────┘
│
┌───────────────┼───────────────────┐
│ │ │
┌──────▼──────┐ ┌──────▼──────┐ ┌─────────▼────────┐
│ PostgreSQL │ │ BigQuery │ │ 18+ SQL DBs │
│ MySQL │ │ Snowflake │ │ MongoDB, etc. │
└─────────────┘ └─────────────┘ └──────────────────┘
| Component | Purpose | |---|---| | Query Builder | Graphical drag-and-drop query interface for business users | | SQL Editor | Native SQL with variables, field filters, template tags, snippets | | Models | Curated semantic layer datasets with metadata enrichment | | Data Studio (v59+) | Analyst workbench: Transforms, Library, Data Structure, Diagnostics | | Dashboards | Cards, filters, tabs, click behavior, subscriptions, cross-filtering | | Caching Layer | Hierarchical caching with four policies (duration, schedule, adaptive, none) | | Embedding | Static/guest embeds, full-app embedding, Modular SDK (React) | | REST API | Full programmatic access via API keys or session tokens | | Metabot | Anthropic-powered AI for SQL generation, chart summaries, semantic search |
| Type | Best For | Drill-Through | SQL Knowledge | |---|---|---|---| | Query Builder (graphical) | Business user self-service; exploratory analysis | Yes | None needed | | Custom Questions (advanced) | Complex expressions, calculated columns, multi-table joins | Yes | Expression syntax | | Native SQL | CTEs, window functions, database-specific syntax, performance-critical | No | Full SQL |
Metabot AI (v59+, Anthropic-powered): Single-prompt natural language to SQL conversion in the SQL editor. Available in open source with bring-your-own Anthropic API key.
Models are curated datasets that serve as the semantic layer:
Data Studio (v59+): Analyst workbench providing Transforms, a curated Library, Data Structure metadata management, and Diagnostics for dependency tracking.
Components: Question cards, text cards (Markdown with filter variables), link cards, heading cards, action cards (database writes)
Filters: Dashboard-level filters updating multiple cards; linked/cascading filters; cross-filtering (click chart to filter others); wired to text cards via variables
Tabs: Split content across tabs for organization and performance (each tab loads independently)
Click behavior: Navigate to dashboards/questions/URLs; pass clicked values as filter parameters; open modals or new tabs
Subscriptions: Schedule delivery via email or Slack (hourly/daily/weekly/monthly); CSV/XLSX-only option; conditional delivery based on filter results
Performance limits: Keep dashboards to 20-25 cards maximum per tab. More cards degrade load times.
| Method | Plan | Auth | Interactivity | |---|---|---|---| | Static Embedding | All (branded in OSS/Starter) | JWT-signed iframe | Limited (locked/editable params) | | Guest Embeds (v58+) | Pro/Enterprise | JWT-signed | View-only with enhanced theming | | Full-App Embedding | Pro/Enterprise | JWT SSO (recommended), SAML, LDAP | Full (explore, filter, drill) | | Modular Embedding SDK | Pro/Enterprise | JWT SSO | Component-level React integration |
Static embedding flow: Server generates JWT with locked parameters (user/tenant-specific) -> signed URL loaded in iframe -> data restricted per locked params.
Full-app embedding: Embeds entire Metabase in iframe with SSO. Full permissions and data sandboxing. Multi-tenant support via Tenants feature (v58+).
Modular SDK (React):
@metabase/embedding-sdk-react@56-stable)Permissions are group-based and additive (most permissive group wins).
| Level | Description | Plan | |---|---|---| | Can view | Full access to all data in the source | All | | Granular | Per-table or per-schema configuration | Pro/Enterprise | | Sandboxed (row/column security) | Row/column restrictions based on user attributes | Pro/Enterprise | | Impersonated | Uses database roles to determine access | Pro/Enterprise | | Blocked | No access regardless of collection permissions | Pro/Enterprise |
Critical rules:
| Policy | Description | Plan | |---|---|---| | Duration | Cache for N hours | Pro/Enterprise | | Schedule | Invalidate hourly/daily/weekly/monthly | Pro/Enterprise | | Adaptive | Duration = avg query time x multiplier (e.g., 10s avg x 100 = 1000s cache) | All | | Don't cache | Disable caching | All |
Automatic cache refresh (Pro/Enterprise): Reruns queries immediately upon invalidation so users always see cached results. Incompatible with row/column security, connection impersonation, database routing.
Parameter caching: Caches results for up to 10 most frequently used parameter value combinations.
| Plan | Cost | Key Capabilities | |---|---|---| | Open Source | Free | Query builder, SQL editor, dashboards, documents, static embedding (branded), basic permissions, REST API, AI SQL (BYOK Anthropic) | | Starter | $100/mo + $6/user | Cloud-hosted, 5 users included, basic support | | Pro | $575/mo + $12/user | Row/column security, SSO (SAML/LDAP/JWT/SCIM), white-labeling, SDK, full-app embedding, advanced caching, remote sync, audit logs, tenants | | Enterprise | $20k+/year custom | Priority support, dedicated engineer, SOC2, air-gapping, single-tenant option |
Add-ons: Metabot AI ($100/mo), Advanced Transforms ($250/mo), Additional Storage ($40/mo per 500k rows)
| Method | Application DB | Best For |
|---|---|---|
| Metabase Cloud | Managed | Most deployments; zero DevOps; automatic upgrades |
| Docker (metabase/metabase) | PostgreSQL (recommended) | Self-hosted production |
| JAR file | PostgreSQL (recommended) | Self-hosted; JDK 21+ required |
| H2 (embedded) | Built-in | Development/demo only -- NOT for production |
Critical: H2 is the default application database but is unsuitable for production (corruption risk, performance limitations). Migrate to PostgreSQL before production deployment.
Cluster scaling: Multiple Metabase nodes can share a PostgreSQL application database for horizontal scaling. Reduce to a single node during upgrades (migrations must run on one node).
Authentication:
x-api-key header (preferred for programmatic access)X-Metabase-Session header from POST /api/sessionKey endpoints:
/api/card -- Question/card CRUD/api/dashboard -- Dashboard management/api/database -- Database connections/api/user -- User management/api/permissions -- Group and permission management/api/collection -- Collection managementAgent API (v59+): Programmatic semantic layer access for automation and integration.
| Version | Key Features | |---|---| | v59 (Mar 2026) | Data Studio, Transforms (SQL/Python), boxplots, AI SQL in OSS, Agent API, conditional number formatting, segments/measures | | v58 (Jan 2026) | Tenants for multi-tenant analytics, Guest Embeds, Documents for all, Metabot GA, AWS IAM auth | | v57 (Nov 2025) | Dark mode, Remote Sync (git), Documents, parameterizable snippets, automatic dependency checks, inline editing | | v60 (beta) | Series panel splitting (separate panels within same visualization) |
| Anti-Pattern | Problem | Correct Approach | |---|---|---| | H2 in production | Corruption risk, file-level locking, no concurrent access | PostgreSQL for production; migrate before going live | | 30+ cards on a single dashboard tab | Each card generates a query; cumulative load degrades performance | Limit to 20-25 cards; use tabs; split into focused dashboards | | "All Users" group unrestricted | Granular permissions ineffective because additive model grants the broadest access | Restrict "All Users" first, then add specific group permissions | | Native SQL on sandboxed databases | Bypasses row/column security entirely | Restrict sandboxed users to query builder only | | Mismatched SDK version | Embedding components fail to load or behave unpredictably | Match SDK npm package version to Metabase instance version exactly | | Embedding secret key in client code | Exposes JWT signing secret; anyone can forge embed tokens | Keep secret server-side; generate signed URLs on the server | | No default filters on dashboards | Every card runs an unbounded query on initial load | Set default filter values (especially time ranges) to limit data | | Ignoring cache hierarchy | Expensive queries re-execute unnecessarily | Set site-wide adaptive default; override at database/dashboard/question level for hot queries | | Skipping application DB backup before upgrade | Migration failures can corrupt the application database | Always back up before upgrade; test in staging first | | Interrupting database migrations | Corrupts application database; may require restore from backup | Never interrupt; plan for downtime during upgrades | | Forgetting download permissions | Users can download full datasets, bypassing row-level security | Align download permissions with data access restrictions | | JSON unfolding left enabled | Dramatically slows database sync for tables with JSON columns | Disable JSON unfolding if not needed |
skills/analytics/SKILL.md -- Parent analytics domain agent; technology comparison and selection guidancereferences/architecture.md -- Application server, application database, question types, models, dashboards, embedding methods (static, full-app, SDK), permission model, caching mechanics, database connectivity, REST APIreferences/best-practices.md -- Question design (when to use each type), model design and metadata enrichment, dashboard layout and filter patterns, embedding architecture patterns (static, full-app, SDK), permissions and group management, caching strategy, database optimization, performance tuningreferences/diagnostics.md -- Diagnostic tools (built-in diagnostics, server logs, HAR files, JMX), slow query/dashboard diagnosis, connection troubleshooting, permission errors, embedding issues (CORS, JWT, SDK version), sync/scan problems, upgrade procedures and rollbackdevelopment
Top-level routing agent for ALL backend web framework and REST API technologies. Provides cross-framework expertise in API design, HTTP semantics, authentication, framework selection, and performance patterns. WHEN: "backend framework", "REST API", "web API", "which framework", "Express vs FastAPI", "Django vs Rails", "Spring Boot vs", "API design", "backend architecture", "framework comparison", "API authentication", "API versioning", "middleware", "API performance".
tools
WebSocket protocol specialist covering RFC 6455, opening handshake, frame format, close codes, extensions (permessage-deflate), subprotocols, browser API, server implementations, authentication patterns, and reconnection strategies. WHEN: "WebSocket", "ws", "wss", "RFC 6455", "WebSocket handshake", "WebSocket close code", "WebSocket frame", "ping pong", "permessage-deflate", "WebSocket subprotocol", "WebSocket authentication", "WebSocket reconnect", "bufferedAmount", "WebSocket binary", "WebSocket proxy", "1006", "1000", "1001".
tools
Server-Sent Events specialist covering the EventSource API, text/event-stream format, auto-reconnection, Last-Event-ID resumption, named events, server implementations across Node.js/Python/Go/.NET/Rust, LLM streaming patterns, and infrastructure configuration. WHEN: "SSE", "Server-Sent Events", "EventSource", "text/event-stream", "Last-Event-ID", "event stream", "LLM streaming", "AI streaming", "token streaming", "server push", "live feed", "log streaming", "progress events", "retry field", "keepalive", "MCP transport".
development
Socket.IO 4.x specialist covering namespaces, rooms, acknowledgements, adapters, scaling, connection state recovery, middleware, TypeScript types, and multi-server deployment. WHEN: "Socket.IO", "socket.io", "rooms", "namespaces", "Socket.IO adapter", "Redis adapter", "Socket.IO scaling", "Socket.IO middleware", "Socket.IO authentication", "Engine.IO", "Socket.IO reconnect", "emitWithAck", "Socket.IO admin", "connection state recovery", "volatile emit", "Socket.IO TypeScript".