Skip to main content
Glama
josuekongolo

CompanyIQ MCP Server

by josuekongolo
import-all-json-to-db.jsβ€’5.06 kB
import { CompanyDatabase } from './build/database/db.js'; import { BrregClient } from './build/apis/brreg.js'; import { readdirSync, readFileSync, existsSync, statSync } from 'fs'; import { resolve } from 'path'; console.log('πŸ“Š Importing ALL extracted JSON files into database...'); console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'); const db = new CompanyDatabase(); const brreg = new BrregClient(); // Find all JSON files in extracted folders const extractedDir = resolve('./data/extracted'); let totalImported = 0; let totalSkipped = 0; let totalErrors = 0; if (!existsSync(extractedDir)) { console.log('❌ No extracted data directory found'); process.exit(1); } // Get all org folders const orgFolders = readdirSync(extractedDir).filter(f => { if (f.startsWith('.')) return false; // Skip hidden files const path = resolve(extractedDir, f); try { const stats = statSync(path); return stats.isDirectory() && readdirSync(path).some(file => file.endsWith('.json')); } catch { return false; } }); console.log(`Found ${orgFolders.length} companies with extracted data\n`); for (const orgFolder of orgFolders) { const orgNr = orgFolder === 'temp' ? null : orgFolder; const folderPath = resolve(extractedDir, orgFolder); const jsonFiles = readdirSync(folderPath).filter(f => f.endsWith('.json')); if (jsonFiles.length === 0) continue; console.log(`\nπŸ“ Processing ${orgFolder} (${jsonFiles.length} files)...`); for (const jsonFile of jsonFiles) { const filePath = resolve(folderPath, jsonFile); try { const data = JSON.parse(readFileSync(filePath, 'utf-8')); // Extract org_nr from file if not in folder name let finalOrgNr = orgNr; if (!finalOrgNr && data.file) { const match = data.file.match(/(\d{9})/); finalOrgNr = match ? match[1] : null; } if (!finalOrgNr) { console.log(` ⚠️ Skipping ${jsonFile} - no org_nr found`); totalSkipped++; continue; } // Ensure company exists in database let company = db.getCompany(finalOrgNr); if (!company) { console.log(` πŸ” Fetching company ${finalOrgNr} from Brreg...`); const brregCompany = await brreg.getCompany(finalOrgNr); if (brregCompany) { 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() }); company = db.getCompany(finalOrgNr); } } // Check if this year already exists const existing = db.getFinancialHistory(finalOrgNr, 20).find(r => r.year === data.year); if (existing && existing.source !== 'estimated') { console.log(` ⏭️ ${data.year} already in DB (source: ${existing.source})`); totalSkipped++; continue; } // Insert into database db.insertFinancialSnapshot({ org_nr: finalOrgNr, year: data.year, revenue: data.revenue, profit: data.profit, assets: data.assets, equity: data.equity, employees: null, source: data.source || 'openai_vision_extraction' }); const revenue = data.revenue ? (data.revenue/1000000).toFixed(1) + 'M' : 'N/A'; const profit = data.profit ? (data.profit/1000000).toFixed(1) + 'M' : 'N/A'; console.log(` βœ… Imported ${data.year}: Rev=${revenue}, Profit=${profit}`); totalImported++; } catch (error) { console.error(` ❌ Error with ${jsonFile}: ${error.message}`); totalErrors++; } } } console.log('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'); console.log('πŸ“Š IMPORT SUMMARY'); console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'); console.log(`βœ… Successfully imported: ${totalImported} records`); console.log(`⏭️ Skipped (already exists): ${totalSkipped} records`); console.log(`❌ Errors: ${totalErrors} records`); // Test query for one company if (orgFolders.length > 0) { const testOrgNr = orgFolders[0] === 'temp' ? '999059198' : orgFolders[0]; const history = db.getFinancialHistory(testOrgNr, 10); if (history.length > 0) { console.log(`\nπŸ” Sample data for ${testOrgNr}:`); console.log('Year | Revenue | Source'); console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━'); history.forEach(h => { const rev = h.revenue ? (h.revenue/1000000).toFixed(1) + 'M' : 'N/A'; console.log(`${h.year} | ${rev.padEnd(12)} | ${h.source}`); }); } } console.log('\nβœ… Database import complete!'); db.close();

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