You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Dependabot's weekly group (#1822) tried to take ModelContextProtocol + ModelContextProtocol.AspNetCore 1.4.1 -> 2.0.0 and demonstrated exactly why this major cannot ride a routine bump: the grouped update half-applied (bumped 3 csproj files while Lite and deprecated/Dashboard still pin 1.4.1 -> NU1605 downgrade conflicts, NU1004 lockfile inconsistencies across Darling.Tests/Viewer), and even a mechanically-clean bump would change runtime behavior on both MCP hosts. Filing this so the migration happens on purpose, on dev, with tests.
What 2.0.0 changes that touches this codebase
Both apps host MCP over ModelContextProtocol.AspNetCore (Darling: DarlingMcpHostService on :5152, LAN-exposable behind bearer token + in-app CIDR + HostHeaderGuard; Lite: loopback host with the same shared guard). Per the SDK 2.0.0 release notes:
Stateless HTTP is now the default (HttpServerTransportOptions.Stateless = true). Stateless servers create no transport sessions, do not expose the standalone SSE GET/DELETE endpoints, and cannot send unsolicited server-to-client requests. Decision needed: accept stateless (and verify every exposed tool works without session state), or explicitly set Stateless = false and accept the MCP9006 warnings on stateful-only options.
Discovery-first negotiation: clients probe server/discover before falling back to the legacy initialize handshake. The HostHeaderGuard and bearer middleware are installed FIRST in the pipeline (Security: MCP hosts lack a Host-header allowlist (DNS rebinding) - Darling + Lite #1648) - verify the new endpoint surface routes through the same guards, none of the new endpoints bypass them, and down-level clients still connect (release notes claim interop with 2025-11-25 and earlier peers).
Deprecated APIs (Roots, Sampling, Logging): audit both hosts and the shared tool plumbing for usage; migrate before the APIs disappear in a later major.
Caching hints / standardized headers / OAuth + token-cache changes: likely inert for bearer-token hosts, but confirm rather than assume.
Mechanical requirements for the bump itself
ModelContextProtocol version must move in EVERY project that references it (Darling.Analysis, Darling.Service, PlanAnalysis, Lite, deprecated/Dashboard) in one commit - the half-bump is what broke Bump the nuget group with 2 updates #1822's restore.
All packages.lock.json files regenerated together (locked-mode restore is the CI gate that caught it).
The MCP surface pins (DarlingMcpServerAdminToolsTests, the get_alert_settings key-parity tests, HostHeaderGuard install-order pins) run green, plus a live connect from a real MCP client against both a stateless and (if we keep it) stateful configuration.
Sequencing
Deferred from routine bumps via the dependabot ignore rule (see the config PR referencing this issue). When this lands, remove the ignore rule so patch/minor SDK updates resume flowing through the weekly group.
Dependabot's weekly group (#1822) tried to take ModelContextProtocol + ModelContextProtocol.AspNetCore 1.4.1 -> 2.0.0 and demonstrated exactly why this major cannot ride a routine bump: the grouped update half-applied (bumped 3 csproj files while Lite and deprecated/Dashboard still pin 1.4.1 -> NU1605 downgrade conflicts, NU1004 lockfile inconsistencies across Darling.Tests/Viewer), and even a mechanically-clean bump would change runtime behavior on both MCP hosts. Filing this so the migration happens on purpose, on dev, with tests.
What 2.0.0 changes that touches this codebase
Both apps host MCP over ModelContextProtocol.AspNetCore (Darling: DarlingMcpHostService on :5152, LAN-exposable behind bearer token + in-app CIDR + HostHeaderGuard; Lite: loopback host with the same shared guard). Per the SDK 2.0.0 release notes:
HttpServerTransportOptions.Stateless = true). Stateless servers create no transport sessions, do not expose the standalone SSE GET/DELETE endpoints, and cannot send unsolicited server-to-client requests. Decision needed: accept stateless (and verify every exposed tool works without session state), or explicitly setStateless = falseand accept the MCP9006 warnings on stateful-only options.server/discoverbefore falling back to the legacy initialize handshake. The HostHeaderGuard and bearer middleware are installed FIRST in the pipeline (Security: MCP hosts lack a Host-header allowlist (DNS rebinding) - Darling + Lite #1648) - verify the new endpoint surface routes through the same guards, none of the new endpoints bypass them, and down-level clients still connect (release notes claim interop with 2025-11-25 and earlier peers).Mechanical requirements for the bump itself
Sequencing
Deferred from routine bumps via the dependabot ignore rule (see the config PR referencing this issue). When this lands, remove the ignore rule so patch/minor SDK updates resume flowing through the weekly group.