Skip to main content
Glama
echelon-ai-labs

ServiceNow MCP Server

remove_group_members

Remove specified users from a group in ServiceNow by providing the group ID and list of user sys_ids or usernames. Simplifies group management via the ServiceNow MCP Server.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
paramsYes

Implementation Reference

  • The main handler function that implements the logic to remove members from a ServiceNow group by finding and deleting sys_user_grmember records.
    def remove_group_members(
        config: ServerConfig,
        auth_manager: AuthManager,
        params: RemoveGroupMembersParams,
    ) -> GroupResponse:
        """
        Remove members from a group in ServiceNow.
    
        Args:
            config: Server configuration.
            auth_manager: Authentication manager.
            params: Parameters for removing members from the group.
    
        Returns:
            Response with the result of the operation.
        """
        success = True
        failed_members = []
    
        for member in params.members:
            # Get user ID if username is provided
            user_id = member
            if not member.startswith("sys_id:"):
                user = get_user(config, auth_manager, GetUserParams(user_name=member))
                if not user.get("success"):
                    user = get_user(config, auth_manager, GetUserParams(email=member))
    
                if user.get("success"):
                    user_id = user.get("user", {}).get("sys_id")
                else:
                    success = False
                    failed_members.append(member)
                    continue
    
            # Find and delete the group membership
            api_url = f"{config.api_url}/table/sys_user_grmember"
            query_params = {
                "sysparm_query": f"group={params.group_id}^user={user_id}",
                "sysparm_limit": "1",
            }
    
            try:
                # First find the membership record
                response = requests.get(
                    api_url,
                    params=query_params,
                    headers=auth_manager.get_headers(),
                    timeout=config.timeout,
                )
                response.raise_for_status()
    
                result = response.json().get("result", [])
                if not result:
                    success = False
                    failed_members.append(member)
                    continue
    
                # Then delete the membership record
                membership_id = result[0].get("sys_id")
                delete_url = f"{api_url}/{membership_id}"
    
                response = requests.delete(
                    delete_url,
                    headers=auth_manager.get_headers(),
                    timeout=config.timeout,
                )
                response.raise_for_status()
    
            except requests.RequestException as e:
                logger.error(f"Failed to remove member '{member}' from group: {e}")
                success = False
                failed_members.append(member)
    
        if failed_members:
            message = f"Some members could not be removed from the group: {', '.join(failed_members)}"
        else:
            message = "All members removed from the group successfully"
    
        return GroupResponse(
            success=success,
            message=message,
            group_id=params.group_id,
        )
  • Pydantic model defining the input parameters for the remove_group_members tool.
    class RemoveGroupMembersParams(BaseModel):
        """Parameters for removing members from a group."""
    
        group_id: str = Field(..., description="Group ID or sys_id")
        members: List[str] = Field(
            ..., description="List of user sys_ids or usernames to remove as members"
        )
  • Registration of the tool in the central tool definitions dictionary used by the MCP server, including function, params, description.
    "remove_group_members": (
        remove_group_members_tool,
        RemoveGroupMembersParams,
        Dict[str, Any],  # Expects dict
        "Remove members from an existing group in ServiceNow",
        "raw_dict",
    ),
  • Import of the remove_group_members function into the tools package namespace.
    remove_group_members,
  • Helper function used by remove_group_members to resolve usernames or emails to user sys_ids.
    def get_user(
        config: ServerConfig,
        auth_manager: AuthManager,
        params: GetUserParams,
    ) -> dict:
        """
        Get a user from ServiceNow.
    
        Args:
            config: Server configuration.
            auth_manager: Authentication manager.
            params: Parameters for getting the user.
    
        Returns:
            Dictionary containing user details.
        """
        api_url = f"{config.api_url}/table/sys_user"
        query_params = {}
    
        # Build query parameters
        if params.user_id:
            query_params["sysparm_query"] = f"sys_id={params.user_id}"
        elif params.user_name:
            query_params["sysparm_query"] = f"user_name={params.user_name}"
        elif params.email:
            query_params["sysparm_query"] = f"email={params.email}"
        else:
            return {"success": False, "message": "At least one search parameter is required"}
    
        query_params["sysparm_limit"] = "1"
        query_params["sysparm_display_value"] = "true"
    
        # Make request
        try:
            response = requests.get(
                api_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 {"success": False, "message": "User not found"}
    
            return {"success": True, "message": "User found", "user": result[0]}
    
        except requests.RequestException as e:
            logger.error(f"Failed to get user: {e}")
            return {"success": False, "message": f"Failed to get user: {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/echelon-ai-labs/servicenow-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server