Make MCP Search-Result Ids Self-Contained Fetch Handles
Artifacts
Official change artifacts tracked under openspec/.
A live ChatGPT retest of the 5-tool MCP surface (2026-06-09) showed the search→fetch journey failing on multi-source hosted packages. Search hits carried id = stream:recordid plus a SEPARATE connectionid field, so a model had to carry TWO values between tools. fetch(id) without connectionid returned a typed 409 ambiguousconnection; ChatGPT's rendered envelope buried the second field and its model never completed a fetch (retrying with both fields was verified to work). OpenAI's search/fetch contract treats result ids as single opaque handles; ours leaked a join requirement into the model loop.
Chosen grammar: {connectionid}/{stream}:{recordid} (e.g. cin4f2a/orders:o1), with the legacy stream:recordid form still parsed when no / is present.
Affected capabilities
Capability specs this change proposes to modify.