Skip to main content
Glama

Orchestrator MCP

patterns.ts•4.02 kB
/** * Architectural pattern detection */ import type { CodebaseAnalysis } from '../codebase.js'; import { createLogger } from '../../utils/logging.js'; const logger = createLogger('architecture-patterns'); /** * Detect architectural pattern from codebase analysis */ export function detectArchitecturalPattern(codebaseAnalysis: CodebaseAnalysis): string { const { structure, patterns } = codebaseAnalysis; // Check for MVC pattern if (structure.directories.some(dir => dir.includes('controllers')) && structure.directories.some(dir => dir.includes('models')) && structure.directories.some(dir => dir.includes('views'))) { return 'Model-View-Controller (MVC)'; } // Check for layered architecture if (structure.directories.some(dir => dir.includes('services')) && structure.directories.some(dir => dir.includes('repositories')) && structure.directories.some(dir => dir.includes('controllers'))) { return 'Layered Architecture'; } // Check for microservices if (patterns.frameworks.includes('Docker') || structure.directories.some(dir => dir.includes('services'))) { return 'Microservices Architecture'; } // Check for modular architecture if (structure.directories.length > 5 && structure.directories.some(dir => dir.includes('modules'))) { return 'Modular Architecture'; } // Default to component-based return 'Component-Based Architecture'; } /** * Analyze architectural layers */ export function analyzeLayers(codebaseAnalysis: CodebaseAnalysis): Array<{ name: string; components: string[]; responsibilities: string[]; }> { const layers: Array<{ name: string; components: string[]; responsibilities: string[]; }> = []; const { structure } = codebaseAnalysis; // Presentation Layer if (structure.directories.some(dir => dir.includes('views') || dir.includes('components'))) { layers.push({ name: 'Presentation Layer', components: structure.directories.filter(dir => dir.includes('views') || dir.includes('components') || dir.includes('ui') ), responsibilities: ['User interface', 'User interaction', 'Data presentation'], }); } // Business Logic Layer if (structure.directories.some(dir => dir.includes('services') || dir.includes('business'))) { layers.push({ name: 'Business Logic Layer', components: structure.directories.filter(dir => dir.includes('services') || dir.includes('business') || dir.includes('logic') ), responsibilities: ['Business rules', 'Data processing', 'Workflow management'], }); } // Data Access Layer if (structure.directories.some(dir => dir.includes('models') || dir.includes('repositories'))) { layers.push({ name: 'Data Access Layer', components: structure.directories.filter(dir => dir.includes('models') || dir.includes('repositories') || dir.includes('data') ), responsibilities: ['Data persistence', 'Database operations', 'Data mapping'], }); } return layers; } /** * Analyze dependency relationships */ export function analyzeDependencyRelationships(codebaseAnalysis: CodebaseAnalysis): Array<{ from: string; to: string; type: 'depends_on' | 'uses' | 'extends' | 'implements'; strength: 'weak' | 'medium' | 'strong'; }> { const dependencies: Array<{ from: string; to: string; type: 'depends_on' | 'uses' | 'extends' | 'implements'; strength: 'weak' | 'medium' | 'strong'; }> = []; const { dependencies: deps } = codebaseAnalysis; // Analyze external dependencies deps.external.forEach(dep => { dependencies.push({ from: 'Application', to: dep, type: 'depends_on', strength: 'strong', }); }); // Analyze internal dependencies deps.internal.forEach(dep => { dependencies.push({ from: 'Main Module', to: dep, type: 'uses', strength: 'medium', }); }); return dependencies; }

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/Phoenixrr2113/Orchestrator-MCP'

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