Migrate to MCP TypeScript SDK v2
Replaces @modelcontextprotocol/sdk with the split v2 packages using the official
codemod, plus the fixes it could not make:
- Client, transports and SdkHttpError come from @modelcontextprotocol/client;
server transports from /node and /server
- Session expiry checks err.status, not err.code, which is now an SdkErrorCode
string rather than an HTTP status
- Merge the three vi.mock calls the codemod emitted for one specifier, where
the last silently replaced the others
- Mock servers pass raw JSON Schema rather than zod: the v2 packages carry
their own zod 4 while the app stays on zod 3, which openai peers on
Version negotiation keeps its 'legacy' default, so wire behaviour is unchanged.