diff --git a/pkg/jsonrpc/json.go b/pkg/jsonrpc/json.go
index 4ab13f3d9e1837893b9f51da14e20da054a50c40..40055ccfe349d3d3022ed6e082b46e4bb9fadfa7 100644
--- a/pkg/jsonrpc/json.go
+++ b/pkg/jsonrpc/json.go
@@ -17,8 +17,6 @@ func NewNull() json.RawMessage {
 	return json.RawMessage("null")
 }
 
-type ExtraFields map[string]json.RawMessage
-
 // A value of this type can a JSON-RPC request, notification, successful response or
 // error response. Which one it is depends on the fields.
 type Message struct {
@@ -28,8 +26,6 @@ type Message struct {
 	Error  error           `json:"error,omitempty"`
 
 	Result io.ReadCloser `json:"result,omitempty"`
-
-	ExtraFields ExtraFields `json:"-"`
 }
 
 func NewStringReader(x string) io.ReadCloser {
@@ -52,11 +48,6 @@ func MarshalMessage(m *Message, enc *jx.Encoder) (err error) {
 				e.Str(m.Method)
 			})
 		}
-		for k, v := range m.ExtraFields {
-			e.Field(k, func(e *jx.Encoder) {
-				e.Raw(v)
-			})
-		}
 		if m.Error != nil {
 			e.Field("error", func(e *jx.Encoder) {
 				EncodeError(e, m.Error)
@@ -91,17 +82,6 @@ func MarshalMessage(m *Message, enc *jx.Encoder) (err error) {
 func UnmarshalMessage(m *Message, dec *jx.Decoder) error {
 	err := dec.Obj(func(d *jx.Decoder, key string) (err error) {
 		switch key {
-		default:
-			val, err := d.Raw()
-			if err != nil {
-				return err
-			}
-			buf := bytes.NewBuffer(make(json.RawMessage, len(val)))
-			buf.Write(val)
-			if m.ExtraFields == nil {
-				m.ExtraFields = ExtraFields{}
-			}
-			m.ExtraFields[key] = buf.Bytes()
 		case "jsonrpc":
 			value, err := d.Str()
 			if err != nil {
@@ -216,31 +196,6 @@ func IsBatchMessage(raw json.RawMessage) bool {
 	return false
 }
 
-func (m ExtraFields) SetExtraField(name string, v any) (err error) {
-	switch name {
-	case "id", "jsonrpc", "method", "params", "result", "error":
-		return fmt.Errorf("%w: %q", ErrIllegalExtraField, name)
-	}
-	if v == nil {
-		delete(m, name)
-	}
-	val, err := json.Marshal(v)
-	if err != nil {
-		return err
-	}
-	m[name] = val
-	return nil
-}
-func (m ExtraFields) Clear() {
-	for k := range m {
-		delete(m, k)
-	}
-}
-
-func (m *Message) SetExtraField(name string, v any) error {
-	return m.ExtraFields.SetExtraField(name, v)
-}
-
 // parseMessage parses raw bytes as a (batch of) JSON-RPC message(s). There are no error
 // checks in this function because the raw message has already been syntax-checked when it
 // is called. Any non-JSON-RPC messages in the input return the zero value of
diff --git a/pkg/jsonrpc/reqresp.go b/pkg/jsonrpc/reqresp.go
index 4358225068900d3a53d847d7beef4cad2ed7be8e..ebff64f8ef9de09649d1186568044360615740b8 100644
--- a/pkg/jsonrpc/reqresp.go
+++ b/pkg/jsonrpc/reqresp.go
@@ -10,7 +10,6 @@ import (
 type ResponseWriter interface {
 	Send(v any, err error) error
 	Notify(method string, v any) error
-	ExtraFields() ExtraFields
 }
 
 // BatchElem is an element in a batch request.
@@ -119,7 +118,6 @@ func (r *Request) WithContext(ctx context.Context) *Request {
 	r2.Method = r.Method
 	r2.Params = r.Params
 	r2.Error = r.Error
-	r2.ExtraFields = r.ExtraFields
 	r2.Peer = r.Peer
 	return r2
 }
diff --git a/pkg/server/responsewriter.go b/pkg/server/responsewriter.go
index 4a9df24143d293e3329588b8388b70383e22c76c..1e2bc06a123befd8d98f9180050ef654af4ed48f 100644
--- a/pkg/server/responsewriter.go
+++ b/pkg/server/responsewriter.go
@@ -38,9 +38,8 @@ func (c *streamingRespWriter) Send(v any, e error) (err error) {
 	}
 	c.sendCalled = true
 	ce := &callEnv{
-		err:         c.err,
-		id:          c.msg.ID,
-		extrafields: c.msg.ExtraFields,
+		err: c.err,
+		id:  c.msg.ID,
 	}
 	// only override error if not already set
 	if ce.err == nil {
@@ -67,10 +66,6 @@ func (c *streamingRespWriter) Send(v any, e error) (err error) {
 	return nil
 }
 
-func (c *streamingRespWriter) ExtraFields() jsonrpc.ExtraFields {
-	return c.msg.ExtraFields
-}
-
 func (c *streamingRespWriter) Notify(method string, v any) error {
 	err := c.cr.mu.Acquire(c.ctx, 1)
 	if err != nil {
@@ -80,7 +75,6 @@ func (c *streamingRespWriter) Notify(method string, v any) error {
 	err = c.cr.notify(c.ctx, &notifyEnv{
 		method: method,
 		dat:    v,
-		extra:  c.msg.ExtraFields,
 	})
 	if err != nil {
 		return err
diff --git a/pkg/server/rw_batch.go b/pkg/server/rw_batch.go
index e3073bf8417b4d8763600f93b28c7eed5cb3bfeb..e102594ca7423aa43b80a84b84eea7974ed32b99 100644
--- a/pkg/server/rw_batch.go
+++ b/pkg/server/rw_batch.go
@@ -61,10 +61,6 @@ func (c *batchingRespWriter) Send(v any, e error) (err error) {
 	return nil
 }
 
-func (c *batchingRespWriter) ExtraFields() jsonrpc.ExtraFields {
-	return c.msg.ExtraFields
-}
-
 func (c *batchingRespWriter) Notify(method string, v any) error {
 	err := c.cr.mu.Acquire(c.ctx, 1)
 	if err != nil {
@@ -74,7 +70,6 @@ func (c *batchingRespWriter) Notify(method string, v any) error {
 	err = c.cr.notify(c.ctx, &notifyEnv{
 		method: method,
 		dat:    v,
-		extra:  c.msg.ExtraFields,
 	})
 	if err != nil {
 		return err
diff --git a/pkg/server/server.go b/pkg/server/server.go
index 350bce9a94ab2689760a2529135f64a474174103..890dc5013212ce682b1af4b091e47478c95d7ae5 100644
--- a/pkg/server/server.go
+++ b/pkg/server/server.go
@@ -132,7 +132,6 @@ func produceOutputMessage(inputMessage *jsonrpc.Message) (out *jsonrpc.Message,
 		err = jsonrpc.NewInvalidRequestError("invalid request")
 	}
 	out = inputMessage
-	out.ExtraFields = jsonrpc.ExtraFields{}
 	out.Error = nil
 	// zero length method is always invalid request
 	if len(out.Method) == 0 {
@@ -238,10 +237,9 @@ func (s *Server) serveBatch(ctx context.Context,
 		}
 		for i, v := range batchResults {
 			err = r.send(ctx, &callEnv{
-				v:           v.payload,
-				err:         v.err,
-				id:          v.msg.ID,
-				extrafields: v.msg.ExtraFields,
+				v:   v.payload,
+				err: v.err,
+				id:  v.msg.ID,
 			})
 			if err != nil {
 				return err
@@ -285,10 +283,9 @@ type callResponder struct {
 }
 
 type callEnv struct {
-	v           any
-	err         error
-	id          *jsonrpc.ID
-	extrafields jsonrpc.ExtraFields
+	v   any
+	err error
+	id  *jsonrpc.ID
 }
 
 func (c *callResponder) send(ctx context.Context, env *callEnv) (err error) {
@@ -305,13 +302,6 @@ func (c *callResponder) send(ctx context.Context, env *callEnv) (err error) {
 				e.Raw(env.id.RawMessage())
 			})
 		}
-		if env.extrafields != nil {
-			for k, v := range env.extrafields {
-				e.Field(k, func(e *jx.Encoder) {
-					e.Raw(v)
-				})
-			}
-		}
 		if env.err != nil {
 			e.Field("error", func(e *jx.Encoder) {
 				jsonrpc.EncodeError(e, env.err)
@@ -359,7 +349,6 @@ func (c *callResponder) send(ctx context.Context, env *callEnv) (err error) {
 type notifyEnv struct {
 	method string
 	dat    any
-	extra  jsonrpc.ExtraFields
 }
 
 func (c *callResponder) notify(ctx context.Context, env *notifyEnv) (err error) {
@@ -373,7 +362,6 @@ func (c *callResponder) notify(ctx context.Context, env *notifyEnv) (err error)
 	} else {
 		msg.Params = buf.Bytes()
 	}
-	msg.ExtraFields = env.extra
 	// add the method
 	msg.Method = env.method
 	enc := jx.GetEncoder()