Skip to content

Clarify client handling of structuredContent vs content fields #1411

@dsp-ant

Description

@dsp-ant

Summary

There is confusion and inconsistency in how MCP clients should handle structuredContent vs regular content fields in tool responses. This is causing fragmentation where different clients behave differently with the same servers.

Problem Details

From Discord discussion:

  1. Inconsistent client support: Only Cursor currently supports structuredContent, while other clients (CC/Windsurf) ignore it
  2. Different server responses: Some servers return different data in structuredContent vs content instead of treating content as a backwards-compatible stringified version
  3. Untested outputs: Because only one client supports it, structuredContent outputs are poorly tested and of lower quality
  4. Unclear specification: The spec doesn't clearly define:
    • How clients MUST handle structuredContent when present
    • Whether content should always be a stringified version of structuredContent
    • The exact backwards compatibility requirements

Current Behavior

Different clients handle this differently:

  • Cursor: Uses structuredContent when available, stringifies it to content
  • Most other clients: Ignore structuredContent entirely
  • This leads to servers performing differently across different clients

Expected Behavior

The specification should clearly define:

  1. How clients MUST handle structuredContent when present
  2. The relationship between structuredContent and content fields
  3. Backwards compatibility requirements for servers
  4. Whether clients that support structuredContent should prefer it over content

Proposed Solution

Update the specification to be more explicit about:

  • Client requirements for handling structuredContent
  • Server requirements for populating both fields consistently
  • The intended fallback behavior for backwards compatibility

References

cc: @dsp-ant

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions