Skip to main content
Glama
vparlapalli490

ServiceNow MCP Server

create_category

Add new categories or subcategories to organize content in ServiceNow knowledge bases, specifying title, description, and parent relationships.

Instructions

Create a new category in a knowledge base

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
titleYesTitle of the category
descriptionNoDescription of the category
knowledge_baseYesThe knowledge base to create the category in
parent_categoryNoParent category (if creating a subcategory)
activeNoWhether the category is active

Implementation Reference

  • Implements the core logic for the 'create_category' tool by sending a POST request to the ServiceNow kb_category table API, handling parameters like title, knowledge_base, parent_category, and returning a CategoryResponse.
    def create_category(
        config: ServerConfig,
        auth_manager: AuthManager,
        params: CreateCategoryParams,
    ) -> CategoryResponse:
        """
        Create a new category in a knowledge base.
    
        Args:
            config: Server configuration.
            auth_manager: Authentication manager.
            params: Parameters for creating the category.
    
        Returns:
            Response with the created category details.
        """
        api_url = f"{config.api_url}/table/kb_category"
    
        # Build request data
        data = {
            "label": params.title,
            "kb_knowledge_base": params.knowledge_base,
            # Convert boolean to string "true"/"false" as ServiceNow expects
            "active": str(params.active).lower(),
        }
    
        if params.description:
            data["description"] = params.description
        if params.parent_category:
            data["parent"] = params.parent_category
        
        # Log the request data for debugging
        logger.debug(f"Creating category with data: {data}")
    
        # Make request
        try:
            response = requests.post(
                api_url,
                json=data,
                headers=auth_manager.get_headers(),
                timeout=config.timeout,
            )
            response.raise_for_status()
    
            result = response.json().get("result", {})
            logger.debug(f"Category creation response: {result}")
    
            # Log the specific fields to check the knowledge base assignment
            if "kb_knowledge_base" in result:
                logger.debug(f"Knowledge base in response: {result['kb_knowledge_base']}")
            
            # Log the active status
            if "active" in result:
                logger.debug(f"Active status in response: {result['active']}")
            
            return CategoryResponse(
                success=True,
                message="Category created successfully",
                category_id=result.get("sys_id"),
                category_name=result.get("label"),
            )
    
        except requests.RequestException as e:
            logger.error(f"Failed to create category: {e}")
            return CategoryResponse(
                success=False,
                message=f"Failed to create category: {str(e)}",
            )
  • Pydantic BaseModel defining the input schema (parameters) for the create_category tool, including required fields like title and knowledge_base.
    class CreateCategoryParams(BaseModel):
        """Parameters for creating a category in a knowledge base."""
    
        title: str = Field(..., description="Title of the category")
        description: Optional[str] = Field(None, description="Description of the category")
        knowledge_base: str = Field(..., description="The knowledge base to create the category in")
        parent_category: Optional[str] = Field(None, description="Parent category (if creating a subcategory)")
        active: bool = Field(True, description="Whether the category is active")
  • Registers the 'create_category' tool in the central tool_definitions dictionary used by the MCP server, mapping the aliased handler function, aliased schema (CreateKBCategoryParams), description, and serialization hint.
    "create_category": (
        create_kb_category_tool_impl,  # Use passed function
        CreateKBCategoryParams,
        str,  # Expects JSON string
        "Create a new category in a knowledge base",
        "json_dict",  # Tool returns Pydantic model
    ),
  • In the ServiceNowMCP class initialization, calls get_tool_definitions with the aliased create_category handler (create_kb_category_tool) to load all tool definitions including create_category.
    self.tool_definitions = get_tool_definitions(
        create_kb_category_tool, list_kb_categories_tool
    )
  • Imports the create_category function aliased as create_kb_category_tool, which is passed to get_tool_definitions for registration.
    from servicenow_mcp.tools.knowledge_base import (
        create_category as create_kb_category_tool,
    )

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/vparlapalli490/MCP'

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