RCCs (and RFCs) must be within a class that derives from MonoBehaviour. TNet uses reflection to cache all RCCs at startup. This reflection process first gets all Type's from all Assemblies in the current AppDomain (excluding some built-in ones). Then it narrows this further by checking if the Type derives from MonoBehaviour. Then it checks if the Type has the RCC attribute, whether the return type is GameObject, and if the optional RCC ID is within 1-255.
RFCs are cached similarly, except this is done on each TNObject instance, and instead of getting all Type's from all Assemblies, it simply calls GetComponentsInChildren. You probably didn't notice this because TNObject itself is a MonoBehaviour.
It doesn't look like this is mentioned in the tutorials on google docs, but I believe I made a post about it some time ago. Intuitively, though, you wouldn't have an RCC on a non-MonoBehaviour class because you wouldn't instantiate a non-MonoBehaviour class using Unity's Instantiate function and the RCC return type must be a GameObject.
And just to avoid any future issues: your custom RCC IDs should be between 4 and 255 as TNManager uses 1-3 for default fallbacks. I don't think many people use the IDs though. Even though it's faster and results in smaller packets