Skip to main content
Glama
JLKmach

ServiceNow MCP Server

by JLKmach

get_catalog_item

Retrieve specific service catalog items from ServiceNow by providing the item ID or sys_id to access detailed information and manage service requests.

Instructions

Get a specific service catalog item.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
item_idYesCatalog item ID or sys_id

Implementation Reference

  • Main handler function that retrieves a specific catalog item from ServiceNow using the REST API, formats the response, and includes variables via helper function.
    def get_catalog_item( config: ServerConfig, auth_manager: AuthManager, params: GetCatalogItemParams, ) -> CatalogResponse: """ Get a specific service catalog item from ServiceNow. Args: config: Server configuration auth_manager: Authentication manager params: Parameters for getting a catalog item Returns: Response containing the catalog item details """ logger.info(f"Getting service catalog item: {params.item_id}") # Build the API URL url = f"{config.instance_url}/api/now/table/sc_cat_item/{params.item_id}" # Prepare query parameters query_params = { "sysparm_display_value": "true", "sysparm_exclude_reference_link": "true", } # Make the API request headers = auth_manager.get_headers() headers["Accept"] = "application/json" try: response = requests.get(url, headers=headers, params=query_params) response.raise_for_status() # Process the response result = response.json() item = result.get("result", {}) if not item: return CatalogResponse( success=False, message=f"Catalog item not found: {params.item_id}", data=None, ) # Format the response formatted_item = { "sys_id": item.get("sys_id", ""), "name": item.get("name", ""), "short_description": item.get("short_description", ""), "description": item.get("description", ""), "category": item.get("category", ""), "price": item.get("price", ""), "picture": item.get("picture", ""), "active": item.get("active", ""), "order": item.get("order", ""), "delivery_time": item.get("delivery_time", ""), "availability": item.get("availability", ""), "variables": get_catalog_item_variables(config, auth_manager, params.item_id), } return CatalogResponse( success=True, message=f"Retrieved catalog item: {item.get('name', '')}", data=formatted_item, ) except requests.exceptions.RequestException as e: logger.error(f"Error getting catalog item: {str(e)}") return CatalogResponse( success=False, message=f"Error getting catalog item: {str(e)}", data=None, )
  • Pydantic input schema defining the required 'item_id' parameter.
    class GetCatalogItemParams(BaseModel): """Parameters for getting a specific service catalog item.""" item_id: str = Field(..., description="Catalog item ID or sys_id")
  • Tool registration entry in get_tool_definitions() dictionary, mapping name to implementation function, input schema, return type hint, description, and serialization method.
    "get_catalog_item": ( get_catalog_item_tool, GetCatalogItemParams, str, # Expects JSON string "Get a specific service catalog item.", "json_dict", # Tool returns Pydantic model ),
  • Helper function to fetch and format catalog item variables from ServiceNow 'item_option_new' table, called within the main handler.
    def get_catalog_item_variables( config: ServerConfig, auth_manager: AuthManager, item_id: str, ) -> List[Dict[str, Any]]: """ Get variables for a specific service catalog item. Args: config: Server configuration auth_manager: Authentication manager item_id: Catalog item ID or sys_id Returns: List of variables for the catalog item """ logger.info(f"Getting variables for catalog item: {item_id}") # Build the API URL url = f"{config.instance_url}/api/now/table/item_option_new" # Prepare query parameters query_params = { "sysparm_query": f"cat_item={item_id}^ORDERBYorder", "sysparm_display_value": "true", "sysparm_exclude_reference_link": "true", } # Make the API request headers = auth_manager.get_headers() headers["Accept"] = "application/json" try: response = requests.get(url, headers=headers, params=query_params) response.raise_for_status() # Process the response result = response.json() variables = result.get("result", []) # Format the response formatted_variables = [] for variable in variables: formatted_variables.append({ "sys_id": variable.get("sys_id", ""), "name": variable.get("name", ""), "label": variable.get("question_text", ""), "type": variable.get("type", ""), "mandatory": variable.get("mandatory", ""), "default_value": variable.get("default_value", ""), "help_text": variable.get("help_text", ""), "order": variable.get("order", ""), }) return formatted_variables except requests.exceptions.RequestException as e: logger.error(f"Error getting catalog item variables: {str(e)}") return []
  • Pydantic output response model used by the handler.
    class CatalogResponse(BaseModel): """Response from catalog operations.""" success: bool = Field(..., description="Whether the operation was successful") message: str = Field(..., description="Message describing the result") data: Optional[Dict[str, Any]] = Field(None, description="Response data")

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JLKmach/servicenow-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server