Skip to main content
Glama
josuekongolo

CompanyIQ MCP Server

by josuekongolo
ownership_analysis.ts3.5 kB
import { z } from 'zod'; import { CompanyDatabase } from '../database/db.js'; import { BrregClient } from '../apis/brreg.js'; const OwnershipAnalysisSchema = z.object({ org_nr: z.string().describe("Organisasjonsnummer"), include_subunits: z.boolean().default(true).describe("Inkluder datterselskaper/underenheter"), depth: z.number().default(2).describe("Dybde i eierskapstreet") }); export async function analyzeOwnership(args: unknown, db: CompanyDatabase, brreg: BrregClient) { const params = OwnershipAnalysisSchema.parse(args); // Get company info let company = await db.getCompany(params.org_nr); if (!company) { const brregCompany = await brreg.getCompany(params.org_nr); if (!brregCompany) { return { content: [{ type: "text" as const, text: `Fant ikke selskap med org.nr ${params.org_nr}` }] }; } // Save to DB await db.insertOrUpdateCompany({ org_nr: brregCompany.organisasjonsnummer, name: brregCompany.navn, organization_form: brregCompany.organisasjonsform?.beskrivelse, nace_code: brregCompany.naeringskode1?.kode, nace_description: brregCompany.naeringskode1?.beskrivelse, employees_count: brregCompany.antallAnsatte, business_municipality: brregCompany.forretningsadresse?.kommune, last_updated: new Date().toISOString() } as any); company = await db.getCompany(params.org_nr); } // Get ownership structure const ownership = await db.getOwnership(params.org_nr); // Get subunits let subunits: any[] = []; if (params.include_subunits) { subunits = await db.getSubunits(params.org_nr); if (subunits.length === 0) { const brregSubunits = await brreg.getSubunits(params.org_nr); for (const sub of brregSubunits) { await db.insertSubunit({ org_nr: sub.organisasjonsnummer, parent_org_nr: params.org_nr, name: sub.navn, nace_code: sub.naeringskode1?.kode, employees_count: sub.antallAnsatte, business_address: sub.forretningsadresse?.adresse?.join(', '), municipality: sub.forretningsadresse?.kommune, established_date: sub.registreringsdatoEnhetsregisteret }); } subunits = await db.getSubunits(params.org_nr); } } const report = ` 🏢 EIERSKAPSANALYSE: ${company?.name} 📋 GRUNNINFO: - Org.nr: ${params.org_nr} - Organisasjonsform: ${company?.organization_form || 'Ukjent'} - Bransje: ${company?.nace_description || 'Ukjent'} - Ansatte: ${company?.employees_count || 'Ukjent'} ${ownership.length > 0 ? ` 👥 EIERSKAP: ${ownership.map((o: any, idx: number) => `${idx + 1}. ${o.owner_name} ${o.owner_org_nr ? `📋 ${o.owner_org_nr}` : ''} ${o.ownership_percentage ? `📊 ${o.ownership_percentage}% eierandel` : ''} ${o.owner_type ? `🏷️ ${o.owner_type}` : ''}` ).join('\n\n')} ` : '📭 Ingen eierinfo tilgjengelig i database'} ${subunits.length > 0 ? ` 🏭 DATTERSELSKAPER/UNDERENHETER (${subunits.length}): ${subunits.slice(0, 10).map((s: any, idx: number) => `${idx + 1}. ${s.name} 📋 ${s.org_nr} 👥 ${s.employees_count || 'Ukjent'} ansatte 📍 ${s.municipality || 'Ukjent'}` ).join('\n\n')} ${subunits.length > 10 ? `\n... og ${subunits.length - 10} flere` : ''} ` : ''} 💡 Dette er en forenklet eierskapsanalyse. For full UBO-analyse, bruk eksterne verktøy. `; 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