Skip to main content
Glama
echelon-ai-labs

ServiceNow MCP Server

create_workflow

Automate workflow creation in ServiceNow by defining active status, name, description, table, and additional attributes for streamlined process management.

Instructions

Create a new workflow in ServiceNow

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
paramsYes

Implementation Reference

  • The handler function that executes the create_workflow tool logic, unwrapping params, validating, preparing data, and posting to ServiceNow wf_workflow endpoint.
    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 BaseModel defining the input schema/parameters for the create_workflow tool.
    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")
  • Registers the 'create_workflow' tool in get_tool_definitions, mapping name to handler function, params schema, description, and serialization method.
    "create_workflow": (
        create_workflow_tool,
        CreateWorkflowParams,
        str,  # Expects JSON string
        "Create a new workflow in ServiceNow",
        "json_dict",  # Tool returns Pydantic model
    ),
  • Imports create_workflow (line 82) from workflow_tools.py into the tools package namespace for exposure.
    from servicenow_mcp.tools.workflow_tools import (
        activate_workflow,
        add_workflow_activity,
        create_workflow,
        deactivate_workflow,
        delete_workflow_activity,
        get_workflow_activities,
        get_workflow_details,
        list_workflow_versions,
        list_workflows,
        reorder_workflow_activities,
        update_workflow,
        update_workflow_activity,
    )
  • Helper function used in create_workflow to unwrap Pydantic model params into dict.
    def _unwrap_params(params: Any, param_class: Type[T]) -> Dict[str, Any]:
        """
        Unwrap parameters if they're wrapped in a Pydantic model.
        This helps handle cases where the parameters are passed as a model instead of a dict.
        """
        if isinstance(params, dict):
            return params
        if isinstance(params, param_class):
            return params.dict(exclude_none=True)
        return params
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a creation operation, implying it's a write/mutation tool, but doesn't describe what happens upon creation (e.g., whether the workflow is immediately active, if it requires approval, or what the response looks like). It lacks details on permissions, side effects, or error conditions, leaving significant gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with zero wasted words. It front-loads the core action and resource, making it immediately scannable. Every word earns its place by conveying the essential purpose without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations, 0% schema description coverage, and no output schema, the description is inadequate. It doesn't explain parameters, behavioral traits, or what to expect upon success/failure. While concise, it lacks the necessary context for an agent to use this tool effectively beyond the basic action implied by the name.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, meaning none of the parameters have descriptions in the schema. The tool description provides no information about parameters beyond what's implied by the name ('create_workflow'). It doesn't mention required fields like 'name', optional fields like 'active' or 'table', or their purposes, failing to compensate for the complete lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and resource ('a new workflow in ServiceNow'), making the purpose immediately understandable. It distinguishes this from sibling tools like 'update_workflow' or 'list_workflows' by specifying creation rather than modification or retrieval. However, it doesn't explicitly differentiate from other creation tools like 'create_article' or 'create_incident' beyond the resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., required permissions), when not to use it (e.g., for updating existing workflows), or refer to sibling tools like 'update_workflow' for modifications. The agent must infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Related Tools

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/echelon-ai-labs/servicenow-mcp'

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