You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Transport bridge — pkg/transport/bridge.go:226,241, same shape, same
loss.
The client side needs no change: vmcp.ResourceReadResult.Meta is already
populated on both the Legacy and Modern paths
(pkg/vmcp/client/client.golegacyReadResource / modernReadResource).
Also fix the stale comment
pkg/vmcp/client/meta_integration_test.go:217 says resource _meta is
impossible "Due to MCP SDK constraints". That is wrong — go-sdk supports it;
the gap was mcpcompat's mcp-go-shaped handler signature. Update the comment and
turn the test into a real preservation assertion.
Why it matters
Closes the Legacy/Modern fork introduced by #6024: Modern preserves-and-strips
resource _meta (its hand-rolled envelope bypasses the SDK handler), Legacy
drops it. Same backend, same request, different client-visible metadata
depending on the negotiated revision.
Also finishes the resource half of #2640, which shipped tools/call and prompts/get and closed with this item open.
Acceptance
A backend's non-reserved resource-read _meta (trace ids, custom fields)
reaches the client on both revisions.
Part of #6027. Blocked on stacklok/toolhive-core#194 landing and being released.
Work
Once
mcpcompatexposes a result-returning resource handler, consume it at thetwo sites that currently discard backend resource
_meta:vMCP Serve path —
pkg/vmcp/server/serve_handlers.go:coreResourceHandlerandcoreResourceTemplateHandlerreturn a bare[]mcp.ResourceContentsand dropresult.Meta. Route it throughconversion.ToMCPMeta(result.Meta)so it gets the same reserved-key stripevery other Legacy egress already gets (Strip reserved io.modelcontextprotocol/* keys from backend response _meta (shared Legacy+Modern helper) #5986 / Strip reserved io.modelcontextprotocol/* keys from responses #6024).
Transport bridge —
pkg/transport/bridge.go:226,241, same shape, sameloss.
The client side needs no change:
vmcp.ResourceReadResult.Metais alreadypopulated on both the Legacy and Modern paths
(
pkg/vmcp/client/client.golegacyReadResource/modernReadResource).Also fix the stale comment
pkg/vmcp/client/meta_integration_test.go:217says resource_metaisimpossible "Due to MCP SDK constraints". That is wrong — go-sdk supports it;
the gap was mcpcompat's mcp-go-shaped handler signature. Update the comment and
turn the test into a real preservation assertion.
Why it matters
Closes the Legacy/Modern fork introduced by #6024: Modern preserves-and-strips
resource
_meta(its hand-rolled envelope bypasses the SDK handler), Legacydrops it. Same backend, same request, different client-visible metadata
depending on the negotiated revision.
Also finishes the resource half of #2640, which shipped
tools/callandprompts/getand closed with this item open.Acceptance
_meta(trace ids, custom fields)reaches the client on both revisions.
io.modelcontextprotocol/*keys are still stripped on both, per Strip reserved io.modelcontextprotocol/* keys from backend response _meta (shared Legacy+Modern helper) #5986.TestMetaPreservation_ReadResourceasserts preservation instead ofdocumenting a limitation.
Generated with Claude Code