Access other BLE descriptors beyond the CCCD

It's possible to set the notification on a descriptor with a profile like

// profile to register
private const _BluefinProfileDef = {
        :uuid => BLUEFIN_DATA_SERVICE,
        :characteristics => [{
            :uuid => CHANNEL1_CHARACTERISTIC,
			:descriptors => [Ble.cccdUuid()]
        }]
    };
    
// sample call to set notifications
MY_CHAR.getDescriptor(Ble.cccdUuid()).requestWrite([0x01,0x00]b)

Bit there are a number of other defined descriptors within the specification 

GATT Descriptor 0x2900 Characteristic Extended Properties
GATT Descriptor 0x2901 Characteristic User Description
GATT Descriptor 0x2902 Client Characteristic Configuration
GATT Descriptor 0x2903 Server Characteristic Configuration
GATT Descriptor 0x2904 Characteristic Presentation Format
GATT Descriptor 0x2905 Characteristic Aggregate Format
GATT Descriptor 0x2906 Valid Range
GATT Descriptor 0x2907 External Report Reference
GATT Descriptor 0x2908 Report Reference
GATT Descriptor 0x2909 Number of Digitals
GATT Descriptor 0x290A Value Trigger Setting
GATT Descriptor 0x290B Environmental Sensing Configuration
GATT Descriptor 0x290C Environmental Sensing Measurement
GATT Descriptor 0x290D Environmental Sensing Trigger Setting
GATT Descriptor 0x290E Time Trigger Setting
GATT Descriptor 0x290F Complete BR-EDR Transport Block Data

I have tried various ways to read from these other descriptors but all my attempts have resulted in an exception.  In theory a 16 bit UUID can be computed from a 128bit UUID using 

128_bit_value = 16_bit_value * 2^96 + Bluetooth_Base_UUID
128_bit_value = 32_bit_value * 2^96 + Bluetooth_Base_UUID

so I have tried 

// 128bit UUID calculated from 16bit 0x2901
public const CLIENT_USER_DESCRIPTION = Ble.stringToUuid("00002901-0000-1000-8000-00805F9B34FB");

// settings notifications works
MY_CHAR.getDescriptor(Ble.cccdUuid()).requestWrite([0x01,0x00]b);

// but any attempt to read a different descriptor fails
MY_CHAR.getDescriptor(CLIENT_USER_DESCRIPTION).requestRead();
I can't find a way of "plugging in" a descriptor other than that returned by Ble.cccdUuid().  If that's the only possible descriptor then most of the code becomes fairly redundant and the SDK might as well provide a function that simply reads or writes the CCCD only.  In summary I want to be able to make a call like ...
// this works
MY_CHAR.getDescriptor(Ble.cccdUuid()).requestRead();

// I would like to be able to do
MY_CHAR.getDescriptor(SOME_OTHER_UUID).requestRead();