UNPKG

littlesis-mcp

Version:

MCP server for LittleSis API - track corporate power and accountability

85 lines 3.35 kB
const BASE_URL = 'https://littlesis.org/api'; class LittleSisApiError extends Error { statusCode; errors; constructor(statusCode, errors) { super(`LittleSis API Error (${statusCode}): ${errors.map(e => e.title).join(', ')}`); this.statusCode = statusCode; this.errors = errors; this.name = 'LittleSisApiError'; } } async function makeApiRequest(endpoint) { const url = `${BASE_URL}${endpoint}`; try { const response = await fetch(url); if (!response.ok) { const errorData = await response.json(); throw new LittleSisApiError(response.status, errorData.errors); } return await response.json(); } catch (error) { if (error instanceof LittleSisApiError) { throw error; } throw new Error(`Failed to fetch from LittleSis API: ${error instanceof Error ? error.message : 'Unknown error'}`); } } export class LittleSisApi { // Entity endpoints static async getEntity(id) { return makeApiRequest(`/entities/${id}`); } static async getEntities(ids) { if (ids.length > 300) { throw new Error('Maximum 300 entities per request'); } return makeApiRequest(`/entities?ids=${ids.join(',')}`); } static async searchEntities(params) { const searchParams = new URLSearchParams(); searchParams.append('q', params.q); if (params.page) searchParams.append('page', params.page.toString()); if (params.regions) searchParams.append('regions', params.regions.toString()); if (params.tags) searchParams.append('tags', params.tags); return makeApiRequest(`/entities/search?${searchParams.toString()}`); } static async getEntityExtensions(id, details = false) { const detailsParam = details ? '?details=TRUE' : ''; return makeApiRequest(`/entities/${id}/extensions${detailsParam}`); } static async getEntityRelationships(id, params) { const searchParams = new URLSearchParams(); if (params?.category_id) searchParams.append('category_id', params.category_id.toString()); if (params?.sort) searchParams.append('sort', params.sort); if (params?.page) searchParams.append('page', params.page.toString()); const paramString = searchParams.toString(); const endpoint = `/entities/${id}/relationships${paramString ? '?' + paramString : ''}`; return makeApiRequest(endpoint); } static async getEntityConnections(id, params) { const searchParams = new URLSearchParams(); if (params?.category_id) searchParams.append('category_id', params.category_id.toString()); if (params?.page) searchParams.append('page', params.page.toString()); const paramString = searchParams.toString(); const endpoint = `/entities/${id}/connections${paramString ? '?' + paramString : ''}`; return makeApiRequest(endpoint); } static async getEntityLists(id) { return makeApiRequest(`/entities/${id}/lists`); } // Relationship endpoints static async getRelationship(id) { return makeApiRequest(`/relationships/${id}`); } } //# sourceMappingURL=api.js.map