@brianveltman/sonatype-mcp
Version:
Model Context Protocol server for Sonatype Nexus Repository Manager
93 lines • 3.39 kB
JavaScript
import { validateInput, searchComponentsSchema } from '../../utils/validation.js';
import { formatMCPError } from '../../utils/errors.js';
export function createSearchComponentsTool(componentService) {
return {
name: 'nexus_search_components',
description: 'Search for components across repositories',
inputSchema: {
type: 'object',
properties: {
repository: {
type: 'string',
description: 'Repository name to search in'
},
format: {
type: 'string',
description: 'Component format',
enum: ['npm', 'maven2', 'nuget', 'pypi', 'docker', 'raw', 'yum', 'apt']
},
group: {
type: 'string',
description: 'Component group/namespace'
},
name: {
type: 'string',
description: 'Component name'
},
version: {
type: 'string',
description: 'Component version'
},
prerelease: {
type: 'boolean',
description: 'Include prerelease versions'
},
sort: {
type: 'string',
description: 'Sort field',
enum: ['name', 'version', 'format']
},
direction: {
type: 'string',
description: 'Sort direction',
enum: ['asc', 'desc']
},
limit: {
type: 'number',
description: 'Maximum number of results',
minimum: 1,
maximum: 1000,
default: 25
},
offset: {
type: 'number',
description: 'Offset for pagination',
minimum: 0,
default: 0
}
},
additionalProperties: false
},
handler: async (params) => {
try {
const validParams = validateInput(searchComponentsSchema, params);
const response = await componentService.searchComponents(validParams);
return {
content: [
{
type: 'text',
text: JSON.stringify({
components: response.items,
count: response.items.length,
continuationToken: response.continuationToken
}, null, 2)
}
]
};
}
catch (error) {
const mcpError = formatMCPError(error);
return {
content: [
{
type: 'text',
text: `Error searching components: ${mcpError.message}`
}
],
isError: true
};
}
}
};
}
//# sourceMappingURL=search-components.js.map