Skip to content

arvindand/maven-tools-mcp

v3.0.0 Breaking

This release includes 1 breaking change for platform teams planning a safe upgrade.

Published 20d MCP Developer Tools
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

ai-tools dependency-management developer-tools docker graalvm gradle
+9 more
java maven maven-central maven-tools mcp mcp-server native-image spring-ai spring-boot

Affected surfaces

deps

ReleasePort's take

Light signal
editorial:auto 13d

maven-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 summary

Removed get_version_timeline tool, requiring migration to the existing analyze_release_patterns.

Changes in this release

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_dependencies MCP tool: takes raw POM XML and returns each declared dependency with its effective version classified as EXPLICIT, MANAGED, or EXPLICIT_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. Optional sideloadedPoms argument 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_upgrades MCP tool: builds on the resolver to return a split upgrade plan: deterministic_actions[] (mechanical <version> edits a non-LLM agent applies directly — explicit_bump for declared deps, bom_bump for user-controllable BOMs where a newer minor/patch is available) and needs_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-dep compare_dependency_versions fan-out. Modes: MINOR_PATCH (default — majors route to needs_attention) and ALL (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 so test-jar and jar entries 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. For EXPLICIT_OVERRIDE deps, 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 existing maven-metadata.xml fetcher. Annotated with @Cacheable (maven-pom-xml, 24h TTL) + @CircuitBreaker / @Retry / @RateLimiter; 404s return Optional.empty(), other RestClientExceptions 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_dependencies followed by recommend_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 in pom.xml; actions/setup-java pinned to 25 in CI and Docker workflows; README badge updated. Buildpack JDK image is selected automatically from <java.version>.
  • maven-model 3.9.12 added as a runtime dependency (data classes + Xpp3 reader, ~200KB). Used by the POM resolver. Deliberately not pulling in maven-model-builder or maven-resolver — the resolution loop is hand-rolled in com.arvindand.mcp.maven.pom.
  • Upgrade recommendations scoped to user-controllable BOMs: recommend_pom_upgrades now 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-bom inherited through spring-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 all modes) now hands the raw pom.xml to recommend_pom_upgrades and applies the returned deterministic_actions[] directly. The previous per-coordinate compare_dependency_versions fan-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 the NeedsAttention.* records plus Source / UpgradeMode enums registered for reflection in NativeImageConfiguration.
  • 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's project.version was 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.0 instead of the BOM's 1.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.kind JSON discriminator: Jackson was dropping the kind() interface method from the serialized output because record-component serialization doesn't cover interface methods. kind was missing from every needs_attention entry, leaving clients unable to tell major_available / conflict / explicit_override apart. Now annotated with @JsonProperty so it survives serialization (including in the native image).
  • MCP server version metadata: application.yaml's spring.ai.mcp.server.version was left at 2.1.1 during release prep. Bumped to 3.0.0 so the MCP serverInfo matches the actual release.

Removed (3.0.0)

  • get_version_timeline tool: the raw release-history view (timeline entries, velocity trend, stability pattern, recent-activity classification) overlapped substantially with analyze_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 in analyze_release_patterns is the canonical one going forward. Consumers still wired to get_version_timeline can pin a 2.x Docker tag (arvindand/maven-tools-mcp:2.1.1 etc.) until they migrate.

    Net tool count for the 3.0 release: 11 (was 10 in 2.x; added analyze_pom_dependencies and recommend_pom_upgrades, removed get_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_upgrades skips the Maven Central lookup for MANAGED dependencies 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

Track arvindand/maven-tools-mcp

Get notified when new releases ship.

Sign up free

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.

All releases →

Beta — feedback welcome: [email protected]