mcp: don't omit required fields in ImageContent and AudioContent (#95)

Update `ImageContent` and `AudioContent` to use an inline wire format
to ensure that required fields are not omitted during JSON marshaling,
matching TypeScript schema requirements. This follows the TextContent
approach.

- `ImageContent` requires `data` and `mimeType` fields.
- `AudioContent` requires `data` and `mimeType` fields.
This commit is contained in:
Martin Emde 2025-07-19 14:08:56 -07:00 • committed by GitHub
commit dced3e4503
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -58,13 +58,25 @@ type ImageContent struct {
}
func (c *ImageContent) MarshalJSON() ([]byte, error) {
return json.Marshal(&wireContent{
// Custom wire format to ensure required fields are always included, even when empty.
data := c.Data
if data == nil {
data = []byte{}
}
wire := struct {
Type string `json:"type"`
MIMEType string `json:"mimeType"`
Data []byte `json:"data"`
Meta Meta `json:"_meta,omitempty"`
Annotations *Annotations `json:"annotations,omitempty"`
}{
Type: "image",
MIMEType: c.MIMEType,
Data: c.Data,
Data: data,
Meta: c.Meta,
Annotations: c.Annotations,
})
}
return json.Marshal(wire)
}
func (c *ImageContent) fromWire(wire *wireContent) {
@ -83,13 +95,25 @@ type AudioContent struct {
}
func (c AudioContent) MarshalJSON() ([]byte, error) {
return json.Marshal(&wireContent{
// Custom wire format to ensure required fields are always included, even when empty.
data := c.Data
if data == nil {
data = []byte{}
}
wire := struct {
Type string `json:"type"`
MIMEType string `json:"mimeType"`
Data []byte `json:"data"`
Meta Meta `json:"_meta,omitempty"`
Annotations *Annotations `json:"annotations,omitempty"`
}{
Type: "audio",
MIMEType: c.MIMEType,
Data: c.Data,
Data: data,
Meta: c.Meta,
Annotations: c.Annotations,
})
}
return json.Marshal(wire)
}
func (c *AudioContent) fromWire(wire *wireContent) {