| name | metabasecli |
| description | CLI for querying Metabase (cards/questions, dashboards, collections, databases, search). Use when working with Metabase to search entities, browse collections, run saved questions, export/import dashboards, explore database metadata, or resolve Metabase URLs. Triggered by requests involving Metabase data, dashboard queries, saved questions, collection browsing, or Metabase automation. |
| trigger-keywords | metabase, metabase card, metabase question, metabase query, metabase dashboard, metabase collection, metabase database |
| allowed-tools | Bash(metabase --help), Bash(metabase auth status:*), Bash(metabase search:*), Bash(metabase resolve:*), Bash(metabase databases list:*), Bash(metabase databases get:*), Bash(metabase databases metadata:*), Bash(metabase databases schemas:*), Bash(metabase collections tree:*), Bash(metabase collections get:*), Bash(metabase collections items:*), Bash(metabase cards list:*), Bash(metabase cards get:*), Bash(metabase cards run:*), Bash(metabase dashboards list:*), Bash(metabase dashboards get:*), Bash(metabase dashboards export:*), Bash(metabase dashboards revisions:*) |
metabasecli
Command-line interface for Metabase API operations.
Terminology
- Cards = Questions/Queries in the Metabase UI (
metabase cards, metabase queries, metabase questions are aliases)
- Dashboards = Dashboards
- Collections = Collections (folders for organizing cards and dashboards)
- Databases = Connected data sources
Flag Placement
Always place flags after the full command path, not between metabase and the command group. This ensures command prefix matching works correctly for permissions.
metabase databases list --profile prod --json
metabase cards run 123 --limit 100
metabase -p prod databases list
Global Flags
| Flag | Description |
|---|
-p, --profile | Named profile to use (default: "default") |
-v, --verbose | Enable verbose output |
--json | JSON output (available on most commands) |
JSON Output Format
All commands support --json. Output wraps as:
- Success:
{"success": true, "data": {...}, "meta": {"timestamp": "...", "api_calls": N}}
- Error:
{"success": false, "error": {"code": "...", "message": "..."}}
Error codes: NOT_FOUND, AUTHENTICATION_ERROR, SESSION_EXPIRED, PERMISSION_DENIED, API_ERROR, VALIDATION_ERROR.
Authentication
metabase auth status
metabase auth login
metabase auth login --url https://metabase.example.com --method api_key
metabase auth token
metabase auth logout
Search
metabase search "revenue"
metabase search "revenue" --models card
metabase search "revenue" --models dashboard
metabase search "revenue" --collection-id 42
metabase search "revenue" --database-id 1
metabase search "revenue" --archived
metabase search "revenue" --created-by 5
metabase search "revenue" --limit 10
Valid --models values: card, dashboard, collection, database, table, dataset, segment, metric, action.
Resolve URLs
Parse Metabase URLs into entity details:
metabase resolve 'https://metabase.example.com/question/123'
metabase resolve 'https://metabase.example.com/dashboard/456-my-dashboard'
metabase resolve '/collection/789'
metabase resolve '/browse/databases/1'
Databases
metabase databases list
metabase databases list --include-tables
metabase databases get 1
metabase databases get 1 --include-tables
metabase databases get 1 --include-fields
metabase databases metadata 1
metabase databases metadata 1 --include-hidden
metabase databases schemas 1
Collections
Browse Collections
metabase collections tree
metabase collections tree --search "analytics"
metabase collections tree --search "analytics" -L 3
metabase collections tree --include-archived
metabase collections get 42
metabase collections get root
metabase collections items 42
metabase collections items root
metabase collections items 42 --models card
metabase collections items 42 --models dashboard
metabase collections items 42 --archived
metabase collections items 42 --sort-by last_edited_at --sort-dir desc
Valid --models for items: card, dashboard, collection, dataset, pulse.
Valid --sort-by: name, last_edited_at, last_edited_by, model.
Manage Collections
metabase collections create --name "My Collection" --parent-id 42
metabase collections create --name "Top Level" --description "A description"
metabase collections update 42 --name "New Name"
metabase collections update 42 --parent-id 10
metabase collections archive 42
Cards (Questions/Queries)
Browse Cards
metabase cards list --filter mine
metabase cards list --filter bookmarked
metabase cards list --filter archived
metabase cards list --collection-id 42
metabase cards list --filter database --database-id 1
metabase cards get 123
At least one filter is required: --filter, --collection-id, or --database-id.
Valid --filter: mine, bookmarked, archived, database, table, using_model.
Run Cards
Execute a saved question and get results:
metabase cards run 123
metabase cards run 123 --limit 100
metabase cards run 123 --parameters '{"date": "2024-01-01"}'
metabase cards run 123 --json
Results are exported to /tmp/metabase-<timestamp>/.
Import/Export Cards
metabase cards import --file card.json
metabase cards import --file card.json --id 123
metabase cards import --file card.json --collection-id 42
metabase cards import --file card.json --database-id 1
cat card.json | metabase cards import --file -
For JSON format details and creating cards from scratch, see references/creating-cards-and-dashboards.md.
Delete Cards
metabase cards archive 123
metabase cards delete 123
metabase cards delete 123 --force
Dashboards
Browse Dashboards
metabase dashboards list --collection-id 42
metabase dashboards get 456
metabase dashboards get 456 --include-cards
Export Dashboards
metabase dashboards export 456
Exports to /tmp/metabase-<timestamp>/ with:
dashboard-456.json — dashboard layout with dashcard placements (card_id references only)
card-<id>.json — one per referenced card (full card definition for context)
Import Dashboards
Dashboard import only handles the layout. Cards must already exist — create them first with metabase cards import.
metabase dashboards import --file dashboard.json
metabase dashboards import --file dashboard.json --id 456
metabase dashboards import --file dashboard.json --collection-id 42
cat dashboard.json | metabase dashboards import --file -
For creating cards and dashboards from scratch, see references/creating-cards-and-dashboards.md.
Revisions
metabase dashboards revisions 456
metabase dashboards revert 456 789
Delete Dashboards
metabase dashboards archive 456
metabase dashboards delete 456
metabase dashboards delete 456 --force