Skip to content
Back to skills

Contract Analysis Happy Technologies Llc

ASecurity

Analyze contracts for key terms, obligations, risks, renewal dates, and compliance requirements with metadata extraction and clause flagging

  • 85 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 8, 2026
ai-agentsjavascriptgojavabashgitapiperformancedocumentation

Works with

  • claude code
  • cli
  • api
  • mcp

Security analysis

A100/100

Scanned October 8, 2026

npx -y skills add ThomasMoreAI/legal-skills-open --skill contract-analysis-happy-technologies-llc --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Contract Analysis Happy Technologies Llc?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Contract Analysis Happy Technologies Llc
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/thomasmoreai-contract-analysis-happy-technologies-llc/badge)](https://www.skillsdirectory.com/skills/thomasmoreai-contract-analysis-happy-technologies-llc)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: contract-analysis-happy-technologies-llc
title: Contract Analysis
description: Analyze contracts for key terms, obligations, risks, renewal dates, and compliance requirements with metadata extraction and clause flagging
author: Happy-Technologies-LLC
author_url: https://github.com/Happy-Technologies-LLC/happy-platform-skills/tree/main/skills/legal/contract-analysis
license: Apache-2.0
version: 0.1.0
execution_mode: open
jurisdiction: general
practice: contracts
language: en
tags: [legal, contract, analysis, risk, compliance, terms, renewal, legal-service-delivery]
---

# Contract Analysis

## Overview

This skill provides a structured approach to analyzing contracts within ServiceNow Legal Service Delivery and Contract Lifecycle Management. It helps you:

- Retrieve contract records from `ast_contract` and associated legal cases from `sn_legal_case`
- Extract and catalog key terms including payment, liability, indemnification, and termination provisions
- Identify obligations and deadlines for both parties across the contract lifecycle
- Flag high-risk clauses such as unlimited liability, automatic renewal, broad IP assignment, or non-standard terms
- Track renewal dates, expiration windows, and notice period requirements
- Assess compliance requirements including regulatory, data privacy, and industry-specific mandates
- Generate structured analysis reports for legal review and business stakeholder consumption

**When to use:** When a new contract needs legal review, during contract renewal assessments, for portfolio-wide risk audits, or when business stakeholders need a plain-language summary of contractual obligations.

**Plugin required:** `com.sn_legal_service_delivery`

## Prerequisites

- **Roles:** `sn_legal_case_user`, `sn_legal_case_manager`, `contract_manager`, or `sn_legal_admin`
- **Access:** Read access to `ast_contract`, `sn_legal_case`, `sn_legal_task`, and `sys_attachment` tables
- **Knowledge:** Understanding of contract law fundamentals, your organization's standard contract terms, and risk tolerance thresholds
- **Plugin:** Legal Service Delivery (`com.sn_legal_service_delivery`) must be activated. Optional: Contract Lifecycle Management for enhanced contract metadata.

## Procedure

### Step 1: Retrieve the Contract Record

Query the contract to obtain its core metadata and current status.

**Using MCP (Claude Code/Desktop):**
```
Tool: SN-Get-Record
Parameters:
  table_name: ast_contract
  sys_id: [contract_sys_id]
  fields: sys_id,number,short_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
```

**Using REST API:**
```bash
GET /api/now/table/ast_contract/[contract_sys_id]?sysparm_fields=sys_id,number,short_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&sysparm_display_value=true
```

### Step 2: Retrieve the Contract Document

Fetch attachments to access the actual contract text for analysis.

**Using MCP:**
```
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,sys_created_by
  limit: 20
  order_by: sys_created_on
```

**Using REST API:**
```bash
GET /api/now/table/sys_attachment?sysparm_query=table_name=ast_contract^table_sys_id=[contract_sys_id]^ORDERBYDESCsys_created_on&sysparm_fields=sys_id,file_name,content_type,size_bytes,sys_created_on,sys_created_by&sysparm_limit=20
```

To download the attachment content:
```bash
GET /api/now/attachment/[attachment_sys_id]/file
```

### Step 3: Extract Key Contract Terms

Analyze the contract for the following term categories:

| Term Category | Key Fields to Extract | Risk Indicators |
|--------------|----------------------|-----------------|
| **Payment Terms** | Amount, frequency, net days, late fees, escalation | Net 15 or shorter; annual escalation > 5% |
| **Liability** | Cap amount, exclusions, consequential damages | Unlimited liability; no mutual cap |
| **Indemnification** | Scope, carve-outs, defense obligations | Broad indemnity without IP carve-out |
| **Termination** | For cause triggers, convenience period, wind-down | No termination for convenience; > 12-month lock-in |
| **Renewal** | Auto-renew, notice period, price adjustment | Auto-renew with < 60-day notice window |
| **Confidentiality** | Duration, scope, permitted disclosures | Perpetual confidentiality; no carve-outs |
| **IP Rights** | Ownership, license grants, work product | Broad IP assignment to vendor; no license-back |
| **Data Privacy** | Data handling, breach notification, DPA | No DPA; breach notification > 72 hours |
| **SLA/Performance** | Uptime, response times, credits, remedies | No SLA credits; no termination for chronic failure |
| **Governing Law** | Jurisdiction, dispute resolution, venue | Foreign jurisdiction; mandatory arbitration |

### Step 4: Assess Risk Level

Score each term category and compute an overall contract risk level:

**Risk scoring framework:**
- **Low (1):** Term aligns with organizational standards, no deviation
- **Medium (2):** Minor deviation from standard; acceptable with documentation
- **High (3):** Significant deviation; requires senior counsel approval
- **Critical (4):** Unacceptable term; must be renegotiated before execution

**Overall risk calculation:**
- Any single Critical (4) score = Overall Critical
- Average score >= 3.0 = Overall High
- Average score >= 2.0 = Overall Medium
- Average score < 2.0 = Overall Low

### Step 5: Check for Related Legal Cases and Matters

Query for any existing legal activity related to this contract or vendor.

**Using MCP:**
```
Tool: SN-Query-Table
Parameters:
  table_name: sn_legal_case
  query: short_descriptionLIKE[vendor_name]^ORdescriptionLIKE[contract_number]
  fields: sys_id,number,short_description,state,case_type,priority,assigned_to,resolution_notes
  limit: 10
```

**Using REST API:**
```bash
GET /api/now/table/sn_legal_case?sysparm_query=short_descriptionLIKE[vendor_name]^ORdescriptionLIKE[contract_number]&sysparm_fields=sys_id,number,short_description,state,case_type,priority,assigned_to,resolution_notes&sysparm_limit=10&sysparm_display_value=true
```

### Step 6: Flag Concerning Clauses

Create legal tasks for each clause that requires attention or renegotiation.

**Using MCP:**
```
Tool: SN-Create-Record
Parameters:
  table_name: sn_legal_task
  fields:
    short_description: "Review unlimited liability clause - Section 8.2"
    description: "Contract [contract_number] contains an unlimited liability provision in Section 8.2. Organization standard requires liability cap at 12 months of fees. Recommend renegotiation to add mutual liability cap."
    legal_case: [case_sys_id]
    priority: 2
    task_type: contract_review
    assigned_to: [counsel_sys_id]
    due_date: [review_deadline]
    state: 1
```

**Using REST API:**
```bash
POST /api/now/table/sn_legal_task
Content-Type: application/json

{
  "short_description": "Review unlimited liability clause - Section 8.2",
  "description": "Contract contains unlimited liability. Standard requires cap at 12 months of fees.",
  "legal_case": "[case_sys_id]",
  "priority": "2",
  "task_type": "contract_review",
  "assigned_to": "[counsel_sys_id]",
  "due_date": "[review_deadline]",
  "state": "1"
}
```

### Step 7: Generate the Contract Analysis Report

Document the complete analysis as work notes on the legal case.

**Using MCP:**
```
Tool: SN-Add-Work-Notes
Parameters:
  table_name: sn_legal_case
  sys_id: [case_sys_id]
  work_notes: |
    === CONTRACT ANALYSIS REPORT ===
    Contract: [contract_number] - [short_description]
    Vendor: [vendor_name]
    Analyst: AI Contract Analyst
    Date: [current_date]

    CONTRACT OVERVIEW:
    - Type: [contract_type]
    - Effective: [start_date] to [end_date]
    - Total Value: $[total_cost]
    - Auto-Renewal: [Yes/No] | Notice Period: [notice_period] days
    - Governing Law: [jurisdiction]

    KEY TERMS SUMMARY:
    1. Payment: [payment_summary]
    2. Liability Cap: [liability_summary]
    3. Indemnification: [indemnity_summary]
    4. Termination: [termination_summary]
    5. Data Privacy: [privacy_summary]
    6. IP Rights: [ip_summary]
    7. SLA/Performance: [sla_summary]

    RISK ASSESSMENT:
    - Overall Risk Level: [HIGH/MEDIUM/LOW]
    - Critical Issues: [count]
    - High-Risk Items: [count]

    FLAGGED CLAUSES:
    1. [CRITICAL] Section 8.2 - Unlimited liability (standard: 12-month cap)
    2. [HIGH] Section 12.1 - Auto-renew with 30-day notice (standard: 90 days)
    3. [HIGH] Section 15.3 - No DPA attached (required for data processing)
    4. [MEDIUM] Section 6.4 - IP assignment broader than industry standard

    COMPLIANCE REQUIREMENTS:
    - GDPR: [compliant/non-compliant] - [details]
    - SOC 2: [compliant/non-compliant] - [details]
    - Industry-specific: [details]

    RECOMMENDED ACTIONS:
    1. Renegotiate liability cap to 12 months of annual fees
    2. Extend auto-renewal notice period to 90 days
    3. Execute Data Processing Agreement before contract signing
    4. Narrow IP assignment clause to deliverables only

    RENEWAL CALENDAR:
    - Contract Expires: [end_date]
    - Renewal Decision Deadline: [notice_date]
    - Days Until Notice Required: [days_remaining]
```

### Step 8: Update Contract Metadata

Record analysis results back to the contract record for portfolio tracking.

**Using MCP:**
```
Tool: SN-Update-Record
Parameters:
  table_name: ast_contract
  sys_id: [contract_sys_id]
  data:
    risk_level: high
    review_date: [current_date]
    short_description: "[original_description] [REVIEWED]"
    work_notes: "Legal analysis completed. Risk level: HIGH. 4 flagged clauses require renegotiation. See legal case [case_number] for full analysis."
```

**Using REST API:**
```bash
PATCH /api/now/table/ast_contract/[contract_sys_id]
Content-Type: application/json

{
  "risk_level": "high",
  "review_date": "[current_date]",
  "work_notes": "Legal analysis completed. Risk level: HIGH. 4 flagged clauses."
}
```

## Tool Usage

### MCP Tools Reference

| Tool | When to Use |
|------|-------------|
| `SN-Natural-Language-Search` | Find contracts by vendor name, type, or description |
| `SN-Query-Table` | Structured queries for contracts, cases, tasks, attachments |
| `SN-Get-Record` | Retrieve a single contract or case by sys_id |
| `SN-Create-Record` | Create legal tasks for flagged clauses |
| `SN-Update-Record` | Update contract risk level and review metadata |
| `SN-Add-Work-Notes` | Post the analysis report to the legal case |

### REST API Reference

| Endpoint | Method | Purpose |
|----------|--------|---------|
| `/api/now/table/ast_contract` | GET | Query contracts |
| `/api/now/table/ast_contract/{sys_id}` | GET/PATCH | Read or update a contract |
| `/api/now/table/sn_legal_case` | GET/POST | Query or create legal cases |
| `/api/now/table/sn_legal_task` | POST | Create review tasks for flagged clauses |
| `/api/now/table/sys_attachment` | GET | Retrieve contract document attachments |
| `/api/now/attachment/{sys_id}/file` | GET | Download attachment content |

## Best Practices

- **Use playbooks:** Maintain standard analysis templates for each contract type (SaaS, professional services, NDA, license) to ensure consistency
- **Compare to standards:** Always compare terms against your organization's approved contract templates and fallback positions
- **Track deviations:** Document every deviation from standard terms, even if accepted, for portfolio-wide risk visibility
- **Set renewal alerts:** Create calendar reminders at least 90 days before auto-renewal notice deadlines
- **Cross-reference vendors:** Check for other active contracts with the same vendor to identify aggregate exposure
- **Privilege protection:** Mark all analysis work notes as Attorney-Client Privileged; do not share raw analysis with non-legal staff
- **Regulatory awareness:** Always check for jurisdiction-specific requirements (GDPR for EU vendors, CCPA for California, etc.)
- **Version tracking:** Note which version of the contract was analyzed; flag if amendments or side letters exist

## Troubleshooting

### "Contract record not found in ast_contract"

**Cause:** The contract may be stored in a different table depending on your CLM configuration
**Solution:** Check `clm_contract_document`, `sn_sm_contract`, or custom contract tables. Query `sys_db_object` with `nameLIKEcontract` to find all contract-related tables.

### "Cannot access contract attachment"

**Cause:** Attachment ACLs restrict access, or the document is stored externally
**Solution:** Verify you have the `itil` or `contract_manager` role. Check if the contract references an external URL field for document storage.

### "Risk level field not available on ast_contract"

**Cause:** The field may be a custom addition or part of an optional plugin
**Solution:** Query `sys_dictionary` with `name=ast_contract^elementLIKErisk` to find available risk-related fields. Create a custom field if needed.

### "Renewal date calculation seems incorrect"

**Cause:** Auto-renewal logic may depend on custom business rules or the `notice_period` field format
**Solution:** Verify the `notice_period` field stores days (not months). Check business rules on `ast_contract` that compute renewal dates: `sys_script` with `collection=ast_contract^scriptLIKErenewal`.

## Examples

### Example 1: SaaS Vendor Agreement Review

**Input:** Contract CON0045678 - "Enterprise SaaS Platform - 3-year agreement with DataCorp"

**Analysis:**
- Total value: $1.2M over 3 years
- Auto-renew: Yes, 30-day notice (flagged: below 90-day standard)
- Liability: Capped at 12 months fees (acceptable)
- SLA: 99.9% uptime with credits (acceptable)
- Data privacy: No DPA included (critical: required for GDPR)
- Overall risk: HIGH (missing DPA)

**Action:** Create legal task to draft and execute DPA before contract signing.

### Example 2: NDA Review

**Input:** Contract CON0045679 - "Mutual NDA with AcquiCo for M&A due diligence"

**Analysis:**
- Duration: 3 years with 2-year survival after termination
- Scope: Appropriately limited to transaction evaluation
- Residual knowledge clause: Present (medium risk)
- Non-solicitation: 18-month rider attached (needs review)
- Overall risk: MEDIUM

**Action:**
```
Tool: SN-Update-Record
Parameters:
  table_name: ast_contract
  sys_id: def456abc...
  data:
    risk_level: medium
    review_date: 2026-03-19
    work_notes: "NDA reviewed. Medium risk. Residual knowledge clause and non-solicitation rider flagged for counsel review."
```

### Example 3: Contract Portfolio Risk Audit

**Input:** "Analyze all contracts expiring in the next 90 days"

**Query:**
```
Tool: SN-Query-Table
Parameters:
  table_name: ast_contract
  query: active=true^endsBETWEENjavascript:gs.beginningOfToday()@javascript:gs.daysAgoEnd(-90)
  fields: sys_id,number,short_description,vendor,ends,auto_renew,notice_period,total_cost,risk_level
  limit: 50
  order_by: ends
```

**Result:** 12 contracts expiring, 4 with auto-renew requiring notice within 30 days, 2 with no documented risk assessment. Prioritize these 6 for immediate review.

## Related Skills

- `legal/legal-request-triage` - Triage incoming contract review requests
- `legal/contract-obligation-extraction` - Extract specific obligations from contracts
- `legal/legal-matter-summarization` - Summarize legal matters linked to contracts
- `document/document-extraction` - Extract structured data from contract documents
- `document/smart-documents` - Manage contract templates and generation

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.