Skip to content

v0.7.1

Latest

Choose a tag to compare

@TueJon TueJon released this 12 Oct 23:35
1d59d4a

webmcpify v0.7.1

Execution cancellation now reaches the application's handler through the vendored
runtime. Your tools can stop cooperative asynchronous work while keeping route
registration lifetime separate from an execution already in progress. This patch
packages the compatibility work merged in pull request #23.

What changed

  • TS and JS result guards preserve the original callback options and execution
    signal, alongside the existing absent-result guard and single-flight behavior.

  • The event bridge accepts caller cancellation: preaborted calls never dispatch,
    cooperating handlers receive the signal, and listeners and timers are cleaned up.

  • Ambient types and integration guidance distinguish execution cancellation from
    registration disposal, callback values from serialized native results, and dated
    Chrome behavior from the evolving draft.

  • Workbench imperative simulation now models omitted input, serialized returns
    and execution cancellation. JS/transpiled-TS regressions keep both runtimes aligned.

  • Refresh documentation after upstream PR #338:
    the CG draft now focuses on the imperative API; declarative forms remain Chrome
    experimental implementation / separate exploration. Site tools guidance also
    reflects the official 2026-10-12 model and workspace requirements.

Safe cancellation

Cancellation is cooperative. Pass the execution signal to asynchronous work and
check it before committing state. A handler or server that continues after abort or
timeout can leave an unknown outcome; inspect state through an independent read
path before a manual retry. Tools are never retried automatically. Removing a
registration does not cancel an already-started execution on modern Chrome.
Neither cancellation nor the existing mutation journal guarantees exactly-once effects.

Compatibility and evidence — 2026-10-12

The dated native compatibility reference
records a synthetic loopback run on 2026-10-05, Chrome Beta 156.0.8078.4,
with WebMCP and WebMCPTesting enabled. Five native probes passed: object input,
callback AbortSignal, caller abort with a cooperative handler suppressing its delayed
side effect, registration abort preserving an already-started invocation, and omitted
input defaulting to {}. Successful imperative results arrived as serialized JSON
strings. This does not establish declarative navigation, debugging-annotation or
native WPT conformance, full-agent integration, or behavior in every Chrome version.

Chrome 149+ is the origin-trial baseline, not proof that every modern feature is
available. The recorded Chrome 150 run lacked callback options and omitted-input
support. The runtime uses a side-effect-free input probe to select object or legacy
JSON-string input before invoking application tools. Feature-detect and verify the
actual browser; consult the official Chrome imperative guide.

Source validation: npm run check passes 79 tests covering runtime parity,
mutation journaling, compatibility adaptation and Workbench simulation. Simulation
and deterministic tests remain separate from native browser evidence.

Compare: v0.7.0...v0.7.1