Clarify client handling of structuredContent vs content fields
@dsp-ant is already working on this.
Since Sep 1, 2025.
Assessment
This issue has not been assessed yet.
Description
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:
- Inconsistent client support: Only Cursor currently supports
structuredContent, while other clients (CC/Windsurf) ignore it - Different server responses: Some servers return different data in
structuredContentvscontentinstead of treatingcontentas a backwards-compatible stringified version - Untested outputs: Because only one client supports it,
structuredContentoutputs are poorly tested and of lower quality - Unclear specification: The spec doesn't clearly define:
- How clients MUST handle
structuredContentwhen present - Whether
contentshould always be a stringified version ofstructuredContent - The exact backwards compatibility requirements
- How clients MUST handle
Current Behavior
Different clients handle this differently:
- Cursor: Uses
structuredContentwhen available, stringifies it tocontent - Most other clients: Ignore
structuredContententirely - This leads to servers performing differently across different clients
Expected Behavior
The specification should clearly define:
- How clients MUST handle
structuredContentwhen present - The relationship between
structuredContentandcontentfields - Backwards compatibility requirements for servers
- Whether clients that support
structuredContentshould prefer it overcontent
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
- Discord thread: https://discord.com/channels/1358869848138059966/1411057080902746293
- Related code in TS SDK: https://github.com/modelcontextprotocol/typescript-sdk/blob/3dd074f8a25b92994e0e8cc69d3ffe9112a1f32b/src/client/index.ts#L442-L475
cc: @dsp-ant
- Dominant language
- TypeScript
- Stars
- 9.3k
- Forks
- 1.8k
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 25
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from modelcontextprotocol/modelcontextprotocol
-
bug
Difficulty 1/5 Under an hour Newbie friendliness 98/100
modelcontextprotocol/modelcontextprotocol#3373 · 1 comment ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
modelcontextprotocol/modelcontextprotocol#3345 · 2 comments ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
All issues in modelcontextprotocol/modelcontextprotocol
Similar issues
-
clawsweeper:fix-shape-clear clawsweeper:queueable-fix clawsweeper:source-repro impact:ux-friction issue-rating: 🦞 diamond lobster no-stale P3
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulty 1/5 Under an hour Newbie friendliness 76/100
-
code-quality refactoring
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
github/gh-aw-firewall#8816 ·
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
langchain-ai/deepagents#6450 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 88/100
vercel/react-tweet#225 ·