Repository navigation
chore(deps): land rmcp 3.1 and adopt regex! from regex 1.13 - #676
Merged
Merged
Conversation
Dependabot could not land this one on its own — #668 (3.0.0), #670 (3.0.1) and #673 (3.1.0) all stalled on the same compile break. rmcp 3.0 tracks MCP 2026-07-28. The only break reaching this crate is SEP-2322 MRTR: `ServerHandler::call_tool` now returns `CallToolResponse` (`Complete` / `InputRequired` / `Task`) instead of `CallToolResult`. `ecp mcp serve` is spawn-mode only, so every call runs the subcommand to completion and resolves as `Complete`; the migration is the `From<CallToolResult>` conversion at the single return site. The rest of the 3.0 breaking list is inapplicable here: sessionless Streamable HTTP, the stateless discovery lifecycle, subscriptions and the tasks extension are HTTP-transport or client-side concerns, and this server is stdio + `serve_server`. `cargo update` alongside brings the rest of the tree to latest compatible.
regex 1.13 ships a `regex!` macro that expands to exactly the `static Lazy<Regex>` shape these two accessors were writing by hand. Semantics are identical (process-lifetime lazy compilation), so this is boilerplate removal, not a perf change. Left alone deliberately: the module-level named statics in `fetch_shape/` carry doc comments and long patterns. Inlining those into their call sites would bury a 100-char pattern inside a `for` header and drop the documentation. The `regex` floor moves to 1.13.0 in the two crates using the macro.
Contributor
ecp impact cache (0 symbols) — internal, used by
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Two things the recent dependabot wave left on the table:
(chore(deps): bump rmcp from 2.2.0 to 3.0.0 #668 / chore(deps): bump rmcp from 2.2.0 to 3.0.1 #670 / chore(deps): bump rmcp from 2.2.0 to 3.1.0 #673 all stalled on a compile break).
regex!from regex 1.13 — replaces the two hand-rolledOnceLock<Regex>accessors with the upstream macro.Plus a full
cargo updateso the lockfile matches the latest compatibleversions across the tree.
rmcp 3.1 migration
rmcp 3.0 tracks MCP 2026-07-28. The only break that reaches this crate is
SEP-2322 MRTR:
ServerHandler::call_toolnow returnsCallToolResponse(a three-variant enum:Complete/InputRequired/Task) rather thanCallToolResult.ecp mcp serveis spawn-mode only — every tool call runs the subcommand tocompletion in a single shot — so the response is always
Complete. Themigration is the
From<CallToolResult>conversion at the one return site.Everything else in the 3.0 breaking list is inapplicable here: sessionless
Streamable HTTP, the stateless discovery lifecycle, subscriptions and the tasks
extension are all HTTP-transport or client-side concerns, and this server is
stdio +
serve_server.regex!adoptionregex 1.13 ships a
regex!macro that expands to exactly thestatic Lazy<Regex>pattern this repo was writing by hand. Two sites converted:hook/pre_tool_use.rs::glob_stem_re— hot path (PreToolUse fires on everyGrep / Glob / Bash); the doc comment explaining why it is compiled once stays.
event_topic/normalize.rs::get_version_regexSemantics are identical (process-lifetime lazy compilation), so this is
boilerplate removal, not a perf change. The
regexfloor moves to 1.13.0 in thetwo crates that use the macro.
Deliberately not converted: the module-level named statics in
fetch_shape/carry doc comments and long patterns. Inlining those into theircall sites would bury a 100-char pattern inside a
forheader and drop thedocumentation — worse on both counts.
Other bumps reviewed, nothing to adopt
par_array_windowsAlgorithm::Lcsdeadline-fallback panicVerification
cargo test -p ecp-analyzer— 2513 passed, 0 failedcargo test -p egent-code-plexus --tests— 1269 passed, 0 failedcargo test -p ecp-mcp— 46 passed, 0 failedcargo clippy --workspace --all-targets— cleanWire compatibility, checked by hand
The risk in an MCP major bump is the response envelope, and no test covers it —
server_smoke_test.rsasserts the tool list, not the serialized shape. So areal stdio handshake against the built binary:
A
tools/callunder the legacy protocol comes back as plain{"content":[…]}with noresultType— byte-identical to what rmcp 2.2emitted. That is rmcp's own
strip_result_type_for_legacy_peer(
handler/server.rs:256) doing the work at the framework layer, below thiscrate, so existing clients see no change. No test was added for it: it would be
asserting upstream framework behaviour, not ours.