Expose `jsonrpc2.MakeID`, `jsonrpc2.EncodeMessage` and `jsonrpc2.DecodeMessage` functions to allow implementing custom `mcp.Transport`. Add an example that demonstrates a custom transport implementation. Fixes #110.
39 lines
1.3 KiB
Go
39 lines
1.3 KiB
Go
// Copyright 2025 The Go MCP SDK Authors. All rights reserved.
|
|
// Use of this source code is governed by an MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package jsonrpc exposes part of a JSON-RPC v2 implementation
|
|
// for use by mcp transport authors.
|
|
package jsonrpc
|
|
|
|
import "github.com/modelcontextprotocol/go-sdk/internal/jsonrpc2"
|
|
|
|
type (
|
|
// ID is a JSON-RPC request ID.
|
|
ID = jsonrpc2.ID
|
|
// Message is a JSON-RPC message.
|
|
Message = jsonrpc2.Message
|
|
// Request is a JSON-RPC request.
|
|
Request = jsonrpc2.Request
|
|
// Response is a JSON-RPC response.
|
|
Response = jsonrpc2.Response
|
|
)
|
|
|
|
// MakeID coerces the given Go value to an ID. The value is assumed to be the
|
|
// default JSON marshaling of a Request identifier -- nil, float64, or string.
|
|
//
|
|
// Returns an error if the value type was not a valid Request ID type.
|
|
func MakeID(v any) (ID, error) {
|
|
return jsonrpc2.MakeID(v)
|
|
}
|
|
|
|
// EncodeMessage serializes a JSON-RPC message to its wire format.
|
|
func EncodeMessage(msg Message) ([]byte, error) {
|
|
return jsonrpc2.EncodeMessage(msg)
|
|
}
|
|
|
|
// DecodeMessage deserializes JSON-RPC wire format data into a Message.
|
|
// It returns either a Request or Response based on the message content.
|
|
func DecodeMessage(data []byte) (Message, error) {
|
|
return jsonrpc2.DecodeMessage(data)
|
|
}
|