UNPKG

@rashidazarang/aptly-mcp

Version:

Model Context Protocol server for Aptly package repository management - enables AI assistants to manage Debian repositories

151 lines 5.92 kB
import { createRepoSchema, deleteRepoSchema, formatValidationError } from '../utils/validation.js'; import { z } from 'zod'; export function createRepositoryTools(client) { return [ { name: 'aptly_create_repo', description: 'Create a new local repository in Aptly', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Name of the repository to create' }, comment: { type: 'string', description: 'Optional comment/description for the repository' }, defaultDistribution: { type: 'string', description: 'Default distribution for packages in this repository' }, defaultComponent: { type: 'string', description: 'Default component for packages in this repository' } }, required: ['name'] } }, { name: 'aptly_list_repos', description: 'List all local repositories', inputSchema: { type: 'object', properties: {}, required: [] } }, { name: 'aptly_get_repo', description: 'Get detailed information about a specific repository', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Name of the repository to retrieve' } }, required: ['name'] } }, { name: 'aptly_delete_repo', description: 'Delete a local repository', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Name of the repository to delete' }, force: { type: 'boolean', description: 'Force deletion even if repository is published or has snapshots', default: false } }, required: ['name'] } } ]; } export async function handleRepositoryTool(client, name, arguments_) { try { switch (name) { case 'aptly_create_repo': { const args = createRepoSchema.parse(arguments_); const repo = await client.createRepository(args.name, args.comment, args.defaultDistribution, args.defaultComponent); return { content: [{ type: 'text', text: `Repository '${repo.Name}' created successfully.\n` + `Comment: ${repo.Comment || 'None'}\n` + `Default Distribution: ${repo.DefaultDistribution || 'None'}\n` + `Default Component: ${repo.DefaultComponent || 'None'}` }] }; } case 'aptly_list_repos': { const repos = await client.listRepositories(); if (repos.length === 0) { return { content: [{ type: 'text', text: 'No repositories found.' }] }; } const repoList = repos.map(repo => { let info = `• ${repo.Name}`; if (repo.Comment) info += ` - ${repo.Comment}`; if (repo.DefaultDistribution) info += ` (${repo.DefaultDistribution})`; return info; }).join('\n'); return { content: [{ type: 'text', text: `Found ${repos.length} repository(ies):\n\n${repoList}` }] }; } case 'aptly_get_repo': { const args = z.object({ name: z.string() }).parse(arguments_); const repo = await client.getRepository(args.name); return { content: [{ type: 'text', text: `Repository Details:\n` + `Name: ${repo.Name}\n` + `Comment: ${repo.Comment || 'None'}\n` + `Default Distribution: ${repo.DefaultDistribution || 'None'}\n` + `Default Component: ${repo.DefaultComponent || 'None'}` }] }; } case 'aptly_delete_repo': { const args = deleteRepoSchema.parse(arguments_); await client.deleteRepository(args.name, args.force); return { content: [{ type: 'text', text: `Repository '${args.name}' deleted successfully.` }] }; } default: throw new Error(`Unknown repository tool: ${name}`); } } catch (error) { if (error instanceof z.ZodError) { throw new Error(`Validation error: ${formatValidationError(error)}`); } throw error; } } //# sourceMappingURL=repository-tools.js.map