Catalog Item Generation

SkillDev tools

Generate catalog items from natural language descriptions including variables, workflows, and approval rules

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Catalog Item Generation skill

What this skill tells your AI

The instructions your AI receives, as published by happy-technologies-llc/happy-platform-skills in skills/catalog/catalog-item-generation/SKILL.md and read by ahel’s review.

Overview

This skill enables the generation of complete service catalog items from natural language descriptions. It covers:

  • Creating catalog items in sc_cat_item with all required fields from plain-text descriptions
  • Generating catalog variables (questions/fields) in item_option_new based on item requirements
  • Assigning items to categories via sc_category and sc_cat_item_category
  • Configuring approval rules and workflows for the item
  • Setting up variable sets, UI policies, and client scripts for dynamic form behavior
  • Publishing items to specific catalogs and categories for end-user access

When to use: When service owners describe a new catalog offering in plain language and need it translated into a fully configured ServiceNow catalog item with variables, approvals, and fulfillment rules.

Value proposition: Reduces catalog item creation time from hours to minutes, ensures consistent variable naming and configuration, and applies organizational standards for approvals and fulfillment automatically.

Prerequisites

  • Plugins: com.glideapp.servicecatalog (Service Catalog)
  • Roles: catalog_admin, catalog_manager, or admin
  • Access: Read/write access to sc_cat_item, sc_category, sc_cat_item_category, item_option_new, and workflow tables
  • Knowledge: Understanding of your organization's catalog structure, approval policies, and fulfillment groups

Procedure

Step 1: Analyze the Natural Language Description

Parse the user's description to identify the catalog item components:

ComponentWhat to ExtractExample
Item nameShort, descriptive title"New Laptop Request"
DescriptionDetailed explanation of the offering"Request a new laptop with specifications"
CategoryWhere it belongs in the catalog"Hardware Requests"
VariablesQuestions/fields for the requesterModel, RAM, storage, business justification
ApprovalsWho must approveManager, IT Director for >$2000
FulfillmentWho fulfills the request"Hardware Team" assignment group
PricingCost or pricing model$1200 base, variable by model

Step 2: Find or Create the Target Category

Query existing categories to place the item correctly.

Using MCP (Claude Code/Desktop):

Tool: SN-Query-Table
Parameters:
  table_name: sc_category
  query: active=true^titleLIKEHardware
  fields: sys_id,title,description,parent,sc_catalog,active,icon
  limit: 10

Using REST API:

GET /api/now/table/sc_category?sysparm_query=active=true^titleLIKEHardware&sysparm_fields=sys_id,title,description,parent,sc_catalog,active,icon&sysparm_limit=10&sysparm_display_value=true

Create a new category if needed:

Tool: SN-Create-Record
Parameters:
  table_name: sc_category
  fields:
    title: "Hardware Requests"
    description: "Request new hardware including laptops, monitors, peripherals, and accessories"
    sc_catalog: [catalog_sys_id]
    parent: [parent_category_sys_id]
    active: true
    icon: "hardware-laptop"

Step 3: Create the Catalog Item

Generate the catalog item record with all core fields.

Using MCP:

Tool: SN-Create-Record
Parameters:
  table_name: sc_cat_item
  fields:
    name: "New Laptop Request"
    short_description: "Request a new laptop with your preferred specifications"
    description: |
      Use this form to request a new laptop computer. Select your preferred model,
      specifications, and provide business justification. Requests over $2,000 require
      IT Director approval.

      **Included with all laptops:**
      - Standard software image
      - 3-year warranty
      - Docking station and power adapter

      **Expected delivery:** 5-10 business days after approval
    category: [category_sys_id]
    sc_catalogs: [catalog_sys_id]
    active: true
    availability: on_desktop
    type: item
    fulfillment_group: [hardware_team_sys_id]
    delivery_time: "2026-03-19 08:00:00"
    price: 1200
    recurring_price: 0
    order: 100
    icon: "hardware-laptop"
    mandatory_attachment: false
    request_method: order_guide

Using REST API:

POST /api/now/table/sc_cat_item
Content-Type: application/json

{
  "name": "New Laptop Request",
  "short_description": "Request a new laptop with your preferred specifications",
  "description": "Use this form to request a new laptop computer...",
  "category": "[category_sys_id]",
  "sc_catalogs": "[catalog_sys_id]",
  "active": "true",
  "type": "item",
  "fulfillment_group": "[hardware_team_sys_id]",
  "price": "1200",
  "order": "100"
}

Step 4: Generate Catalog Variables

Create the form variables (questions) that requesters will fill out.

Using MCP:

Tool: SN-Create-Record
Parameters:
  table_name: item_option_new
  fields:
    cat_item: [cat_item_sys_id]
    name: "laptop_model"
    question_text: "Laptop Model"
    type: 3
    choice_table: ""
    default_value: "standard"
    mandatory: true
    order: 100
    tooltip: "Select the laptop model that best fits your work requirements"

Variable types reference:

Type CodeType NameUse Case
1Yes/NoBoolean selections
2Multi Line TextLong descriptions, justifications
3Multiple ChoiceDropdown selections
5Select BoxMulti-select options
6Single Line TextShort text input
7CheckBoxToggle options
8ReferenceLink to another table record
9DateDate picker
10Date/TimeDate and time picker
14MacroDisplay-only information
21List CollectorMulti-reference selection
24MaskedSensitive input

Create multiple variables for a complete form:

Tool: SN-Execute-Background-Script
Parameters:
  description: Create catalog item variables for laptop request
  script: |
    var itemId = '[cat_item_sys_id]';
    var variables = [
      { name: 'laptop_model', question_text: 'Laptop Model', type: 3, mandatory: true, order: 100, tooltip: 'Select your preferred model' },
      { name: 'ram_size', question_text: 'RAM (Memory)', type: 3, mandatory: true, order: 200, default_value: '16gb' },
      { name: 'storage_size', question_text: 'Storage', type: 3, mandatory: true, order: 300, default_value: '512gb' },
      { name: 'additional_software', question_text: 'Additional Software Required', type: 2, mandatory: false, order: 400 },
      { name: 'business_justification', question_text: 'Business Justification', type: 2, mandatory: true, order: 500, tooltip: 'Explain why this laptop is needed' },
      { name: 'needed_by_date', question_text: 'Date Needed By', type: 9, mandatory: false, order: 600 },
      { name: 'replace_existing', question_text: 'Is this replacing an existing laptop?', type: 1, mandatory: true, order: 700, default_value: 'false' },
      { name: 'existing_asset_tag', question_text: 'Existing Asset Tag', type: 6, mandatory: false, order: 800, tooltip: 'Enter asset tag of laptop being replaced' }
    ];

    variables.forEach(function(v) {
      var gr = new GlideRecord('item_option_new');
      gr.initialize();
      gr.cat_item = itemId;
      gr.name = v.name;
      gr.question_text = v.question_text;
      gr.type = v.type;
      gr.mandatory = v.mandatory || false;
      gr.order = v.order;
      if (v.default_value) gr.default_value = v.default_value;
      if (v.tooltip) gr.tooltip = v.tooltip;
      gr.active = true;
      gr.insert();
    });

    gs.info('Created ' + variables.length + ' variables for catalog item');

Add choices for Multiple Choice variables:

Tool: SN-Execute-Background-Script
Parameters:
  description: Create choices for laptop model variable
  script: |
    var choices = [
      { text: 'Standard (Dell Latitude 5540)', value: 'standard', price: 1200, order: 100 },
      { text: 'Performance (Dell Latitude 7640)', value: 'performance', price: 1800, order: 200 },
      { text: 'Developer (MacBook Pro 14")', value: 'developer', price: 2400, order: 300 },
      { text: 'Executive (MacBook Pro 16")', value: 'executive', price: 3200, order: 400 }
    ];

    choices.forEach(function(c) {
      var gr = new GlideRecord('question_choice');
      gr.initialize();
      gr.question = '[laptop_model_var_sys_id]';
      gr.text = c.text;
      gr.value = c.value;
      gr.price = c.price || 0;
      gr.order = c.order;
      gr.inactive = false;
      gr.insert();
    });

    gs.info('Created ' + choices.length + ' choices for laptop model');

Step 5: Configure Approval Rules

Set up approval requirements based on item cost or other criteria.

Using MCP:

Tool: SN-Create-Record
Parameters:
  table_name: sysapproval_group
  fields:
    document_id: [cat_item_sys_id]
    assignment_group: [manager_approval_group_sys_id]
    approval_column: approval
    condition: "price>0"
    order: 100
    approval: requested

Using REST API:

POST /api/now/table/sysapproval_group
Content-Type: application/json

{
  "document_id": "[cat_item_sys_id]",
  "assignment_group": "[manager_approval_group_sys_id]",
  "approval_column": "approval",
  "condition": "price>0",
  "order": "100"
}

Step 6: Link Item to Category

Create the item-to-category association for catalog navigation.

Using MCP:

Tool: SN-Create-Record
Parameters:
  table_name: sc_cat_item_category
  fields:
    sc_cat_item: [cat_item_sys_id]
    sc_category: [category_sys_id]

Using REST API:

POST /api/now/table/sc_cat_item_category
Content-Type: application/json

{
  "sc_cat_item": "[cat_item_sys_id]",
  "sc_category": "[category_sys_id]"
}

Step 7: Validate and Activate

Verify the complete item configuration before publishing.

Using MCP:

Tool: SN-Query-Table
Parameters:
  table_name: item_option_new
  query: cat_item=[cat_item_sys_id]^active=true
  fields: name,question_text,type,mandatory,order,default_value
  limit: 30
  order_by: order

Check the item in the catalog API:

GET /api/sn_sc/servicecatalog/items/[cat_item_sys_id]?sysparm_display_value=true

Activate the item:

Tool: SN-Update-Record
Parameters:
  table_name: sc_cat_item
  sys_id: [cat_item_sys_id]
  fields:
    active: true
    visible_standalone: true

Tool Usage

MCP Tools Reference

ToolWhen to Use
SN-Query-TableQuery existing categories, items, variables, and approvals
SN-Create-RecordCreate new items, variables, choices, categories, and approval rules
SN-Update-RecordActivate items, update configurations
SN-Natural-Language-SearchFind existing similar items or categories by description
SN-Discover-Table-SchemaExplore field definitions for catalog tables
SN-Execute-Background-ScriptBatch-create variables, choices, and complex configurations

REST API Reference

EndpointMethodPurpose
/api/now/table/sc_cat_itemGET/POST/PATCHManage catalog items
/api/now/table/sc_categoryGET/POSTManage catalog categories
/api/now/table/sc_cat_item_categoryPOSTLink items to categories
/api/now/table/item_option_newGET/POSTCreate and query catalog variables
/api/now/table/question_choicePOSTAdd choices to multiple-choice variables
/api/sn_sc/servicecatalog/itemsGETValidate items via the Service Catalog API

Best Practices

  • Consistent naming: Use a naming convention for variable names (snake_case) and question text (Title Case) across all items
  • Mandatory justification: Always include a business justification variable for items above a cost threshold
  • Limit variable count: Keep forms under 12 variables; use variable sets to group related fields
  • Set default values: Pre-populate common selections to reduce requester effort
  • Use reference variables: Link to existing tables (e.g., cmn_location for office location) instead of free text
  • Test before publishing: Validate the item in a non-production catalog or with active=false before making it visible
  • Document fulfillment: Include clear fulfillment instructions in the item description for the assignment group
  • Version catalog items: Use the item's meta field or work notes to track configuration changes over time

Troubleshooting

Variables Not Appearing on Item Form

Cause: Variable cat_item reference does not match the item sys_id, or the variable is inactive Solution: Query item_option_new with cat_item=[sys_id] to verify the association. Check active=true on each variable.

Item Not Visible in Catalog

Cause: Item is inactive, not linked to a catalog, or the user lacks the required role/group to see it Solution: Verify active=true, sc_catalogs is set, and check sc_cat_item_user_criteria for access restrictions.

Approval Not Triggering

Cause: Approval rule condition does not match, or no approval group is configured for the item Solution: Review sysapproval_group records for the item. Verify the condition expression evaluates to true for the request.

Choices Not Displaying for Dropdown

Cause: question_choice records are not linked to the correct variable sys_id Solution: Query question_choice with question=[variable_sys_id] and verify inactive=false.

Examples

Example 1: Generate Item from Description

Input: "Create a catalog item for requesting a parking pass. Employees should select their office location, parking type (indoor/outdoor), vehicle license plate, and start date. Manager approval required."

Generated Item:

  • Name: "Parking Pass Request"
  • Category: "Facilities"
  • Variables: Office Location (reference), Parking Type (dropdown), License Plate (text), Start Date (date)
  • Approval: Manager approval

Example 2: Software License Request

Input: "Need a form to request software licenses. Users pick the software from a list, enter number of licenses, provide justification. Over 10 licenses needs IT Director approval."

Tool: SN-Create-Record
Parameters:
  table_name: sc_cat_item
  fields:
    name: "Software License Request"
    short_description: "Request new or additional software licenses"
    category: [software_category_sys_id]
    sc_catalogs: [catalog_sys_id]
    active: true
    type: item
    fulfillment_group: [software_team_sys_id]
    order: 200

Example 3: Bulk Item Generation

Input: "Create 3 items for the HR category: Badge Replacement ($25), Desk Relocation (free), and Ergonomic Assessment (free)"

Use the batch background script approach from Step 4, creating all three items and their variables in a single script execution.

Related Skills

  • catalog/variable-management - Advanced variable configuration and variable sets
  • catalog/ui-policies - Dynamic form behavior based on variable values
  • catalog/approval-workflows - Complex approval routing and escalation
  • catalog/item-creation - Standard item creation procedures
  • catalog/request-fulfillment - Fulfillment workflow configuration
  • catalog/multi-turn-ordering - Conversational ordering via Virtual Agent

Signals

GitHub stars
37
Forks
13
Last commit
Jul 2026
Advanced
Catalog kind
skill
Gateway key
catalog-item-generation
Source
github.com/happy-technologies-llc/happy-platform-skills