mcpField
I
itsm-incident-summarization

itsm-incident-summarization

github.com/happy-technologies-llc生産性4141 回インストール2 日前に更新
リポジトリ

itsm-incident-summarization について

ServiceNow ITSM のインシデント記録、ジャーナル、監査履歴をまとめ、引き継ぎ、クローズ、レビュー、管理層への報告に使える構造化レポートを作成するスキルです。業務影響、時系列、根本原因、解決内容を扱います。

主な機能

  1. 01インシデントの時系列作成
  2. 02業務影響と SLA の評価
  3. 03診断・修復作業の整理
  4. 04根本原因と解決内容の記録
  5. 05エグゼクティブサマリーの作成

活用シーン

  1. 01引き継ぎやクローズ用の記録整理
  2. 02重大インシデントのレビュー作成
  3. 03影響と対応状況の管理層への報告

MCP 対応

ServiceNow MCP ツールでインシデント、ジャーナル、監査履歴、関連レコードを取得し、作業メモやクローズメモに要約を記録できます。

インストール

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

$npx skills add https://github.com/happy-technologies-llc/happy-platform-skills --skill itsm-incident-summarization

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

詳細

インシデントの要約

概要

このスキルでは、ServiceNow ITSM で包括的なインシデント要約を作成するための体系的な方法を説明します。以下の内容を扱います。

  • インシデントのジャーナルエントリーと監査証跡から、時系列を作成する
  • 影響を受けたユーザーやサービス、SLA への影響など、ビジネスへの影響を評価する
  • インシデント対応中に実施した診断と修復のアクションを記録する
  • 根本原因の調査結果と解決の詳細を文書化する
  • 関係者への連絡に使用するインシデント後レポートを作成する
  • 重大インシデントレビュー向けのエグゼクティブサマリーを作成する

使用するタイミング: 引き継ぎ、クローズ、インシデント後レビュー、マネジメント報告、ナレッジ記事の作成のために、インシデントを要約する必要がある場合に使用します。特に、活動ログが大量にある重大インシデントで役立ちます。

必要なプラグイン: com.snc.incident(Incident Management)

前提条件

  • ロール: itil、incident_manager、または admin
  • アクセス権: incident、sys_journal_field、sys_audit、change_request、problem への読み取りアクセス権
  • 知識: ITIL のインシデントライフサイクル、SLA 管理、インシデント報告要件に関する知識
  • プラグイン: com.snc.incident が有効化されていること

手順

ステップ 1:インシデントレコードを取得する

全体像を把握するため、インシデントレコード全体を取得します。

MCP を使用:

Tool: SN-Get-Record
Parameters:
  table_name: incident
  sys_id: [incident_sys_id]
  fields: sys_id,number,short_description,description,state,impact,urgency,priority,category,subcategory,assignment_group,assigned_to,opened_by,opened_at,resolved_by,resolved_at,closed_at,close_code,close_notes,business_service,cmdb_ci,caller_id,contact_type,escalation,severity,reopen_count,reassignment_count,business_duration,calendar_duration

REST API を使用:

GET /api/now/table/incident/[incident_sys_id]?sysparm_fields=sys_id,number,short_description,description,state,impact,urgency,priority,category,subcategory,assignment_group,assigned_to,opened_by,opened_at,resolved_by,resolved_at,closed_at,close_code,close_notes,business_service,cmdb_ci,caller_id,contact_type,escalation,severity,reopen_count,reassignment_count,business_duration,calendar_duration&sysparm_display_value=true
ステップ 2:活動の時系列を作成する

作業メモとコメントを抽出し、時系列を作成します。

MCP を使用:

Tool: SN-Query-Table
Parameters:
  table_name: sys_journal_field
  query: element_id=[incident_sys_id]^name=incident^elementINwork_notes,comments^ORDERBYsys_created_on
  fields: sys_id,element,value,sys_created_by,sys_created_on
  limit: 100

REST API を使用:

GET /api/now/table/sys_journal_field?sysparm_query=element_id=[incident_sys_id]^name=incident^elementINwork_notes,comments^ORDERBYsys_created_on&sysparm_fields=sys_id,element,value,sys_created_by,sys_created_on&sysparm_display_value=true&sysparm_limit=100
ステップ 3:状態の変更と割り当てを追跡する

監査証跡を確認し、状態の遷移、優先度の変更、再割り当てを把握します。

MCP を使用:

Tool: SN-Query-Table
Parameters:
  table_name: sys_audit
  query: tablename=incident^documentkey=[incident_sys_id]^fieldnameINstate,priority,impact,urgency,assigned_to,assignment_group,escalation^ORDERBYsys_created_on
  fields: sys_id,fieldname,oldvalue,newvalue,user,sys_created_on
  limit: 50

REST API を使用:

GET /api/now/table/sys_audit?sysparm_query=tablename=incident^documentkey=[incident_sys_id]^fieldnameINstate,priority,impact,urgency,assigned_to,assignment_group,escalation^ORDERBYsys_created_on&sysparm_fields=sys_id,fieldname,oldvalue,newvalue,user,sys_created_on&sysparm_display_value=true&sysparm_limit=50
ステップ 4:影響を受けた CI とサービスを特定する

インシデントの影響を受けたインフラストラクチャとサービスを特定します。

MCP を使用:

Tool: SN-Query-Table
Parameters:
  table_name: task_ci
  query: task=[incident_sys_id]
  fields: sys_id,ci_item,ci_item.name,ci_item.sys_class_name,ci_item.operational_status
  limit: 20

REST API を使用:

GET /api/now/table/task_ci?sysparm_query=task=[incident_sys_id]&sysparm_fields=sys_id,ci_item,ci_item.name,ci_item.sys_class_name,ci_item.operational_status&sysparm_display_value=true&sysparm_limit=20
ステップ 5:関連レコードを確認する

関連する変更、問題、子インシデントを検索します。

MCP を使用:

Tool: SN-Query-Table
Parameters:
  table_name: change_request
  query: reason=[incident_sys_id]^ORcorrelation_id=[incident_number]
  fields: sys_id,number,short_description,state,type,start_date,end_date
  limit: 10
Tool: SN-Query-Table
Parameters:
  table_name: problem
  query: sys_id=[problem_id_from_incident]
  fields: sys_id,number,short_description,state,root_cause,fix,workaround
  limit: 5
ステップ 6:包括的な要約を作成する

すべてのデータをまとめ、構造化されたインシデント要約を作成します。

MCP を使用:

Tool: SN-Execute-Background-Script
Parameters:
  description: Generate a comprehensive incident summary
  script: |
    var incId = '[incident_sys_id]';

    var inc = new GlideRecord('incident');
    inc.get(incId);

    gs.info('=== INCIDENT SUMMARY ===');
    gs.info('Incident: ' + inc.number);
    gs.info('Title: ' + inc.short_description);
    gs.info('State: ' + inc.state.getDisplayValue());
    gs.info('Priority: ' + inc.priority.getDisplayValue() + ' (Impact: ' + inc.impact.getDisplayValue() + ' / Urgency: ' + inc.urgency.getDisplayValue() + ')');

    // Duration
    gs.info('\n--- DURATION ---');
    gs.info('Opened: ' + inc.opened_at);
    gs.info('Resolved: ' + inc.resolved_at);
    gs.info('Closed: ' + inc.closed_at);
    gs.info('Business Duration: ' + inc.business_duration.getDisplayValue());
    gs.info('Calendar Duration: ' + inc.calendar_duration.getDisplayValue());

    // Impact
    gs.info('\n--- IMPACT ---');
    gs.info('Service: ' + inc.business_service.getDisplayValue());
    gs.info('CI: ' + inc.cmdb_ci.getDisplayValue());
    gs.info('Caller: ' + inc.caller_id.getDisplayValue());

    // Get affected CI count
    var ciCount = new GlideAggregate('task_ci');
    ciCount.addQuery('task', incId);
    ciCount.addAggregate('COUNT');
    ciCount.query();
    ciCount.next();
    gs.info('Affected CIs: ' + ciCount.getAggregate('COUNT'));

    // Assignment history
    gs.info('\n--- ASSIGNMENT HISTORY ---');
    var assign = new GlideRecord('sys_audit');
    assign.addQuery('tablename', 'incident');
    assign.addQuery('documentkey', incId);
    assign.addQuery('fieldname', 'assignment_group');
    assign.orderBy('sys_created_on');
    assign.query();
    while (assign.next()) {
      gs.info(assign.sys_created_on + ': ' + assign.oldvalue + ' -> ' + assign.newvalue + ' (by ' + assign.user + ')');
    }
    gs.info('Reassignment Count: ' + inc.reassignment_count);

    // Key activities (work notes summary)
    gs.info('\n--- KEY ACTIVITIES ---');
    var notes = new GlideRecord('sys_journal_field');
    notes.addQuery('element_id', incId);
    notes.addQuery('name', 'incident');
    notes.addQuery('element', 'work_notes');
    notes.orderBy('sys_created_on');
    notes.query();

    var noteNum = 0;
    while (notes.next()) {
      noteNum++;
      var text = notes.value.toString().replace(/<[^>]*>/g, '').substring(0, 150);
      gs.info('[' + notes.sys_created_on + ' | ' + notes.sys_created_by + '] ' + text);
    }
    gs.info('Total Work Notes: ' + noteNum);

    // Resolution
    gs.info('\n--- RESOLUTION ---');
    gs.info('Close Code: ' + inc.close_code.getDisplayValue());
    gs.info('Close Notes: ' + inc.close_notes);
    gs.info('Resolved By: ' + inc.resolved_by.getDisplayValue());
    gs.info('Reopen Count: ' + inc.reopen_count);

    // Related problem
    if (inc.problem_id && inc.problem_id.toString() !== '') {
      gs.info('\n--- RELATED PROBLEM ---');
      var prob = inc.problem_id.getRefRecord();
      gs.info('Problem: ' + prob.number + ' | ' + prob.short_description);
      gs.info('Root Cause: ' + prob.root_cause);
    }
ステップ 7:エグゼクティブサマリーを作成する

経営層への報告向けに、簡潔なエグゼクティブサマリーを作成します。

エグゼクティブサマリーのテンプレート:

=== EXECUTIVE INCIDENT SUMMARY ===

INCIDENT: [Number] - [Short Description]
SEVERITY: [Priority] | STATUS: [State]
DURATION: [Business Duration]

BUSINESS IMPACT:
- Service Affected: [Business Service]
- Users Impacted: [Estimated count]
- Revenue Impact: [If applicable]

ROOT CAUSE:
[Brief root cause description]

RESOLUTION:
[Resolution summary in 1-2 sentences]

CORRECTIVE ACTIONS:
1. [Immediate fix applied]
2. [Preventive measure planned]
3. [Related change/problem raised]

TIMELINE:
[Time] - Incident detected
[Time] - Initial response
[Time] - Escalated to [team]
[Time] - Root cause identified
[Time] - Resolution applied
[Time] - Service restored
ステップ 8:要約を保存する

要約を作業メモとして投稿するか、クローズメモを更新します。

MCP を使用:

Tool: SN-Add-Work-Notes
Parameters:
  table_name: incident
  sys_id: [incident_sys_id]
  work_notes: |
    === INCIDENT SUMMARY ===
    [Generated summary content]

    Timeline: [X] key events over [Y] hours
    Reassignments: [count]
    Work Notes: [count] entries
    Related: [Problem/Change numbers]

ツールの使用方法

MCP ツールのリファレンス
ツール使用するタイミング
SN-Get-Recordインシデントレコード全体を取得する
SN-Query-Tableジャーナルエントリー、監査証跡、関連レコード、影響を受けた CI を検索する
SN-Natural-Language-Search類似するインシデントや関連ナレッジを検索する
SN-Update-Record要約でクローズメモを更新する
SN-Add-Work-Notes要約を作業メモとして投稿する
SN-Execute-Background-Script複数のソースを用いた包括的な要約を作成する
REST API リファレンス
エンドポイントメソッド目的
/api/now/table/incidentGET/PATCHインシデントを読み取り、クローズメモを更新する
/api/now/table/sys_journal_fieldGET作業メモとコメントを抽出する
/api/now/table/sys_auditGET状態の変更と割り当てを追跡する
/api/now/table/task_ciGET影響を受けた CI を特定する
/api/now/table/change_requestGET関連する変更を検索する
/api/now/table/problemGET関連する問題を検索する

ベストプラクティス

  • 理由を記録する: 起きたことだけでなく、なぜその判断が下されたのかに焦点を当てます。これはインシデント後のレビューで非常に重要です
  • 影響を定量化する: 影響を受けたユーザー数、ダウンタイムの長さ、SLA への影響率などの指標を含めます
  • 関連レコードをリンクする: 追跡可能性を確保するため、関連する問題、変更、ナレッジ記事を必ず参照します
  • 段階的に要約する: 長期化するインシデントでは、重要な節目ごとに中間要約を作成します
  • 一貫した形式を使用する: 組織全体で要約テンプレートを標準化し、比較しやすくします
  • すべてにタイムスタンプを付ける: 正確なタイムスタンプにより、SLA の正確な計算とタイムラインの再構築が可能になります

トラブルシューティング

作業メモがない、または不完全

原因: エージェントが作業メモではなくコメントを使用したか、書式が異なる可能性のあるメール経由でメモが追加されています 解決策: work_notes と comments の両方の要素を照会します。メールによるやり取りがないか、sys_email を確認します。

監査証跡の欠落

原因: 一部のフィールド変更が監査対象になっていないか、監査レコードが削除されている可能性があります 解決策: インシデントテーブルの監査ポリシーを確認します。削除履歴について sys_audit_delete を確認します。ジャーナルエントリで補完します。

期間の計算が正しくない

原因: 業務時間は営業時間外を除外します。また、保留状態の間に計時が停止されている可能性があります 解決策: 経過時間の合計には calendar_duration を使用します。「ユーザー情報待ち」または「保留」状態への遷移と、そこからの遷移を確認します。

関連レコードが見つからない

原因: レコードが別のフィールドを介してリンクされているか、相関 ID が設定されていません 解決策: 変更レコードや問題レコードの short_description フィールドまたは description フィールドで、インシデント番号を検索します。correlation_id フィールドと parent_incident フィールドを確認します。

例

例 1:インシデント後レビューの要約
# 1. Get incident
Tool: SN-Get-Record
Parameters:
  table_name: incident
  sys_id: [sys_id]
  fields: number,short_description,priority,impact,opened_at,resolved_at,close_notes,business_service

# 2. Get timeline
Tool: SN-Query-Table
Parameters:
  table_name: sys_journal_field
  query: element_id=[sys_id]^name=incident^element=work_notes^ORDERBYsys_created_on
  fields: value,sys_created_by,sys_created_on
  limit: 50

# 3. Get state changes
Tool: SN-Query-Table
Parameters:
  table_name: sys_audit
  query: tablename=incident^documentkey=[sys_id]^fieldname=state^ORDERBYsys_created_on
  fields: oldvalue,newvalue,user,sys_created_on
  limit: 20
例 2:未解決の P1 インシデントの一括要約
Tool: SN-Execute-Background-Script
Parameters:
  description: Summarize all open P1 incidents
  script: |
    var gr = new GlideRecord('incident');
    gr.addQuery('priority', '1');
    gr.addQuery('active', true);
    gr.query();

    gs.info('=== OPEN P1 INCIDENT SUMMARY ===');
    gs.info('Total: ' + gr.getRowCount());

    while (gr.next()) {
      var age = gs.dateDiff(gr.opened_at.toString(), gs.nowDateTime(), true);
      gs.info(gr.number + ' | ' + gr.short_description + ' | Age: ' + age + ' | Group: ' + gr.assignment_group.getDisplayValue() + ' | Service: ' + gr.business_service.getDisplayValue());
    }
例 3:SLA への影響の要約
Tool: SN-Query-Table
Parameters:
  table_name: incident
  query: sys_id=[sys_id]
  fields: number,sla_due,made_sla,business_duration,calendar_duration,priority
  limit: 1

関連スキル

  • itsm/major-incident - 重大インシデントに特化した要約
  • itsm/problem-analysis - 要約で参照する根本原因分析
  • itsm/kb-generation - インシデントの要約をナレッジ記事に変換
  • itsm/email-recommendation - 要約に基づくコミュニケーションを関係者に送信
  • reporting/trend-analysis - 傾向レポート用にインシデントの要約を集計

参考資料

コメント