What do you think?

Cards are represented by integers, the integer mod 13 being two less than the rank of the card. So, the 5 of clubs is card #3. Clubs are 0-12, Diamonds 13-25, Hearts 26-38, Spades 39-51, Rook 52. Card order is 2 (==0) through Ace (==12) and this is done to make hand sorting easier, because it was arbitrary anyway.
Players are numbered. 1-5 (0-4?) are playing, 6-Infinity are watching. The client is informed of what number it is.
Messages
Format is:
Message (arg)(arg)Server to client meaning
Client to server meaning

CHAT (name)(message) Player named (name) has said (message)
Player here, named (name) has said (message)
PLAYERINFO (number)(name) Player #(number) has name (name). If (name) == SOME_CONSTANT then player (number) has left the game.
I am named (name)
(This becomes unnecessary if you have login/cookie stuff)
DEALCARDS(card1)...(card10) You have been dealt cards (card1)...(card10).
N/A
PLAYERTURN (num) It is player (num)'s turn
N/A
PLAYERBID (num) (bid) Player (num) has bid (bid)
I bid (bid)
PLAYERCARD(player)(card) player (player) has played card (card)
I play card (card)
KITTY (card1)(card2)(card3)(trump call)(partnercard)(leader) Your kitty to pick from is (card1)(card2)(card3)
I left cards (card1-3) in the kitty, and declared trump (trump-call), with partner card (partnercard).
(leader) == true if I am leading my own contract.
ENDGAME(offense)(defense)(score1...5) The game has ended. Offense scored (offense). Defense scored (defense). Current player(1-5) scores are (score1...5).
PASSWORD(oldpassword)(newpassword) Change password to newpassword, if oldpassword matches stored hash.