Skip to main content
Glama
JLKmach

ServiceNow MCP Server

by JLKmach

update_changeset

Modify existing ServiceNow changesets by updating name, description, state, or assigned developer to reflect current project requirements and status.

Instructions

Update an existing changeset in ServiceNow

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
changeset_idYesChangeset ID or sys_id
nameNoName of the changeset
descriptionNoDescription of the changeset
stateNoState of the changeset
developerNoDeveloper responsible for the changeset

Implementation Reference

  • Core handler function that validates parameters, prepares PATCH data, and calls ServiceNow API to update the changeset.
    def update_changeset( auth_manager: AuthManager, server_config: ServerConfig, params: Union[Dict[str, Any], UpdateChangesetParams], ) -> Dict[str, Any]: """ Update an existing changeset in ServiceNow. Args: auth_manager: The authentication manager. server_config: The server configuration. params: The parameters for updating a changeset. Can be a dictionary or a UpdateChangesetParams object. Returns: The updated changeset. """ # Unwrap and validate parameters result = _unwrap_and_validate_params( params, UpdateChangesetParams, required_fields=["changeset_id"] ) if not result["success"]: return result validated_params = result["params"] # Prepare the request data data = {} # Add optional fields if provided if validated_params.name: data["name"] = validated_params.name if validated_params.description: data["description"] = validated_params.description if validated_params.state: data["state"] = validated_params.state if validated_params.developer: data["developer"] = validated_params.developer # If no fields to update, return error if not data: return { "success": False, "message": "No fields to update", } # 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/sys_update_set/{validated_params.changeset_id}" try: response = requests.patch(url, json=data, headers=headers) response.raise_for_status() result = response.json() return { "success": True, "message": "Changeset updated successfully", "changeset": result["result"], } except requests.exceptions.RequestException as e: logger.error(f"Error updating changeset: {e}") return { "success": False, "message": f"Error updating changeset: {str(e)}", }
  • Pydantic BaseModel defining the input schema for the update_changeset tool, including required changeset_id and optional fields.
    class UpdateChangesetParams(BaseModel): """Parameters for updating a changeset.""" changeset_id: str = Field(..., description="Changeset ID or sys_id") name: Optional[str] = Field(None, description="Name of the changeset") description: Optional[str] = Field(None, description="Description of the changeset") state: Optional[str] = Field(None, description="State of the changeset") developer: Optional[str] = Field(None, description="Developer responsible for the changeset")
  • Registration of the 'update_changeset' tool in the MCP tool definitions dictionary, linking the aliased handler, input schema, description, and serialization handling.
    "update_changeset": ( update_changeset_tool, UpdateChangesetParams, str, # Expects JSON string "Update an existing changeset in ServiceNow", "json_dict", # Tool returns Pydantic model ),
  • Package-level import and export of the update_changeset function, making it available from the tools module.
    from servicenow_mcp.tools.changeset_tools import ( add_file_to_changeset, commit_changeset, create_changeset, get_changeset_details, list_changesets, publish_changeset, update_changeset, )
  • Helper function used by the handler to unwrap dictionary or Pydantic model params, validate against schema, and check required fields.
    def _unwrap_and_validate_params( params: Union[Dict[str, Any], BaseModel], model_class: Type[T], required_fields: Optional[List[str]] = None ) -> Dict[str, Any]: """ Unwrap and validate parameters. Args: params: The parameters to unwrap and validate. Can be a dictionary or a Pydantic model. model_class: The Pydantic model class to validate against. required_fields: List of fields that must be present. Returns: A dictionary with success status and validated parameters or error message. """ try: # Handle case where params is already a Pydantic model if isinstance(params, BaseModel): # If it's already the correct model class, use it directly if isinstance(params, model_class): model_instance = params # Otherwise, convert to dict and create new instance else: model_instance = model_class(**params.dict()) # Handle dictionary case else: # Create model instance model_instance = model_class(**params) # Check required fields if required_fields: missing_fields = [] for field in required_fields: if getattr(model_instance, field, None) is None: missing_fields.append(field) if missing_fields: return { "success": False, "message": f"Missing required fields: {', '.join(missing_fields)}", } return { "success": True, "params": model_instance, } except Exception as e: return { "success": False, "message": f"Invalid parameters: {str(e)}", }

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