mcpField
G
generate-status-report

generate-status-report

github.com/atlassian生産性1.1k322 回インストール3 週間前に更新
リポジトリ

generate-status-report について

Jira のプロジェクト状況を報告するスキルです。期間や対象者に合わせて課題を分析し、レポートを作成して Confluence に公開できます。

主な機能

  1. 01プロジェクト、期間、対象者、公開先の確認
  2. 02JQL による Jira 課題の検索
  3. 03進捗、阻害要因、リスクの分析
  4. 04対象者に応じたレポート構成
  5. 05Confluence へのレポート公開

活用シーン

  1. 01経営層向けのプロジェクト更新作成
  2. 02チーム向けの課題状況レポート作成
  3. 03デイリースタンドアップの更新作成
  4. 04Confluence での定期レポート公開

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/atlassian/atlassian-mcp-server --skill generate-status-report

インストール後、Claude Code で/generate-status-reportを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
jql-patterns.md
report-templates.md
scripts/
jql_builder.py

詳細

ステータスレポートの生成

キーワード

ステータスレポート、プロジェクトの状況、週次更新、デイリースタンドアップ、Jira レポート、プロジェクト概要、ブロッカー、進捗更新、Confluence レポート、スプリントレポート、プロジェクト更新、Confluence への公開、Confluence への書き込み、レポートの投稿

Jira に自動でクエリを実行してプロジェクトの状況を確認し、課題を分析して、Confluence に公開する書式設定済みのステータスレポートを生成します。

重要:このスキルは対話型である必要があります。レポートの生成前または生成後に、対象範囲(期間、対象読者、Confluence の公開先)を必ずユーザーに確認してください。Confluence への公開を黙って省略してはいけません。必ず公開するかどうかを尋ねてください。

ワークフロー

ステータスレポートは、次の手順で生成します。

  1. 対象範囲の確認 - プロジェクト、期間、対象読者を確認します
  2. Jira へのクエリ - JQL クエリを使用して関連する課題を取得します
  3. データの分析 - 課題を分類し、重要なインサイトを特定します
  4. レポートの書式設定 - 対象読者と目的に合わせて内容を構成します
  5. Confluence への公開 - レポートを記載したページを作成または更新します

ステップ 1:対象範囲の確認

重要:ユーザーの依頼に重要な情報が不足している場合は、クエリを実行する前に確認してください。Confluence への公開について、確認せずに既定値を適用してはいけません。

次の内容を確認します。

プロジェクトの特定:

  • Jira のプロジェクトキーは何ですか?(例:「PROJ」、「ENG」、「MKTG」)
  • ユーザーがプロジェクト名を指定していてもキーを指定していない場合は、Jira を検索してプロジェクトキーを確認します

期間:

  • 指定がない場合は、「このレポートの対象期間はいつですか?(既定:過去 7 日間)」と尋ねます
  • 選択肢:週次(7 日間)、日次(24 時間)、スプリント単位(2 週間)、カスタム期間

対象読者:

  • 指定がない場合は、「このレポートは誰向けですか?(経営幹部/デリバリーマネージャー、チーム向け、またはデイリースタンドアップ)」と尋ねます
  • 経営幹部/デリバリーマネージャー:主要な指標とブロッカーを含む概要
  • チーム向け:課題ごとの詳細な状況
  • デイリースタンドアップ:昨日/今日の作業とブロッカーに関する簡潔な更新

レポートの公開先:

  • 指定がない場合は必ず確認します:「このレポートを Confluence に公開しますか?公開する場合は、どのスペースを使用しますか?」
  • ユーザーが公開すると答えた場合は、スペース名を尋ねるか、利用可能なスペースの一覧を提示します
  • 新しいページを作成するか、既存のページを更新するかを確認します
  • 特定のセクション配下に作成する場合は、親ページについて尋ねます

ステップ 2:Jira へのクエリ

searchJiraIssuesUsingJql ツールを使用して課題を取得します。レポートのニーズに基づいて JQL クエリを作成します。

一般的なクエリパターン

包括的なクエリには、scripts/jql_builder.py ユーティリティを使用して JQL 文字列をプログラムで作成します。簡単なクエリには、references/jql-patterns.md の例を参照してください。

プロジェクト内のすべての未完了課題:

project = "PROJECT_KEY" AND status != Done ORDER BY priority DESC, updated DESC

過去 1 週間に更新された課題:

project = "PROJECT_KEY" AND updated >= -7d ORDER BY priority DESC

優先度が高い課題とブロック中の課題:

project = "PROJECT_KEY" AND (priority IN (Highest, High) OR status = Blocked) AND status != Done ORDER BY priority DESC

レポート対象期間中に完了した課題:

project = "PROJECT_KEY" AND status = Done AND resolved >= -7d ORDER BY resolved DESC
クエリ戦略

ほとんどのレポートでは、1 つの大きなクエリではなく、対象を絞った複数のクエリを実行します。

  1. 完了した課題:最近解決されたチケットを取得します
  2. 進行中の課題:作業中の項目を取得します
  3. ブロック中の課題:対応が必要なブロッカーを取得します
  4. 優先度の高い未完了課題:今後対応する重要な作業を取得します

最初のクエリでは maxResults: 100 を使用します。ページネーションが必要な場合は、結果の nextPageToken を使用します。

抽出するデータ

各課題について、次の情報を取得します。

  • key(例:「PROJ-123」)
  • summary(課題のタイトル)
  • status(現在の状態)
  • priority(重要度)
  • assignee(担当者)
  • created / updated / resolved の各日付
  • description(ブロッカーの背景情報が必要な場合)

ステップ 3:データを分析する

取得した課題を処理し、次の項目を特定します。

指標:

  • ステータス別の課題総数(完了、進行中、ブロック中など)
  • 完了率(履歴データがある場合)
  • 優先度の高い項目の数
  • 担当者未設定の課題数

主なインサイト:

  • 主な成果(最近完了した価値の高い項目)
  • 重大なブロッカー(ブロックされている優先度の高い課題)
  • リスクのある項目(期限超過、または進行中のまま停滞しているもの)
  • リソースのボトルネック(多くの課題を抱える担当者)

分類: 課題を論理的にグループ分けします。

  • ステータス別(完了、進行中、ブロック中)
  • 優先度別(最高 → 低)
  • 担当者またはチーム別
  • コンポーネントまたはエピック別(関連する場合)

ステップ 4:レポートを作成する

対象読者に合わせて適切なテンプレートを選択します。テンプレートは references/report-templates.md にあります。

経営層およびデリバリーマネージャー向け

エグゼクティブサマリー形式を使用します。

  • 全体のステータスを簡潔に記載(🟢 順調/🟡 要注意/🔴 ブロック中)
  • 主な指標(総数、完了、進行中、ブロック中)
  • 主なハイライトを 3 つ(主な成果)
  • 影響を含む重大なブロッカー
  • 今後の優先事項

簡潔にまとめてください — 最大 1~2 ページです。意思決定者にとって重要な点に焦点を当てます。

チームレベルのレポート向け

詳細な技術形式を使用します。

  • 完了した課題をキーとともに列挙
  • 担当者と優先度を含めた進行中の課題
  • ブロッカーの説明と必要な対応を含めたブロック中の課題
  • リスクと依存関係
  • 次の期間の優先事項

詳細を多く含めてください — チームには課題レベルの可視性が必要です。

日次更新向け

デイリースタンドアップ形式を使用します。

  • 昨日完了したこと
  • 今日の予定
  • 現在のブロッカー
  • 簡単なメモ

簡潔にまとめてください — これは短時間の共有であり、包括的な分析ではありません。

ステップ 5:Confluence に公開する

レポートを生成した後は、必ず Confluence への公開を提案してください(ユーザーが明示的に希望しない場合を除きます)。

ユーザーがまだ Confluence の詳細を指定していない場合は、次のように尋ねます。

  • 「このレポートを Confluence に公開しますか?」
  • 「どの Confluence スペースを使用しますか?」
  • 「特定の親ページの下に配置しますか?」

レポートの公開には createConfluenceContent ツールを使用します。

本文を作成する前に、作成ガイダンスを読み込みます。getContentFormatGuide はプライマリツールではないため、execute 経由で実行します(プライマリ以外のツールの呼び出しを参照)。toolName には、呼び出すツールの名前ではなく、コンテンツキー createConfluencePage を指定してください。

executeRead(   # or execute(...) if your client exposes a single execute tool
    name="getContentFormatGuide",
    inputs={"toolName": "createConfluencePage"}
)

ガイダンスの読み込みに失敗した場合も、本文の作成を省略しないでください。まずガイダンスを読み込み、その後、実際の本文を作成します。

次に、スペースの指示を読み込みます。 スペースには、作成時の既定の指針よりも優先され、競合する場合はこれを上書きする、継続的に適用される作成ガイダンスが設定されていることがあります。次の判断ルールに従ってください。

  1. 対象スペース内のコンテンツに対する getConfluenceContent 呼び出しで、metadata.hasSpaceInstructions=false が返された場合に限り、このステップを省略します。
  2. それ以外の場合(値が true または不明の場合)は、作成前に getConfluenceSpace を 1 回呼び出します。
executeRead(   # or execute(...) if your client exposes a single execute tool
    name="getConfluenceSpace",
    cloudId="...",
    inputs={"spaceIdOrKey": "[space ID or key]"}
)
  1. 返された spaceInstructions を適用します。成功したレスポンスにこれが含まれていない場合は、指示が設定されていないため、既定の設定で作成し、処理を止めないでください。

このタスクの残りの作業では、結果を再利用してください。同じスペースに対して getConfluenceSpace を再度呼び出したり、その後に別途 getConfluenceSpaceInstructions を呼び出したりしないでください。

ページの作成:

createConfluenceContent(
    cloudId="[obtained from listConfluenceSpaces or URL]",
    parent={"spaceId": "[numerical space ID]"},
    contentType="page",
    title="[Project Name] - Status Report - [Date]",
    body={"format": "markdown", "value": "[formatted report]"}
)

既存のページの下にレポートを配置するには、parent に parentContentId を追加します。

    parent={"spaceId": "[numerical space ID]", "parentContentId": "[parent page ID]"},

タイトル形式の例:

  • "Project Phoenix - 週次ステータス - 2025年12月3日"
  • "Engineering スプリント 23 - ステータスレポート"
  • "第4四半期の取り組み - ステータス更新 - 第49週"

本文の書式設定: レポートの内容を Markdown で記述し、getContentFormatGuide から返された仕様に従って、body={"format": "markdown", "value": ...} として渡します。次を使用します。

  • 構成には見出し(#、##、###)
  • リストには箇条書き
  • 強調には太字(**text**)
  • 必要に応じて指標を表で表示
  • Jira 課題へのリンク:[PROJ-123](https://yourinstance.atlassian.net/browse/PROJ-123)

ベストプラクティス:

  • レポートの日付を目立つように記載する
  • 関連する Jira 課題に直接リンクする
  • 定期レポートでは一貫した命名規則を使用する
  • 整理しやすいように、「ステータスレポート」親ページの下に作成することを検討する
適切なスペースを見つける

ユーザーが Confluence スペースを指定しない場合:

  1. listConfluenceSpaces を使用して、利用可能なスペースの一覧を取得します。これはプライマリツールではないため、execute 経由で実行します:executeRead(name="listConfluenceSpaces", cloudId="...")
  2. プロジェクトに関連するスペース(プロジェクト名またはキーが一致するもの)を探します
  3. 判断が難しい場合は、どのスペースを使用するかユーザーに尋ねます
  4. 最も関連性の高いチームまたはプロジェクトのスペースに作成することを既定とします
既存レポートの更新

新規作成ではなく既存のページを更新する場合:

  1. 現在のページの内容を取得します。detail="full" で本文が返されます(既定の summary ではタイトル、抜粋、件数のみが返されます)。また、doc-type のレスポンスには、更新時に渡す必要がある snapshotToken と、ステップ 3 で使用する metadata.hasSpaceInstructions が含まれます。
getConfluenceContent(
    cloudId="...",
    content_id="123456",
    content_format="markdown",
    detail="full",
    include_metadata=True
)
  1. 編集用の作成ガイダンスを読み込みます(toolName は呼び出すツールではなく、コンテンツキーです)。
executeRead(   # or execute(...) if your client exposes a single execute tool
    name="getContentFormatGuide",
    inputs={"toolName": "updateConfluencePage"}
)
  1. ステップ 1 で metadata.hasSpaceInstructions=false が返されていない場合は、スペースの指示を読み込みます。このタスク中にこのスペースの指示をすでに読み込んでいる場合は、その結果を再利用します。
executeRead(   # or execute(...) if your client exposes a single execute tool
    name="getConfluenceSpace",
    cloudId="...",
    inputs={"spaceIdOrKey": "[space ID or key]"}
)
  1. 新しい内容でページを更新します。ドキュメントの編集には snapshotToken が必須です。ステップ 1 のレスポンスに含まれる値を渡してください。省略すると更新に失敗します。
updateConfluenceContent(
    cloudId="...",
    contentId="123456",
    snapshotToken="[snapshotToken from the step 1 response]",
    body={"format": "markdown", "value": "[updated report content]"},
    versionMessage="Updated with latest status - Dec 8, 2025"
)

同時実行に関する注意:snapshotToken は、編集対象を読み取ったバージョンに固定します。編集間で古いトークンを再利用しないでください。更新の前に、getConfluenceContent でコンテンツを再取得してください。

完全なワークフロー例

ユーザーのリクエスト:「Project Phoenix のステータスレポートを作成して、Confluence に公開してください」

ステップ 1 - 対象範囲を特定する:

  • プロジェクト:Phoenix(プロジェクトキーを確認する必要があります)
  • 期間:先週(デフォルト)
  • 対象読者:指定なし。経営層向けと想定します
  • 公開先:Confluence。適切なスペースを確認する必要があります

ステップ 2 - Jira にクエリする:

# Find project key first
searchJiraIssuesUsingJql(
    cloudId="...",
    jql='project = "PHOENIX" OR project = "PHX"',
    maxResults=1
)

# Query completed issues
searchJiraIssuesUsingJql(
    cloudId="...",
    jql='project = "PHX" AND status = Done AND resolved >= -7d',
    maxResults=50
)

# Query blocked issues
searchJiraIssuesUsingJql(
    cloudId="...",
    jql='project = "PHX" AND status = Blocked',
    maxResults=50
)

# Query in-progress high priority
searchJiraIssuesUsingJql(
    cloudId="...",
    jql='project = "PHX" AND status IN ("In Progress", "In Review") AND priority IN (Highest, High)',
    maxResults=50
)

ステップ 3 - 分析する:

  • 完了した課題は 15 件(指標)
  • 重大なブロッカーは 3 件(重要なインサイト)
  • 主な成果:API 統合が完了(注目点)

ステップ 4 - 形式を整える: テンプレートの「エグゼクティブサマリー形式」を使用します。指標、ハイライト、ブロッカーを含む簡潔なレポートを作成します。

ステップ 5 - 公開する:

# Find appropriate space (not a primary tool - run it through execute)
executeRead(name="listConfluenceSpaces", cloudId="...")

# Load authoring guidance before composing the body
executeRead(name="getContentFormatGuide", inputs={"toolName": "createConfluencePage"})

# Load space instructions (skip only if hasSpaceInstructions was false for this space)
executeRead(name="getConfluenceSpace", cloudId="...", inputs={"spaceIdOrKey": "PHX"})

# Create page
createConfluenceContent(
    cloudId="...",
    parent={"spaceId": "12345"},
    contentType="page",
    title="Project Phoenix - Weekly Status - Dec 3, 2025",
    body={"format": "markdown", "value": "[formatted markdown report]"}
)

レポートの品質を高めるヒント

データに基づく内容にする:

  • 具体的な数値と指標を含めます
  • 課題キーを直接参照します
  • 可能であれば傾向を示します(例:「先週の 12 件に対し、今週は 15 件を完了」)

重要な情報を強調する:

  • 最も重要な情報を最初に伝えます
  • ブロッカーを目立つように示します
  • 重要な成果を称えます

実行につなげる:

  • ブロッカーについて、必要な対応と担当者を明記します
  • リスクについて、軽減策の選択肢を提示します
  • 優先事項について、次のステップを具体的に示します

一貫性を保つ:

  • 定期レポートには同じ形式を使用します
  • 予測しやすい構成を維持します
  • 週ごとに比較できる指標を含めます

背景情報を提供する:

  • 詳細を確認できるよう、Jira へのリンクを記載します
  • ブロッカーの影響を説明します
  • 可能であれば、作業をビジネス目標に結び付けます

リソース

scripts/jql_builder.py

JQL クエリをプログラムで構築するための Python ユーティリティです。複雑なクエリや動的なクエリを作成する必要がある場合に使用します。JQL 文字列を手作業で連結するのではなく、ヘルパー関数をインポートして使用してください。

references/jql-patterns.md

ステータスレポートでよく使われる JQL クエリパターンのクイックリファレンスです。標準的なクエリを使う場合や、カスタムクエリを作成する際の出発点として使用してください。

references/report-templates.md

さまざまなレポートの種類や対象読者向けの詳細なテンプレートです。レポートに適した形式と構成を選ぶ際に参照してください。


主要ツール以外のツールを呼び出す

Atlassian Rovo MCP サーバーでは、主要ツールの限られたセットのみがツールリストに直接表示されます。それ以外のツールはカタログにあり、メタツールを通じて呼び出します。

  • discover — 操作名が分からない場合は、自然言語で目的を説明します。使用する正確なnameとinputsが返されます。すでに主要ツールとして利用できる操作に対しては、discoverを呼び出さないでください。
  • execute 系ツール — 名前を指定してカタログ内の操作を実行します。ツールリストを確認してください。クライアントによっては単一の**executeを公開し、別のクライアントではexecuteRead/executeWrite/executeDestructive**を公開しており、操作に対応する階層のツールを使う必要があります。引数は同一です。
executeRead(   # or execute(...) if your client exposes a single execute tool
  name="<operationName>",
  cloudId="...",
  inputs={"param": "value"}
)

重要なルール:

  • cloudIdはトップレベルの引数であり、nameやinputsと同じ階層に置きます。inputsの中には入れないでください。getContentFormatGuideなど、omitCloudIdが指定された操作ではcloudIdは不要です。
  • **inputsはフラットなオブジェクトです。**サーバーが各パラメーターをパス、クエリ、または本文に振り分けます。
  • **ライブのツールスキーマに記載された正確なパラメーター名を使用してください。**認識されないパラメーターはエラーとして報告されずに破棄されるため、名前が間違っていてもエラーは発生しません。呼び出しは成功しますが、指定した値は無視されます。不明な場合は、まずスキーマまたはdiscoverの結果を確認してください。
  • 呼び出しで不明な操作が報告された場合は、異なるキーワードでdiscoverを実行し、推測するのではなく、返された名前を使用してください。

コメント