Get the FREE Ultimate OpenClaw Setup Guide →
O

ServiceNow

Verified

@onlyflowstech

npx machina-cli add skill @onlyflowstech/servicenow --openclaw
Files (1)
SKILL.md
8.7 KB

ServiceNow Skill

Query and manage records on any ServiceNow instance via the REST Table API.

Setup

Set environment variables for your ServiceNow instance:

export SN_INSTANCE="https://yourinstance.service-now.com"
export SN_USER="your_username"
export SN_PASSWORD="your_password"

All tools below use scripts/sn.sh which reads these env vars.

Tools

sn_query — Query any table

bash scripts/sn.sh query <table> [options]

Options:

  • --query "<encoded_query>" — ServiceNow encoded query (e.g. active=true^priority=1)
  • --fields "<field1,field2>" — Comma-separated fields to return
  • --limit <n> — Max records (default 20)
  • --offset <n> — Pagination offset
  • --orderby "<field>" — Sort field (prefix with - for descending)
  • --display <true|false|all> — Display values mode

Examples:

# List open P1 incidents
bash scripts/sn.sh query incident --query "active=true^priority=1" --fields "number,short_description,state,assigned_to" --limit 10

# All users in IT department
bash scripts/sn.sh query sys_user --query "department=IT" --fields "user_name,email,name"

# Recent change requests
bash scripts/sn.sh query change_request --query "sys_created_on>=2024-01-01" --orderby "-sys_created_on" --limit 5

sn_get — Get a single record by sys_id

bash scripts/sn.sh get <table> <sys_id> [options]

Options:

  • --fields "<field1,field2>" — Fields to return
  • --display <true|false|all> — Display values mode

Example:

bash scripts/sn.sh get incident abc123def456 --fields "number,short_description,state,assigned_to" --display true

sn_create — Create a record

bash scripts/sn.sh create <table> '<json_fields>'

Example:

bash scripts/sn.sh create incident '{"short_description":"Server down","urgency":"1","impact":"1","assignment_group":"Service Desk"}'

sn_update — Update a record

bash scripts/sn.sh update <table> <sys_id> '<json_fields>'

Example:

bash scripts/sn.sh update incident abc123def456 '{"state":"6","close_code":"Solved (Permanently)","close_notes":"Restarted service"}'

sn_delete — Delete a record

bash scripts/sn.sh delete <table> <sys_id> --confirm

The --confirm flag is required to prevent accidental deletions.

sn_aggregate — Aggregate queries

bash scripts/sn.sh aggregate <table> --type <TYPE> [options]

Types: COUNT, AVG, MIN, MAX, SUM

Options:

  • --type <TYPE> — Aggregation type (required)
  • --query "<encoded_query>" — Filter records
  • --field "<field>" — Field to aggregate on (required for AVG/MIN/MAX/SUM)
  • --group-by "<field>" — Group results by field
  • --display <true|false|all> — Display values mode

Examples:

# Count open incidents by priority
bash scripts/sn.sh aggregate incident --type COUNT --query "active=true" --group-by "priority"

# Average reassignment count
bash scripts/sn.sh aggregate incident --type AVG --field "reassignment_count" --query "active=true"

sn_schema — Get table schema

bash scripts/sn.sh schema <table> [--fields-only]

Returns field names, types, max lengths, mandatory flags, reference targets, and choice values.

Use --fields-only for a compact field list.

sn_batch — Bulk update or delete records

bash scripts/sn.sh batch <table> --query "<encoded_query>" --action <update|delete> [--fields '{"field":"value"}'] [--limit 200] [--confirm]

Performs bulk update or delete operations on all records matching a query. Runs in dry-run mode by default — shows how many records match without making changes. Pass --confirm to execute.

Options:

  • --query "<encoded_query>" — Filter records to operate on (required)
  • --action <update|delete> — Operation to perform (required)
  • --fields '<json>' — JSON fields to set on each record (required for update)
  • --limit <n> — Max records to affect per run (default 200, safety cap at 10000)
  • --dry-run — Show match count only, no changes (default behavior)
  • --confirm — Actually execute the operation (disables dry-run)

Examples:

# Dry run: see how many resolved incidents older than 90 days would be affected
bash scripts/sn.sh batch incident --query "state=6^sys_updated_on<javascript:gs.daysAgo(90)" --action update

# Bulk close resolved incidents (actually execute)
bash scripts/sn.sh batch incident --query "state=6^sys_updated_on<javascript:gs.daysAgo(90)" --action update --fields '{"state":"7","close_code":"Solved (Permanently)","close_notes":"Auto-closed by batch"}' --confirm

# Dry run: count orphaned test records
bash scripts/sn.sh batch u_test_table --query "u_status=abandoned" --action delete

# Delete orphaned records (actually execute)
bash scripts/sn.sh batch u_test_table --query "u_status=abandoned" --action delete --limit 50 --confirm

Output (JSON summary):

{"action":"update","table":"incident","matched":47,"processed":47,"failed":0}

sn_health — Instance health check

bash scripts/sn.sh health [--check <all|version|nodes|jobs|semaphores|stats>]

Checks ServiceNow instance health across multiple dimensions. Default is --check all which runs every check.

Checks:

  • version — Instance build version, date, and tag from sys_properties
  • nodes — Cluster node status (online/offline) from sys_cluster_state
  • jobs — Stuck/overdue scheduled jobs from sys_trigger (state=ready, next_action > 30 min past)
  • semaphores — Active semaphores (potential locks) from sys_semaphore
  • stats — Quick dashboard: active incidents, open P1s, active changes, open problems

Examples:

# Full health check
bash scripts/sn.sh health

# Just check version
bash scripts/sn.sh health --check version

# Check for stuck jobs
bash scripts/sn.sh health --check jobs

# Quick incident/change/problem dashboard
bash scripts/sn.sh health --check stats

Output (JSON):

{
  "instance": "https://yourinstance.service-now.com",
  "timestamp": "2026-02-16T13:30:00Z",
  "version": {"build": "...", "build_date": "...", "build_tag": "..."},
  "nodes": [{"node_id": "...", "status": "online", "system_id": "..."}],
  "jobs": {"stuck": 0, "overdue": []},
  "semaphores": {"active": 2, "list": []},
  "stats": {"incidents_active": 54, "p1_open": 3, "changes_active": 12, "problems_open": 8}
}

sn_attach — Manage attachments

# List attachments on a record
bash scripts/sn.sh attach list <table> <sys_id>

# Download an attachment
bash scripts/sn.sh attach download <attachment_sys_id> <output_path>

# Upload an attachment
bash scripts/sn.sh attach upload <table> <sys_id> <file_path> [content_type]

Common Tables

TableDescription
incidentIncidents
change_requestChange Requests
problemProblems
sc_req_itemRequested Items (RITMs)
sc_requestRequests
sys_userUsers
sys_user_groupGroups
cmdb_ciConfiguration Items
cmdb_ci_serverServers
kb_knowledgeKnowledge Articles
taskTasks (parent of incident/change/problem)
sys_choiceChoice list values

Encoded Query Syntax

ServiceNow encoded queries use ^ as AND, ^OR as OR:

  • active=true^priority=1 — Active AND P1
  • active=true^ORactive=false — Active OR inactive
  • short_descriptionLIKEserver — Contains "server"
  • sys_created_on>=2024-01-01 — Created after date
  • assigned_toISEMPTY — Unassigned
  • stateIN1,2,3 — State is 1, 2, or 3
  • caller_id.name=John Smith — Dot-walk through references

Notes

  • All API calls use Basic Auth via SN_USER / SN_PASSWORD
  • Default result limit is 20 records; use --limit to adjust
  • Use --display true to get human-readable values instead of sys_ids for reference fields
  • The script auto-detects whether SN_INSTANCE includes the protocol prefix

Source

git clone https://clawhub.ai/onlyflowstech/servicenowView on GitHub

Overview

Connect your AI agent to ServiceNow to query, create, update, and manage records across any table using the Table API and Stats API. It supports full CRUD, aggregation options (COUNT AVG MIN MAX SUM), schema introspection, and attachment handling, tailored for ITSM, ITOM, and CMDB workflows including incidents, changes, problems, configuration items, knowledge articles, and more.

How This Skill Works

The skill authenticates to a ServiceNow instance using SN_INSTANCE, SN_USER, and SN_PASSWORD. It exposes shell tools like sn_query, sn_get, sn_create, sn_update, sn_delete, sn_aggregate and sn_schema via scripts/sn.sh to perform REST Table API operations for querying, retrieving, creating, updating, deleting, and aggregating data, as well as inspecting schemas and attachments.

When to Use It

  • Query and filter records across any table to drive AI decisions.
  • Retrieve a single record by sys_id for detailed inspection.
  • Create or update records as part of automation workflows in ITSM, ITOM, or CMDB.
  • Run aggregates to compute counts, averages, or other summaries for dashboards.
  • Inspect table schemas and manage attachments to understand data structure.

Quick Start

  1. Step 1: Set SN_INSTANCE SN_USER and SN_PASSWORD as environment variables.
  2. Step 2: Use the sn_query sn_get sn_create sn_update sn_delete or sn_aggregate tools via scripts/sn.sh to interact with ServiceNow.
  3. Step 3: Process results in your AI agent and apply updates or create records as needed.

Best Practices

  • Use encoded queries to filter results efficiently.
  • Limit returned fields with fields selection to improve performance.
  • Paginate large results with limit and offset to avoid overload.
  • Inspect the target table schema before CRUD to map correct fields.
  • Keep SN_INSTANCE SN_USER and SN_PASSWORD in secure env vars and avoid logging them.

Example Use Cases

  • List open P1 incidents and their key fields.
  • Fetch all users in the IT department from sys_user.
  • Retrieve recent change requests created in the last week.
  • Get a specific incident by sys_id to verify status and assignee.
  • Count open incidents by priority using an aggregate query.

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers