Is there any way to send a RPC to the server which contains for example:

public class Cat {
	public int ID = -1;
	public int Amount = 0;
	public int Slot = 0;
}

Without having to decode it and send it in 3 different arrays.
or if not is there any way to return multiple variables from one function:

return ID, Amount, Slot; //Would this work?

Not in C#, my friend.

However, you may simply pass that cat around whereever you want. (although typically maintaining an internal database of cats and referencing the cats from that central location would definitely be a better solution as to prevent strange duplication errors in your game.)

public Cat CreateCat(int id)
{
    return new Cat() {
        ID = id
    };
}

Here’s how to use the cat:

// This variable makes it so that when a cat gets created, 
// each cat has its own unique ID number.
private static int NUMBER_OF_CATS = 0;

public void TestCreateCatFunctionThatGuyOnlineMade()
{
   // Create a cat with a specific ID. This cat will
   // have its Amount and Slot variables defaulted to 0
   // as defined by the Cat script.
   Cat cat = CreateCat(NUMBER_OF_CATS++); // 0, 1, 2, etc.
   
   // Modify the amount. Is this supposed to be Hit Points or something?
   cat.Amount = 20;
   
   // Let's say you're maintaining a static database somewhere in your game.
   // This function would be the thing that interacts with your database.
   AddCatToAvailableSlot(cat);
}

public void AddCatToAvailableSlot(Cat cat)
{
   // Add the cat to the database here?
   // Then return the 'Slot' the cat is in.
   cat.Slot = 1; // Instead of '1', put your database return.
}