Skip to content

mcp-doctor v0.4.2

Latest

Choose a tag to compare

@github-actions github-actions released this 03 Sep 14:54
· 1 commit to main since this release
Immutable release. Only release title and notes can be modified.
v0.4.2
633d2e8

mcp-doctor v0.4.2

v0.4.2 is a security patch for bounded process exit after
hostname-based Streamable HTTP resolution times out. Published versions
0.2.0 through 0.4.1 can
finish the typed timeout diagnosis yet keep the CLI process alive while the
operating-system resolver remains blocked. Users of hostname-based Streamable
HTTP diagnostics should upgrade to 0.4.2.

Runtime teardown contract

mcp-doctor now owns its current-thread Tokio runtime explicitly. After the
selected command completes, runtime shutdown waits at most 100 ms for blocking
work and then allows the process to exit. This contains an in-progress system
hostname lookup that its operating-system API cannot cancel.

The correction does not replace the system resolver and adds no alternate DNS,
retry, redirect, connection, or background-process behavior. It preserves the
existing one-resolution pinning, address classification, connected-peer
verification, TLS, credential and private-network gates, redaction, diagnostic
classification, report publication, and exit semantics.

The runtime-shutdown ceiling is separate from the selected diagnostic total.
The stable capability document exposes
limits.runtime_shutdown_timeout_ms: 100 and continues to report
whole_process_exit_guarantee: false because synchronous input preparation and
report publication remain outside diagnostic deadlines. The new bound prevents
runtime destruction itself from waiting indefinitely; it does not claim that
the blocked resolver work was cancelled.

Affected scope

The cause affects inspect, check, break, and reject when the explicitly
selected Streamable HTTP endpoint uses a hostname. It applies across supported
native platforms. Version 0.1.0, IP-literal endpoints, STDIO diagnostics, and
offline commands do not share the blocking hostname-resolution path.

The demonstrated impact is availability of the local mcp-doctor process. No
target connection, credential disclosure, unauthorized tool call, privilege
escalation, or broader host compromise is required or demonstrated.

Verification

A deterministic built-binary regression acknowledges entry into synthetic
non-cancellable resolver work, withholds its release, and proves that the
process exits under one outer watchdog. The report retains exit 1, primary
network.resolution, MCP-LIMIT-001, and startup_time evidence; no target
connection or retry occurs; and neither the endpoint nor fixture address is
reported. The existing native matrix continues to cover ordinary hostname and
IP-literal HTTP, STDIO, offline, report, and exit behavior.

Dependency review

This patch adds no dependency, feature, build script, unsafe code, or resolved
package. It uses Tokio 1.53.1's maintained explicit runtime builder and
finite shutdown_timeout API. Replacing the system resolver or adding a helper
process would broaden the dependency, resolution-policy, IPC, and cleanup
surfaces without improving this containment boundary.

Upgrade

cargo install mcp-doctor --version '=0.4.2' --locked

The immutable GitHub Release,
crates.io package, and Homebrew
formula use the same release source identity. The published
security advisory
records the exact affected range, mitigation, severity, and public correction
evidence.