diff --git a/contrib/jrpcutil/errorcatcher.go b/contrib/jrpcutil/errorcatcher.go
new file mode 100644
index 0000000000000000000000000000000000000000..979c282140ff7be7e816e27f9131f34286d6dc3b
--- /dev/null
+++ b/contrib/jrpcutil/errorcatcher.go
@@ -0,0 +1,21 @@
+package jrpcutil
+
+import "gfx.cafe/open/jrpc/pkg/jsonrpc"
+
+type ErrorRecorder struct {
+	jsonrpc.ResponseWriter
+
+	err error
+}
+
+func (e *ErrorRecorder) Send(v any, err error) error {
+	newErr := e.ResponseWriter.Send(v, err)
+	if err != nil {
+		e.err = err
+	}
+	return newErr
+}
+
+func (e *ErrorRecorder) Error() error {
+	return e.err
+}