Skip to main content
Glama
JLKmach

ServiceNow MCP Server

by JLKmach

create_workflow

Create new workflows in ServiceNow to automate business processes, define rules, and manage task sequences for incident management, change requests, or service operations.

Instructions

Create a new workflow in ServiceNow

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesName of the workflow
descriptionNoDescription of the workflow
tableNoTable the workflow applies to
activeNoWhether the workflow is active
attributesNoAdditional attributes for the workflow

Implementation Reference

  • Main execution function for the create_workflow tool. Handles parameter unwrapping, API call to ServiceNow wf_workflow table, and returns the created workflow details.
    def create_workflow( auth_manager: AuthManager, server_config: ServerConfig, params: Dict[str, Any], ) -> Dict[str, Any]: """ Create a new workflow in ServiceNow. Args: auth_manager: Authentication manager server_config: Server configuration params: Parameters for creating a workflow Returns: Dict[str, Any]: Created workflow details """ # Unwrap parameters if needed params = _unwrap_params(params, CreateWorkflowParams) # Get the correct auth_manager and server_config try: auth_manager, server_config = _get_auth_and_config(auth_manager, server_config) except ValueError as e: logger.error(f"Error getting auth and config: {e}") return {"error": str(e)} # Validate required parameters if not params.get("name"): return {"error": "Workflow name is required"} # Prepare data for the API request data = { "name": params["name"], } if params.get("description"): data["description"] = params["description"] if params.get("table"): data["table"] = params["table"] if params.get("active") is not None: data["active"] = str(params["active"]).lower() if params.get("attributes"): # Add any additional attributes data.update(params["attributes"]) # Make the API request try: headers = auth_manager.get_headers() url = f"{server_config.instance_url}/api/now/table/wf_workflow" response = requests.post(url, headers=headers, json=data) response.raise_for_status() result = response.json() return { "workflow": result.get("result", {}), "message": "Workflow created successfully", } except requests.RequestException as e: logger.error(f"Error creating workflow: {e}") return {"error": str(e)} except Exception as e: logger.error(f"Unexpected error creating workflow: {e}") return {"error": str(e)}
  • Pydantic model defining the input parameters for the create_workflow tool, including name, description, table, active status, and attributes.
    class CreateWorkflowParams(BaseModel): """Parameters for creating a new workflow.""" name: str = Field(..., description="Name of the workflow") description: Optional[str] = Field(None, description="Description of the workflow") table: Optional[str] = Field(None, description="Table the workflow applies to") active: Optional[bool] = Field(True, description="Whether the workflow is active") attributes: Optional[Dict[str, Any]] = Field(None, description="Additional attributes for the workflow")
  • Tool registration in get_tool_definitions dictionary, associating the handler function, schema, description, and serialization method for MCP server.
    "create_workflow": ( create_workflow_tool, CreateWorkflowParams, str, # Expects JSON string "Create a new workflow in ServiceNow", "json_dict", # Tool returns Pydantic model ),
  • Import of create_workflow function in tools package __init__.py, exposing it for use.
    from servicenow_mcp.tools.workflow_tools import ( activate_workflow, add_workflow_activity, create_workflow,

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