update_workflow
Modify an existing ServiceNow workflow by updating its name, description, table assignment, active status, or additional attributes using the workflow ID.
Instructions
Update an existing workflow in ServiceNow
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| active | No | Whether the workflow is active | |
| attributes | No | Additional attributes for the workflow | |
| description | No | Description of the workflow | |
| name | No | Name of the workflow | |
| table | No | Table the workflow applies to | |
| workflow_id | Yes | Workflow ID or sys_id |
Implementation Reference
- The main handler function that performs the PATCH request to update a workflow in ServiceNow using the provided parameters.def update_workflow( auth_manager: AuthManager, server_config: ServerConfig, params: Dict[str, Any], ) -> Dict[str, Any]: """ Update an existing workflow in ServiceNow. Args: auth_manager: Authentication manager server_config: Server configuration params: Parameters for updating a workflow Returns: Dict[str, Any]: Updated workflow details """ # Unwrap parameters if needed params = _unwrap_params(params, UpdateWorkflowParams) # 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)} workflow_id = params.get("workflow_id") if not workflow_id: return {"error": "Workflow ID is required"} # Prepare data for the API request data = {} if params.get("name"): data["name"] = params["name"] if params.get("description") is not None: 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"]) if not data: return {"error": "No update parameters provided"} # Make the API request try: headers = auth_manager.get_headers() url = f"{server_config.instance_url}/api/now/table/wf_workflow/{workflow_id}" response = requests.patch(url, headers=headers, json=data) response.raise_for_status() result = response.json() return { "workflow": result.get("result", {}), "message": "Workflow updated successfully", } except requests.RequestException as e: logger.error(f"Error updating workflow: {e}") return {"error": str(e)} except Exception as e: logger.error(f"Unexpected error updating workflow: {e}") return {"error": str(e)}
- Pydantic model defining the input parameters for the update_workflow tool, including workflow_id (required) and optional fields like name, description, table, active, and attributes.class UpdateWorkflowParams(BaseModel): """Parameters for updating a workflow.""" workflow_id: str = Field(..., description="Workflow ID or sys_id") name: Optional[str] = Field(None, 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(None, description="Whether the workflow is active") attributes: Optional[Dict[str, Any]] = Field(None, description="Additional attributes for the workflow")
- src/servicenow_mcp/utils/tool_utils.py:571-577 (registration)MCP tool registration entry in get_tool_definitions dictionary, specifying the implementation function (update_workflow_tool alias), input schema model (UpdateWorkflowParams), return type hint, description, and serialization method."update_workflow": ( update_workflow_tool, UpdateWorkflowParams, str, # Expects JSON string "Update an existing workflow in ServiceNow", "json_dict", # Tool returns Pydantic model ),
- src/servicenow_mcp/tools/__init__.py:78-91 (registration)Import statement in tools/__init__.py that exposes update_workflow for use in tool_utils.py and elsewhere.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 update_workflow to unwrap and validate parameters using the Pydantic model.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