Skip to main content
Glama
josuekongolo

CompanyIQ MCP Server

by josuekongolo
consolidation_trends.ts3.3 kB
import { z } from 'zod'; import { CompanyDatabase } from '../database/db.js'; import { SSBClient } from '../apis/ssb.js'; const ConsolidationTrendsSchema = z.object({ industry: z.string().describe("NACE-kode for bransje"), time_period: z.enum(['1_year', '3_years', '5_years']).default('3_years'), region: z.string().optional().describe("Region/fylke") }); export async function analyzeConsolidation(args: unknown, db: CompanyDatabase, ssb: SSBClient) { const params = ConsolidationTrendsSchema.parse(args); // This is a simplified version for MVP // Full version would track actual M&A transactions const companies = await db.searchCompanies({ nace_code: params.industry, municipality: params.region, limit: 200 }); const bankruptCompanies = companies.filter(c => c.bankrupt || c.under_liquidation); const activeCompanies = companies.filter(c => !c.bankrupt && !c.under_liquidation); // Calculate concentration (simple Herfindahl index approximation) const top5 = activeCompanies .filter(c => c.employees_count) .sort((a, b) => (b.employees_count || 0) - (a.employees_count || 0)) .slice(0, 5); const totalEmployees = activeCompanies.reduce((sum, c) => sum + (c.employees_count || 0), 0); const top5Employees = top5.reduce((sum, c) => sum + (c.employees_count || 0), 0); const concentration = (top5Employees / totalEmployees) * 100; // Fetch SSB high-growth statistics for context let ssbHighGrowth = null; try { ssbHighGrowth = await ssb.getHighGrowthEnterprises(params.industry); } catch (error) { console.error('Error fetching SSB high-growth stats:', error); } const report = ` 🔄 KONSOLIDERINGSTRENDS: NACE ${params.industry} ${params.region ? `📍 ${params.region}` : '🌍 Hele Norge'} 📊 MARKEDSSTATUS: - Aktive selskaper: ${activeCompanies.length} - Konkurs/avvikling: ${bankruptCompanies.length} - Konkursrate: ${((bankruptCompanies.length / companies.length) * 100).toFixed(1)}% ${ssbHighGrowth ? ` 📈 SSB: ${ssbHighGrowth.description} Periode: ${ssbHighGrowth.period} ` : ''} 🎯 MARKEDSKONSENTRASJON: - Top 5 selskaper kontrollerer: ${concentration.toFixed(1)}% av ansatte ${concentration > 60 ? '⚠️ Høy konsentrasjon - oligopol-struktur' : concentration > 40 ? '📊 Moderat konsentrasjon' : '✅ Lav konsentrasjon - konkurranseutsatt marked'} 🏆 DOMINERENDE AKTØRER: ${top5.map((c, idx) => `${idx + 1}. ${c.name} 👥 ${c.employees_count} ansatte (${((c.employees_count || 0) / totalEmployees * 100).toFixed(1)}% av marked) 📋 ${c.org_nr}` ).join('\n\n')} ${bankruptCompanies.length > 0 ? ` 📉 SELSKAPER I KRISE: ${bankruptCompanies.slice(0, 5).map(c => `- ${c.name} (${c.org_nr})`).join('\n')} ${bankruptCompanies.length > 5 ? `... og ${bankruptCompanies.length - 5} flere` : ''} ` : ''} 💡 KONKLUSJON: ${concentration > 60 ? 'Markedet er høyt konsentrert. M&A-aktivitet vil trolig fortsette.' : concentration > 40 ? 'Markedet viser tegn til konsolidering. Mindre aktører står under press.' : 'Fragmentert marked med mange små aktører. Mulighet for konsolidering.'} ℹ️ Dette er en forenklet analyse. For detaljert M&A-tracking, bruk eksterne databaser. `; return { content: [{ type: "text" as const, text: report }] }; }

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/josuekongolo/companyiq-mcp'

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