Contract Analysis
SkillDev toolsAnalyze contracts for key terms, obligations, risks, renewal dates, and compliance requirements with metadata extraction and clause flagging
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Contract Analysis skill
What this skill tells your AI
The instructions your AI receives, as published by happy-technologies-llc/happy-platform-skills in skills/legal/contract-analysis/SKILL.md and read by ahel’s review.
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_contractand associated legal cases fromsn_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, orsn_legal_admin - Access: Read access to
ast_contract,sn_legal_case,sn_legal_task, andsys_attachmenttables - 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:
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:
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:
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:
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:
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:
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 requestslegal/contract-obligation-extraction- Extract specific obligations from contractslegal/legal-matter-summarization- Summarize legal matters linked to contractsdocument/document-extraction- Extract structured data from contract documentsdocument/smart-documents- Manage contract templates and generation
Signals
- GitHub stars
- 37
- Forks
- 13
- Last commit
- Jul 2026
Advanced
- Catalog kind
- skill
- Gateway key
contract-analysis- Source
- github.com/happy-technologies-llc/happy-platform-skills