vasilyu1983

data-metabase

"Metabase REST API automation and troubleshooting: authenticate (API key preferred, session fallback), export/upsert questions (cards) and dashboards, standardize visualization_settings, and run/export results."

vasilyu1983 81 17 Updated 6mo ago
GitHub

Install

npx skillscat add vasilyu1983/ai-agents-public/data-metabase

Install via the SkillsCat registry.

About this skill

We need to produce a 2-3 sentence plain-text summary, objective, factual, no marketing language, no bullet points, no headings, no markdown, no quotes. At most 60 words. Must explain what the skill does, what problem it solves, when to use it. Provide only the summary text. We need to count words, keep under 60. Let's craft maybe 3 sentences, ~45 words. Sentence 1: "The skill automates interaction with the Metabase REST API to create, update, and export cards and dashboards." That's about 13 words?

SKILL.md

Metabase

Automate Metabase via API: reports (cards), dashboards, and chart settings.

Quick Start

Inputs (env vars)

  • METABASE_URL (e.g., https://metabase.example.com)
  • Preferred: METABASE_API_KEY
  • Fallback: METABASE_USERNAME + METABASE_PASSWORD

Sanity checks

python3 frameworks/shared-skills/skills/data-metabase/scripts/metabase_api.py health
python3 frameworks/shared-skills/skills/data-metabase/scripts/metabase_api.py whoami

Live API documentation

Your Metabase instance serves OpenAPI docs at /api/docs (e.g., https://metabase.example.com/api/docs). Use this to discover version-specific endpoints and request shapes.

Workflow

  1. Confirm API availability (GET /api/util/health).
  2. Authenticate with an API key (preferred) or a short-lived session (fallback).
  3. Discover IDs (prefer discovery over hardcoding across environments):
    • collection_id for where to save
    • database id for dataset_query
    • source-table / field ids if using MBQL
  4. Create/update a card:
    • Prefer native SQL for stable automation.
    • Set display + visualization_settings explicitly.
  5. Create/update a dashboard and add cards with consistent layout.
  6. Validate by running/exporting results.

Key Concepts

  • UI "Question" == API card
  • Chart configuration lives on the card as display + visualization_settings
  • Most viz keys are easiest to manage by copying from an existing card JSON, then editing

Guardrails

  • Prefer Metabase "serialization" (Pro/Enterprise) for bulk, cross-environment migrations; use direct API for incremental upserts.
  • Do not hardcode numeric IDs across environments when you can discover them or use serialization/entity IDs.
  • Never commit METABASE_API_KEY, passwords, or session tokens.
  • Prefer a dedicated, least-privileged automation account and collection.

References (read only as needed)

Topic File
Authentication (API key + fallback) references/api-auth.md
Reports (cards): create/edit patterns references/reports-cards.md
Dashboards and card placement references/dashboards.md
Charts and visualization_settings references/charts-settings.md
Embedding & external integration references/embedding-integration.md
Permissions & collections management references/permissions-collections.md
Native SQL query patterns references/native-query-patterns.md

Scripts

scripts/metabase_api.py is a small, dependency-free helper to test auth and upsert cards.

Examples:

# Print authenticated user (tries API key, then session)
python3 frameworks/shared-skills/skills/data-metabase/scripts/metabase_api.py whoami

# Export an existing card JSON (use as a template for visualization_settings)
python3 frameworks/shared-skills/skills/data-metabase/scripts/metabase_api.py export-card --id 123 --out card.json

# Export an existing dashboard JSON (use as a template for layout)
python3 frameworks/shared-skills/skills/data-metabase/scripts/metabase_api.py export-dashboard --id 5 --out dashboard.json

# Create/update a card from a JSON spec (see references/reports-cards.md)
python3 frameworks/shared-skills/skills/data-metabase/scripts/metabase_api.py upsert-card --spec card-spec.json

# Create/update a dashboard from a JSON spec (base fields only)
python3 frameworks/shared-skills/skills/data-metabase/scripts/metabase_api.py upsert-dashboard --spec dashboard-spec.json