Skip to main content
Glama

socio-technical-analysis

Analyze repository collaboration patterns and team dynamics to identify socio-technical relationships in code development workflows.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
repositoryUrlYes
includeContributorPatternsNo
includeTeamDynamicsNo
timeRangeNo
visualizationFormatNojson

Implementation Reference

  • 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("✓");

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/0xjcf/MCP_CodeAnalysis'

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