Skip to main content
Glama
josuekongolo

CompanyIQ MCP Server

by josuekongolo
build_financial_history.ts5 kB
import { z } from 'zod'; import { CompanyDatabase } from '../database/db.js'; import { BrregClient } from '../apis/brreg.js'; import { RegnskapClient } from '../apis/regnskap.js'; const BuildHistorySchema = z.object({ org_nr: z.string().describe("Organisasjonsnummer"), years_needed: z.number().default(5).describe("Antall år tilbake (f.eks. 5 for 2020-2024)") }); /** * Smart tool to build complete financial history * Auto-fetches latest year + provides download links for historical years */ export async function buildFinancialHistory(args: unknown, db: CompanyDatabase, brreg: BrregClient) { const params = BuildHistorySchema.parse(args); // Get company 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}` }] }; } await db.insertOrUpdateCompany({ org_nr: brregCompany.organisasjonsnummer, name: brregCompany.navn, organization_form: brregCompany.organisasjonsform?.beskrivelse, nace_code: brregCompany.naeringskode1?.kode, employees_count: brregCompany.antallAnsatte, last_updated: new Date().toISOString() } as any); company = await db.getCompany(params.org_nr); } // Step 1: Auto-fetch latest year const regnskapClient = new RegnskapClient(); const latestData = await regnskapClient.getExtractedFinancials(params.org_nr); if (!latestData) { return { content: [{ type: "text" as const, text: `❌ Ingen regnskapsdata tilgjengelig i Regnskapsregisteret API for ${company?.name}` }] }; } // Save latest year await db.insertFinancialSnapshot({ org_nr: latestData.org_nr, year: latestData.year, revenue: latestData.revenue, profit: latestData.profit, assets: latestData.assets, equity: latestData.equity, employees: null, source: 'regnskapsregisteret_api' }); // Check what historical years are needed const currentHistory = await db.getFinancialHistory(params.org_nr, params.years_needed); const currentYears = currentHistory.map((h: any) => h.year); const targetYear = latestData.year; const startYear = targetYear - params.years_needed + 1; const missingYears = []; for (let year = startYear; year < targetYear; year++) { if (!currentYears.includes(year)) { missingYears.push(year); } } const companyPageUrl = `https://virksomhet.brreg.no/nb/oppslag/enheter/${params.org_nr}`; const report = ` 📊 BYGGE FINANSIELL HISTORIKK: ${company?.name} ✅ SISTE ÅR AUTOMATISK HENTET (${latestData.year}): 💰 Omsetning: ${latestData.revenue ? (latestData.revenue / 1000000).toFixed(1) + 'M NOK' : 'N/A'} 📈 Resultat: ${latestData.profit ? (latestData.profit / 1000000).toFixed(1) + 'M NOK' : 'N/A'} 🏢 Eiendeler: ${latestData.assets ? (latestData.assets / 1000000).toFixed(1) + 'M NOK' : 'N/A'} ${currentHistory.length > 1 ? ` ✅ HAR ALLEREDE ${currentHistory.length} ÅR I DATABASE: ${currentHistory.map((h: any) => `- ${h.year}: ${h.revenue ? (h.revenue / 1000000).toFixed(0) + 'M NOK' : 'N/A'}`).join('\n')} ` : ''} ${missingYears.length > 0 ? ` 📥 MANGLER ${missingYears.length} ÅR FOR KOMPLETT HISTORIKK: Trenger data for: ${missingYears.join(', ')} 🔗 RASK NEDLASTING (5 min per år): 1️⃣ ÅPNE SELSKAPSSIDE: ${companyPageUrl} 2️⃣ FOR HVERT ÅR (${missingYears.join(', ')}): - Scroll til "Årsregnskap" - Klikk "Innsendt årsregnskap [år]" - PDF lastes ned - Hent ut: Omsetning, Resultat, Eiendeler, Egenkapital 3️⃣ RASK BULK-IMPORT: Opprett denne CSV-filen (ca. 5 min): org_nr,year,revenue,profit,assets,equity,source ${params.org_nr},${latestData.year},${latestData.revenue},${latestData.profit},${latestData.assets},${latestData.equity},auto ${missingYears.map(y => ` ${params.org_nr},${y},[fyll inn],[fyll inn],[fyll inn],[fyll inn],bronnoysund`).join('\n')} 4️⃣ IMPORTER: import_financials_from_file /path/to/file.csv format csv ⏱️ ESTIMERT TID: ${missingYears.length * 5} minutter 💰 KOSTNAD: GRATIS 🎯 RESULTAT: ${params.years_needed} år med komplett historikk! ` : ` 🎉 KOMPLETT HISTORIKK ALLEREDE I DATABASE! Du har ${currentHistory.length} år med data (${(currentHistory[currentHistory.length - 1] as any).year}-${(currentHistory[0] as any).year}) Kjør 'analyze_financials' eller 'analyze_growth' for trendanalyse! `} 💡 FREMOVER: Kjør 'fetch_financials' en gang i året for å holde historikken oppdatert. Neste år (${latestData.year + 1}): Automatisk henting gir deg ${currentHistory.length + 1} års data! ℹ️ API-BEGRENSNING: Brønnøysund Open API gir kun siste år. Historiske data krever engangs manuell nedlasting, deretter er alt automatisk! 🚀 `; 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