update_change_request
Modify existing change requests in ServiceNow by updating fields like description, state, risk, impact, assignment group, and dates to reflect current status and requirements.
Instructions
Update an existing change request in ServiceNow
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| change_id | Yes | Change request ID or sys_id | |
| short_description | No | Short description of the change request | |
| description | No | Detailed description of the change request | |
| state | No | State of the change request | |
| risk | No | Risk level of the change | |
| impact | No | Impact of the change | |
| category | No | Category of the change | |
| assignment_group | No | Group assigned to the change | |
| start_date | No | Planned start date (YYYY-MM-DD HH:MM:SS) | |
| end_date | No | Planned end date (YYYY-MM-DD HH:MM:SS) | |
| work_notes | No | Work notes to add to the change request |
Implementation Reference
- Main handler function for the update_change_request tool. Validates parameters using UpdateChangeRequestParams, prepares update data, makes PUT request to ServiceNow change_request table, returns success/error with updated record.def update_change_request( auth_manager: AuthManager, server_config: ServerConfig, params: Dict[str, Any], ) -> Dict[str, Any]: """ Update an existing change request in ServiceNow. Args: auth_manager: The authentication manager. server_config: The server configuration. params: The parameters for updating the change request. Returns: The updated change request. """ # Unwrap and validate parameters result = _unwrap_and_validate_params( params, UpdateChangeRequestParams, required_fields=["change_id"] ) if not result["success"]: return result validated_params = result["params"] # Prepare the request data data = {} # Add fields if provided if validated_params.short_description: data["short_description"] = validated_params.short_description if validated_params.description: data["description"] = validated_params.description if validated_params.state: data["state"] = validated_params.state if validated_params.risk: data["risk"] = validated_params.risk if validated_params.impact: data["impact"] = validated_params.impact if validated_params.category: data["category"] = validated_params.category if validated_params.assignment_group: data["assignment_group"] = validated_params.assignment_group if validated_params.start_date: data["start_date"] = validated_params.start_date if validated_params.end_date: data["end_date"] = validated_params.end_date if validated_params.work_notes: data["work_notes"] = validated_params.work_notes # Get the instance URL instance_url = _get_instance_url(auth_manager, server_config) if not instance_url: return { "success": False, "message": "Cannot find instance_url in either server_config or auth_manager", } # Get the headers headers = _get_headers(auth_manager, server_config) if not headers: return { "success": False, "message": "Cannot find get_headers method in either auth_manager or server_config", } # Add Content-Type header headers["Content-Type"] = "application/json" # Make the API request url = f"{instance_url}/api/now/table/change_request/{validated_params.change_id}" try: response = requests.put(url, json=data, headers=headers) response.raise_for_status() result = response.json() return { "success": True, "message": "Change request updated successfully", "change_request": result["result"], } except requests.exceptions.RequestException as e: logger.error(f"Error updating change request: {e}") return { "success": False, "message": f"Error updating change request: {str(e)}", }
- Pydantic model defining the input parameters for the update_change_request tool, including required change_id and optional fields for update.class UpdateChangeRequestParams(BaseModel): """Parameters for updating a change request.""" change_id: str = Field(..., description="Change request ID or sys_id") short_description: Optional[str] = Field(None, description="Short description of the change request") description: Optional[str] = Field(None, description="Detailed description of the change request") state: Optional[str] = Field(None, description="State of the change request") risk: Optional[str] = Field(None, description="Risk level of the change") impact: Optional[str] = Field(None, description="Impact of the change") category: Optional[str] = Field(None, description="Category of the change") assignment_group: Optional[str] = Field(None, description="Group assigned to the change") start_date: Optional[str] = Field(None, description="Planned start date (YYYY-MM-DD HH:MM:SS)") end_date: Optional[str] = Field(None, description="Planned end date (YYYY-MM-DD HH:MM:SS)") work_notes: Optional[str] = Field(None, description="Work notes to add to the change request")
- src/servicenow_mcp/utils/tool_utils.py:486-492 (registration)Registration of the update_change_request tool in the central tool definitions dictionary, mapping name to (handler function alias, params schema, return type, description, serialization method)."update_change_request": ( update_change_request_tool, UpdateChangeRequestParams, str, "Update an existing change request in ServiceNow", "str", ),