atlassian/jira-sprint-dashboard
>- Create a visual Jira sprint dashboard from Jira project, space, sprint, board, filter, JQL, work item keys, or Jira URL data. Use when the user asks for a Jira sprint dashboard, standup dashboard, sprint review, delivery review, engineering manager dashboard, WIP review, planning view, closeout view, or a visual snapshot of Jira work that is more useful than a flat report. Use the richest dashboard format supported by the current agent, such as Cursor Canvas, an interactive artifact, HTML, or Markdown.
npx skills add https://github.com/atlassian/atlassian-mcp-server --skill jira-sprint-dashboard
Build a focused dashboard that helps an engineering manager, tech lead, or
senior engineer see current Jira work quickly enough to decide what needs
attention. The output is a dashboard, not a prose report and not a generic
health score.
This skill is read-only by default. Do not create, update, transition, assign,
or comment on Jira work items unless the user explicitly asks for a write action
after reviewing the dashboard.
Use the richest dashboard renderer supported by the current environment. The
dashboard content, claims, counts, and source appendix must stay consistent
across renderers; only the presentation changes.
Choose the renderer in this order:
artifact output.
Do not mention that Cursor Canvas is unavailable unless the user specifically
asked for Cursor Canvas. If the user asked for a dashboard generally, use the
best available renderer without apologizing for the environment.
Use this section only when running in Cursor with Canvas support.
Read ~/.cursor/skills-cursor/canvas/SKILL.md before writing canvas code. If
you need exact exports or prop shapes, read the files in
~/.cursor/skills-cursor/canvas/sdk/.
Canvas constraints:
.canvas.tsx file in the Cursor canvases directory.cursor/canvas. Do not import react, CSSProperties,JSX, Atlaskit, or other packages.
Stack, Grid, Card, Stat, Table,Pill, Callout, UsageBar, BarChart, LineChart, PieChart, and Code
over raw HTML.
useHostTheme() for custom styles. Do not hardcode hex colors, gradients,box shadows, ADS variables, unsupported CSS frameworks, or @atlaskit/*.
Use this section when Cursor Canvas is unavailable.
For an interactive artifact renderer:
chart/table views is fine; do not require live Jira fetching from the artifact.
For static HTML:
chart libraries are unavailable.
For Markdown:
source appendix.
percentages, and simple bars.
For JSON fallback:
source scope.
Do not guess the Jira scope. If the user does not provide a project key, space
key, board, sprint, filter, JQL, work item keys, or Jira URL, stop and ask for
one. A dashboard from a random visible project or guessed team context is worse
than no dashboard.
If the user gives a project or space key but no sprint, board, or filter, start
with the Jira JQL project field and the user's key:
project = "SPACE_KEY" AND sprint in openSprints() ORDER BY Rank ASC
If the open sprint result is empty, stale, or misleading, switch to snapshot
mode and say so in a compact caveat below the top bar:
project = "SPACE_KEY" AND statusCategory != Done ORDER BY priority DESC, updated ASC
project = "SPACE_KEY" AND updated >= -60d ORDER BY updated DESC
Use a 60-day recent movement window by default unless the user asks for another
period.
Use read-only Jira search. Request only fields needed for the dashboard and
tolerate missing fields.
Useful fields: key, summary, status, statusCategory, assignee,
priority, issuetype, created, updated, resolutiondate, duedate,
parent, issuelinks, labels, components, fixVersions, sprint, and any
available estimate/story point field.
Start with maxResults: 100. For complete sprint, board, or filter dashboards,
paginate until the scope is complete or too large for useful work-item-level
rendering.
Default to one complete paginated scope query. Derive ordinary dashboard signals
locally from the returned work item set instead of issuing separate JQL calls for
each signal.
Derive these locally when the scope query returned the required fields:
statusCategory = Done and resolutiondate.statusCategory != Done and updated.statusCategory != Done and empty assignee.statusCategory != Done and priority.status, statusCategory, and labels.scope dataset.
Use targeted follow-up queries only when they are needed to support a visible
claim that cannot be derived safely from the scope data, when the scope is too
large for useful local processing, or when the user asks for an audit-style
dashboard with exact evidence per signal.
Rule of thumb:
at most one targeted blocker-text or dependency-status follow-up when needed.
processing the full work-item set would be slow or low-value.
JQL evidence matters more than minimizing calls.
Examples of targeted follow-up queries, only when justified:
<scope> AND statusCategory = Done ORDER BY resolutiondate DESC<scope> AND statusCategory != Done AND updated <= -3d ORDER BY updated ASC<scope> AND statusCategory != Done AND assignee is EMPTY ORDER BY priority DESC, updated ASC<scope> AND statusCategory != Done AND priority in (Highest, High) ORDER BY priority DESC, updated ASC<scope> AND statusCategory != Done AND (status = Blocked OR text ~ "blocked" OR labels in (blocked, blocker)) ORDER BY priority DESC, updated ASCDo not make negative claims such as "no blockers" or "no dependencies" unless
the source appendix shows the query or returned field coverage that supports the
claim. If only status and labels were checked for blockers, say that no
status/label blockers were found rather than claiming there are no blockers. If
a signal was not checked, say so.
For derived signals, cite the base scope JQL and field coverage in the source
appendix instead of inventing separate support queries. Include additional JQL
only for targeted follow-up queries that were actually run.
For work item links (issuelinks), fetch linked work item status/category when
possible. If linked details are unavailable, show dependency status as unknown
rather than resolved.
Before designing the output, create a compact renderer-independent work item
model with:
Unassignedactive, inactive, unknown, or unassignedDerived signals should stay explainable from Jira facts: done, active, not
started, stale, very stale, blocked, unowned, inactive owner, time-sensitive,
support-impacting, cross-space dependency, and missing planning data. Mark weak
text-only signals as inferred.
Create a dashboard model before rendering. Every renderer should use this same
model.
Include:
query timestamp, and mode.
progress, and needs attention.
recent project movement.
available.
composition of Needs attention.
Do not invent data to fill the model. Empty or unsupported sections should be
omitted.
Keep the visible dashboard simple and deterministic. When the data exists,
broadly follow this order:
prose at the top.
needs attention.
Needs attention should combine the highest-signal risks: blocked, stale,unassigned, time-sensitive, or unresolved linked work.
mixed, stale, or blended with recent project movement.
allocation segment data is available.
visual.
Never render placeholder, sample, empty, or guessed charts.
one stands out.
table below the main readout.
what the viewer should inspect next.
10. Source appendix
composition of Needs attention at the bottom.
If the full data set is unavailable, preserve the same broad order and omit the
sections or charts that cannot be rendered honestly.
charts instead of changing the whole page shape.
is needed to explain impact.
counts.
success for done,warning for stale/deadline risk, danger for blocked/overdue/severe risk,
info for caveats/linked work, and neutral for low-signal facts.
For Cursor Canvas:
For interactive artifacts or static HTML:
charts.
For Markdown:
Before returning:
clarified before querying.
cursor/canvas.bar.
targeted follow-up queries were used only when they supported a visible claim
that the scope data could not safely support.
are available.
Take atlassian/jira-sprint-dashboard from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.