Skip to main content
Glama
josuekongolo

CompanyIQ MCP Server

by josuekongolo
board_tracking.ts2.66 kB
import { z } from 'zod'; import { CompanyDatabase } from '../database/db.js'; import { BrregClient } from '../apis/brreg.js'; const BoardTrackingSchema = z.object({ org_nr: z.string().optional().describe("Organisasjonsnummer"), person_id: z.string().optional().describe("Person-ID for å finne alle styrer personen sitter i"), company_name: z.string().optional().describe("Selskapsnavn (alternativ til org.nr)") }); export async function trackBoard(args: unknown, db: CompanyDatabase, brreg: BrregClient) { const params = BoardTrackingSchema.parse(args); let orgNr = params.org_nr; // If name provided, search for org number if (!orgNr && params.company_name) { const companies = await brreg.searchCompanies(params.company_name, 1); if (companies.length > 0) { orgNr = companies[0].organisasjonsnummer; } else { return { content: [{ type: "text" as const, text: `Fant ikke selskap med navn "${params.company_name}"` }] }; } } if (!orgNr && !params.person_id) { return { content: [{ type: "text" as const, text: "Må oppgi enten org_nr, company_name eller person_id" }] }; } // Get board members const boardMembers = await db.getBoardMembers(orgNr!); // If no cached data, fetch from Brønnøysund if (boardMembers.length === 0 && orgNr) { const roles = await brreg.getRoles(orgNr); // Parse and save roles for (const roleGroup of roles) { for (const role of roleGroup.roller || []) { await db.insertBoardMember({ company_org_nr: orgNr, person_id: role.person?.fodselsdato, name: role.person?.navn?.fornavn + ' ' + role.person?.navn?.etternavn, role_type: role.type?.kode, role_description: role.type?.beskrivelse, appointed_date: null, birth_date: role.person?.fodselsdato, is_active: true }); } } } const company = await db.getCompany(orgNr!); const report = ` 👔 STYRESAMMENSETNING: ${company?.name || 'Ukjent selskap'} ${boardMembers.length > 0 ? ` ${boardMembers.map((m: any, idx: number) => `${idx + 1}. ${m.name || 'Ukjent navn'} 🏷️ ${m.role_description || m.role_type || 'Ukjent rolle'} ${m.birth_date ? `📅 ${m.birth_date}` : ''}` ).join('\n\n')} ` : '📭 Ingen styremedlemmer funnet i database.\n\nℹ️ Brønnøysunds Roller-API krever autentisering for full tilgang.'} 💡 For å tracke en persons styreverv på tvers av selskaper, bruk person_id parameteren. `; 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