I would use an auxiliary function char-plus to add or subtract an offset to a character:
(define (caesar str n)
(define (char-plus c)
(let ((alpha "ABCDEFGHIJKLMNOPQRSTUVWXYZ"))
(if (not (char-alphabetic? c)) c
(let ((i (- (char->integer (char-upcase c)) 65)))
(string-ref alpha (modulo (+ i n) 26))))))
(list->string (map char-plus (string->list str))))
Then here are your two examples; decryption is just encryption by the negative:
> (caesar "To craunch the marmoset." 1)
"UP DSBVODI UIF NBSNPTFU."
> (caesar "UP DSBVODI UIF NBSNPTFU." -1)
"TO CRAUNCH THE MARMOSET."