get_network_analysis
Analyze board interlocks and shareholder relationships to uncover corporate connections and influence patterns in the Spanish stock market.
Instructions
Get comprehensive network analysis of board interlocks and shareholder relationships
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/analytics.ts:7-22 (handler)Main handler function that orchestrates network analysis by fetching data from database and computing director/shareholder network metrics and governance risks.async getComplexNetworkAnalysis(): Promise<any> { const companies = await this.db.getAllCompanies(); const directors = await this.db.getBoardInterlocks(); const shareholders = await this.db.getShareholderOverlap(); // Calculate network metrics const directorNetworkMetrics = this.calculateDirectorNetworkMetrics(directors); const shareholderNetworkMetrics = this.calculateShareholderNetworkMetrics(shareholders); return { director_network: directorNetworkMetrics, shareholder_network: shareholderNetworkMetrics, cross_ownership_analysis: shareholders, governance_risk_factors: await this.getGovernanceRiskFactors(companies, directors) }; }
- src/index.ts:338-344 (schema)Tool schema definition specifying the name, description, and empty input schema (no parameters required).name: 'get_network_analysis', description: 'Get comprehensive network analysis of board interlocks and shareholder relationships', inputSchema: { type: 'object', properties: {}, }, },
- src/index.ts:649-651 (registration)Registration in the CallToolRequestSchema switch statement that dispatches to the analytics manager's handler.case 'get_network_analysis': result = await this.analytics.getComplexNetworkAnalysis(); break;
- src/analytics.ts:24-43 (helper)Helper function to compute director network metrics from board interlocks data.private calculateDirectorNetworkMetrics(interlocks: any[]): any { // Analyze existing interlock data const totalInterlocks = interlocks.length; const topDirectors = interlocks.slice(0, 10); // Calculate sector distribution const sectorConnections = new Map(); interlocks.forEach(interlock => { const companies = interlock.companies.split(','); // Note: We'd need sector information to do proper sector analysis // This is simplified for the API-based approach }); return { total_interlocks: totalInterlocks, interlocked_directors: topDirectors, most_connected_directors: topDirectors.slice(0, 5), network_density: totalInterlocks > 0 ? totalInterlocks / 35 : 0 // IBEX 35 companies }; }
- src/analytics.ts:45-56 (helper)Helper function to compute shareholder network metrics from overlap data.private calculateShareholderNetworkMetrics(overlaps: any[]): any { const multiCompanyShareholders = overlaps; const crossSectorInvestors = overlaps.filter(s => s.company_count > 2); return { multi_company_shareholders: multiCompanyShareholders, cross_sector_investors: crossSectorInvestors, total_overlap_connections: overlaps.length, average_holdings_per_investor: overlaps.length > 0 ? overlaps.reduce((sum, s) => sum + s.company_count, 0) / overlaps.length : 0 }; }