update_project
Modify an existing ServiceNow project by updating its details such as status, description, assignment group, completion percentage, and timeline information.
Instructions
Update an existing project in ServiceNow
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| assigned_to | No | User assigned to the project | |
| assignment_group | No | Group assigned to the project | |
| description | No | Detailed description of the project | |
| end_date | No | End date for the project | |
| percentage_complete | No | Percentage complete for the project | |
| project_id | Yes | Project ID or sys_id | |
| project_manager | No | Project manager for the project | |
| short_description | No | Project name of the project | |
| start_date | No | Start date for the project | |
| state | No | State of project (-5 is Pending,1 is Open, 2 is Work in progress, 3 is Closed Complete, 4 is Closed Incomplete, 5 is Closed Skipped) | |
| status | No | Status of the project (green, yellow, red) |
Implementation Reference
- The core handler function implementing the update_project tool. It validates input parameters using UpdateProjectParams, prepares a PUT request to the ServiceNow pm_project table API, handles authentication via config and auth_manager, and returns success/error responses with project details.def update_project( config: ServerConfig, # Changed from auth_manager auth_manager: AuthManager, # Changed from server_config params: Dict[str, Any], ) -> Dict[str, Any]: """ Update an existing project in ServiceNow. Args: config: The server configuration. auth_manager: The authentication manager. params: The parameters for updating the project. Returns: The updated project. """ # Unwrap and validate parameters result = _unwrap_and_validate_params( params, UpdateProjectParams, required_fields=["project_id"] ) if not result["success"]: return result validated_params = result["params"] # Prepare the request data data = {} # Add optional 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.status: data["status"] = validated_params.status if validated_params.state: data["state"] = validated_params.state if validated_params.assignment_group: data["assignment_group"] = validated_params.assignment_group if validated_params.percentage_complete: data["percentage_complete"] = validated_params.percentage_complete if validated_params.assigned_to: data["assigned_to"] = validated_params.assigned_to if validated_params.project_manager: data["project_manager"] = validated_params.project_manager if validated_params.start_date: data["start_date"] = validated_params.start_date if validated_params.end_date: data["end_date"] = validated_params.end_date # Get the instance URL instance_url = _get_instance_url(auth_manager, 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, 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/pm_project/{validated_params.project_id}" try: response = requests.put(url, json=data, headers=headers) response.raise_for_status() result = response.json() return { "success": True, "message": "Project updated successfully", "project": result["result"], } except requests.exceptions.RequestException as e: logger.error(f"Error updating project: {e}") return { "success": False, "message": f"Error updating project: {str(e)}", }
- Pydantic BaseModel defining the input schema for the update_project tool, including required project_id and optional fields for project attributes.class UpdateProjectParams(BaseModel): """Parameters for updating a project.""" project_id: str = Field(..., description="Project ID or sys_id") short_description: Optional[str] = Field(None, description="Project name of the project") description: Optional[str] = Field(None, description="Detailed description of the project") status: Optional[str] = Field(None, description="Status of the project (green, yellow, red)") state: Optional[str] = Field(None, description="State of project (-5 is Pending,1 is Open, 2 is Work in progress, 3 is Closed Complete, 4 is Closed Incomplete, 5 is Closed Skipped)") project_manager: Optional[str] = Field(None, description="Project manager for the project") percentage_complete: Optional[int] = Field(None, description="Percentage complete for the project") assignment_group: Optional[str] = Field(None, description="Group assigned to the project") assigned_to: Optional[str] = Field(None, description="User assigned to the project") start_date: Optional[str] = Field(None, description="Start date for the project") end_date: Optional[str] = Field(None, description="End date for the project")
- src/servicenow_mcp/utils/tool_utils.py:931-937 (registration)Registration entry in the get_tool_definitions() function's tool_definitions dictionary. Maps the 'update_project' name to its aliased handler function, input schema, return type hint, description, and serialization method ('str'). This centralizes tool registration for the MCP server."update_project": ( update_project_tool, UpdateProjectParams, str, "Update an existing project in ServiceNow", "str", ),
- src/servicenow_mcp/utils/tool_utils.py:331-335 (registration)Import aliasing the update_project function from project_tools.py as update_project_tool, used in the tool definitions dictionary for registration.from servicenow_mcp.tools.project_tools import ( create_project as create_project_tool, update_project as update_project_tool, list_projects as list_projects_tool, )