Maven Version Server
Provides tools for managing and checking versions of Maven dependencies from Maven Central, supporting the Apache Maven ecosystem through direct parsing of maven-metadata.xml files.
Enables checking, listing, and comparing versions of Spring Framework dependencies to assist with version management and identifying stable upgrade paths.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Maven Version ServerWhat's the latest stable version of com.google.guava:guava?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Maven Version Server
MCP server for Maven dependency version management using ONLY maven-metadata.xml from Maven Central (NO Solr search API).
Features
4 Tools for Maven dependency management
Strict stability filtering - excludes SNAPSHOT, alpha, beta, RC, milestones, etc.
Pure metadata approach - uses only maven-metadata.xml
Fast and reliable - direct XML parsing, no search API dependencies
Related MCP server: versionator-mcp
Tools
1. get_latest_stable_version
Get the latest stable version for a Maven dependency.
Input:
{
"dependency": "io.mockk:mockk"
}Output: Plain text version string (e.g., 1.14.7)
2. get_all_versions
List all versions with optional filtering and limits.
Input:
{
"dependency": "com.google.guava:guava",
"stableOnly": true,
"limit": 10
}Output: Newline-separated version list
3. check_version_exists
Verify if a specific version exists and check its stability.
Input:
{
"dependency": "org.springframework:spring-core",
"version": "6.2.8"
}Output: JSON object with exists, isStable fields
4. compare_versions
Compare two versions and get upgrade recommendations.
Input:
{
"dependency": "org.springframework:spring-core",
"currentVersion": "5.3.20",
"targetVersion": "6.2.8"
}Output: JSON object with upgrade type and recommendation
Stability Filter
Excludes versions containing (case-insensitive):
SNAPSHOT- Development snapshotsalpha/a- Alpha releasesbeta/b- Beta releasesRC- Release candidatesM+ digit - MilestonesCR- Candidate releasesEA- Early accesspreview- Preview releasesdev- Development versionsincubating- Apache incubator
Installation
Via npm (Recommended)
npm install -g maven-version-serverOr use with npx (no installation needed):
npx maven-version-serverConfigure for Claude Code CLI
Add to ~/.claude/mcp_servers.json:
{
"mcpServers": {
"maven-version": {
"command": "npx",
"args": ["maven-version-server"]
}
}
}Or if installed globally:
{
"mcpServers": {
"maven-version": {
"command": "maven-version-server"
}
}
}Build from source
git clone https://github.com/krotim/maven-version-server.git
cd maven-version-server
npm install
npm run buildUsage Examples
Example 1: Get latest stable version
User: What's the latest stable version of MockK?
Claude: [Uses get_latest_stable_version with dependency="io.mockk:mockk"]
Result: 1.14.7Example 2: Compare versions
User: Should I upgrade Spring Core from 5.3.20 to 6.2.8?
Claude: [Uses compare_versions]
Result: {
"currentVersion": "5.3.20",
"targetVersion": "6.2.8",
"upgradeType": "major",
"recommendation": "Caution: Major version upgrade may contain breaking changes. Review migration guide.",
"isCurrentStable": true,
"isTargetStable": true
}Example 3: List recent versions
User: Show me the last 5 versions of Guava
Claude: [Uses get_all_versions with limit=5]
Result:
33.5.0-jre
33.4.0-jre
33.3.1-jre
33.3.0-jre
33.2.1-jreTesting
Test with MCP Inspector
npm run inspectorManual test
node build/index.jsTechnical Details
Language: TypeScript (strict mode)
Data Source: https://repo1.maven.org/maven2/{groupPath}/{artifactId}/maven-metadata.xml
Transport: STDIO (Claude Code CLI)
Timeout: 10 seconds
Dependencies: @modelcontextprotocol/sdk, axios, xml2js
License
MIT
Available Tools
4 toolscheck_version_existsA
Verify if a specific version exists for a Maven dependency
| Name | Required | Description | Default |
|---|---|---|---|
| dependency | Yes | Maven coordinate in format "groupId:artifactId" (e.g., "org.apache.kafka:kafka-clients") | |
| version | Yes | The version to check (e.g., "3.6.0") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. While 'Verify' implies a read-only check, the description doesn't specify what constitutes 'exists' (e.g., in a repository, locally cached, etc.), authentication requirements, rate limits, error conditions, or return format. For a tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized for a simple verification tool and front-loads the core functionality immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 required parameters, no output schema, no annotations), the description provides adequate basic purpose but lacks important contextual details. It doesn't explain what the verification checks against (e.g., Maven Central repository), what the return value indicates (boolean, status code, etc.), or error handling. The description is complete enough for basic understanding but insufficient for full operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters clearly documented in the input schema. The description adds no additional parameter information beyond what's already in the schema. According to scoring rules, when schema coverage is high (>80%), the baseline score is 3 even with no parameter details in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Verify if exists') and resource ('specific version for a Maven dependency'), using precise terminology. It distinguishes this tool from its siblings (compare_versions, get_all_versions, get_latest_stable_version) by focusing on existence checking rather than comparison or retrieval operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through the phrase 'specific version,' suggesting this tool is for checking existence of particular versions rather than retrieving version lists or comparing versions. However, it doesn't explicitly state when to use this tool versus alternatives like get_all_versions or get_latest_stable_version, nor does it mention exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_versionsB
Compare two versions and suggest an upgrade path
| Name | Required | Description | Default |
|---|---|---|---|
| dependency | Yes | Maven coordinate in format "groupId:artifactId" (e.g., "org.springframework:spring-core") | |
| currentVersion | Yes | The version you are currently using (e.g., "5.3.20") | |
| targetVersion | No | Optional: The version you want to upgrade to. If not provided, suggests the latest stable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'suggest an upgrade path' but doesn't disclose behavioral traits such as what data sources are used for comparison, whether suggestions include intermediate versions or breaking changes, error handling for invalid inputs, or performance/rate limits. This leaves gaps in understanding the tool's operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core functionality ('compare two versions and suggest an upgrade path') with zero redundant information. It's appropriately sized for the tool's complexity, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (version comparison with upgrade suggestions), lack of annotations, and no output schema, the description is incomplete. It doesn't explain what the upgrade path includes (e.g., step-by-step versions, compatibility notes), potential outputs, or error conditions. This inadequately supports an agent in understanding the tool's full behavior and results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents parameters (dependency, currentVersion, targetVersion). The description adds minimal value beyond the schema by implying the tool compares versions and suggests upgrades, but doesn't provide additional semantic context like format constraints or interaction effects between parameters. Baseline 3 is appropriate as the schema handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('compare' and 'suggest an upgrade path') and identifies the resource ('two versions'). It distinguishes from siblings like 'check_version_exists' (verification) and 'get_all_versions' (listing), though it could be more explicit about the comparison scope (e.g., dependency compatibility).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for version comparison and upgrade planning, but lacks explicit guidance on when to use this tool versus alternatives like 'get_latest_stable_version' (which might provide target versions) or prerequisites. It suggests an optional 'targetVersion' but doesn't clarify trade-offs between specifying it or relying on the tool's suggestion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_versionsA
List all available versions for a Maven dependency, optionally filtering to stable versions only
| Name | Required | Description | Default |
|---|---|---|---|
| dependency | Yes | Maven coordinate in format "groupId:artifactId" (e.g., "com.google.guava:guava") | |
| stableOnly | No | If true, only return stable versions (excludes SNAPSHOT, alpha, beta, RC, etc.). Default: true | |
| limit | No | Maximum number of versions to return. Default: 20 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions filtering to stable versions, which adds some context, but lacks details on permissions, rate limits, error handling, or what the return format looks like (e.g., list structure, ordering). For a tool with no annotations, this leaves significant gaps in understanding how it behaves beyond the basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('List all available versions for a Maven dependency') and adds necessary qualification ('optionally filtering to stable versions only'). Every word earns its place, with no redundancy or waste, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the basic purpose and filtering option, but without annotations or output schema, it lacks details on behavioral aspects like response format, error cases, or usage constraints. This results in a minimal viable description with clear gaps for an agent to rely on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema by implying the 'stableOnly' parameter's effect ('optionally filtering to stable versions only'), but does not provide additional syntax or format details. This meets the baseline score of 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List all available versions') and resource ('for a Maven dependency'), and distinguishes it from siblings by specifying the scope of versions returned. It explicitly mentions optional filtering to stable versions only, which differentiates it from tools like 'get_latest_stable_version' that might return only one version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool ('List all available versions... optionally filtering to stable versions only'), which implies it's for retrieving multiple versions rather than checking existence or comparing. However, it does not explicitly state when not to use it or name alternatives among the siblings, such as using 'check_version_exists' for a single version check or 'get_latest_stable_version' for just the latest stable version.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_stable_versionA
Get the latest stable version for a Maven dependency (excludes SNAPSHOT, alpha, beta, RC, milestone, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| dependency | Yes | Maven coordinate in format "groupId:artifactId" (e.g., "org.springframework:spring-core") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It describes the filtering logic (excluding unstable versions) but lacks details on error handling, rate limits, authentication needs, or what happens if no stable version exists. For a tool with no annotation coverage, this leaves significant gaps in understanding its operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose and includes necessary exclusions without redundancy. Every word earns its place by clarifying the tool's scope and differentiating it from potential alternatives, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (single parameter, no output schema, no annotations), the description covers the core functionality and version filtering well. However, it lacks details on return values, error cases, or behavioral traits, which are important for a tool with no annotations. It is adequate but has clear gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the parameter 'dependency' fully documented in the schema as a Maven coordinate. The description does not add any additional semantic information about the parameter beyond what the schema provides, such as examples or constraints not covered. Baseline 3 is appropriate since the schema handles the parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get the latest stable version') and resource ('for a Maven dependency'), with explicit exclusions that distinguish it from sibling tools like 'get_all_versions' or 'check_version_exists'. It precisely defines what constitutes 'stable' by listing excluded version types (SNAPSHOT, alpha, beta, etc.).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly provides usage context by specifying it returns only stable versions, which helps differentiate it from siblings that might return all versions or check existence. However, it does not explicitly state when to use this tool versus alternatives like 'get_all_versions' or 'compare_versions', nor does it mention any prerequisites or exclusions beyond the version filtering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v1.0.0- First observed
check_version_exists - First observed
compare_versions - First observed
get_all_versions - First observed
get_latest_stable_version
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose with no overlap: checking existence, comparing versions, listing all versions, and getting the latest stable version. The descriptions make it unambiguous which tool to use for each specific task.
All tool names follow a consistent verb_noun pattern (check_version_exists, compare_versions, get_all_versions, get_latest_stable_version). The naming is predictable and readable throughout the set.
Four tools is well-scoped for a Maven version server, covering core operations without bloat. Each tool earns its place by addressing a distinct aspect of version management.
The tool set covers most essential version operations for Maven dependencies, but there is a minor gap in update or dependency resolution tools (e.g., suggesting compatible versions or handling transitive dependencies). However, the provided tools allow agents to work effectively within the domain.
Maintenance
Related MCP Connectors
MCP Server for JFrog, providing tools for development and artifact management.
A MCP server built for developers enabling Git based project management with project and personal…
Publish and discover MCP servers via the official MCP Registry. Powered by HAPI MCP server.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP (Model Context Protocol) server that provides tools for checking Maven dependency versions. This server enables LLMs to verify Maven dependencies and retrieve their latest versions from Maven Central Repository.325034MIT
- AlicenseAqualityCmaintenanceAn MCP server that queries 19 package registries (npm, PyPI, crates.io, etc.) to retrieve the latest version of packages and their metadata.211MIT
- AlicenseBqualityCmaintenanceMaven MCP Server enables AI assistants to manage Maven dependencies through natural language, including version checking, security scanning, and dependency analysis.5MIT
- FlicenseAqualityDmaintenanceAn MCP server that performs comprehensive health checks on project dependencies for JavaScript and Python projects, detecting outdated packages and fetching changelogs.1-