How to build Jitbit help desk dashboards in Metabase
Jitbitis an IT help desk available as SaaS or self-hosted, with tickets, categories, assets, and SLAs. Metabase is where you turn that activity into shared, trustworthy dashboards. This guide covers two complementary paths: a lightweight MCP route for fast, AI-assisted questions, and a durable pipeline route — and, uniquely, if you self-host Jitbit, Metabase can connect directly to its SQL Server database.
How do you connect Jitbit to Metabase?
Most teams combine these: use the MCP route to explore and triage, and a pipeline or direct-database connection for the dashboards people depend on.
Live, conversational analysis
Pair Jitbit's built-in MCP server with the Metabase MCP server so an AI assistant can read live ticket data and query existing Metabase models on demand.
- Ad-hoc questions like "what's open in the IT queue?"
- Searching and reading tickets without leaving your assistant
- Exploring before you build a report
- Jitbit's MCP server is read-only and needs Jitbit 11.21 or later
- Not a substitute for governed or scheduled reporting
- No history unless your data already lives in Metabase
Durable dashboards with history
On Jitbit SaaS, sync via the REST API. On self-hosted Jitbit, Metabase can connect directly to the underlying SQL Server database.
- SLA, category, and volume dashboards the team relies on
- Self-hosted instances where you control the database
- Trends over quarters and year-over-year comparisons
- SaaS has no first-party warehouse connector — use the REST API or dlt
- Direct DB access is read-only best practice — never report off the live OLTP under load
- You own the data model and refresh schedule
What can you analyze from Jitbit data in Metabase?
- Ticket volume — created vs. closed by day and category
- First response time — how long requesters wait for a technician
- Resolution time — created to closed, with median and p90
- Category drivers — what's generating IT tickets
- Backlog and aging — open work and how long it's been waiting
- Technician performance — workload distribution and resolution speed
- Repeat requesters — users filing tickets repeatedly
Which Jitbit dashboards should you build in Metabase?
Support overview
The daily pulse of the help desk.
- Tickets created vs. closed per day (dual line)
- Median first response time (number + trend)
- Open backlog by status (bar)
- Volume by category (bar)
SLA & response time
Are we meeting internal SLAs?
- First response time p50/p90 by week (line)
- Overdue tickets by category (table)
- Aging open tickets by days-open bucket (table)
- Reopened tickets by week (line)
Technician performance
Balance workload across the team.
- Closed tickets by technician (bar)
- Median resolution time by technician (bar)
- Open assigned tickets by technician (table)
- Volume by priority (bar)
Categories & assets
Understand what's driving IT tickets.
- Volume by category over time (line)
- Top recurring issue types (bar)
- Tickets by department/requester group (bar)
- Repeat-requester customers (table)
How do you use the Jitbit and Metabase MCP servers together?
Pair the Jitbit MCP server with the Metabase MCP server for live, conversational analysis. The Jitbit MCP searches and reads current tickets; the Metabase MCP queries the models and dashboards you've already built.
Example workflows
- Search open tickets in a category and summarize by technician.
- Read a ticket's full thread, then compare resolution trends against a Metabase model.
- Triage: "find unassigned high-priority tickets created today."
Be honest about the limits
- MCP is great for live lookups — not for scheduled or audited reporting.
- Jitbit's MCP server is read-only — it can't create or modify tickets.
- It does not create history; trend analysis still needs synced data.
- The Metabase MCP server is built in; an admin enables it under Admin → AI → MCP.
How do you set up the Jitbit and Metabase MCP servers?
Jitbit MCP official
- Endpoint
https://yourcompany.jitbit.com/api/mcp- Transport
- Streamable HTTP (stateless)
- Auth
- Bearer API token from your Jitbit profile
- Requires
- Jitbit 11.21 or later (SaaS or on-prem)
Metabase MCP built-in
- Enable
- Admin → AI → MCP
- Endpoint
https://<your-metabase>/api/metabase-mcp- Auth
- OAuth handled by Metabase
{
"mcpServers": {
"jitbit": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://yourcompany.jitbit.com/api/mcp",
"--header",
"Authorization:Bearer YOUR_JITBIT_TOKEN"
]
},
"metabase": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://your-metabase.example.com/api/metabase-mcp"]
}
}
}Use the hosted /api/mcp endpoint when your client supports HTTP transport; a thin jitbit-helpdesk-mcp npm proxy exists for stdio-only clients.
Can you generate a Jitbit dashboard with AI?
Yes — and this is the fastest way to a strong first draft. Use the prompt below with the Metabase MCP server and any assistant that can inspect your database schema and create Metabase questions. It assumes Jitbit data is reachable from a database Metabase can read (a sync on SaaS, or the SQL Server replica on self-hosted), treats MCP as exploratory, and tells the agent to skip metrics the schema can't support instead of faking them.
Create a polished Metabase dashboard for Jitbit help desk analytics using the
available Jitbit tables in this database.
Goal: Help IT support leaders understand volume, responsiveness, SLA, category
drivers, and technician workload from Jitbit data.
First, inspect the schema and identify the available Jitbit tables. Do not assume
exact table names. Map the available raw tables into these analytical concepts
where possible: Tickets, Comments, Users (technicians and end users), Categories,
Statuses, Priorities, Tags, and Departments.
Important:
- Treat MCP data access as exploratory only.
- Build the dashboard from durable database/warehouse tables (or, on self-hosted
Jitbit, a read replica of the SQL Server database).
- Use medians (p50) and p90 for response and resolution times, never averages.
- Define "first response" as the first technician comment, excluding internal
notes and automated messages.
- If status-change history is missing, do not calculate reopen rate or
time-in-status. Use a caveat instead.
- Do not claim Metabase connects natively to the Jitbit SaaS API; on self-hosted
it connects to the underlying SQL Server database directly.
Dashboard title: Jitbit Help Desk Overview
Sections:
1. Executive summary (KPI cards): Tickets created last 7 days; Closed last 7 days;
Open backlog; Median first response time; Volume by category.
2. Volume & backlog: Created vs closed by day; Open by status; Backlog aging;
Volume by category.
3. SLA & response time: First response p50/p90 by week; Overdue by category;
Reopened by week (only if history exists).
4. Technician performance: Closed by technician; Median resolution time by
technician; Open assigned by technician; Volume by priority.
5. Categories & drivers: Volume by category over time; Top recurring issue types;
Tickets by department; Repeat requesters.
Filters: Category, Technician, Priority, Status, Department, Date range.
Before finalizing, create or recommend reusable Metabase models:
modeled_jitbit_tickets, modeled_jitbit_comments, modeled_jitbit_users, and
modeled_jitbit_categories.
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 schema. Keep it practical, dense,
and executive-readable. Avoid vanity metrics.How do you get Jitbit data into Metabase?
Your route depends on whether you run Jitbit SaaS or self-hosted.
Self-hosted: connect directly
- Self-hosted Jitbit stores data in SQL Server / Azure SQL, which Metabase connects to natively. Point Metabase at a read replica and model on top — no ETL required.
- Never run heavy reporting against the live production database under load; use a replica or restored backup.
SaaS: sync via the API
- dlt(code) — write a Python pipeline against the Jitbit REST API to land tickets and comments in your warehouse.
- Jitbit REST API(raw) — the source of truth on SaaS; paginate tickets and comments and upsert on a schedule.
Notes
- On either route, build clean models rather than reporting off raw tables.
- Capture status changes if you want accurate reopen rate and time-in-status.
How should you model Jitbit data in Metabase?
Core tables
| Table | Grain | Key columns |
|---|---|---|
Tickets | one row per ticket | TicketID, StatusID, PriorityID, CategoryID, AssignedToUserID, UserID (requester), IssueDate, ResolvedDate |
Comments | one row per comment | IssueID, UserID, ForTechsOnly, CommentDate |
Users | one row per user | UserID, IsAdmin (technician), UserName, Email |
Categories | one row per category | CategoryID, CategoryName |
Modeling advice
- Map
StatusIDandPriorityIDcodes to readable labels in a model. - Define first response from the first non-internal technician comment (
ForTechsOnly = false, technician author). - Treat tags as a bridge table so a ticket can carry many tags.
- On self-hosted, build models on a replica so dashboards don't load the OLTP database.
- Define "closed" once (e.g.
StatusID = 3) and reuse it everywhere.
Which Jitbit metrics should you track in Metabase?
| Metric | Definition | Notes |
|---|---|---|
| First response time | Created → first technician comment. | Report median and p90; exclude tech-only notes. |
| Resolution time | Created → resolved/closed. | Decide whether to include on-hold time. |
| Ticket volume | Created vs. closed in a period. | Segment by category and priority. |
| Category mix | Tickets by category. | Reveals recurring IT issues. |
| Backlog | Open tickets right now. | Pair with aging buckets. |
| Technician load | Open and closed tickets per technician. | Frame as balance, not a leaderboard. |
What SQL powers Jitbit dashboards in Metabase?
These use Jitbit's SQL Server table names (shown in PostgreSQL-style syntax). On SQL Server, swap percentile_cont and date functions for the T-SQL equivalents.
The basic volume trend over the last 30 days (StatusID 3 = closed).
SELECT
CAST(t.IssueDate AS date) AS day,
COUNT(*) AS created,
COUNT(*) FILTER (WHERE t.StatusID = 3) AS closed
FROM Tickets t
WHERE t.IssueDate >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY CAST(t.IssueDate AS date)
ORDER BY 1;Median from the first non-internal technician comment per ticket.
WITH first_tech_comment AS (
SELECT
c.IssueID,
MIN(c.CommentDate) AS first_reply_at
FROM Comments c
JOIN Users u ON u.UserID = c.UserID
WHERE u.IsAdmin = true -- technician
AND c.ForTechsOnly = false
GROUP BY c.IssueID
)
SELECT
date_trunc('week', t.IssueDate) AS week,
percentile_cont(0.5) WITHIN GROUP (
ORDER BY EXTRACT(EPOCH FROM (f.first_reply_at - t.IssueDate)) / 60.0
) AS median_first_reply_min
FROM Tickets t
JOIN first_tech_comment f ON f.IssueID = t.TicketID
GROUP BY 1
ORDER BY 1;Top IT ticket drivers over the last 90 days.
SELECT
cat.CategoryName AS category,
COUNT(*) AS tickets
FROM Tickets t
JOIN Categories cat ON cat.CategoryID = t.CategoryID
WHERE t.IssueDate >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY cat.CategoryName
ORDER BY tickets DESC;Open tickets bucketed by how long they've been waiting.
SELECT
CASE
WHEN CURRENT_DATE - t.IssueDate::date <= 1 THEN '0-1 days'
WHEN CURRENT_DATE - t.IssueDate::date <= 3 THEN '2-3 days'
WHEN CURRENT_DATE - t.IssueDate::date <= 7 THEN '4-7 days'
ELSE '8+ days'
END AS age_bucket,
COUNT(*) AS open_tickets
FROM Tickets t
WHERE t.StatusID <> 3
GROUP BY 1
ORDER BY MIN(CURRENT_DATE - t.IssueDate::date);