Here’s a JScript snippet that finds render tree nodes that are not connected to anything in the render tree.
LogMessage( isConnected( Selection(0) ) );
function isConnected( o )
{
var oDR = XSIUtils.DataRepository ;
var strOpInfo = oDR.GetConnectionStackInfo( o )
// LogMessage( strOpInfo );
var oTopNode = ParseXML( strOpInfo ) ;
var oConnections = oTopNode.childNodes ;
if ( oConnections.length == 0 )
{
return false;
}
return true;
}
function ParseXML( strXML )
{
var oXMLParser = new ActiveXObject("Microsoft.XMLDOM")
oXMLParser.async = false
oXMLParser.loadXML( strXML ) ;
if (oXMLParser.parseError.errorCode != 0)
{
logmessage( "Invalid XML " + oXMLParser.parseError.reason , siError ) ;
return null ;
}
// the xsi_file node
// If this is NULL we must have failed to load the XML
var oTopNode = oXMLParser.documentElement ;
return oTopNode ;
}
Most of this JScript came from the SDK Explorer code in $XSI_HOME\Addons\sdkui\Application\Plugins\SDKExplorer.js, because I noticed that disconnected shaders would have an empty connection stack, and I didn’t want to go through all the parameters individually looking for connections.

Here’s a Python version that does a little more: it follows the output connections to check whether or not the shader is ultimately connected the material.
# Python Code
import xml.etree.ElementTree as etree
def is_connected( o ):
if not o.IsClassOf( 52 ):
print "Input is not a shader"
return False
sXML = XSIUtils.DataRepository.GetConnectionStackInfo( o )
root = etree.fromstring( sXML )
for connection in root:
if connection.find('type').text == 'out':
x = Application.Dictionary.GetObject( connection.find('object').text )
return True if x.IsClassOf( 64 ) else is_connected( x )
return False
print is_connected( Application.Selection(0) )