diff --git a/pkg/server/server.go b/pkg/server/server.go
index aa3fdee5d5b24ddbc585c85fbcb32d031ed27477..889769186cd3f3c2ac0d55a77fcd0e857e452b02 100644
--- a/pkg/server/server.go
+++ b/pkg/server/server.go
@@ -4,7 +4,6 @@ import (
 	"context"
 	"encoding/json"
 	"errors"
-	"io"
 	"sync"
 
 	"golang.org/x/sync/semaphore"
@@ -321,20 +320,16 @@ func (c *callResponder) send(ctx context.Context, env *callEnv) (err error) {
 	switch cast := (env.v).(type) {
 	case json.RawMessage:
 		if len(cast) == 0 {
+			_, err := wr.Write(jsonrpc.Null)
+			if err != nil {
+				return err
+			}
 		} else {
 			_, err := wr.Write(cast)
 			if err != nil {
 				return err
 			}
 		}
-	case *io.PipeReader:
-		_, err := io.Copy(wr, cast)
-		if err != nil {
-			return err
-		}
-		cast.Close()
-	case func(e io.Writer) error:
-		err = cast(wr)
 	default:
 		err = jjson.Encode(w, cast)
 	}