v0.2.0
Legacy change notifications now reach modern clients, and the bridge finally works on Windows.
Subscriptions
subscriptions/listen is implemented. A legacy server pushes notifications unconditionally; 2026-07-28 has the client open a stream naming the types it wants and forbids the server from sending anything else. The bridge keeps the legacy end permanently opted in and does that filtering itself.
- The listen request stays open. Its JSON-RPC id is the subscription id stamped onto every notification, and its response is withheld until the stream closes, so a client can tell a clean shutdown from a dropped transport.
- The acknowledgement reports only what the wrapped server declared, rather than promising a type it can never send.
resourceSubscriptionsis registered upstream through the legacyresources/subscribethat2026-07-28removed, with URIs reference counted so two subscriptions watching one URI do not unsubscribe each other.- Cancel with
notifications/cancellednaming the listen id.
Progress and logging notifications are still dropped. They belong to an in-flight request rather than a stream, and the README says so.
Windows
mcp-uplift could not launch any npm-installed MCP server on Windows, including the quickstart in its own README. Node's spawn does not apply PATHEXT (bare npx is ENOENT) and refuses to spawn a batch file without a shell since the CVE-2024-27980 mitigation (npx.cmd is EINVAL).
It now resolves the real file and routes only batch scripts through cmd.exe, escaping each argument for the C runtime and then for cmd.exe. shell: true was rejected deliberately: Node pastes arguments in unescaped, so an argument containing & could run a second command. A test asserts a hostile argument cannot break out.
Verified
39 offline tests. Against real published servers, 49 packages probed with zero protocol failures; 11 completed the full subscription lifecycle with different negotiated filters per server, and the lifecycle was confirmed natively on Windows.
MIT, zero dependencies, Node >= 20.