Server should send info operations in both format. Clients can always interpret info about create,etc.. operations and if they know more complex ones they can play suitable animation or NPC can remember somebody stealing etc...
When client wants to do something or get info about something, it sends some operation derived from action. Server usually replies with some operation derived from info, which might embed original action.
Example:
client: forge("jewel_sword","jewels","iron")
server: sight(forge("jewel_sword","jewels","iron")
server: info(create("jewel_sword",length=1.2, etc...))
server: info(set("iron",amount=current-something))
server: info(destroy("jewels"))
When sending operations use parent:"move" instead of id:"move"
Reason: so we can distinguish between operation and object that
tells what operation is about and all operations when used are
temporary objects anyway (maybe "magical_crunchy_voice_stepping" is not ;-)