Skip to main content
Glama
list-build-configs-usage.ts7.95 kB
/** * Example usage of the ListBuildConfigs MCP tool * Demonstrates various filtering and query patterns */ import { listBuildConfigsTool } from '@/tools/list-build-configs'; // Example 1: Basic listing of all build configurations async function listAllConfigurations() { const result = await listBuildConfigsTool.handler({}); if (result.success && result.data) { console.log(`Found ${result.data.totalCount} build configurations`); result.data.buildConfigs.forEach(config => { console.log(`- ${config.name} (${config.id})`); }); } } // Example 2: Filter by specific project async function listProjectConfigurations(projectId: string) { const result = await listBuildConfigsTool.handler({ projectId, includeProjectHierarchy: true }); if (result.success && result.data) { console.log(`Build configurations in project ${projectId}:`); result.data.buildConfigs.forEach(config => { const path = config.projectHierarchy ?.map(p => p.name) .join(' > ') || ''; console.log(`- ${config.name} (Path: ${path})`); }); } } // Example 3: Search for deployment configurations async function findDeploymentConfigs() { const result = await listBuildConfigsTool.handler({ namePattern: '*Deploy*', statusFilter: { paused: false, lastBuildStatus: 'SUCCESS' }, sortBy: 'lastModified', sortOrder: 'desc' }); if (result.success && result.data) { console.log('Active deployment configurations (recently successful):'); result.data.buildConfigs.forEach(config => { console.log(`- ${config.name} (Last: ${config.lastBuildDate})`); }); } } // Example 4: Find configurations using specific VCS repository async function findConfigsByRepository(repoUrl: string) { const result = await listBuildConfigsTool.handler({ vcsRootFilter: { url: repoUrl, vcsName: 'git' }, includeVcsRoots: true }); if (result.success && result.data) { console.log(`Configurations using repository ${repoUrl}:`); result.data.buildConfigs.forEach(config => { const vcsInfo = config.vcsRoots ?.map(vcs => `${vcs.name} (${vcs.branch})`) .join(', ') || 'No VCS'; console.log(`- ${config.name}: ${vcsInfo}`); }); } } // Example 5: Paginated retrieval for large datasets async function paginateThroughConfigs() { let offset = 0; const limit = 50; let hasMore = true; const allConfigs = []; while (hasMore) { const result = await listBuildConfigsTool.handler({ pagination: { limit, offset } }); if (result.success && result.data) { allConfigs.push(...result.data.buildConfigs); hasMore = result.data.hasMore; offset += limit; console.log(`Fetched ${result.data.buildConfigs.length} configs (total: ${allConfigs.length})`); } else { break; } } return allConfigs; } // Example 6: Get grouped view by project async function getProjectGroupedView() { const result = await listBuildConfigsTool.handler({ viewMode: 'project-grouped', includeParameters: true }); if (result.success && result.data && result.data.groupedByProject) { Object.entries(result.data.groupedByProject).forEach(([projectId, group]) => { console.log(`\nProject: ${group.projectName} (${projectId})`); console.log(` Configurations: ${group.buildConfigs.length}`); group.buildConfigs.forEach(config => { const params = config.parameters ? Object.keys(config.parameters).length : 0; console.log(` - ${config.name} (${params} parameters)`); }); }); } } // Example 7: Complex compound filtering async function advancedFiltering() { const result = await listBuildConfigsTool.handler({ projectIds: ['Frontend', 'Backend', 'Mobile'], namePattern: '*CI*', vcsRootFilter: { branch: 'main' }, statusFilter: { hasRecentActivity: true, activeSince: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000) // Last week }, sortBy: 'name', sortOrder: 'asc', includeVcsRoots: true, includeParameters: true, pagination: { limit: 25, offset: 0 } }); if (result.success && result.data) { console.log(`Found ${result.data.buildConfigs.length} CI configurations active in the last week`); result.data.buildConfigs.forEach(config => { console.log(`\n${config.name} (${config.projectName})`); console.log(` Last build: ${config.lastBuildDate}`); console.log(` Status: ${config.lastBuildStatus}`); if (config.vcsRoots && config.vcsRoots.length > 0) { console.log(` VCS: ${config.vcsRoots.map(v => v.name).join(', ')}`); } if (config.parameters && Object.keys(config.parameters).length > 0) { console.log(` Parameters: ${Object.keys(config.parameters).join(', ')}`); } }); } } // Example 8: Find inactive or problematic configurations async function findProblematicConfigs() { const result = await listBuildConfigsTool.handler({ statusFilter: { lastBuildStatus: 'FAILURE', paused: false }, sortBy: 'lastModified', sortOrder: 'desc' }); if (result.success && result.data) { console.log('Configurations with recent failures:'); result.data.buildConfigs.forEach(config => { console.log(`- ${config.name} (${config.projectName}) - Last: ${config.lastBuildDate}`); }); } // Also check for paused configurations const pausedResult = await listBuildConfigsTool.handler({ statusFilter: { paused: true } }); if (pausedResult.success && pausedResult.data) { console.log('\nPaused configurations:'); pausedResult.data.buildConfigs.forEach(config => { console.log(`- ${config.name} (${config.projectName})`); }); } } // Example 9: Export configuration list to CSV async function exportToCSV() { const result = await listBuildConfigsTool.handler({ includeVcsRoots: true, includeParameters: true }); if (result.success && result.data) { const csv = ['ID,Name,Project,Description,VCS Count,Parameter Count']; result.data.buildConfigs.forEach(config => { const vcsCount = config.vcsRoots?.length || 0; const paramCount = config.parameters ? Object.keys(config.parameters).length : 0; const description = config.description?.replace(/,/g, ';') || ''; csv.push(`${config.id},${config.name},${config.projectName},"${description}",${vcsCount},${paramCount}`); }); console.log(csv.join('\n')); } } // Example 10: Monitor configuration changes async function monitorChanges(intervalMs = 60000) { let previousConfigs = new Map(); const checkForChanges = async () => { const result = await listBuildConfigsTool.handler({ sortBy: 'lastModified', sortOrder: 'desc', limit: 100 }); if (result.success && result.data) { const currentConfigs = new Map( result.data.buildConfigs.map(c => [c.id, c]) ); // Find new configurations currentConfigs.forEach((config, id) => { if (!previousConfigs.has(id)) { console.log(`NEW: ${config.name} (${id})`); } }); // Find removed configurations previousConfigs.forEach((config, id) => { if (!currentConfigs.has(id)) { console.log(`REMOVED: ${config.name} (${id})`); } }); previousConfigs = currentConfigs; } }; // Initial check await checkForChanges(); // Set up monitoring setInterval(checkForChanges, intervalMs); } // Export all examples export { listAllConfigurations, listProjectConfigurations, findDeploymentConfigs, findConfigsByRepository, paginateThroughConfigs, getProjectGroupedView, advancedFiltering, findProblematicConfigs, exportToCSV, monitorChanges };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Daghis/teamcity-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server