mcpField
C
contract-metadata-extraction

contract-metadata-extraction

github.com/happy-technologies-llcドキュメント4141 回インストール2 日前に更新
リポジトリ

contract-metadata-extraction について

ServiceNow Contract Lifecycle Managementの契約から構造化メタデータを抽出・記録するスキルです。新規契約、契約ポートフォリオの監査、更新、デューデリジェンス、移行を扱う契約管理者や法務チーム向けです。

主な機能

  1. 01契約当事者、日付、連絡先の抽出
  2. 02財務条件と更新条件の記録
  3. 03準拠法と紛争条項の特定
  4. 04義務とコンプライアンス要件の整理
  5. 05契約メタデータ項目の入力

活用シーン

  1. 01契約のアップロード後にメタデータを入力
  2. 02ポートフォリオ内の欠落項目を監査
  3. 03契約日付に基づく更新ダッシュボードの準備
  4. 04デューデリジェンスや移行用の契約一覧作成

MCP 対応

ServiceNow MCPツールによる契約・文書の取得、義務の照会、レコード作成、契約メタデータの更新方法を説明します。

インストール

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

$npx skills add https://github.com/happy-technologies-llc/happy-platform-skills --skill contract-metadata-extraction

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

詳細

契約メタデータの抽出

概要

このスキルでは、ServiceNow Contract Lifecycle Management(CLM)の契約から構造化メタデータを抽出します。以下の内容を扱います。

  • 契約レコードから契約当事者、署名者、主要な連絡先を特定する
  • 発効日、満了日、更新期間を抽出する
  • 総額、支払いスケジュール、料金の引き上げなどの金銭条件を記録する
  • 通知期間の要件や解約可能期間を含む自動更新条項を解析する
  • 準拠法の管轄、紛争解決、裁判地に関する規定を特定する
  • 責任者、期限、コンプライアンス要件とともに義務を一覧化する
  • ポートフォリオ全体のレポート作成に向けて、契約レコードのメタデータフィールドに値を設定する

次の場合に使用します:

  • 新しい契約をアップロードした後、メタデータを設定する必要がある場合
  • すべてのレコードで一貫したメタデータが求められる契約ポートフォリオ監査の実施時
  • 更新ダッシュボードを作成する際に、日付や契約期間を正確に抽出する必要がある場合
  • M&A のデューデリジェンスに向けて、契約の一覧を迅速に作成する場合
  • レガシーシステムから ServiceNow に契約を移行する場合

前提条件

  • ロール: contract_manager、sn_clm.admin、sn_legal_case_manager、または admin
  • プラグイン: com.sn_clm(Contract Lifecycle Management)、com.snc.contract_management(Contract Management)
  • アクセス権: ast_contract、clm_contract_doc、clm_obligation、sys_attachment テーブルへの読み取り/書き込みアクセス
  • 知識: 契約の構成、法律用語、組織の契約メタデータ分類体系に関する理解

主な CLM テーブル

テーブル用途主なフィールド
ast_contractマスター契約レコードnumber、short_description、vendor、contract_type、starts、ends、renewal_date、payment_amount、total_cost、auto_renew、notice_period、governing_law
clm_contract_doc契約文書のバージョンcontract、document_version、status、doc_type、effective_date、content
clm_obligation契約上の義務contract、short_description、obligation_type、responsible_party、due_date、state、compliance_status、clause_reference
clm_clause契約条項ライブラリname、clause_type、content、category、standard、risk_level
sys_attachment文書の添付ファイルtable_name、table_sys_id、file_name、content_type、size_bytes
core_company当事者/ベンダーのレコードname、vendor_type、primary_contact、city、state、country

手順

ステップ 1:契約レコードを取得する

既存のメタデータを含む基本契約レコードを取得します。

MCP を使用(Claude Code/Desktop):

Tool: SN-Get-Record
Parameters:
  table_name: ast_contract
  sys_id: [contract_sys_id]
  fields: sys_id,number,short_description,description,contract_type,vendor,starts,ends,renewal_date,payment_amount,total_cost,state,terms_and_conditions,auto_renew,notice_period,assigned_to,department,contract_administrator,parent_contract,governing_law,currency,payment_terms,subcontracting_allowed

REST API を使用:

GET /api/now/table/ast_contract/[contract_sys_id]?sysparm_fields=sys_id,number,short_description,description,contract_type,vendor,starts,ends,renewal_date,payment_amount,total_cost,state,terms_and_conditions,auto_renew,notice_period,assigned_to,department,contract_administrator,parent_contract,governing_law,currency,payment_terms&sysparm_display_value=true
ステップ 2:契約文書を取得する

内容分析のため、関連する契約文書と添付ファイルを取得します。

MCP を使用:

Tool: SN-Query-Table
Parameters:
  table_name: clm_contract_doc
  query: contract=[contract_sys_id]^ORDERBYDESCdocument_version
  fields: sys_id,document_version,status,doc_type,effective_date,content,file_name
  limit: 10

REST API を使用:

GET /api/now/table/clm_contract_doc?sysparm_query=contract=[contract_sys_id]^ORDERBYDESCdocument_version&sysparm_fields=sys_id,document_version,status,doc_type,effective_date,content,file_name&sysparm_limit=10

添付ファイルを取得:

Tool: SN-Query-Table
Parameters:
  table_name: sys_attachment
  query: table_name=ast_contract^table_sys_id=[contract_sys_id]
  fields: sys_id,file_name,content_type,size_bytes,sys_created_on
  limit: 20
ステップ 3:当事者情報を抽出する

すべての契約当事者、署名者、主要な連絡先を特定します。

MCP を使用:

Tool: SN-Query-Table
Parameters:
  table_name: core_company
  query: sys_id=[vendor_sys_id]
  fields: sys_id,name,vendor_type,primary_contact,street,city,state,country,phone,website,stock_symbol,parent
  limit: 1

REST API を使用:

GET /api/now/table/core_company/[vendor_sys_id]?sysparm_fields=sys_id,name,vendor_type,primary_contact,street,city,state,country,phone,website&sysparm_display_value=true
ステップ 4:義務を抽出して一覧化する

既存の義務を照会するか、契約の分析結果から作成します。

MCP を使用:

Tool: SN-Query-Table
Parameters:
  table_name: clm_obligation
  query: contract=[contract_sys_id]^active=true
  fields: sys_id,short_description,obligation_type,responsible_party,due_date,state,compliance_status,clause_reference,frequency,penalty
  limit: 50

REST API を使用:

GET /api/now/table/clm_obligation?sysparm_query=contract=[contract_sys_id]^active=true&sysparm_fields=sys_id,short_description,obligation_type,responsible_party,due_date,state,compliance_status,clause_reference,frequency&sysparm_limit=50&sysparm_display_value=true
ステップ 5:メタデータ抽出レポートを作成する

包括的なメタデータ抽出を生成する:

Tool: SN-Execute-Background-Script
Parameters:
  script: |
    var contractNumber = 'CON0045678'; // Replace with target contract
    var gr = new GlideRecord('ast_contract');
    gr.addQuery('number', contractNumber);
    gr.query();

    if (gr.next()) {
      var metadata = {
        extraction_date: new GlideDateTime().toString(),
        contract_id: gr.number.toString(),
        parties: {
          buyer: {
            name: gs.getProperty('glide.servlet.uri', 'Your Organization'),
            contact: gr.contract_administrator.getDisplayValue()
          },
          vendor: {
            name: gr.vendor.getDisplayValue(),
            contact: ''
          }
        },
        dates: {
          effective_date: gr.starts.toString(),
          expiration_date: gr.ends.toString(),
          renewal_date: gr.renewal_date.toString(),
          execution_date: gr.sys_created_on.toString()
        },
        financials: {
          total_value: gr.total_cost.toString(),
          payment_amount: gr.payment_amount.toString(),
          currency: gr.currency.getDisplayValue() || 'USD',
          payment_terms: gr.payment_terms.getDisplayValue() || 'Not specified'
        },
        renewal: {
          auto_renew: gr.auto_renew.toString() == 'true',
          notice_period_days: gr.notice_period.toString() || 'Not specified',
          notice_deadline: ''
        },
        governing_law: gr.governing_law.getDisplayValue() || 'Not specified',
        contract_type: gr.contract_type.getDisplayValue(),
        state: gr.state.getDisplayValue(),
        obligations: [],
        metadata_completeness: 0
      };

      // Calculate notice deadline
      if (metadata.renewal.auto_renew && gr.ends.toString() && gr.notice_period.toString()) {
        var endDate = new GlideDateTime(gr.ends.toString());
        var noticeDays = parseInt(gr.notice_period.toString()) || 0;
        endDate.addDaysUTC(-noticeDays);
        metadata.renewal.notice_deadline = endDate.toString();
      }

      // Get vendor contact
      var vendor = new GlideRecord('core_company');
      if (vendor.get(gr.vendor.toString())) {
        metadata.parties.vendor.contact = vendor.primary_contact.getDisplayValue();
      }

      // Get obligations
      var obl = new GlideRecord('clm_obligation');
      obl.addQuery('contract', gr.sys_id.toString());
      obl.addQuery('active', true);
      obl.query();
      while (obl.next()) {
        metadata.obligations.push({
          description: obl.short_description.toString(),
          type: obl.obligation_type.getDisplayValue(),
          responsible: obl.responsible_party.getDisplayValue(),
          due_date: obl.due_date.toString(),
          status: obl.compliance_status.getDisplayValue()
        });
      }

      // Metadata completeness score
      var fields = ['total_cost', 'starts', 'ends', 'vendor', 'contract_type', 'governing_law', 'notice_period', 'payment_terms'];
      var filled = 0;
      for (var i = 0; i < fields.length; i++) {
        if (gr.getValue(fields[i])) filled++;
      }
      metadata.metadata_completeness = Math.round((filled / fields.length) * 100);

      gs.info('CONTRACT METADATA EXTRACTION:\n' + JSON.stringify(metadata, null, 2));
    }
  description: "CLM: Extract comprehensive metadata from a contract record"
ステップ 6:分析結果から不足している義務を作成する

抽出中に見つかった義務レコードを作成する:

Tool: SN-Create-Record
Parameters:
  table_name: clm_obligation
  fields:
    contract: [contract_sys_id]
    short_description: "Annual SOC 2 Type II report delivery"
    obligation_type: vendor_obligation
    responsible_party: [vendor_sys_id]
    due_date: 2026-06-30
    frequency: annual
    clause_reference: "Section 9.3 - Audit and Compliance"
    state: active
    compliance_status: pending

REST API を使用:

POST /api/now/table/clm_obligation
Content-Type: application/json

{
  "contract": "[contract_sys_id]",
  "short_description": "Annual SOC 2 Type II report delivery",
  "obligation_type": "vendor_obligation",
  "responsible_party": "[vendor_sys_id]",
  "due_date": "2026-06-30",
  "frequency": "annual",
  "clause_reference": "Section 9.3",
  "state": "active"
}
ステップ 7:抽出したメタデータで契約レコードを更新する

契約レコードの未入力フィールドに値を設定する:

Tool: SN-Update-Record
Parameters:
  table_name: ast_contract
  sys_id: [contract_sys_id]
  data:
    governing_law: "State of Delaware, United States"
    payment_terms: "Net 30"
    notice_period: 90
    work_notes: "Metadata extraction completed. Completeness: 88%. 5 obligations cataloged. Notice deadline: 2026-09-01."

ツールの使用

操作MCP ツールREST エンドポイント
契約を読み取るSN-Get-RecordGET /api/now/table/ast_contract/{sys_id}
文書をクエリするSN-Query-TableGET /api/now/table/clm_contract_doc
義務をクエリするSN-Query-TableGET /api/now/table/clm_obligation
添付ファイルをクエリするSN-Query-TableGET /api/now/table/sys_attachment
義務を作成するSN-Create-RecordPOST /api/now/table/clm_obligation
契約を更新するSN-Update-RecordPATCH /api/now/table/ast_contract/{sys_id}
一括抽出SN-Execute-Background-ScriptPOST /api/now/table/sys_trigger

ベストプラクティス

  • 一貫した分類体系: 標準化された義務の種類と条項カテゴリーを使用して、ポートフォリオ全体の分析を可能にします
  • 完全性のスコアリング: 各契約のメタデータ完全率を追跡します。有効な契約では90%以上を目標にします
  • 更新カレンダー: 抽出した日付を基に一元化された更新カレンダーを作成し、通知期限の90日前にアラートを送信します
  • 取引先の正規化: 取引先の重複登録を防ぐため、ベンダー名がcore_companyレコードに関連付けられていることを確認します
  • バージョン管理: 常に、契約文書のうち最新の締結済みバージョンからメタデータを抽出します
  • 義務の担当者: 各義務について、責任を負う当事者(買い手またはベンダー)を明確に割り当てます
  • 財務データの標準化: ポートフォリオのレポート用に、すべての金額を単一の通貨に統一します
  • 監査証跡: 抽出を実行した担当者と日時を記録し、前提条件や曖昧な点を記載します

トラブルシューティング

契約文書の内容が空です

症状: clm_contract_docレコードは存在しますが、コンテンツフィールドがnullです 原因: 契約内容がコンテンツフィールドにインラインで格納されず、添付ファイルとして保存されている可能性があります 解決策: table_name=clm_contract_doc^table_sys_id=[doc_sys_id]を指定してsys_attachmentをクエリし、実際の文書ファイルを見つけます。

準拠法フィールドがありません

症状: ast_contractにgoverning_lawフィールドが存在しません 原因: このフィールドはカスタムで追加されたものか、jurisdictionやapplicable_lawなどの別の名前が使われている可能性があります 解決策:

Tool: SN-Discover-Table-Schema
Parameters:
  table_name: ast_contract

要素名またはラベルに「law」、「jurisdiction」、「govern」を含むフィールドを検索します。

義務の種類が想定値と一致しません

症状: 義務の種類の選択肢に、想定されるカテゴリーが含まれていません 原因: 選択肢の値は組織ごとに異なり、デフォルトとは異なる場合があります 解決策: name=clm_obligation^element=obligation_typeを指定してsys_choiceをクエリし、利用可能な選択肢を確認します。必要に応じてカスタム選択肢を追加します。

例

例1:新規契約のメタデータ入力

シナリオ: 法務アシスタントが新しいベンダー契約をアップロードし、メタデータの抽出を必要としています

Tool: SN-Get-Record
Parameters:
  table_name: ast_contract
  sys_id: abc123def456
  fields: sys_id,number,short_description,vendor,starts,ends,total_cost,auto_renew,notice_period,governing_law

抽出されたメタデータ:

  • 当事者: Acme Corp(買い手)/CloudVault Inc.(ベンダー)
  • 発効日: 2026-04-01 | 満了日: 2029-03-31
  • 総額: $450,000(年間$150,000)
  • 自動更新: あり、1年単位 | 通知期間: 60日
  • 通知期限: 2029-01-30
  • 準拠法: カリフォルニア州法
  • 主な連絡先: Jane Smith(買い手)、Bob Chen(ベンダー)
  • 登録済みの義務: 7件(ベンダー4件、買い手3件)
  • 完全率: 94%
例2:ポートフォリオ全体のメタデータ監査

シナリオ: CLM管理者がメタデータの不足している契約を特定する必要があります

Tool: SN-Query-Table
Parameters:
  table_name: ast_contract
  query: active=true^governing_lawISEMPTY^ORnotice_periodISEMPTY^ORtotal_costISEMPTY
  fields: number,short_description,vendor,starts,ends,governing_law,notice_period,total_cost
  limit: 50

結果: メタデータが不完全な有効な契約が23件あります。優先事項:6か月以内に満了し、通知期間のデータが不足している契約が8件です。

関連スキル

  • legal/contract-analysis - 契約の包括的なリスク分析
  • legal/contract-obligation-extraction - 義務の詳細な抽出と追跡
  • legal/contracts-query-enhancer - 契約検索機能の強化
  • legal/legal-matter-summarization - 契約に関する法務案件のコンテキスト
  • document/document-extraction - 添付ファイルからの文書内容の抽出

コメント