add_comment
Add comments or work notes to ServiceNow incidents using incident ID and comment text. Facilitates incident updates and collaboration directly through the ServiceNow MCP Server.
Instructions
Add a comment to an incident in ServiceNow
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| comment | Yes | Comment to add to the incident | |
| incident_id | Yes | Incident ID or sys_id | |
| is_work_note | No | Whether the comment is a work note |
Implementation Reference
- The core handler function that executes the 'add_comment' tool. It resolves the incident ID (number or sys_id), determines if it's a work note or comment, and performs a PUT request to the ServiceNow incident table API to add the comment.def add_comment( config: ServerConfig, auth_manager: AuthManager, params: AddCommentParams, ) -> IncidentResponse: """ Add a comment to an incident in ServiceNow. Args: config: Server configuration. auth_manager: Authentication manager. params: Parameters for adding the comment. Returns: Response with the result of the operation. """ # Determine if incident_id is a number or sys_id incident_id = params.incident_id if len(incident_id) == 32 and all(c in "0123456789abcdef" for c in incident_id): # This is likely a sys_id api_url = f"{config.api_url}/table/incident/{incident_id}" else: # This is likely an incident number # First, we need to get the sys_id try: query_url = f"{config.api_url}/table/incident" query_params = { "sysparm_query": f"number={incident_id}", "sysparm_limit": 1, } response = requests.get( query_url, params=query_params, headers=auth_manager.get_headers(), timeout=config.timeout, ) response.raise_for_status() result = response.json().get("result", []) if not result: return IncidentResponse( success=False, message=f"Incident not found: {incident_id}", ) incident_id = result[0].get("sys_id") api_url = f"{config.api_url}/table/incident/{incident_id}" except requests.RequestException as e: logger.error(f"Failed to find incident: {e}") return IncidentResponse( success=False, message=f"Failed to find incident: {str(e)}", ) # Build request data data = {} if params.is_work_note: data["work_notes"] = params.comment else: data["comments"] = params.comment # Make request try: response = requests.put( api_url, json=data, headers=auth_manager.get_headers(), timeout=config.timeout, ) response.raise_for_status() result = response.json().get("result", {}) return IncidentResponse( success=True, message="Comment added successfully", incident_id=result.get("sys_id"), incident_number=result.get("number"), ) except requests.RequestException as e: logger.error(f"Failed to add comment: {e}") return IncidentResponse( success=False, message=f"Failed to add comment: {str(e)}", )
- Pydantic model defining the input parameters for the add_comment tool: incident_id, comment, and is_work_note flag.class AddCommentParams(BaseModel): """Parameters for adding a comment to an incident.""" incident_id: str = Field(..., description="Incident ID or sys_id") comment: str = Field(..., description="Comment to add to the incident") is_work_note: bool = Field(False, description="Whether the comment is a work note")
- src/servicenow_mcp/utils/tool_utils.py:332-338 (registration)Registers the 'add_comment' tool in the central tool definitions dictionary used by the MCP server, associating the handler function, input schema, return type hint, description, and serialization method."add_comment": ( add_comment_tool, AddCommentParams, str, "Add a comment to an incident in ServiceNow", "str", ),