This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+9 more
Affected surfaces
ReleasePort's take
Light signalmaven-tools-mcp v3.0.0 requires Java 25 (LTS) and removes the `get_version_timeline` tool in favor of `analyze_release_patterns`. Upgrade your build environment and migrate scripts before upgrading.
Why it matters: Java 25 is LTS. Update CI/CD toolchain to Java 25 before the next build run. Migrate `get_version_timeline` calls to `analyze_release_patterns` before upgrading.
Summary
AI summaryRemoved get_version_timeline tool, requiring migration to the existing analyze_release_patterns.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Breaking | Medium |
Java toolchain upgraded from Java 24 to Java 25 (LTS); builds now require Java 25. Java toolchain upgraded from Java 24 to Java 25 (LTS); builds now require Java 25. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
`analyze_pom_dependencies` MCP tool resolves effective versions of POM dependencies, classifies them as EXPLICIT, MANAGED, or EXPLICIT_OVERRIDE, and returns parent chain, BOM imports, managing BOM, and warnings. `analyze_pom_dependencies` MCP tool resolves effective versions of POM dependencies, classifies them as EXPLICIT, MANAGED, or EXPLICIT_OVERRIDE, and returns parent chain, BOM imports, managing BOM, and warnings. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
`recommend_pom_upgrades` MCP tool provides deterministic upgrade actions and needs‑attention items for POM dependencies based on minor/patch or all modes. `recommend_pom_upgrades` MCP tool provides deterministic upgrade actions and needs‑attention items for POM dependencies based on minor/patch or all modes. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Multi‑BOM conflict tracking surfaces conflicting candidates for EXPLICIT_OVERRIDE dependencies in the resolver output. Multi‑BOM conflict tracking surfaces conflicting candidates for EXPLICIT_OVERRIDE dependencies in the resolver output. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
`MavenCentralService.fetchPomXml` fetches raw POM XML with caching, circuit breaker, and retry mechanisms. `MavenCentralService.fetchPomXml` fetches raw POM XML with caching, circuit breaker, and retry mechanisms. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Low |
'MavenCentralService.fetchPomXml' fetches raw POM XML with @Cacheable (24 h TTL), circuit breaker, retry, and rate limiting; 404 returns Optional.empty(). 'MavenCentralService.fetchPomXml' fetches raw POM XML with @Cacheable (24 h TTL), circuit breaker, retry, and rate limiting; 404 returns Optional.empty(). Source: granite4.1:30b@2026-05-22-audit Confidence: low |
— |
| Dependency | Medium |
Added `maven-model 3.9.12` as runtime dependency for POM parsing and resolution. Added `maven-model 3.9.12` as runtime dependency for POM parsing and resolution. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Deprecation | Medium |
Removed `get_version_timeline` tool, consolidating release history data into `analyze_release_patterns`. Removed `get_version_timeline` tool, consolidating release history data into `analyze_release_patterns`. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Fixed JSON serialization of `NeedsAttention.kind` to include the discriminator for proper deserialization. Fixed JSON serialization of `NeedsAttention.kind` to include the discriminator for proper deserialization. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Refactor | Medium |
POM resolver service implements full parent chain, dependencyManagement, and scope import resolution with cycle safety and caching. POM resolver service implements full parent chain, dependencyManagement, and scope import resolution with cycle safety and caching. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Refactor | Medium |
Resolved `project.*` placeholder leakage in imported BOMs to correct version interpolation. Resolved `project.*` placeholder leakage in imported BOMs to correct version interpolation. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Refactor | Medium |
Fixed placeholder leakage: 'project.*' properties inside imported BOMs now resolve against the BOM's own coordinates instead of the importer's. Fixed placeholder leakage: 'project.*' properties inside imported BOMs now resolve against the BOM's own coordinates instead of the importer's. Source: granite4.1:30b@2026-05-22-audit Confidence: low |
— |
| Refactor | Low |
POM resolver service implements full parent chain walking, dependencyManagement merging with closest‑ancestor‑wins semantics, BOM import resolution, placeholder interpolation, conflict tracking, and caching (1 h TTL, 256 entries). POM resolver service implements full parent chain walking, dependencyManagement merging with closest‑ancestor‑wins semantics, BOM import resolution, placeholder interpolation, conflict tracking, and caching (1 h TTL, 256 entries). Source: granite4.1:30b@2026-05-22-audit Confidence: low |
— |
Full changelog
[3.0.0] - 2026-05-14
POM-Aware Dependency Analysis Release — introduces two new MCP tools that resolve the effective version of every declared dependency in a Maven POM by walking the parent chain, applying <dependencyManagement>, and resolving <scope>import</scope> BOM imports. Where previous tools answered "what's the latest version of X on Maven Central?", the new tools answer "what version does this POM actually resolve to for X, and which knob in my POM controls it?" Useful for multi-module projects, Spring Boot apps with BOM-managed transitives, and any project where bumping a dependency means bumping a BOM instead.
Added (3.0.0)
analyze_pom_dependenciesMCP tool: takes raw POM XML and returns each declared dependency with its effective version classified asEXPLICIT,MANAGED, orEXPLICIT_OVERRIDE, the parent chain that was walked, the BOMs directly imported by the root POM (rootImportedBoms), the managing BOM / parent coordinate when applicable, and warnings for any unresolved bits. OptionalsideloadedPomsargument accepts a bundle of additional POMs (sibling modules, unreleased parents) so monorepos and not-yet-published parents resolve without each side needing to be on Maven Central.recommend_pom_upgradesMCP tool: builds on the resolver to return a split upgrade plan:deterministic_actions[](mechanical<version>edits a non-LLM agent applies directly —explicit_bumpfor declared deps,bom_bumpfor user-controllable BOMs where a newer minor/patch is available) andneeds_attention[](majors, multi-BOM conflicts, and explicit overrides, each carrying the Maven Central latest so an LLM has full context in one round-trip). Lets the dogfood self-update agent stop parsing Maven XML in Python and skip per-depcompare_dependency_versionsfan-out. Modes:MINOR_PATCH(default — majors route toneeds_attention) andALL(majors also count as deterministic; rarely the right call).- POM resolver service (
com.arvindand.mcp.maven.pom): the engine behind both new tools. Walks parent POMs and<scope>import</scope>BOMs against Maven Central, interpolates${name}and${project.version}/${project.parent.version}placeholders, merges<dependencyManagement>with closest-ancestor-wins semantics (typed(groupId, artifactId, type, classifier)keys sotest-jarandjarentries don't collide), walks each imported BOM's own parent chain, and surfaces warnings at every silent-drop site (unresolvable managed version, unreachable parent, BOM fetch failure, parent depth cap). Cycle-safe: a visited-set guard short-circuits pathological / self-referential BOM imports. - Multi-BOM conflict tracking: when two BOMs imported at the same level disagree on a dependency, the first-declared wins per Maven semantics and the losing candidates surface on
EffectiveDependency.conflicts[]so the caller can detect the ambiguity. ForEXPLICIT_OVERRIDEdeps,conflicts[]lists every candidate the override is choosing against. The resolver does not recommend an action — surfacing the raw candidates is intentional so callers (typically an LLM with surrounding code context) can decide whether to pin the version explicitly. MavenCentralService.fetchPomXml: direct repo fetch alongside the existingmaven-metadata.xmlfetcher. Annotated with@Cacheable(maven-pom-xml, 24h TTL) +@CircuitBreaker/@Retry/@RateLimiter; 404s returnOptional.empty(), otherRestClientExceptions rethrow so the resilience4j stack actually engages.- Resolver-level caching:
EffectivePomResolver.resolve(pomXml)is@Cacheable(1h TTL, 256-entry cap) so a follow-up call on the same POM — e.g.,analyze_pom_dependenciesfollowed byrecommend_pom_upgrades— skips the entire parent / DM walk including XML reparse. End-to-end on this repo's own POM: ~2800ms cold → ~80ms warm.
Changed (3.0.0)
- Java toolchain: upgraded from Java 24 to Java 25 (LTS).
<java.version>bumped inpom.xml;actions/setup-javapinned to25in CI and Docker workflows; README badge updated. Buildpack JDK image is selected automatically from<java.version>. maven-model 3.9.12added as a runtime dependency (data classes + Xpp3 reader, ~200KB). Used by the POM resolver. Deliberately not pulling inmaven-model-builderormaven-resolver— the resolution loop is hand-rolled incom.arvindand.mcp.maven.pom.- Upgrade recommendations scoped to user-controllable BOMs:
recommend_pom_upgradesnow classifies only BOMs the caller can actually edit in their own POM — the direct<parent>and root POM<dependencyManagement>imports. Transitively-imported BOMs (e.g.,jackson-bominherited throughspring-boot-dependencies) are silently skipped because there's no<version>for the agent to edit; their upgrades surface through whichever user-controllable knob brings them in. Before the change the tool was emitting unactionable bom_bump entries that the agent couldn't apply. - Dogfood agent collapses to one MCP call: the Python self-update agent's deterministic path (minor/patch and
allmodes) now hands the rawpom.xmltorecommend_pom_upgradesand applies the returneddeterministic_actions[]directly. The previous per-coordinatecompare_dependency_versionsfan-out plus Python POM parsing is gone. Major-review mode still routes through the Copilot SDK. - Native image hints:
EffectivePomResult,EffectiveDependency,ManagedAlternative,PomUpgradeRecommendation,UpgradeAction, and theNeedsAttention.*records plusSource/UpgradeModeenums registered for reflection inNativeImageConfiguration. - Major version bump (2.x → 3.0): signals the qualitative shift from "Maven Central lookups" to "POM-aware analysis." Existing tools that survived consolidation are unchanged; the two new tools are additive.
Fixed (3.0.0)
project.*properties scoped to the imported BOM: when a BOM's<dependencyManagement>used${project.version}(a common pattern — Spring AI BOM does this), the importer'sproject.versionwas leaking into the BOM's interpolation context. Every managed entry in such a BOM came back at the importer's version (e.g.,3.0.0instead of the BOM's1.1.6).project.*placeholders inside an imported BOM now resolve against that BOM's own coordinates; user-defined properties keep the prior "importer wins" semantics so callers can still override${spring-ai.version}etc.NeedsAttention.kindJSON discriminator: Jackson was dropping thekind()interface method from the serialized output because record-component serialization doesn't cover interface methods.kindwas missing from everyneeds_attentionentry, leaving clients unable to tellmajor_available/conflict/explicit_overrideapart. Now annotated with@JsonPropertyso it survives serialization (including in the native image).- MCP server version metadata:
application.yaml'sspring.ai.mcp.server.versionwas left at2.1.1during release prep. Bumped to3.0.0so the MCPserverInfomatches the actual release.
Removed (3.0.0)
-
get_version_timelinetool: the raw release-history view (timeline entries, velocity trend, stability pattern, recent-activity classification) overlapped substantially withanalyze_release_patterns, which already exposes the same underlying data as a cadence + maintenance signal. Consolidated down to a single tool; the cadence-and-maintenance view inanalyze_release_patternsis the canonical one going forward. Consumers still wired toget_version_timelinecan pin a 2.x Docker tag (arvindand/maven-tools-mcp:2.1.1etc.) until they migrate.Net tool count for the 3.0 release: 11 (was 10 in 2.x; added
analyze_pom_dependenciesandrecommend_pom_upgrades, removedget_version_timeline).
Notes (3.0.0)
- Out of scope: transitive dependency walking, version range syntax (
[1.0,2.0)treated as opaque), profile activation, CI-friendly${revision}/ flatten-maven-plugin output. - Perf detail:
recommend_pom_upgradesskips the Maven Central lookup forMANAGEDdependencies without conflicts — their upgrade rides on whichever user-controllable BOM is already being classified, so a per-dep lookup would be wasted work even with cache hits absorbing the cost. - Attribution: the resolution algorithm shape follows maxxq-org/maxxq-maven by Guy Chauliac (MIT). See
NOTICE.
Breaking Changes
- Removed `get_version_timeline` tool; migration to `analyze_release_patterns` required.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About arvindand/maven-tools-mcp
Universal Maven Central dependency intelligence for JVM build tools (Maven, Gradle, SBT, Mill). Features bulk operations, version comparison, stability filtering, dependency age analysis, release patterns, and Context7 integration for upgrade guidance.
Related context
Beta — feedback welcome: [email protected]