Back to Skills
    ๐Ÿฆž

    servicenow-agent

    Read-only CLI access to ServiceNow Table, Attachment

    By @thesethrose
    View on GitHub
    SKILL.md
    ---
    name: servicenow-agent
    description: Read-only CLI access to ServiceNow Table, Attachment, Aggregate, and Service Catalog APIs; includes schema inspection and history retrieval (read-only).
    read_when:
      - Need to read ServiceNow Table API records
      - Need to query a table or fetch a record by sys_id
      - Need to download attachment content or metadata
      - Need aggregate statistics or service catalog variables
    metadata: {"clawdbot":{"emoji":"๐Ÿงพ","requires":{"bins":["node"]}}}
    ---
    
    # ServiceNow Table API Read Only
    
    Use this skill to read data from ServiceNow via the Table API. Do not create or update or delete records.
    
    ## Configuration
    
    Set these environment variables in the .env file in this folder.
    
    - SERVICENOW_DOMAIN instance domain such as myinstance.service-now.com
    - SERVICENOW_USERNAME username for basic auth
    - SERVICENOW_PASSWORD password for basic auth
    
    If your domain already includes https:// then use it as is. Otherwise requests should be made to:
    
    ```
    https://$SERVICENOW_DOMAIN
    ```
    
    ## Allowed Operations GET only
    
    Use only the GET endpoints from these files.
    
    - openapi.yaml for Table API
    - references/attachment.yaml for Attachment API
    - references/aggregate-api.yaml for Aggregate API
    - references/service-catalog-api.yaml for Service Catalog API
    
    ### List records
    - GET /api/now/table/{tableName}
    
    ### Get a record by sys_id
    - GET /api/now/table/{tableName}/{sys_id}
    
    Never use POST or PUT or PATCH or DELETE.
    
    ## Common Query Params Table API
    
    - sysparm_query encoded query such as active=true^priority=1
    - sysparm_fields comma separated fields to return
    - sysparm_limit limit record count to keep small for safety
    - sysparm_display_value true or false or all
    - sysparm_exclude_reference_link true to reduce clutter
    
    See openapi.yaml for the full list of parameters.
    
    ## CLI
    
    Use the bundled CLI for all reads. It pulls auth from .env by default. You can override with flags.
    
    ### Command overview
    
    - list table lists records from a table
    - get table sys_id fetches one record by sys_id
    - batch file.json runs multiple read requests in one call
    - attach reads attachments and file content
    - stats table aggregates stats
    - schema table lists valid field names and types
    - history table sys_id reads full comment and work note timeline
    - sc endpoint Service Catalog GET endpoints
    
    ### Auth flags
    
    - --domain domain instance domain
    - --username user
    - --password pass
    
    ### Query flags
    
    Use any of these as --sysparm_* flags.
    
    - --sysparm_query
    - --sysparm_fields
    - --sysparm_limit
    - --sysparm_display_value
    - --sysparm_exclude_reference_link
    - --sysparm_suppress_pagination_header
    - --sysparm_view
    - --sysparm_query_category
    - --sysparm_query_no_domain
    - --sysparm_no_count
    
    ### Attachment API params
    
    - --sysparm_query
    - --sysparm_suppress_pagination_header
    - --sysparm_limit
    - --sysparm_query_category
    
    ### Aggregate API params
    
    - --sysparm_query
    - --sysparm_avg_fields
    - --sysparm_count
    - --sysparm_min_fields
    - --sysparm_max_fields
    - --sysparm_sum_fields
    - --sysparm_group_by
    - --sysparm_order_by
    - --sysparm_having
    - --sysparm_display_value
    - --sysparm_query_category
    
    ### Service Catalog params
    
    - --sysparm_view
    - --sysparm_limit
    - --sysparm_text
    - --sysparm_offset
    - --sysparm_category
    - --sysparm_type
    - --sysparm_catalog
    - --sysparm_top_level_only
    - --record_id
    - --template_id
    - --mode
    
    ### Output
    
    - --pretty pretty print JSON output
    - --out path save binary attachment content to a file
    
    ### Examples
    
    List recent incidents.
    
    ```bash
    node cli.mjs list incident --sysparm_limit 5 --sysparm_fields number,short_description,priority,sys_id
    ```
    
    Query with a filter.
    
    ```bash
    node cli.mjs list cmdb_ci --sysparm_query "operational_status=1^install_status=1" --sysparm_limit 10
    ```
    
    Fetch a single record.
    
    ```bash
    node cli.mjs get incident <sys_id> --sysparm_fields number,short_description,opened_at
    ```
    
    Override auth on the fly.
    
    ```bash
    node cli.mjs list incident --domain myinstance.service-now.com --username admin --password "***" --sysparm_limit 3
    ```
    
    Attachment metadata and file download.
    
    ```bash
    node cli.mjs attach list --sysparm_query "table_name=incident" --sysparm_limit 5
    node cli.mjs attach file <sys_id> --out /tmp/attachment.bin
    ```
    
    Aggregate stats.
    
    ```bash
    node cli.mjs stats incident --sysparm_query "active=true^priority=1" --sysparm_count true
    ```
    
    Service Catalog read only GETs.
    
    ```bash
    node cli.mjs sc catalogs --sysparm_text "laptop" --sysparm_limit 5
    node cli.mjs sc items --sysparm_text "mac" --sysparm_limit 5
    node cli.mjs sc item <sys_id>
    node cli.mjs sc item-variables <sys_id>
    ```
    
    ### Service Catalog endpoints GET only
    
    - cart
    - delivery-address user_id
    - validate-categories
    - on-change-choices entity_id
    - catalogs
    - catalog sys_id
    - catalog-categories sys_id
    - category sys_id
    - items
    - item sys_id
    - item-variables sys_id
    - item-delegation item_sys_id user_sys_id
    - producer-record producer_id record_id
    - record-wizard record_id wizard_id
    - generate-stage-pool quantity
    - step-configs
    - wishlist
    - wishlist-item cart_item_id
    - wizard sys_id
    
    ### Schema Inspection
    
    Use this if you are unsure of a field name.
    
    ```bash
    node cli.mjs schema incident
    ```
    
    ### Reading Ticket History
    
    Use this to read the full conversation instead of just the current state.
    
    ```bash
    node cli.mjs history incident <sys_id>
    ```
    
    ### Specialist presets
    
    Create JSON batch files under specialists/ to run multiple reads at once.
    
    - specialists/incidents.json
    
    Each entry supports sysparm_* fields plus these items.
    
    - name label in the batch output
    - table target table
    - sys_id optional single record fetch
    
    Run a batch preset.
    
    ```bash
    node cli.mjs batch specialists/incidents.json --pretty
    ```
    
    ## Output
    
    The Table API returns JSON by default. Results appear under result.
    
    ## Notes
    
    - Keep result sizes small with sysparm_limit.
    - Use sysparm_fields to avoid large payloads.
    - This skill is read only by design.
    
    ## Summary of the Agent Toolkit
    
    - list and get show the current state of records.
    - attach shows files and screenshots.
    - stats shows analytics and aggregates.
    - sc shows requested item variables.
    - schema shows the database map to correct errors.
    - history shows the timeline of human conversations.
    
    ## Observations & Notes (important)
    
    - Service Catalog endpoints may return empty arrays depending on catalog content and search text โ€” try more specific `--sysparm_text` terms or increase `--sysparm_limit`.
    - `sysparm_display_value` is enabled by default for table reads to return human-friendly values (e.g., user names instead of sys_ids). If you need raw system ids, pass `--sysparm_display_value false`.
    - Keep `--sysparm_limit` small for agent-initiated queries to avoid large payloads and timeouts. Prefer `stats` for counts or aggregates instead of downloading many rows.
    - Attachments: metadata is available via `attach list`/`attach get`; use `attach file <sys_id> --out <path>` to download binary content for local analysis.
    - Schema inspection (`schema`) avoids guessing field names and is the recommended first step before reading unknown tables.
    - History (`history`) fetches journal entries (comments/work_notes) from `sys_journal_field` and is useful to read the full conversation thread for a ticket.
    - Use `--pretty` to make JSON outputs readable for human review and to help the agent summarize long results.
    
    ## Recommended Batch Presets
    
    I recommend these specialist JSON presets under `specialists/` to speed up common read workflows. They are safe (read-only) and demonstrate how to combine related reads.
    
    1) `specialists/inspect_incident_schema.json` โ€” schema inspection for `incident`:
    
    ```json
    [
      {
        "name": "schema-incident",
        "table": "sys_dictionary",
        "sysparm_query": "name=incident^elementISNOTEMPTY",
        "sysparm_fields": "element,column_label,internal_type,reference",
        "sysparm_limit": 500
      }
    ]
    ```
    
    2) `specialists/incident_history_template.json` โ€” history template (replace `<SYS_ID>` with the target sys_id before running):
    
    ```json
    [
      {
        "name": "incident-history",
        "table": "sys_journal_field",
        "sysparm_query": "name=incident^element_id=<SYS_ID>",
        "sysparm_fields": "value,element,sys_created_on,sys_created_by",
        "sysparm_order_by": "sys_created_on",
        "sysparm_limit": 500
      }
    ]
    ```
    
    3) `specialists/attachments_incident.json` โ€” recent attachments for incident table:
    
    ```json
    [
      {
        "name": "recent-incident-attachments",
        "table": "attachment",
        "sysparm_query": "table_name=incident",
        "sysparm_fields": "sys_id,file_name,content_type,table_sys_id,sys_created_on",
        "sysparm_limit": 20
      }
    ]
    ```
    
    How to use these:
    - For schema: `node cli.mjs batch specialists/inspect_incident_schema.json --pretty`
    - For history: replace `<SYS_ID>` then `node cli.mjs batch specialists/incident_history_template.json --pretty` (or run `node cli.mjs history incident <SYS_ID> --pretty`)
    - For attachments: `node cli.mjs batch specialists/attachments_incident.json --pretty`, then `node cli.mjs attach file <sys_id> --out /tmp/file` to download a file.
    
    These presets are intentionally read-only and conservative (limits set small). Feel free to ask for additional presets (P1 dashboards, recent changes, escalations).