socio-technical-analysis
Analyze repository collaboration patterns and team dynamics to identify socio-technical relationships in code development workflows.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| repositoryUrl | Yes | ||
| includeContributorPatterns | No | ||
| includeTeamDynamics | No | ||
| timeRange | No | ||
| visualizationFormat | No | json |
Implementation Reference
- src/features/socio-technical/index.ts:8-74 (registration)Registers the socio-technical-analysis MCP tool including Zod input schema validation and thin wrapper handler that delegates to the core analyzer function.export function registerSocioTechnicalFeatures(server: McpServer) { // Tool to analyze socio-technical patterns in repositories server.tool( "socio-technical-analysis", { repositoryUrl: z.string(), includeContributorPatterns: z.boolean().default(true), includeTeamDynamics: z.boolean().default(true), timeRange: z.object({ start: z.string().optional(), end: z.string().optional() }).optional(), visualizationFormat: z.enum(["json", "mermaid", "dot"]).default("json") }, async ({ repositoryUrl, includeContributorPatterns, includeTeamDynamics, timeRange, visualizationFormat }) => { try { const results = await analyzeSocioTechnicalPatterns( repositoryUrl, includeContributorPatterns, includeTeamDynamics, timeRange, visualizationFormat ); // Return appropriate content type based on visualization format if (visualizationFormat === "mermaid") { return { content: [{ type: "text", text: results.visualization, _metadata: { format: "mermaid" } }, { type: "text", text: JSON.stringify(results.analysis, null, 2) }] }; } else if (visualizationFormat === "dot") { return { content: [{ type: "text", text: results.visualization, _metadata: { format: "dot" } }, { type: "text", text: JSON.stringify(results.analysis, null, 2) }] }; } else { return { content: [{ type: "text", text: JSON.stringify(results, null, 2) }] }; } } catch (error) { return { content: [{ type: "text", text: `Error in socio-technical analysis: ${(error as Error).message}` }], isError: true }; } } ); }
- Core handler function executing the full socio-technical analysis: git analysis for contributors, code ownership, team dynamics, knowledge graph integration, graph generation, visualization (Mermaid/DOT), and actionable insights.export async function analyzeSocioTechnicalPatterns( repositoryUrl: string, includeContributorPatterns: boolean = true, includeTeamDynamics: boolean = true, timeRange?: { start?: string, end?: string }, visualizationFormat: "json" | "mermaid" | "dot" = "json" ): Promise<any> { console.log(`Analyzing socio-technical patterns for ${repositoryUrl}`); // Step 1: Clone/update the repository const repoPath = await getRepository(repositoryUrl); // Step 2: Analyze git history and contributors const contributorData = await analyzeContributors(repoPath, timeRange); // Step 3: Analyze code ownership and ownership patterns const ownershipData = includeContributorPatterns ? await analyzeCodeOwnership(repoPath, contributorData) : null; // Step 4: Analyze team dynamics and collaboration patterns const teamDynamicsData = includeTeamDynamics ? await analyzeTeamDynamics(repoPath, contributorData) : null; // Step 5: Build knowledge graph for technical dependencies console.log(`Building knowledge graph for technical dependencies...`); await buildKnowledgeGraph(repositoryUrl, 2, false); // Step 5b: Query knowledge graph to get actual nodes and relationships const graphData = await queryKnowledgeGraph({ query: "", repositoryUrl, contextDepth: 2 }); // Step 6: Create socio-technical graph const socioTechnicalGraph = combineDataIntoGraph( contributorData, ownershipData, teamDynamicsData, graphData.nodes, graphData.relationships ); // Step 7: Generate visualization let visualization = ""; if (visualizationFormat === "mermaid") { visualization = generateMermaidDiagram(socioTechnicalGraph); } else if (visualizationFormat === "dot") { visualization = generateDotGraph(socioTechnicalGraph); } // Step 8: Generate insights const insights = generateInsights( contributorData, ownershipData, teamDynamicsData, graphData.nodes, graphData.relationships ); // Return the analysis results return { repository: { url: repositoryUrl, path: repoPath }, analysis: { contributors: summarizeContributors(contributorData), codeOwnership: ownershipData ? summarizeOwnership(ownershipData) : null, teamDynamics: teamDynamicsData ? summarizeTeamDynamics(teamDynamicsData) : null, insights }, visualization, visualizationFormat }; }
- Zod schema defining input parameters for the socio-technical-analysis tool.{ repositoryUrl: z.string(), includeContributorPatterns: z.boolean().default(true), includeTeamDynamics: z.boolean().default(true), timeRange: z.object({ start: z.string().optional(), end: z.string().optional() }).optional(), visualizationFormat: z.enum(["json", "mermaid", "dot"]).default("json") },
- src/server.ts:72-74 (registration)Top-level server initialization calls the feature registration function to add the socio-technical-analysis tool.console.log("• Registering socio-technical features..."); registerToolsOnce(registerSocioTechnicalFeatures); console.log("✓");