diff --git a/pkg/server/server.go b/pkg/server/server.go
index e006669a59b06f1db5c3be54c18b8ec219a33eee..e9e9e7d96642cf953d2c4f1fa79888afd83293cb 100644
--- a/pkg/server/server.go
+++ b/pkg/server/server.go
@@ -237,15 +237,25 @@ func (c *callResponder) send(ctx context.Context, env *callEnv) (err error) {
 					// if there is no error, we try to marshal the result
 					e.Field("result", func(e *jx.Encoder) {
 						if v.dat != nil {
-							err = json.NewEncoder(e).EncodeWithOption(v.dat, func(eo *json.EncodeOption) {
-								eo.DisableNewline = true
-							})
-							if err != nil {
+							switch c := v.dat.(type) {
+							case json.RawMessage:
+								e.Raw(c)
+							default:
+								err = json.NewEncoder(e).EncodeWithOption(v.dat, func(eo *json.EncodeOption) {
+									eo.DisableNewline = true
+								})
 							}
 						} else {
 							e.Null()
 						}
 					})
+					// a json encoding error here is possibly fatal.... try to encode the error, but there are no promises
+					if err != nil {
+						e.Field("error", func(e *jx.Encoder) {
+							codec.EncodeError(e, m.Error)
+						})
+						return
+					}
 				}
 			})
 		}