The UCI protocol as publicised by Stefan-Meyer Kahlen (ShredderChess)

Move format:

The move format is in long algebraic notation. A null move from the Engine to the GUI should be sent as 0000. Examples: e2e4, e7e5, e1g1 (white short castling), e7e8q (for promotion)

GUI to engine:

These are all the command the engine gets from the interface.

Engine to GUI:

Example:

This is how the communication when the engine boots can look like:

GUI     engine

// tell the engine to switch to UCI mode
uci

// engine identify
      id name Shredder
      id author Stefan MK
// engine sends the options it can change
// the engine can change the hash size from 1 to 128 MB
      option name Hash type spin default 1 min 1 max 128
// the engine supports Nalimov endgame tablebases
      option name NalimovPath type string default
      option name NalimovCache type spin default 1 min 1 max 32

// the engine can switch off Nullmove and set the playing style
      option name Nullmove type check default true option name Style type combo default Normal var Solid var Normal var Risky
// the engine has sent all parameters and is ready
     uciok
// Note: here the GUI can already send a "quit" command if it just wants to find out
//       details about the engine, so the engine should not initialize its internal
//       parameters before here.
// now the GUI sets some values in the engine
// set hash to 32 MB
setoption name Hash value 32

// init tbs
setoption name NalimovCache value 1
setoption name NalimovPath value d:\tb;c\tb

// waiting for the engine to finish initializing
// this command and the answer is required here!
isready

// engine has finished setting up the internal values
      readyok
// now we are ready to go

// if the GUI is supporting it, tell the engine that is is
// searching on a game that is hasn't searched on before
ucinewgame

// if the engine supports the "UCI_AnalyseMode" option and the next search is supposted to
// be an analysis, the GUI should set "UCI_AnalyseMode" to true if it is currently
// set to false with this engine
setoption name UCI_AnalyseMode value true

// tell the engine to search infinite from the start position after 1.e4 e5
position startpos moves e2e4 e7e5
go infinite

// the engine starts sending infos about the search to the GUI
// (only some examples are given)

      info depth 1 seldepth 0 info score cp 13  depth 1 nodes 13 time 15 pv f1b5      info depth 2 seldepth 2
      info nps 15937 info score cp 14  depth 2 nodes 255 time 15 pv f1c4 f8c5      info depth 2 seldepth 7 nodes 255
      info depth 3 seldepth 7 info nps 26437 info score cp 20  depth 3 nodes 423 time 15 pv f1c4 g8f6 b1c3      info nps 41562
      ....

// here the user has seen enough and asks to stop the searching
stop

// the engine has finished searching and is sending the bestmove command
// which is needed for every "go" command sent to tell the GUI
// that the engine is ready again
      bestmove g1f3 ponder d8f6