Skip to main content
Glama
school-units-client.ts2.88 kB
/** * API-klient för Skolenhetsregistret API */ import { BaseApiClient } from './base-client.js'; import { config } from '../config.js'; import type { SchoolUnitsResponse, SchoolUnit, SchoolUnitsSearchParams } from '../types/school-units.js'; export class SchoolUnitsApiClient extends BaseApiClient { constructor() { super({ baseURL: config.schoolUnitsApiBaseUrl, userAgent: 'skolverket-mcp/2.1.0', timeout: config.timeout, maxRetries: config.maxRetries, retryDelay: config.retryDelay, maxConcurrent: config.maxConcurrent, apiKey: config.apiKey, authHeader: config.authHeader // Ta bort customAcceptHeader - använd standard application/json för v2 API }); } /** * Hämta alla skolenheter (använder v2 school-units endpoint enligt officiell API-spec) */ async getAllSchoolUnits(): Promise<any> { return this.get<any>('/v2/school-units'); // Använder v2 enligt officiell Skolenhetsregistret API spec } /** * Hämta skolenheter med filtrering (client-side) * v2 API:et returnerar data i format: { data: { attributes: [...] } } */ async searchSchoolUnits(params: SchoolUnitsSearchParams = {}): Promise<any[]> { const response = await this.getAllSchoolUnits(); let units = response.data?.attributes || []; // Filtrera på namn (case-insensitive) if (params.name) { const searchTerm = params.name.toLowerCase(); units = units.filter((unit: any) => unit.name.toLowerCase().includes(searchTerm) ); } // Filtrera på status (enligt v2 API spec: AKTIV, VILANDE, UPPHORT, PLANERAD) if (params.status) { units = units.filter((unit: any) => unit.status === params.status); } return units; } /** * Hämta en specifik skolenhet baserat på kod * v2 API:et har en dedikerad endpoint för detta: /v2/school-units/{schoolUnitCode} */ async getSchoolUnit(code: string): Promise<any | undefined> { try { const response = await this.get<any>(`/v2/school-units/${code}`); return response.data?.attributes; } catch (error) { // Om direkt hämtning misslyckas, sök genom alla enheter const response = await this.getAllSchoolUnits(); const units = response.data?.attributes || []; return units.find((unit: any) => unit.schoolUnitCode === code); } } /** * Hämta skolenheter efter status * v2 API:et stöder status: AKTIV, VILANDE, UPPHORT, PLANERAD */ async getSchoolUnitsByStatus(status: 'AKTIV' | 'UPPHORT' | 'VILANDE' | 'PLANERAD'): Promise<any[]> { return this.searchSchoolUnits({ status }); } /** * Sök skolenheter efter namn */ async searchSchoolUnitsByName(name: string): Promise<any[]> { return this.searchSchoolUnits({ name }); } } // Singleton-instans export const schoolUnitsApi = new SchoolUnitsApiClient();

Implementation Reference

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/isakskogstad/skolverket-syllabus-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server