Integration · Issue tracking

How do you build Jira analytics dashboards in Metabase?

Jira tracks projects, sprints, and issues across many teams. Metabase turns that into shared dashboards. This guide covers two complementary paths: a lightweight MCP + CLI route that pulls live data with the Atlassian Rovo MCP server and loads a CSV into Metabase with the Metabase CLI for quick analysis, and a durable pipeline route that syncs Jira into a database so you can build dashboards anyone can read.

Heads up: Metabase connects to databases and warehouses — it does not ship a native Jira connector. Jira's data model is also richer (and messier) than most trackers — custom fields, multiple issue types, and per-project schemes — so standardize it in a model layer before you report.

How do you connect Jira to Metabase?

Most teams combine both routes: use the Atlassian Rovo MCP server and Metabase CLI route to pull live data and stand up a quick analysis, and the pipeline route for the dashboards teams depend on.

1 · MCP + CLI route (AI-assisted)

Live data in, quick analysis out

Pair the Atlassian Rovo MCP server (to look up live Jira issues, sprints, and projects) with the Metabase CLI, whose upload command loads a CSV into Metabase as a ready-to-query table and model.

Best for
  • Ad-hoc questions like "which sprint issues are still open?"
  • Loading a Jira CSV export into Metabase in seconds
  • Spot-checks and one-off analyses without a warehouse
Trade-offs
  • Great for exploration, not governed velocity reporting
  • Use a read-scoped Atlassian token so analysis can't trigger writes
  • CSV uploads are snapshots — refresh or move to the pipeline for history
2 · Pipeline route (warehouse-backed)

Durable dashboards with history

Sync Jira into a database, then point Metabase at it.

Best for
  • Durable dashboards, historical trends
  • Joining Jira with deploys/support data
Trade-offs
  • You maintain the sync and model
  • Custom fields require mapping

What can you analyze from Jira data in Metabase?

  • Velocity & throughput — issues/story points completed per sprint
  • Sprint health — committed vs. completed, spillover
  • Cycle time & lead time — from status changelog
  • Status flow & time-in-status — where issues wait
  • Epic & project progress — scope vs. completion
  • Bug & defect load — by priority, component, fix version
  • Resolution analysis — Done vs. Won't Do vs. Duplicate

Which Jira dashboards should you build in Metabase?

  • Sprint health — committed vs. completed points, spillover → see sprint health.
  • Delivery overview — throughput, cycle time, bug load → see software delivery.
  • Epic/project progress — % complete vs. target, scope change.
  • Defect tracking — bugs created vs. resolved, open bugs by priority/component.

How do you use the Jira MCP server with the Metabase CLI?

Pair the Atlassian Rovo MCP server with the Metabase CLI for fast, hands-on analysis. Atlassian hosts a first-party remote MCP server that looks up live issue and project data (Jira and Confluence); the Metabase CLI'supload command loads a CSV into Metabase and creates a ready-to-query table and model. For analysis, use a read-scoped token.

Example workflow

  • Ask the Atlassian MCP which issues in the current sprint are still open, or list high-priority bugs with no assignee.
  • Export the issues, sprints, and changelog you want to keep as CSVs.
  • Run mb upload csv to load them into Metabase as tables and models, then build questions and dashboards on top.

Be honest about the limits

  • The Atlassian MCP is great for live lookups — not for scheduled or audited velocity reporting.
  • A CSV upload is a point-in-time snapshot; trend and velocity history still need a warehouse sync, or refresh with mb upload replace.
  • Use a read-scoped Atlassian token so analysis can't trigger writes.
  • mb upload csv needs an uploads database configured under Admin → Settings → Uploads.

How do you set up the Jira MCP server and the Metabase CLI?

Atlassian Rovo MCP official

Endpoint
https://mcp.atlassian.com/v1/mcp/authv2
Transport
Streamable HTTP
Auth
OAuth 2.1 with Dynamic Client Registration (browser); API token optional
Scope
Covers Jira and Confluence on your Atlassian Cloud site
Note
An admin enables it per-site (Rovo on); the old /v1/sseendpoint is deprecated.

Metabase CLIofficial

Install
npm install -g @metabase/cli
Auth
mb auth login (browser OAuth on v62+, or an API key)
Load data
mb upload csv --file data.csv
Requires
An uploads database (Admin → Settings → Uploads)
ClaudeClaude Code CLI
# Atlassian Rovo (remote, OAuth in browser — covers Jira & Confluence)
claude mcp add --transport http atlassian https://mcp.atlassian.com/v1/mcp/authv2

Claude Desktop: add Atlassian as a remote/custom connector (Settings → Connectors) using the same URL; Claude handles the OAuth pop-up.

CodexOpenAI Codex CLI
codex mcp add atlassian --url https://mcp.atlassian.com/v1/mcp/authv2

First remote MCP in Codex? Enable the rmcp client in ~/.codex/config.toml:

~/.codex/config.toml
[features]
experimental_use_rmcp_client = true

[mcp_servers.atlassian]
url = "https://mcp.atlassian.com/v1/mcp/authv2"
Cursor~/.cursor/mcp.json or .cursor/mcp.json
{
  "mcpServers": {
    "atlassian": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.atlassian.com/v1/mcp/authv2"]
    }
  }
}

Clients with native remote support can use a "url" field instead of the mcp-remote bridge. On first connection the Atlassian server opens a browser window to authorize.

TerminalLoad a Jira CSV with the Metabase CLI
# Install the Metabase CLI
npm install -g @metabase/cli

# Log in (opens your browser; requires Metabase v62+)
mb auth login --url https://your-metabase.example.com

# Load a Jira CSV export — creates a table AND a model
mb upload csv --file jira-issues.csv --collection root

# Refresh that same table later from a new export
mb upload replace <table-id> --file jira-issues.csv

The Metabase CLI stores its credentials securely after mb auth login.

Verify before shipping: confirm an uploads database is enabled under Admin → Settings → Uploads (Metabase docs) and the current Atlassian MCP details in the Atlassian Rovo MCP docs. Use a read-scoped token for analysis work.

Can you generate a Jira dashboard with AI?

Yes. Use the prompt below with any assistant that can run the Atlassian Rovo MCP server and the Metabase CLI. It works end to end: if Jira tables already exist in Metabase it analyzes those; otherwise it pulls the data over the Atlassian MCP, loads it with mb upload csv, then builds the dashboard — skipping cards it has no data for.

Prompt for a Jira Sprint & Delivery Health dashboard
Create a Metabase dashboard called "Jira Sprint & Delivery Health".
Work end to end: get the data into Metabase if it isn't there yet, then build.

Goal: Help engineering and product leaders understand sprint health,
throughput, flow, and defect load from Jira data.

Step 1 — Find or load the data:
- First, check what already exists in Metabase (search for Jira tables and
  models). If durable Jira data is already present — synced from a warehouse or
  uploaded earlier — use it and skip to Step 2.
- If nothing is there, pull it with the Atlassian Rovo MCP server using a
  read-scoped token: issues, sprints, projects, the issue changelog, and users.
  Write each result to a CSV, then load it with the Metabase CLI — run
  "mb upload csv --file <export>.csv" so each upload creates a table and a
  ready-to-query model. Use "mb upload replace <table-id> --file <export>.csv"
  to refresh an existing table instead of creating duplicates.

Step 2 — Inspect before querying:
Do not assume table names. Map the available raw tables into these analytical
concepts where possible: issues, sprints, projects, issue_changelog, users.
Normalize workflow statuses into To Do / In Progress / Done. Inspect the actual
tables and column names first; story points are usually a custom field that
differs per site.

Important:
- Build on whatever data is present; don't claim Metabase connects natively to
  Jira — it reads a database or CLI-uploaded tables.
- Only compute cycle time, time-in-status, and scope change if issue_changelog
  exists; otherwise add a caveat.
- Only build a card if its underlying column/metric exists in the data.
- A single CSV is a point-in-time snapshot: velocity and flow trends need a
  warehouse sync or multiple uploads, so build trend cards only if that history
  is present.

Sections: (1) Sprint health — committed vs completed story points, spillover;
(2) Throughput — issues/points done per sprint, by team; (3) Flow — median
cycle time by week from the changelog, time-in-status; (4) Quality — bugs
created vs resolved, open bugs by priority and component.

Filters: project, board, sprint, issue type, priority, assignee, and date
range.

Reuse the models Metabase auto-created from uploaded CSVs, or (for a warehouse)
build durable models from the database tables.

Output: Build the dashboard if you have permission; otherwise provide the exact
questions, SQL, model definitions, and layout. Include caveats for any metric
that cannot be calculated from the available data. Keep it practical, dense,
and executive-readable. Avoid vanity metrics.

How do you build the Jira → Metabase pipeline?

For dashboards that need history and reliability, land Jira data in a database first, then connect Metabase to that database.

No paid tool required. A fully free stack: a small dlt or hand-written script (extract) → a free Postgres database like Neon or Supabase (load) → a scheduler such as GitHub Actions cron (host) → Metabase (visualize). For hosting and scheduling details, see our data pipeline guide.

Connector options

  • dlt (free, code) — wrap Jira's REST API in a small Python pipeline for incremental, no-vendor loads. The lightest path to a maintainable sync.
  • Jira REST API (free, raw) — write your own script that paginates issues, sprints, projects, and the changelog and upserts on a schedule.
  • Airbyte — has a Jira source connector; free if you self-host the open-source version, paid on Airbyte Cloud.
  • Fivetran (paid, managed) — a maintained Jira connector with incremental syncs and zero maintenance.

Notes

  • Land raw tables first, then build clean models on top.
  • Sync the issue_changelog if you want accurate cycle/lead time — a single resolved timestamp loses transitions.
  • Map your instance's custom fields (like story points) explicitly.

How should you model Jira data in Metabase?

Map Jira's objects to a clean model (don't report off raw connector tables):

TableGrainKey columns
issuesone row per issueid, key, project_id, issue_type, status, status_category, priority, story_points, assignee_id, epic_id, sprint_id, resolution, created, resolved
sprintsone row per sprintid, board_id, name, state, start_date, end_date, complete_date
projectsone row per projectid, key, name, lead_id
issue_changelogone row per field changeissue_id, field, from, to, changed_at
usersone row per useraccount_id, display_name, active
  • Normalize many workflow statuses into status_category (To Do / In Progress / Done).
  • Derive cycle/lead time from issue_changelog; don't trust a single resolved timestamp for flow.
  • Map story_points from whatever custom field your instance uses — it varies per site.
  • Treat components, labels, and fix versions as bridge tables.

What SQL powers Jira dashboards in Metabase?

Sprint velocity (committed vs. completed points)PostgreSQL
SELECT
  s.name AS sprint,
  s.start_date,
  SUM(i.story_points) FILTER (WHERE i.sprint_id = s.id)                              AS committed_points,
  SUM(i.story_points) FILTER (WHERE i.status_category = 'Done' AND i.resolved <= s.complete_date) AS completed_points
FROM sprints s
JOIN issues i ON i.sprint_id = s.id
GROUP BY s.name, s.start_date, s.complete_date
ORDER BY s.start_date;
Open bugs by priorityPostgreSQL
SELECT i.priority, COUNT(*) AS open_bugs
FROM issues i
WHERE i.issue_type = 'Bug'
  AND i.status_category <> 'Done'
GROUP BY i.priority
ORDER BY open_bugs DESC;

What are common mistakes when analyzing Jira in Metabase?

Treating a live MCP lookup or a one-off CSV as governed reporting.→ Use the Atlassian MCP and CSV uploads for lookups and triage; build warehouse-backed Metabase dashboards for anything you track over time.
Reporting off raw connector schema.→ Model a clean layer; Jira's raw tables are deeply nested.
Trusting resolved for cycle time.→ Reopened/transitioned issues need the changelog.
Hard-coding a story-points field.→ It's a custom field that differs per site; map it explicitly.
Mixing status categories across projects.→ Normalize to To Do / In Progress / Done.
Averaging durations.→ Use median and p90.

Integrations

Dashboards

Metrics

FAQ

Does Metabase have a native Jira connector?
No. Sync Jira into a database (Airbyte, Fivetran, dlt, or the REST API), then connect Metabase to that database.
How do I quickly analyze Jira data without a warehouse?
Pull the issues and sprints you need with the Atlassian Rovo MCP server (use a read-scoped token), export them to CSV, and run `mb upload csv --file data.csv` with the Metabase CLI. It creates a table and a model you can build questions on right away. You'll need an uploads database enabled under Admin → Settings → Uploads. Refresh later with `mb upload replace`, or move to the pipeline route when you need history.
How is this different from Jira's built-in reports?
Metabase lets you join Jira with other sources (deploys, support, source control), define metrics once, and share governed dashboards across the org.
Can I compare Jira and Linear in one dashboard?
Yes — model both onto the shared issue-tracking schema and union them.