ServiceNow Application Summary
Overview
This skill covers generating comprehensive summaries of existing ServiceNow applications, including:
- Application scope and metadata analysis
- Table structure and data model documentation
- Script inventory (business rules, client scripts, script includes, UI actions)
- ACL and role analysis
- Dependency and integration mapping
- Configuration artifact inventory
- Application health and complexity assessment
When to use: During application portfolio reviews, before upgrades or migrations, for developer onboarding, documentation generation, technical debt assessment, or when evaluating applications for consolidation.
Prerequisites
- Roles:
admin,application_developer, or read access to sys_scope and sys_metadata - Access: sys_scope, sys_app, sys_metadata, sys_db_object, sys_dictionary, sys_script tables
- Knowledge: ServiceNow application model, scoped application structure
- Related Skills: Complete
genai/app-generationfor context on application structure
Procedure
Step 1: Identify the Application
Find application by name:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_scope
query: nameLIKE[app_name]^active=true
fields: sys_id,name,scope,short_description,version,vendor,vendor_prefix,sys_created_on,sys_updated_on
limit: 10
REST Alternative:
curl -u "$SN_USER:$SN_PASS" \
"$SN_INSTANCE/api/now/table/sys_scope?sysparm_query=nameLIKE[app_name]^active=true&sysparm_fields=sys_id,name,scope,short_description,version,vendor&sysparm_limit=10" \
-H "Accept: application/json"
List all custom scoped applications:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_scope
query: scopeSTARTSWITHx_^active=true
fields: sys_id,name,scope,version,vendor,sys_created_on
limit: 100
Step 2: Get Application Metadata
Retrieve full application details:
MCP Approach:
Tool: SN-Get-Record
Parameters:
table_name: sys_scope
sys_id: [scope_sys_id]
REST Alternative:
curl -u "$SN_USER:$SN_PASS" \
"$SN_INSTANCE/api/now/table/sys_scope/[scope_sys_id]" \
-H "Accept: application/json"
Check sys_app for additional metadata:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_app
query: scope=[scope_name]
fields: sys_id,name,version,short_description,template,active
limit: 1
Step 3: Inventory All Application Artifacts
Get a count of all artifacts by type:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_metadata
query: sys_scope=[scope_sys_id]
fields: sys_id,sys_class_name,sys_name,sys_created_on
limit: 500
REST Alternative:
curl -u "$SN_USER:$SN_PASS" \
"$SN_INSTANCE/api/now/table/sys_metadata?sysparm_query=sys_scope=[scope_sys_id]&sysparm_fields=sys_id,sys_class_name,sys_name&sysparm_limit=500" \
-H "Accept: application/json"
Group the results by sys_class_name to produce an artifact summary:
Artifact Inventory:
sys_db_object (Tables): X
sys_dictionary (Fields): X
sys_script (Business Rules): X
sys_script_client (Client Scripts): X
sys_script_include (Script Includes): X
sys_ui_action (UI Actions): X
sys_ui_page (UI Pages): X
sys_security_acl (ACLs): X
sys_properties (Properties): X
sys_ui_form_section (Form Sections): X
...
Step 4: Analyze Table Structure
Get all tables in the application:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_db_object
query: sys_scope=[scope_sys_id]
fields: sys_id,name,label,super_class,is_extendable,number_ref,sys_created_on
limit: 50
For each table, get field definitions:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_dictionary
query: name=[table_name]^sys_scope=[scope_sys_id]^elementISNOTEMPTY
fields: element,column_label,internal_type,max_length,mandatory,reference,unique,active
limit: 100
REST Alternative:
curl -u "$SN_USER:$SN_PASS" \
"$SN_INSTANCE/api/now/table/sys_dictionary?sysparm_query=name=[table_name]^sys_scope=[scope_sys_id]^elementISNOTEMPTY&sysparm_fields=element,column_label,internal_type,max_length,mandatory,reference&sysparm_limit=100" \
-H "Accept: application/json"
Get table record counts (assess data volume):
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_table_rotation
query: name=[table_name]
fields: name,max_size,size
limit: 1
Step 5: Inventory Scripts
Get business rules:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_script
query: sys_scope=[scope_sys_id]
fields: sys_id,name,collection,when,order,active,action_insert,action_update,action_delete
limit: 100
Get client scripts:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_script_client
query: sys_scope=[scope_sys_id]
fields: sys_id,name,table,type,fieldname,active,ui_type
limit: 100
Get script includes:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_script_include
query: sys_scope=[scope_sys_id]
fields: sys_id,name,api_name,client_callable,active,access
limit: 100
Get UI scripts:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_ui_script
query: sys_scope=[scope_sys_id]
fields: sys_id,name,global,active,ui_type
limit: 50
Step 6: Analyze ACLs and Roles
Get application roles:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_user_role
query: sys_scope=[scope_sys_id]
fields: sys_id,name,description,assignable_by
limit: 50
Get ACL rules:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_security_acl
query: sys_scope=[scope_sys_id]^active=true
fields: sys_id,name,operation,type,admin_overrides,condition,advanced
limit: 100
REST Alternative:
curl -u "$SN_USER:$SN_PASS" \
"$SN_INSTANCE/api/now/table/sys_security_acl?sysparm_query=sys_scope=[scope_sys_id]^active=true&sysparm_fields=sys_id,name,operation,type,admin_overrides&sysparm_limit=100" \
-H "Accept: application/json"
Step 7: Map Dependencies
Check for cross-scope references in scripts:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_scope_privilege
query: source_scope=[scope_sys_id]^ORtarget_scope=[scope_sys_id]
fields: sys_id,source_scope,target_scope,type,operation,status
limit: 50
Check for integrations (REST messages, SOAP, etc.):
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_rest_message
query: sys_scope=[scope_sys_id]
fields: sys_id,name,rest_endpoint,authentication_type
limit: 20
Check for scheduled jobs:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sysauto_script
query: sys_scope=[scope_sys_id]
fields: sys_id,name,active,run_type,run_period
limit: 20
Step 8: Analyze UI Configuration
Get UI actions:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_ui_action
query: sys_scope=[scope_sys_id]^active=true
fields: sys_id,name,table,action_name,client,form_button,list_button
limit: 50
Get navigation modules:
MCP Approach:
Tool: SN-Query-Table
Parameters:
table_name: sys_app_module
query: sys_scope=[scope_sys_id]
fields: sys_id,title,link_type,name,query,order
limit: 30
Step 9: Compile the Application Summary
Generate a structured summary report:
Application Summary: [App Name]
================================================
Scope: [scope_name]
Version: [version]
Vendor: [vendor]
Created: [date] | Last Updated: [date]
Description: [short_description]
ARTIFACT INVENTORY:
Tables: [count]
Fields: [count]
Business Rules: [count] (active: X, inactive: Y)
Client Scripts: [count]
Script Includes: [count]
UI Actions: [count]
ACL Rules: [count]
Roles: [count]
Properties: [count]
Scheduled Jobs: [count]
REST Messages: [count]
Total Artifacts: [count]
TABLE STRUCTURE:
[Table 1 Name] ([Label])
- Extends: [parent table]
- Fields: [count]
- Key Fields: [list of mandatory/unique fields]
[Table 2 Name] ([Label])
...
SCRIPT INVENTORY:
Business Rules:
- [Rule Name] on [Table] ([when], order [N]) - [Active/Inactive]
Client Scripts:
- [Script Name] on [Table] ([type]) - [Active/Inactive]
Script Includes:
- [Include Name] (client_callable: [yes/no]) - [Active/Inactive]
SECURITY MODEL:
Roles:
- [Role Name]: [Description]
ACLs:
- [Table].[Operation]: [Conditions/Roles]
DEPENDENCIES:
Cross-scope references: [list]
Integrations: [list]
Scheduled Jobs: [list]
COMPLEXITY ASSESSMENT:
- Table Count: [Low/Medium/High]
- Script Density: [Low/Medium/High]
- Integration Points: [count]
- Overall Complexity: [Low/Medium/High]
Tool Usage
| Action | MCP Tool | REST Endpoint |
|---|---|---|
| Find application | SN-Query-Table | GET /api/now/table/sys_scope |
| Get app metadata | SN-Get-Record | GET /api/now/table/sys_scope/{sys_id} |
| List all artifacts | SN-Query-Table | GET /api/now/table/sys_metadata |
| Get tables | SN-Query-Table | GET /api/now/table/sys_db_object |
| Get fields | SN-Query-Table | GET /api/now/table/sys_dictionary |
| Get business rules | SN-Query-Table | GET /api/now/table/sys_script |
| Get client scripts | SN-Query-Table | GET /api/now/table/sys_script_client |
| Get script includes | SN-Query-Table | GET /api/now/table/sys_script_include |
| Get ACLs | SN-Query-Table | GET /api/now/table/sys_security_acl |
| Get roles | SN-Query-Table | GET /api/now/table/sys_user_role |
Best Practices
- Start with sys_metadata: This gives the fastest overview of all artifacts in a scope
- Group artifacts by type: Use sys_class_name to categorize and count artifacts efficiently
- Check active vs. inactive: Inactive artifacts may indicate technical debt or abandoned features
- Examine script complexity: Long scripts or high script counts suggest areas needing refactoring
- Map all integrations: Cross-scope and external integrations are critical for upgrade impact assessment
- Document undocumented apps: Many custom apps lack documentation; summaries fill this gap
- Compare versions: If multiple versions exist, compare artifact counts across versions
- Identify orphaned artifacts: Look for scripts referencing tables or fields that no longer exist
- Assess test coverage: Check for ATF (Automated Test Framework) tests within the scope
- Review update sets: Check sys_update_set for deployment history
Troubleshooting
Application Not Found
Symptom: No results when querying sys_scope Causes:
- Application is a global scope plugin, not a scoped app
- Application name differs from scope name
- Application is inactive Solution:
Tool: SN-Query-Table
Parameters:
table_name: sys_scope
query: nameLIKE[partial_name]^ORscopeLIKE[partial_name]
fields: sys_id,name,scope,active
limit: 20
Incomplete Metadata Count
Symptom: sys_metadata returns fewer artifacts than expected Cause: Some artifacts may not extend sys_metadata, or query limit is too low Solution: Increase limit and check for artifacts outside the scope:
Tool: SN-Query-Table
Parameters:
table_name: sys_metadata
query: sys_scope=[scope_sys_id]
fields: sys_id,sys_class_name
limit: 1000
Cannot Determine Table Relationships
Symptom: Reference fields exist but relationships are unclear Solution: Query sys_dictionary for reference fields specifically:
Tool: SN-Query-Table
Parameters:
table_name: sys_dictionary
query: name=[table_name]^internal_type=reference
fields: element,column_label,reference
limit: 50
Scope Privilege Errors
Symptom: Cannot access artifacts in a different scope Cause: Cross-scope access not granted Solution:
Tool: SN-Query-Table
Parameters:
table_name: sys_scope_privilege
query: target_scope=[scope_sys_id]^status=allowed
fields: source_scope,target_scope,type,operation
limit: 20
Examples
Example 1: Summarize a Custom HR Application
# Step 1: Find the application
Tool: SN-Query-Table
Parameters:
table_name: sys_scope
query: nameLIKEHR Onboarding
fields: sys_id,name,scope,version,vendor
limit: 5
# Result: sys_id = "scope123", scope = "x_acme_hr_onboard"
# Step 2: Get all artifacts
Tool: SN-Query-Table
Parameters:
table_name: sys_metadata
query: sys_scope=scope123
fields: sys_id,sys_class_name,sys_name
limit: 500
# Step 3: Get tables
Tool: SN-Query-Table
Parameters:
table_name: sys_db_object
query: sys_scope=scope123
fields: sys_id,name,label,super_class
limit: 20
# Step 4: Get scripts
Tool: SN-Query-Table
Parameters:
table_name: sys_script
query: sys_scope=scope123
fields: sys_id,name,collection,when,active
limit: 100
Example 2: Compare Two Application Versions
# Get artifacts for version 1.0
Tool: SN-Query-Table
Parameters:
table_name: sys_metadata
query: sys_scope=[scope_v1_sys_id]
fields: sys_id,sys_class_name
limit: 500
# Get artifacts for version 2.0
Tool: SN-Query-Table
Parameters:
table_name: sys_metadata
query: sys_scope=[scope_v2_sys_id]
fields: sys_id,sys_class_name
limit: 500
# Compare artifact counts by type between versions
Example 3: Identify All Applications by a Specific Vendor
Tool: SN-Query-Table
Parameters:
table_name: sys_scope
query: vendor=Happy Technologies LLC^active=true
fields: sys_id,name,scope,version,sys_created_on
limit: 50
Related Skills
genai/app-generation- Generate new applications from requirementsdevelopment/code-review- Review application scripts for qualitydevelopment/code-assist- Generate new scripts for existing applicationsadmin/update-set-management- Package and deploy applicationssecurity/acl-management- Detailed ACL analysis