Added
- Added an MCP tool approval broker event so permission extensions can allow, deny, or abstain on proxy, direct,
mcpScript, resource, and iframe-originated MCP calls before the built-inapproveToolsprompt runs. Thanks @geshido for issue #279. - Added opt-in per-server MCP protocol selection with
protocolVersion: "legacy" | "auto" | "2026-07-28". Legacy remains the default; auto negotiates the modern era with conservative legacy fallback, while the pinned mode fails instead of falling back. Thanks @mjfaga for PR #272. - Added a strict TypeScript typecheck command and CI gate.
Changed
- Migrated the MCP client from the monolithic SDK v1 package to the stable modular
@modelcontextprotocol/clientand@modelcontextprotocol/corev2 packages. The stable release restores conservative legacy discovery fallback and declared JSON Schema dialect support while retaining strict OAuth issuer validation.
Fixed
- Renamed the MCP scripting tool to camel-case
mcpScriptbecause Anthropic rejects the previous underscore-form name. Thanks @ritvij14 for issue #278 and @wierdbytes for confirmation and the workaround. - Pinned the Chrome DevTools setup preset and README examples to
chrome-devtools-mcp@1.6.0instead of@latest, so reviewed scaffolded commands stay stable. Thanks @fitchmultz for issue #274. - Removed the adapter's throwaway Streamable HTTP initialize probe. HTTP connections now initialize once on the real client and use narrowly classified SSE fallback, avoiding duplicate sessions and preventing authentication, cancellation, timeout, negotiation, and server failures from being misclassified as transport incompatibility.
- Stopped tokenless discovery requests, sandboxed MCP app documents, unrelated child windows, and app-opened popups from gaining session authority; discovery now serves a non-sensitive landing page, app HTML loads with a separate resource-only token, host messages accept only the app frame as their source, and the app response enforces sandboxing even when opened as a top-level page.