update_workflow
Modify existing workflows in ServiceNow by updating details such as name, description, table association, activation status, and custom 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 handler function that implements the core logic for the 'update_workflow' tool. It unwraps parameters using UpdateWorkflowParams, prepares a PATCH request to the ServiceNow wf_workflow table endpoint, and returns the updated workflow details or error.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 BaseModel defining the input schema (parameters) for the update_workflow tool, including required workflow_id and optional update fields.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:525-531 (registration)Tool registration entry in get_tool_definitions() dictionary, associating 'update_workflow' name with its handler (update_workflow_tool), input schema (UpdateWorkflowParams), description, and serialization settings."update_workflow": ( update_workflow_tool, UpdateWorkflowParams, str, # Expects JSON string "Update an existing workflow in ServiceNow", "json_dict", # Tool returns Pydantic model ),