import { MavenCoordinate } from '../types.js';
import { fetchMavenMetadata, extractVersions } from '../maven-client.js';
import {
filterStableVersions,
isStableVersion,
compareVersions,
} from '../version-utils.js';
export const schema = {
name: 'get_all_versions',
description:
'List all available versions for a Maven dependency, optionally filtering to stable versions only',
inputSchema: {
type: 'object',
properties: {
dependency: {
type: 'string',
description:
'Maven coordinate in format "groupId:artifactId" (e.g., "com.google.guava:guava")',
},
stableOnly: {
type: 'boolean',
description:
'If true, only return stable versions (excludes SNAPSHOT, alpha, beta, RC, etc.). Default: true',
default: true,
},
limit: {
type: 'number',
description: 'Maximum number of versions to return. Default: 20',
default: 20,
},
},
required: ['dependency'],
},
};
export async function handler(
coord: MavenCoordinate,
stableOnly: boolean = true,
limit: number = 20
) {
const metadata = await fetchMavenMetadata(coord);
const allVersions = extractVersions(metadata);
if (allVersions.length === 0) {
throw new Error(`No versions found for ${coord.groupId}:${coord.artifactId}`);
}
let versions = allVersions;
if (stableOnly) {
versions = filterStableVersions(allVersions);
}
// Sort descending (newest first) and limit
const sortedVersions = versions
.sort((a, b) => compareVersions(b, a))
.slice(0, limit);
const output = sortedVersions
.map((v) => {
const stability = isStableVersion(v) ? '' : ' [unstable]';
return `${v}${stability}`;
})
.join('\n');
return {
content: [
{
type: 'text',
text: output,
},
],
};
}