Skip to main content
Glama
index.ts89.3 kB
#!/usr/bin/env node /** * Skolverket MCP Server v2.7.0 * * MCP server för att ge LLMs tillgång till Skolverkets öppna API:er: * - Läroplan API (läroplaner, ämnen, kurser, program) * - Skolenhetsregistret API (skolenheter och deras status) * - Planned Educations API (vuxenutbildning, gymnasieutbildningar, statistik, dokument) * * 41 verktyg totalt: * - 17 Syllabus API verktyg * - 4 School Units verktyg * - 17 Planned Educations verktyg * - 3 Support Data verktyg * - 1 Health check verktyg */ import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from '@modelcontextprotocol/sdk/types.js'; // Import logger och errors import { log } from './logger.js'; import { ResourceNotFoundError } from './errors.js'; // Importera API-klienter import { syllabusApi } from './api/syllabus-client.js'; import { schoolUnitsApi } from './api/school-units-client.js'; import { plannedEducationApi } from './api/planned-education-client.js'; // Importera läroplanverktyg (Syllabus API) import { searchSubjects, getSubjectDetails, getSubjectVersions, searchSubjectsSchema, getSubjectDetailsSchema, getSubjectVersionsSchema } from './tools/syllabus/subjects.js'; import { searchCourses, getCourseDetails, getCourseVersions, searchCoursesSchema, getCourseDetailsSchema, getCourseVersionsSchema } from './tools/syllabus/courses.js'; import { searchPrograms, getProgramDetails, getProgramVersions, searchProgramsSchema, getProgramDetailsSchema, getProgramVersionsSchema } from './tools/syllabus/programs.js'; import { searchCurriculums, getCurriculumDetails, getCurriculumVersions, searchCurriculumsSchema, getCurriculumDetailsSchema, getCurriculumVersionsSchema } from './tools/syllabus/curriculums.js'; import { getSchoolTypes, getTypesOfSyllabus, getSubjectAndCourseCodes, getStudyPathCodes, getApiInfo, getSchoolTypesSchema, getStudyPathCodesSchema } from './tools/syllabus/valuestore.js'; // Importera skolenhetsverktyg (School Units API) import { searchSchoolUnits, getSchoolUnitDetails, getSchoolUnitsByStatus, searchSchoolUnitsByName, searchSchoolUnitsSchema, getSchoolUnitDetailsSchema, getSchoolUnitsByStatusSchema, searchSchoolUnitsByNameSchema } from './tools/school-units/search.js'; // Importera planned education verktyg import { searchAdultEducation, getAdultEducationDetails, filterAdultEducationByDistance, filterAdultEducationByPace, searchAdultEducationSchema, getAdultEducationDetailsSchema, filterAdultEducationByDistanceSchema, filterAdultEducationByPaceSchema } from './tools/planned-education/adult-education.js'; import { getEducationAreas, getDirections, getEducationAreasSchema, getDirectionsSchema } from './tools/planned-education/support-data.js'; // V4 School Units verktyg import { searchSchoolUnitsV4, getSchoolUnitDetailsV4, getSchoolUnitEducationEvents, getSchoolUnitCompactEducationEvents, calculateDistanceFromSchoolUnit, getSchoolUnitDocuments, getSchoolUnitStatisticsLinks, getSchoolUnitStatisticsFSK, getSchoolUnitStatisticsGR, getSchoolUnitStatisticsGRAN, getSchoolUnitStatisticsGY, getSchoolUnitStatisticsGYAN, getSchoolUnitSurveyNested, getSchoolUnitSurveyFlat, searchSchoolUnitsV4Schema, getSchoolUnitDetailsV4Schema, getSchoolUnitEducationEventsSchema, getSchoolUnitCompactEducationEventsSchema, calculateDistanceFromSchoolUnitSchema, getSchoolUnitDocumentsSchema, getSchoolUnitStatisticsLinksSchema, getSchoolUnitStatisticsFSKSchema, getSchoolUnitStatisticsGRSchema, getSchoolUnitStatisticsGRANSchema, getSchoolUnitStatisticsGYSchema, getSchoolUnitStatisticsGYANSchema, getSchoolUnitSurveyNestedSchema, getSchoolUnitSurveyFlatSchema } from './tools/school-units/v4.js'; // V4 Education Events verktyg import { searchEducationEventsV4, searchCompactEducationEventsV4, countEducationEventsV4, countAdultEducationEventsV4, searchEducationEventsV4Schema, searchCompactEducationEventsV4Schema, countEducationEventsV4Schema, countAdultEducationEventsV4Schema } from './tools/planned-education/v4-education-events.js'; // V4 Statistics verktyg import { getNationalStatisticsFSK, getNationalStatisticsGR, getNationalStatisticsGRAN, getNationalStatisticsGY, getNationalStatisticsGYAN, getSALSAStatisticsGR, getSALSAStatisticsGRAN, getProgramStatisticsGY, getProgramStatisticsGYAN, getNationalStatisticsFSKSchema, getNationalStatisticsGRSchema, getNationalStatisticsGRANSchema, getNationalStatisticsGYSchema, getNationalStatisticsGYANSchema, getSALSAStatisticsGRSchema, getSALSAStatisticsGRANSchema, getProgramStatisticsGYSchema, getProgramStatisticsGYANSchema } from './tools/planned-education/v4-statistics.js'; // V4 Support Data verktyg import { getSchoolTypesV4, getGeographicalAreasV4, getPrincipalOrganizerTypesV4, getProgramsV4, getOrientationsV4, getInstructionLanguagesV4, getDistanceStudyTypesV4, getAdultTypeOfSchoolingV4, getMunicipalitySchoolUnitsV4, getSchoolTypesV4Schema, getGeographicalAreasV4Schema, getPrincipalOrganizerTypesV4Schema, getProgramsV4Schema, getOrientationsV4Schema, getInstructionLanguagesV4Schema, getDistanceStudyTypesV4Schema, getAdultTypeOfSchoolingV4Schema, getMunicipalitySchoolUnitsV4Schema } from './tools/planned-education/v4-support.js'; // V4 Nya endpoints import { getAdultEducationAreasV4, getApiInfoV4, searchCompactSchoolUnitsV4, getSecondarySchoolUnitsV4, getAllSchoolsSALSAStatistics, getSchoolUnitSALSAStatistics, getSchoolUnitDocumentsByType, getSchoolUnitEducationEventsByStudyPath, getAdultEducationAreasV4Schema, getApiInfoV4Schema, searchCompactSchoolUnitsV4Schema, getSecondarySchoolUnitsV4Schema, getAllSchoolsSALSAStatisticsSchema, getSchoolUnitSALSAStatisticsSchema, getSchoolUnitDocumentsByTypeSchema, getSchoolUnitEducationEventsByStudyPathSchema } from './tools/planned-education/v4-new-endpoints.js'; // V4 Survey endpoints import { getSchoolUnitNestedSurveyCustodiansFSK, getSchoolUnitNestedSurveyCustodiansGR, getSchoolUnitNestedSurveyCustodiansGRAN, getSchoolUnitNestedSurveyPupilsGY, getSchoolUnitFlatSurveyCustodiansFSK, getSchoolUnitFlatSurveyCustodiansGR, getSchoolUnitFlatSurveyCustodiansGRAN, getSchoolUnitFlatSurveyPupilsGR, getSchoolUnitFlatSurveyPupilsGY, getSchoolUnitNestedSurveyCustodiansFSKSchema, getSchoolUnitNestedSurveyCustodiansGRSchema, getSchoolUnitNestedSurveyCustodiansGRANSchema, getSchoolUnitNestedSurveyPupilsGYSchema, getSchoolUnitFlatSurveyCustodiansFSKSchema, getSchoolUnitFlatSurveyCustodiansGRSchema, getSchoolUnitFlatSurveyCustodiansGRANSchema, getSchoolUnitFlatSurveyPupilsGRSchema, getSchoolUnitFlatSurveyPupilsGYSchema } from './tools/planned-education/v4-survey-endpoints.js'; // Meta-verktyg för konsolidering import { getNationalStatistics, getSALSAStatistics, getProgramStatistics, searchEducationEvents, getNationalStatisticsSchema, getSALSAStatisticsSchema, getProgramStatisticsSchema, searchEducationEventsSchema } from './tools/planned-education/meta-statistics.js'; import { getSchoolUnitStatistics, getSchoolUnitSurvey, getSchoolUnitStatisticsSchema, getSchoolUnitSurveySchema } from './tools/school-units/meta-tools.js'; // Health check verktyg import { healthCheck, healthCheckSchema } from './tools/health.js'; // Skapa servern med uppdaterade capabilities const server = new Server( { name: 'skolverket-mcp', version: '2.5.0', }, { capabilities: { tools: {}, resources: {}, prompts: {}, logging: {} }, } ); // ============================================== // RESOURCES - För kontextläsning // ============================================== server.setRequestHandler(ListResourcesRequestSchema, async () => { log.info('Resources list requested'); return { resources: [ { uri: 'skolverket://api/info', name: 'Skolverket API Information', mimeType: 'application/json', description: 'Information om Skolverkets Läroplan API' }, { uri: 'skolverket://school-types', name: 'Alla skoltyper', mimeType: 'application/json', description: 'Lista över alla aktiva skoltyper (GR, GY, VUX, etc.)' }, { uri: 'skolverket://types-of-syllabus', name: 'Typer av läroplaner', mimeType: 'application/json', description: 'Lista över alla typer av läroplaner' }, { uri: 'skolverket://education-areas', name: 'Utbildningsområden', mimeType: 'application/json', description: 'Alla tillgängliga utbildningsområden för vuxenutbildning' } ] }; }); server.setRequestHandler(ReadResourceRequestSchema, async (request) => { const uri = request.params.uri; log.info('Resource read requested', { uri }); try { switch (uri) { case 'skolverket://api/info': { const info = await syllabusApi.getApiInfo(); return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(info, null, 2) }] }; } case 'skolverket://school-types': { const types = await syllabusApi.getSchoolTypes(); return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(types, null, 2) }] }; } case 'skolverket://types-of-syllabus': { const types = await syllabusApi.getTypesOfSyllabus(); return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(types, null, 2) }] }; } case 'skolverket://education-areas': { const response = await plannedEducationApi.getEducationAreas(); return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(response.body, null, 2) }] }; } default: throw new ResourceNotFoundError(uri); } } catch (error) { log.error('Resource read failed', { uri, error }); throw error; } }); // ============================================== // PROMPTS - För vanliga användningsfall // ============================================== server.setRequestHandler(ListPromptsRequestSchema, async () => { log.info('Prompts list requested'); return { prompts: [ { name: 'analyze_course', description: 'Analysera en kurs med centralt innehåll och kunskapskrav', arguments: [ { name: 'course_code', description: 'Kurskod (t.ex. MATMAT01c för Matematik 1c)', required: true } ] }, { name: 'compare_curriculum_versions', description: 'Jämför två versioner av ett ämne eller kurs', arguments: [ { name: 'code', description: 'Ämnes- eller kurskod att jämföra', required: true }, { name: 'type', description: 'Typ: "subject" eller "course"', required: true } ] }, { name: 'find_adult_education', description: 'Hitta vuxenutbildningar baserat på kriterier', arguments: [ { name: 'search_term', description: 'Sökterm (t.ex. "programmering", "svenska")', required: false }, { name: 'town', description: 'Stad (t.ex. "Stockholm", "Göteborg")', required: false }, { name: 'distance', description: 'Distansutbildning? (true/false)', required: false } ] }, { name: 'plan_study_path', description: 'Hjälp elev planera studieväg på gymnasiet', arguments: [ { name: 'interests', description: 'Elevens intressen (t.ex. "teknik", "naturvetenskap")', required: true } ] }, { name: 'teacher_course_planning', description: 'Hjälp lärare planera en kurs', arguments: [ { name: 'course_code', description: 'Kurskod att planera', required: true }, { name: 'focus_areas', description: 'Fokusområden (valfritt)', required: false } ] } ] }; }); server.setRequestHandler(GetPromptRequestSchema, async (request) => { const { name, arguments: args } = request.params; log.info('Prompt requested', { name, args }); try { switch (name) { case 'analyze_course': { const courseCode = args?.course_code as string; if (!courseCode) { throw new Error('course_code krävs'); } return { messages: [ { role: 'user', content: { type: 'text', text: `Analysera kursen ${courseCode} genom att: 1. Hämta kursens detaljer med get_course_details 2. Granska det centrala innehållet 3. Analysera kunskapskraven för alla betyg (E, C, A) 4. Identifiera nyckelkompetenser 5. Ge en sammanfattning av kursens omfattning och svårighetsgrad Börja med att hämta kursdata.` } } ] }; } case 'compare_curriculum_versions': { const code = args?.code as string; const type = args?.type as string; if (!code || !type) { throw new Error('Både code och type krävs'); } const toolName = type === 'subject' ? 'get_subject_versions' : 'get_course_versions'; return { messages: [ { role: 'user', content: { type: 'text', text: `Jämför olika versioner av ${code}: 1. Använd ${toolName} för att hämta alla versioner 2. Hämta detaljer för den senaste och näst senaste versionen 3. Jämför centralt innehåll och kunskapskrav 4. Identifiera viktigaste ändringar 5. Sammanfatta hur ${type === 'subject' ? 'ämnet' : 'kursen'} har utvecklats Börja med att hämta versionshistoriken.` } } ] }; } case 'find_adult_education': { const searchTerm = args?.search_term as string | undefined; const town = args?.town as string | undefined; const distance = args?.distance as boolean | undefined; const filters: string[] = []; if (searchTerm) filters.push(`sökterm: "${searchTerm}"`); if (town) filters.push(`stad: "${town}"`); if (distance !== undefined) filters.push(`distans: ${distance ? 'ja' : 'nej'}`); const filterText = filters.length > 0 ? ` med filter: ${filters.join(', ')}` : ''; return { messages: [ { role: 'user', content: { type: 'text', text: `Hitta vuxenutbildningar${filterText}: 1. Använd search_adult_education med lämpliga filter 2. Analysera resultaten och sortera efter relevans 3. För varje träff, visa: - Utbildningens namn - Anordnare - Plats och distansalternativ - Starttider - Studietakt 4. Ge rekommendationer baserat på kriterierna Börja med att söka efter utbildningar.` } } ] }; } case 'plan_study_path': { const interests = args?.interests as string; if (!interests) { throw new Error('interests krävs'); } return { messages: [ { role: 'user', content: { type: 'text', text: `Hjälp en elev som är intresserad av "${interests}" att planera sin studieväg: 1. Använd search_programs för att hitta relevanta gymnasieprogram 2. För varje relevant program, använd get_program_details för att se: - Inriktningar - Profiler - Yrkesutfall - Kurser som ingår 3. Jämför programmen utifrån elevens intressen 4. Ge konkreta rekommendationer för: - Vilket program som passar bäst - Vilka inriktningar/profiler att överväga - Vilka framtida karriärvägar som öppnas Börja med att söka efter lämpliga program.` } } ] }; } case 'teacher_course_planning': { const courseCode = args?.course_code as string; const focusAreas = args?.focus_areas as string | undefined; if (!courseCode) { throw new Error('course_code krävs'); } return { messages: [ { role: 'user', content: { type: 'text', text: `Hjälp lärare planera kursen ${courseCode}${focusAreas ? ` med fokus på ${focusAreas}` : ''}: 1. Hämta kursens detaljer med get_course_details 2. Analysera det centrala innehållet 3. Granska kunskapskraven 4. Föreslå: - Tematisk upplägg - Lärandeaktiviteter för varje del - Bedömningspunkter - Hur man arbetar mot olika betygsnivåer (E, C, A) 5. Skapa en övergripande kursplan med tidsestimat Börja med att hämta kursdata.` } } ] }; } default: throw new Error(`Okänd prompt: ${name}`); } } catch (error) { log.error('Prompt execution failed', { name, error }); throw error; } }); // ============================================== // TOOLS - Med förbättrade beskrivningar // ============================================== server.setRequestHandler(ListToolsRequestSchema, async () => { log.info('Tools list requested'); return { tools: [ // ============================================== // LÄROPLAN API VERKTYG (Syllabus API) // ============================================== // Ämnesverktyg { name: 'search_subjects', description: `Sök efter ämnen i Skolverkets läroplan. ANVÄNDNINGSFALL: - Hitta ämnen för en specifik skoltyp (grundskola, gymnasium, etc.) - Jämföra ämnen över tid (senaste, historiska, alla versioner) - Utforska ämnens struktur och innehåll RETURNERAR: Lista över ämnen med kod, namn, beskrivning och version. EXEMPEL: För att hitta alla ämnen i gymnasiet, använd schooltype="GY" och timespan="LATEST".`, inputSchema: { type: 'object', properties: searchSubjectsSchema, }, }, { name: 'get_subject_details', description: `Hämta detaljerad information om ett specifikt ämne. ANVÄNDNINGSFALL: - Se centralt innehåll för ett ämne - Granska ämnesspecifika kunskapskrav - Förstå ämnets uppbyggnad och progression - Planera undervisning RETURNERAR: Komplett ämnesinformation med alla detaljer, inkl. kurser som ingår. EXEMPEL: Använd code="GRGRMAT01" för Matematik i grundskolan.`, inputSchema: { type: 'object', properties: getSubjectDetailsSchema, required: ['code'], }, }, { name: 'get_subject_versions', description: `Hämta alla tillgängliga versioner av ett ämne. ANVÄNDNINGSFALL: - Följa hur ett ämne förändrats över tid - Jämföra nuvarande läroplan med tidigare versioner - Forskning om läroplansförändringar - Förstå progressionen i ämnets utveckling RETURNERAR: Lista över alla versioner med versionsnummer och giltighetsdatum. TIPS: Använd sedan get_subject_details med specifikt versionsnummer för att jämföra.`, inputSchema: { type: 'object', properties: getSubjectVersionsSchema, required: ['code'], }, }, // Kursverktyg { name: 'search_courses', description: `Sök efter kurser i Skolverkets läroplan. ANVÄNDNINGSFALL: - Hitta kurser inom ett specifikt ämne - Filtrera kurser efter skoltyp och tidsperiod - Bygga upp kursutbud - Planera studiegång RETURNERAR: Lista över kurser med kod, namn, poäng och beskrivning. EXEMPEL: För Matematik 1c på gymnasiet, sök med schooltype="GY" och subjectCode="MATMAT01c". TIPS: Använd subjectCode för att filtrera på ämne.`, inputSchema: { type: 'object', properties: searchCoursesSchema, }, }, { name: 'get_course_details', description: `Hämta detaljerad information om en specifik kurs. ANVÄNDNINGSFALL: - Granska centralt innehåll för kursplanering - Analysera kunskapskrav för alla betyg (E, C, A) - Förstå kursmål och syfte - Planera bedömning och examination RETURNERAR: Komplett kursinformation inkl: - Centralt innehåll per område - Kunskapskrav för E, C och A - Poäng och omfattning - Syfte och mål EXEMPEL: code="MATMAT01c" för Matematik 1c. VIKTIGT: Detta är den mest använda funktionen för lärare!`, inputSchema: { type: 'object', properties: getCourseDetailsSchema, required: ['code'], }, }, { name: 'get_course_versions', description: `Hämta alla versioner av en kurs. ANVÄNDNINGSFALL: - Spåra förändringar i kursen över tid - Jämföra gamla och nya läroplaner - Forskning och analys - Förstå hur krav och innehåll utvecklats RETURNERAR: Versionshistorik med versionsnummer och datum.`, inputSchema: { type: 'object', properties: getCourseVersionsSchema, required: ['code'], }, }, // Programverktyg { name: 'search_programs', description: `Sök efter gymnasieprogram och studievägar. ANVÄNDNINGSFALL: - Studie- och yrkesvägledning - Hjälpa elever välja program - Jämföra olika studievägar - Utforska inriktningar och profiler RETURNERAR: Lista över program med inriktningar, profiler och beskrivning. EXEMPEL: För gymnasieprogram, använd schooltype="GY" och timespan="LATEST".`, inputSchema: { type: 'object', properties: searchProgramsSchema, }, }, { name: 'get_program_details', description: `Hämta detaljerad information om ett specifikt program. ANVÄNDNINGSFALL: - Djupdyka i programstruktur - Se alla inriktningar och profiler - Förstå yrkesutfall och karriärvägar - Planera studieväg - Vägledning och rådgivning RETURNERAR: Komplett programinformation inkl: - Alla inriktningar - Profiler och specialiseringar - Yrkesutfall och fortsatta studier - Programspecifika kurser EXEMPEL: code="NA" för Naturvetenskapsprogrammet, "TE" för Teknikprogrammet.`, inputSchema: { type: 'object', properties: getProgramDetailsSchema, required: ['code'], }, }, { name: 'get_program_versions', description: `Hämta versionshistorik för ett program. ANVÄNDNINGSFALL: - Spåra hur program förändrats - Jämföra gamla och nya programplaner - Förstå utveckling av yrkesutbildningar RETURNERAR: Lista över alla versioner med datum.`, inputSchema: { type: 'object', properties: getProgramVersionsSchema, required: ['code'], }, }, // Läroplansverktyg { name: 'search_curriculums', description: `Sök efter läroplaner (t.ex. LGR11, GY11). ANVÄNDNINGSFALL: - Hitta gällande läroplaner - Jämföra läroplaner mellan skolformer - Förstå läroplanernas struktur RETURNERAR: Lista över läroplaner med kod, namn och giltighetsperiod. EXEMPEL: LGR11 (Läroplan för grundskolan 2011), GY11 (Gymnasiet 2011).`, inputSchema: { type: 'object', properties: searchCurriculumsSchema, }, }, { name: 'get_curriculum_details', description: `Hämta komplett läroplan med alla avsnitt. ANVÄNDNINGSFALL: - Läsa läroplanens värdegrund och uppdrag - Granska övergripande mål - Förstå skolformens ramar - Planera verksamhet RETURNERAR: Hela läroplanen med alla kapitel och avsnitt. EXEMPEL: code="LGR11" för grundskolans läroplan.`, inputSchema: { type: 'object', properties: getCurriculumDetailsSchema, required: ['code'], }, }, { name: 'get_curriculum_versions', description: `Hämta versionshistorik för en läroplan. ANVÄNDNINGSFALL: - Spåra revideringar av läroplaner - Jämföra olika versioner - Forskning om läroplansutveckling RETURNERAR: Lista över versioner med datum.`, inputSchema: { type: 'object', properties: getCurriculumVersionsSchema, required: ['code'], }, }, // Värdesamlingsverktyg { name: 'get_school_types', description: `Hämta lista över alla skoltyper. ANVÄNDNINGSFALL: - Se tillgängliga skolformer - Förstå Skolverkets kategorisering - Filtrera data efter skoltyp RETURNERAR: Lista över skoltyper med koder och namn. VÄRDEN: GR (Grundskola), GY (Gymnasium), VUX (Vuxenutbildning), GRSÄR (Grundsärskola), GYSÄR (Gymnasiesärskola).`, inputSchema: { type: 'object', properties: getSchoolTypesSchema, }, }, { name: 'get_types_of_syllabus', description: `Hämta alla typer av läroplaner. ANVÄNDNINGSFALL: - Förstå olika läroplansk kategorier - Filtrera sökningar RETURNERAR: Lista över läroplanstyper.`, inputSchema: { type: 'object', properties: {}, }, }, { name: 'get_subject_and_course_codes', description: `Hämta alla tillgängliga ämnes- och kurskoder. ANVÄNDNINGSFALL: - Utforska hela kursutbudet - Hitta rätt kod för sökning - Bygga översikter RETURNERAR: Komplett lista över alla koder med typ (subject/course). OBS: Stor datamängd, kan ta tid att ladda.`, inputSchema: { type: 'object', properties: {}, }, }, { name: 'get_study_path_codes', description: `Hämta studievägskodar (programkoder). ANVÄNDNINGSFALL: - Lista alla gymnasieprogram - Hitta programkoder - Filtrera efter typ RETURNERAR: Lista över studievägar med koder.`, inputSchema: { type: 'object', properties: getStudyPathCodesSchema, }, }, { name: 'get_api_info', description: `Hämta information om Skolverkets Läroplan API. ANVÄNDNINGSFALL: - Se API-version - Kontakta information - Teknisk dokumentation RETURNERAR: API-metadata och information.`, inputSchema: { type: 'object', properties: {}, }, }, // ============================================== // SKOLENHETSREGISTRET API VERKTYG // ============================================== { name: 'search_school_units', description: `Sök efter skolenheter med filter. ANVÄNDNINGSFALL: - Hitta skolor i ett område - Filtrera efter status (aktiva, nedlagda, vilande) - Bygga skolregister - Planering och analys RETURNERAR: Lista över skolenheter med kod, namn och status. EXEMPEL: Sök aktiva skolor med status="AKTIV".`, inputSchema: { type: 'object', properties: searchSchoolUnitsSchema, }, }, { name: 'get_school_unit_details', description: `Hämta detaljer om en specifik skolenhet. ANVÄNDNINGSFALL: - Se skolans fullständiga information - Kontrollera skolstatus - Verifiera skolenhetskod RETURNERAR: Komplett skolenhetsinfo inkl. namn, adress, status. EXEMPEL: Använd skolenhetskod (8 siffror).`, inputSchema: { type: 'object', properties: getSchoolUnitDetailsSchema, required: ['code'], }, }, { name: 'get_school_units_by_status', description: `Filtrera skolenheter efter status. ANVÄNDNINGSFALL: - Hitta aktiva skolor - Lista nedlagda skolor - Spåra vilande enheter - Statistik och analys RETURNERAR: Skolenheter med angiven status. STATUS: AKTIV, UPPHORT (nedlagd), VILANDE.`, inputSchema: { type: 'object', properties: getSchoolUnitsByStatusSchema, required: ['status'], }, }, { name: 'search_school_units_by_name', description: `Sök skolenheter efter namn. ANVÄNDNINGSFALL: - Hitta specifik skola - Filtrera efter namnmönster - Identifiera skolgrupper RETURNERAR: Skolenheter som matchar söktermen (delmatchning). TIPS: Fungerar med partiella namn.`, inputSchema: { type: 'object', properties: searchSchoolUnitsByNameSchema, required: ['name'], }, }, // ============================================== // PLANNED EDUCATIONS API VERKTYG // ============================================== // Vuxenutbildning { name: 'search_adult_education', description: `Sök vuxenutbildningar med omfattande filter. ANVÄNDNINGSFALL: - Hitta YH-utbildningar (Yrkeshögskola) - Sök SFI-kurser (Svenska för invandrare) - Hitta Komvux-kurser - Filtrera efter stad, distans, studietakt - Planera vidareutbildning RETURNERAR: Utbildningstillfällen med: - Titel och anordnare - Plats och kommun - Distans/campus - Starttider - Studietakt och omfattning FILTER: - searchTerm: Sökord (t.ex. "programmering") - town: Stad (t.ex. "Stockholm") - typeOfSchool: "yh", "sfi", "komvuxgycourses" - distance: "true"/"false" - paceOfStudy: "100" (heltid), "50" (halvtid) EXEMPEL: Hitta IT-utbildningar i Stockholm som är på heltid.`, inputSchema: { type: 'object', properties: searchAdultEducationSchema, }, }, { name: 'get_adult_education_details', description: `Hämta detaljerad information om ett utbildningstillfälle. ANVÄNDNINGSFALL: - Se fullständig kursinformation - Läsa kursplan - Kontrollera antagningskrav - Planera ansökan RETURNERAR: Komplett utbildningsinfo inkl. innehåll och krav. EXEMPEL: Använd ID från search_adult_education.`, inputSchema: { type: 'object', properties: getAdultEducationDetailsSchema, required: ['id'], }, }, { name: 'filter_adult_education_by_distance', description: `Filtrera utbildningar på distans eller campus. ANVÄNDNINGSFALL: - Hitta endast distansutbildningar - Filtrera bort distansalternativ - Planera studiealternativ baserat på plats RETURNERAR: Filtrerade utbildningar. EXEMPEL: distance=true för endast distansutbildningar.`, inputSchema: { type: 'object', properties: filterAdultEducationByDistanceSchema, required: ['distance'], }, }, { name: 'filter_adult_education_by_pace', description: `Filtrera utbildningar efter studietakt. ANVÄNDNINGSFALL: - Hitta heltidsutbildningar (100%) - Sök deltidsalternativ (50%, 25%) - Anpassa efter arbetssituation RETURNERAR: Utbildningar med angiven studietakt. VÄRDEN: "100" (heltid), "50" (halvtid), "25" (kvartsfart), "50-100" (intervall).`, inputSchema: { type: 'object', properties: filterAdultEducationByPaceSchema, required: ['paceOfStudy'], }, }, // Stöddata { name: 'get_education_areas', description: `Hämta alla utbildningsområden. ANVÄNDNINGSFALL: - Se tillgängliga områden - Filtrera utbildningssökningar - Utforska utbildningsutbud RETURNERAR: Lista över utbildningsområden.`, inputSchema: { type: 'object', properties: getEducationAreasSchema, }, }, { name: 'get_directions', description: `Hämta alla inriktningar för utbildningar. ANVÄNDNINGSFALL: - Se specialiseringar - Filtrera utbildningar - Utforska inriktningar RETURNERAR: Lista över inriktningar.`, inputSchema: { type: 'object', properties: getDirectionsSchema, }, }, // ============================================== // V4 API VERKTYG - SCHOOL UNITS // ============================================== { name: 'search_school_units_v4', description: `Sök skolenheter med utökade v4-funktioner. ANVÄNDNINGSFALL: - Hitta skolor i specifik kommun eller län - Filtrera efter huvudmanstyp (kommunal, enskild, landsting) - Sök aktiva/nedlagda/vilande enheter - Bygga skolregister med avancerade filter - Geografisk analys av skollandskap RETURNERAR: - Paginerad lista med skolenheter - Detaljerad information per skolenhet - Stöd för sortering och filtrering - HAL-länkar för navigation FILTER: - name: Skolnamn (partiell matchning) - municipality/municipalityCode: Kommun - county/countyCode: Län - status: AKTIV, UPPHÖRD, VILANDE - schoolType: Skoltyp - principalOrganizerType: Huvudmanstyp - geographicalAreaCode: Geografisk kod EXEMPEL: - municipality: "Stockholm", status: "AKTIV" - schoolType: "Grundskola", principalOrganizerType: "Kommunal" RELATERADE VERKTYG: - get_school_unit_details_v4: Hämta detaljer om funnen skolenhet - get_geographical_areas_v4: Se tillgängliga geografiska områden - get_principal_organizer_types_v4: Se huvudmanstyper`, inputSchema: { type: 'object', properties: searchSchoolUnitsV4Schema }, }, { name: 'get_school_unit_details_v4', description: `Hämta fullständig information om en specifik skolenhet. ANVÄNDNINGSFALL: - Verifiera skolenhetskod innan statistikhämtning - Se fullständig kontaktinformation - Kontrollera skolstatus och skoltyper - Granska skolans adress och koordinater - Identifiera huvudman RETURNERAR: - Komplett skolenhetsinformation - Namn, adress, GPS-koordinater - Skoltyper och status - Huvudmansinformation - HAL-länkar till relaterad data (statistik, enkäter, dokument) EXEMPEL: - code: "29824923" (8-siffrig skolenhetskod) - code: "10015408" (Vasaskolan Stockholm) RELATERADE VERKTYG: - search_school_units_v4: Hitta skolenhetskod först - get_school_unit_statistics_links: Se tillgänglig statistik - get_school_unit_documents: Hämta inspektionsrapporter TIPS: Använd detta verktyg först för att verifiera att skolenheten finns innan du hämtar statistik eller enkäter.`, inputSchema: { type: 'object', properties: getSchoolUnitDetailsV4Schema, required: ['code'] }, }, { name: 'get_school_unit_education_events', description: `Hämta utbildningstillfällen som erbjuds av en skolenhet. ANVÄNDNINGSFALL: - Se vilka utbildningar en skola erbjuder - Jämföra utbildningsutbud mellan skolor - Hitta specifika program/inriktningar - Planera skolval baserat på utbud - Analysera skolors profileringar RETURNERAR: - Paginerad lista med utbildningstillfällen - Program, inriktningar, kurser - Startdatum och studieform - Undervisningsspråk - Distans/campusinformation FILTER: - typeOfSchool: Skoltyp - distance: true/false (distansutbildning) - paceOfStudy: Studietakt - semesterStartFrom: Startdatum (YYYY-MM-DD) EXEMPEL: - code: "29824923", typeOfSchool: "Gymnasium" - code: "10015408", distance: false RELATERADE VERKTYG: - get_school_unit_compact_education_events: Snabbare, kompakt format - search_education_events_v4: Sök över alla skolor - get_school_unit_details_v4: Se skolinformation först`, inputSchema: { type: 'object', properties: getSchoolUnitEducationEventsSchema, required: ['code'] }, }, { name: 'get_school_unit_compact_education_events', description: `Hämta utbildningstillfällen i kompakt format (snabbare respons). ANVÄNDNINGSFALL: - Snabb översikt över skolans utbud - När full detaljnivå inte behövs - Bygga listor och översikter - Prestanda-optimerad hämtning RETURNERAR: - Kompakt representation av utbildningstillfällen - Mindre datamängd än full version - Snabbare responstid - Grundläggande information om varje tillfälle EXEMPEL: - code: "29824923" - code: "10015408", size: 50 (hämta fler resultat) RELATERADE VERKTYG: - get_school_unit_education_events: Full detaljnivå - search_compact_education_events_v4: Sök över alla skolor - get_school_unit_details_v4: Grundinformation om skolan TIPS: Använd detta verktyg för snabba översikter, använd den fullständiga varianten när du behöver detaljerad information.`, inputSchema: { type: 'object', properties: getSchoolUnitCompactEducationEventsSchema, required: ['code'] }, }, { name: 'calculate_distance_from_school_unit', description: `Beräkna avstånd från en skolenhet till en GPS-koordinat. ANVÄNDNINGSFALL: - Hitta närmaste skola från en adress - Beräkna reseavstånd för elever - Geografisk analys av skolnätverk - Planera skolskjutsar - Skolvalsstöd baserat på avstånd RETURNERAR: - Avstånd i meter och kilometer - Reslinje (fågelvägen) - GPS-koordinater för båda punkterna EXEMPEL: - code: "29824923", latitude: 59.3293, longitude: 18.0686 (Stockholm centrum) - code: "10015408", latitude: 57.7089, longitude: 11.9746 (Göteborg) RELATERADE VERKTYG: - search_school_units_v4: Hitta skolor i närområdet - get_school_unit_details_v4: Se skolans exakta koordinater TIPS: Kombinera med search_school_units_v4 för att först hitta skolor i ett område, sedan beräkna exakt avstånd.`, inputSchema: { type: 'object', properties: calculateDistanceFromSchoolUnitSchema, required: ['code', 'latitude', 'longitude'] }, }, { name: 'get_school_unit_documents', description: `Hämta dokument kopplade till en skolenhet (t.ex. inspektionsrapporter). ANVÄNDNINGSFALL: - Läsa Skolinspektionens rapporter - Granska tillsynsbeslut - Få kvalitetsbedömningar - Forskning om skolkvalitet - Följa upp granskningar RETURNERAR: - Paginerad lista med dokument - Dokumenttyp (inspektion, beslut, etc.) - Datum och beskrivning - Länkar till dokumenten EXEMPEL: - code: "29824923" - code: "10015408", page: 0, size: 10 RELATERADE VERKTYG: - get_school_unit_details_v4: Grundinformation om skolan - get_school_unit_statistics_gy/gr: Jämför med statistiska resultat TIPS: Inspektionsrapporter ger värdefull kvalitetsinformation som kompletterar statistikdata.`, inputSchema: { type: 'object', properties: getSchoolUnitDocumentsSchema, required: ['code'] }, }, { name: 'get_school_unit_statistics_links', description: `Hämta länkar till tillgänglig statistik för en skolenhet. ANVÄNDNINGSFALL: - Upptäcka vilka statistiktyper som finns - Se vilka läsår som har data - Planera statistikhämtning - Verifiera datatillgänglighet RETURNERAR: - HAL-länkar till statistikendpoints - Tillgängliga skoltyper (FSK, GR, GY, etc.) - Metadata om statistiken EXEMPEL: - code: "29824923" - code: "10015408" RELATERADE VERKTYG: - get_school_unit_statistics_gy/gr/fsk/gran/gyan: Hämta specifik statistik - get_school_unit_details_v4: Verifiera skoltyp först TIPS: Använd detta verktyg först för att se vilken statistik som är tillgänglig, sedan hämta den specifika typen.`, inputSchema: { type: 'object', properties: getSchoolUnitStatisticsLinksSchema, required: ['code'] }, }, { name: 'get_school_unit_statistics_fsk', description: `Hämta förskolans kvalitetsstatistik för en skolenhet. ANVÄNDNINGSFALL: - Analysera förskolors kvalitet - Jämföra förskolor i en kommun - Följa utveckling över läsår - Skolvalsstöd för föräldrar RETURNERAR: - Förskolspecifik statistik - Gruppstorlek och personaltäthet - Pedagogisk kvalitet - Läsårsspecifika värden EXEMPEL: - code: "12345678", schoolYear: "2023/2024" - code: "87654321" (senaste läsår) RELATERADE VERKTYG: - get_national_statistics_fsk: Jämför med rikssnitt - search_school_units_v4: Hitta förskolor först - get_school_unit_details_v4: Verifiera att det är en förskola TIPS: Använd schoolYear-parametern för att jämföra utveckling över tid.`, inputSchema: { type: 'object', properties: getSchoolUnitStatisticsFSKSchema, required: ['code'] }, }, { name: 'get_school_unit_statistics_gr', description: `Hämta grundskolestatistik för en skolenhet. ANVÄNDNINGSFALL: - Analysera grundskolors resultat - Jämföra skolor i området - Följa betygutveckling - Nationella prov resultat - Skolvalsstöd RETURNERAR: - Meritvärde (genomsnittliga betyg) - Behörighet till gymnasiet - Nationella prov resultat per ämne - Andel elever med betyg i alla ämnen - Läsårsspecifik data EXEMPEL: - code: "29824923", schoolYear: "2023/2024" - code: "10015408" (senaste läsår) RELATERADE VERKTYG: - get_national_statistics_gr: Jämför med rikssnitt - get_salsa_statistics_gr: Detaljerad ämnesstatistik - search_school_units_v4: Hitta grundskolor VIKTIGT: Detta är en av de mest använda funktionerna för skolval och kvalitetsbedömning!`, inputSchema: { type: 'object', properties: getSchoolUnitStatisticsGRSchema, required: ['code'] }, }, { name: 'get_school_unit_statistics_gran', description: `Hämta grundsärskolans statistik för en skolenhet. ANVÄNDNINGSFALL: - Analysera grundsärskolors kvalitet - Jämföra särskolor - Specialpedagogisk uppföljning - Resursplanering RETURNERAR: - Grundsärskolespecifik statistik - Elevunderlag och gruppstorlekar - Utbildningsresultat - Läsårsdata EXEMPEL: - code: "12345678", schoolYear: "2023/2024" - code: "87654321" RELATERADE VERKTYG: - get_national_statistics_gran: Riksgenomsnitt - get_salsa_statistics_gran: Ämnesstatistik - search_school_units_v4: Hitta grundsärskolor`, inputSchema: { type: 'object', properties: getSchoolUnitStatisticsGRANSchema, required: ['code'] }, }, { name: 'get_school_unit_statistics_gy', description: `Hämta gymnasiestatistik för en skolenhet. ANVÄNDNINGSFALL: - Jämföra gymnasieskolor - Analysera examensstatistik - Studieresultat och genomströmning - Behörighet till högskola - Skolvalsstöd RETURNERAR: - Genomsnittligt meritvärde - Examensgrad (andel som tar examen) - Behörighet till högskola per program - Studieavbrott och byten - Programspecifik statistik - Läsårsdata EXEMPEL: - code: "29824923", schoolYear: "2023/2024" - code: "10015408" RELATERADE VERKTYG: - get_national_statistics_gy: Jämför med rikssnitt - get_program_statistics_gy: Detaljerad programstatistik - search_school_units_v4: Hitta gymnasieskolor - get_school_unit_education_events: Se vilka program som erbjuds VIKTIGT: Examensgrad och högskolebehörighet är nyckeltal för gymnasieval!`, inputSchema: { type: 'object', properties: getSchoolUnitStatisticsGYSchema, required: ['code'] }, }, { name: 'get_school_unit_statistics_gyan', description: `Hämta gymnasiesärskolans statistik för en skolenhet. ANVÄNDNINGSFALL: - Analysera gymnasiesärskolors kvalitet - Jämföra särskolor på gymnasienivå - Uppföljning av anpassad utbildning - Resursplanering RETURNERAR: - Gymnasiesärskolespecifik statistik - Utbildningsresultat - Programgenomströmning - Läsårsdata EXEMPEL: - code: "12345678", schoolYear: "2023/2024" - code: "87654321" RELATERADE VERKTYG: - get_national_statistics_gyan: Riksgenomsnitt - get_program_statistics_gyan: Programstatistik - search_school_units_v4: Hitta gymnasiesärskolor`, inputSchema: { type: 'object', properties: getSchoolUnitStatisticsGYANSchema, required: ['code'] }, }, { name: 'get_school_unit_survey_nested', description: `Hämta skolenkätdata i nested (hierarkisk) struktur. ANVÄNDNINGSFALL: - Analysera elevers/föräldrars/lärares upplevelser - Jämföra skolklimat mellan skolor - Läsa strukturerad enkätdata med kategorier - Forskningsanalys av skolmiljö RETURNERAR: - Hierarkiskt strukturerad enkätdata - Kategorier och underkategorier - Frågor med svarsfrekvenser - Läsårsspecifika enkäter STRUKTUR: - Områden (t.ex. "Trygghet", "Studiero") - Frågor per område - Svarsfördelning EXEMPEL: - code: "29824923", surveyYear: "2023" - code: "10015408" RELATERADE VERKTYG: - get_school_unit_survey_flat: Samma data i platt format - get_school_unit_statistics_gy/gr: Komplettera med resultatdata TIPS: Använd nested format när du vill analysera enkätdata per kategori/område.`, inputSchema: { type: 'object', properties: getSchoolUnitSurveyNestedSchema, required: ['code'] }, }, { name: 'get_school_unit_survey_flat', description: `Hämta skolenkätdata i flat (platt) struktur. ANVÄNDNINGSFALL: - Enkel databehandling och export - Snabb översikt av alla frågor - Excel/databas-import - Statistisk analys utan hierarki RETURNERAR: - Platt lista med alla enkätfrågor - En rad per fråga - Svarsfördelning per fråga - Lättare att processa programmatiskt STRUKTUR: - Array med frågor - Varje fråga har text och svar EXEMPEL: - code: "29824923", surveyYear: "2023" - code: "10015408" RELATERADE VERKTYG: - get_school_unit_survey_nested: Samma data i hierarkisk struktur - get_school_unit_statistics_gy/gr: Resultatstatistik TIPS: Använd flat format för enklare databehandling, nested för analys per kategori.`, inputSchema: { type: 'object', properties: getSchoolUnitSurveyFlatSchema, required: ['code'] }, }, // ============================================== // V4 API VERKTYG - EDUCATION EVENTS // ============================================== { name: 'search_education_events_v4', description: `Sök utbildningstillfällen över hela Sverige med omfattande filter. ANVÄNDNINGSFALL: - Hitta specifika program/kurser oavsett skola - Filtrera utbildningar efter plats och attribut - Jämföra utbildningsutbud mellan regioner - Hitta distansutbildningar - Planera studieval med detaljerad information RETURNERAR: - Paginerad lista med utbildningstillfällen - Fullständig information om varje tillfälle - Program, inriktningar, kurser - Undervisningsspråk och studieform - Skolenhetsinformation - Startdatum och terminer OMFATTANDE FILTER: - schoolUnitCode: Specifik skola - typeOfSchool: Skoltyp - municipality/county: Plats - distance: Distansutbildning (true/false) - paceOfStudy: Studietakt - programCode: Programkod (t.ex. "NA", "TE") - orientationCode: Inriktningskod - instructionLanguages: Undervisningsspråk - searchTerm: Fritextsökning - semesterStartFrom: Startdatum (YYYY-MM-DD) EXEMPEL: - programCode: "NA", municipality: "Stockholm" - distance: true, paceOfStudy: "100" - searchTerm: "naturvetenskap", county: "Stockholms län" RELATERADE VERKTYG: - search_compact_education_events_v4: Snabbare, mindre data - count_education_events_v4: Räkna träffar först - get_programs_v4: Se tillgängliga programkoder`, inputSchema: { type: 'object', properties: searchEducationEventsV4Schema }, }, { name: 'search_compact_education_events_v4', description: `Sök utbildningstillfällen i kompakt format för snabbare respons. ANVÄNDNINGSFALL: - Snabb översikt över tillgängliga utbildningar - Bygga listor och översikter - Prestanda-optimerade sökningar - Initial filtrering innan detaljhämtning RETURNERAR: - Kompakt representation av utbildningstillfällen - Mindre datamängd = snabbare respons - Grundläggande information - Paginerad lista FILTER: (subset av full version) - schoolUnitCode: Specifik skola - typeOfSchool: Skoltyp - municipality/county: Plats - distance: Distansutbildning - paceOfStudy: Studietakt - searchTerm: Fritextsökning EXEMPEL: - municipality: "Göteborg", typeOfSchool: "Gymnasium" - distance: true, searchTerm: "programmering" RELATERADE VERKTYG: - search_education_events_v4: Full detaljnivå - count_education_events_v4: Räkna resultat TIPS: Använd compact först för översikt, sedan full version för detaljer.`, inputSchema: { type: 'object', properties: searchCompactEducationEventsV4Schema }, }, { name: 'count_education_events_v4', description: `Räkna antal utbildningstillfällen som matchar dina filter. ANVÄNDNINGSFALL: - Se hur många träffar innan sökning - Verifiera att filter ger resultat - Statistik över utbildningsutbud - Planera paginering - Kvantitativ analys av utbudet RETURNERAR: - Totalt antal matchande tillfällen - Återspeglar aktuella filter - Snabb respons (ingen data hämtas) FILTER: - schoolUnitCode: Specifik skola - typeOfSchool: Skoltyp - municipality/county: Plats - distance: Distansutbildning - paceOfStudy: Studietakt - programCode: Program - searchTerm: Fritextsökning EXEMPEL: - programCode: "NA", municipality: "Stockholm" - distance: true RELATERADE VERKTYG: - search_education_events_v4: Hämta faktiska resultat - search_compact_education_events_v4: Snabb sökning TIPS: Använd count först för att verifiera att dina filter ger resultat.`, inputSchema: { type: 'object', properties: countEducationEventsV4Schema }, }, { name: 'count_adult_education_events_v4', description: `Räkna antal vuxenutbildningstillfällen som matchar filter. ANVÄNDNINGSFALL: - Verifiera vuxenutbildningsutbud - Statistik över YH/SFI/Komvux utbud - Planera vuxenutbildningssökningar - Kvantifiera tillgänglighet RETURNERAR: - Antal matchande vuxenutbildningstillfällen - Snabb respons FILTER: - town: Ort - executionCondition: Genomförandevillkor - geographicalAreaCode: Geografisk områdeskod - typeOfSchool: "yh", "sfi", "komvux" - paceOfStudy: Studietakt - county/municipality: Plats - distance: Distansutbildning - searchTerm: Fritextsökning EXEMPEL: - typeOfSchool: "yh", municipality: "Stockholm" - distance: "true", paceOfStudy: "100" RELATERADE VERKTYG: - search_adult_education: Hämta faktiska vuxenutbildningar - get_adult_type_of_schooling_v4: Se utbildningstyper`, inputSchema: { type: 'object', properties: countAdultEducationEventsV4Schema }, }, // ============================================== // V4 API VERKTYG - STATISTICS // ============================================== { name: 'get_national_statistics_fsk', description: `Hämta riksgenomsnittlig statistik för förskolor. ANVÄNDNINGSFALL: - Jämföra enskild förskola med rikssnitt - Förstå nationella trender i förskolan - Benchmarking av kvalitetsindikatorer - Forskningsunderlag RETURNERAR: - Nationella genomsnittsvärden för förskolor - Gruppstorlekar (rikssnitt) - Personaltäthet - Pedagogisk bemanning - Läsårsspecifika värden EXEMPEL: - schoolYear: "2023/2024" - indicator: "gruppstorlek" (om tillgängligt) RELATERADE VERKTYG: - get_school_unit_statistics_fsk: Jämför specifik förskola - search_school_units_v4: Hitta förskolor att jämföra TIPS: Använd detta som referensvärde när du analyserar enskilda förskolors statistik.`, inputSchema: { type: 'object', properties: getNationalStatisticsFSKSchema }, }, { name: 'get_national_statistics_gr', description: `Hämta riksgenomsnittlig statistik för grundskolor. ANVÄNDNINGSFALL: - Jämföra enskild grundskola med rikssnitt - Förstå nationella betygstrender - Benchmarking av skolresultat - Kontextualisera skolstatistik - Forskningsunderlag RETURNERAR: - Nationellt genomsnittligt meritvärde - Riksgenomsnitt för behörighet till gymnasiet - Nationella prov resultat (genomsnitt) - Andel elever med godkända betyg - Läsårsspecifika nationella värden EXEMPEL: - schoolYear: "2023/2024" - indicator: "meritvärde" (om tillgängligt) RELATERADE VERKTYG: - get_school_unit_statistics_gr: Jämför specifik grundskola - get_salsa_statistics_gr: Detaljerad ämnesstatistik (nationell) - search_school_units_v4: Hitta grundskolor VIKTIGT: Använd alltid rikssnitt som kontext när du bedömer enskilda skolors resultat!`, inputSchema: { type: 'object', properties: getNationalStatisticsGRSchema }, }, { name: 'get_national_statistics_gran', description: `Hämta riksgenomsnittlig statistik för grundsärskolor. ANVÄNDNINGSFALL: - Jämföra enskild grundsärskola med rikssnitt - Förstå nationella trender i grundsärskolan - Benchmarking av särskoleresultat - Kontextualisera särskolestatistik RETURNERAR: - Nationella genomsnittsvärden för grundsärskolan - Elevunderlag (rikssnitt) - Utbildningsresultat - Läsårsspecifika värden EXEMPEL: - schoolYear: "2023/2024" - indicator: "elevantal" (om tillgängligt) RELATERADE VERKTYG: - get_school_unit_statistics_gran: Jämför specifik grundsärskola - get_salsa_statistics_gran: Ämnesstatistik - search_school_units_v4: Hitta grundsärskolor`, inputSchema: { type: 'object', properties: getNationalStatisticsGRANSchema }, }, { name: 'get_national_statistics_gy', description: `Hämta riksgenomsnittlig statistik för gymnasieskolor. ANVÄNDNINGSFALL: - Jämföra enskild gymnasieskola med rikssnitt - Förstå nationella gymnasietrender - Benchmarking av examensgrader - Analysera högskolebehörighet i nationellt perspektiv - Kontextualisera gymnasieresultat RETURNERAR: - Nationellt genomsnittligt meritvärde - Riksgenomsnitt för examensgrad - Behörighet till högskola (nationell nivå) - Studieavbrott (rikssnitt) - Läsårsspecifika nationella värden EXEMPEL: - schoolYear: "2023/2024" - indicator: "examensgrad" (om tillgängligt) RELATERADE VERKTYG: - get_school_unit_statistics_gy: Jämför specifik gymnasieskola - get_program_statistics_gy: Programspecifika rikssnitt - search_school_units_v4: Hitta gymnasieskolor VIKTIGT: Examensgrad och högskolebehörighet är centrala nyckeltal!`, inputSchema: { type: 'object', properties: getNationalStatisticsGYSchema }, }, { name: 'get_national_statistics_gyan', description: `Hämta riksgenomsnittlig statistik för gymnasiesärskolor. ANVÄNDNINGSFALL: - Jämföra enskild gymnasiesärskola med rikssnitt - Förstå nationella trender i gymnasiesärskolan - Benchmarking av särskoleresultat - Kontextualisera gymnasiesärskolestatistik RETURNERAR: - Nationella genomsnittsvärden för gymnasiesärskolan - Programgenomströmning (rikssnitt) - Utbildningsresultat - Läsårsspecifika värden EXEMPEL: - schoolYear: "2023/2024" - indicator: "genomströmning" (om tillgängligt) RELATERADE VERKTYG: - get_school_unit_statistics_gyan: Jämför specifik gymnasiesärskola - get_program_statistics_gyan: Programstatistik - search_school_units_v4: Hitta gymnasiesärskolor`, inputSchema: { type: 'object', properties: getNationalStatisticsGYANSchema }, }, { name: 'get_salsa_statistics_gr', description: `Hämta SALSA-statistik (bedömningsstöd) för grundskolan nationellt. ANVÄNDNINGSFALL: - Analysera bedömningar i specifika ämnen - Förstå nationella betygstrender per ämne - Jämföra årskurser och ämnen - Detaljerad ämnesdataanalys - Pedagogisk utveckling och forskning RETURNERAR: - Betygsfördelning per ämne och årskurs - Nationellt genomsnitt per ämne - SALSA-indikatorer (bedömningsstöd) - Läsårsspecifik ämnesstatistik FILTER: - subject: Ämne (t.ex. "Matematik", "Svenska") - grade: Årskurs (t.ex. "3", "6", "9") - schoolYear: Läsår (t.ex. "2023/2024") EXEMPEL: - subject: "Matematik", grade: "9", schoolYear: "2023/2024" - subject: "Svenska", grade: "6" RELATERADE VERKTYG: - get_national_statistics_gr: Övergripande grundskolestatistik - get_school_unit_statistics_gr: Jämför med enskild skola - get_salsa_statistics_gran: SALSA för grundsärskolan VIKTIGT: SALSA ger mycket detaljerad ämnesnivå som kompletterar övergripande statistik!`, inputSchema: { type: 'object', properties: getSALSAStatisticsGRSchema }, }, { name: 'get_salsa_statistics_gran', description: `Hämta SALSA-statistik (bedömningsstöd) för grundsärskolan nationellt. ANVÄNDNINGSFALL: - Analysera bedömningar i grundsärskolan - Ämnesspecifik statistik för särskolan - Följa utveckling i anpassad undervisning - Pedagogiskt utvecklingsarbete RETURNERAR: - Bedömningsstatistik per ämne - Nationella värden för grundsärskolan - Läsårsspecifik ämnesdata FILTER: - subject: Ämne - grade: Årskurs - schoolYear: Läsår EXEMPEL: - subject: "Matematik", schoolYear: "2023/2024" - grade: "9" RELATERADE VERKTYG: - get_national_statistics_gran: Övergripande grundsärskolestatistik - get_salsa_statistics_gr: SALSA för grundskolan - get_school_unit_statistics_gran: Enskild skola`, inputSchema: { type: 'object', properties: getSALSAStatisticsGRANSchema }, }, { name: 'get_program_statistics_gy', description: `Hämta programspecifik statistik för gymnasiet nationellt. ANVÄNDNINGSFALL: - Jämföra olika gymnasieprogram - Analysera programspecifika resultat - Förstå skillnader mellan programinriktningar - Studie- och yrkesvägledning - Benchmarking per program RETURNERAR: - Statistik per gymnasieprogram - Examensgrad per program - Högskolebehörighet per program - Meritvärde per program och inriktning - Läsårsspecifika programvärden FILTER: - programCode: Programkod (t.ex. "NA", "TE", "SA") - orientation: Inriktning (om tillämpligt) - schoolYear: Läsår EXEMPEL: - programCode: "NA", schoolYear: "2023/2024" (Naturvetenskapsprogrammet) - programCode: "TE", orientation: "Informationsteknik" RELATERADE VERKTYG: - get_national_statistics_gy: Övergripande gymnasiestatistik - get_school_unit_statistics_gy: Programresultat för enskild skola - get_programs_v4: Se tillgängliga program och koder TIPS: Använd för att jämföra Naturvetenskapsprogrammet med Teknikprogrammet, etc.`, inputSchema: { type: 'object', properties: getProgramStatisticsGYSchema }, }, { name: 'get_program_statistics_gyan', description: `Hämta programspecifik statistik för gymnasiesärskolan nationellt. ANVÄNDNINGSFALL: - Analysera program i gymnasiesärskolan - Jämföra programresultat - Programspecifik uppföljning - Resursplanering per program RETURNERAR: - Statistik per gymnasiesärskoleprogram - Genomströmning per program - Utbildningsresultat per program - Läsårsspecifika värden FILTER: - programCode: Programkod - orientation: Inriktning - schoolYear: Läsår EXEMPEL: - programCode: "GYSÄR", schoolYear: "2023/2024" - programCode: "specifik kod" RELATERADE VERKTYG: - get_national_statistics_gyan: Övergripande gymnasiesärskolestatistik - get_school_unit_statistics_gyan: Enskild skola - get_program_statistics_gy: Jämför med reguljärt gymnasium`, inputSchema: { type: 'object', properties: getProgramStatisticsGYANSchema }, }, // ============================================== // V4 API VERKTYG - SUPPORT DATA // ============================================== { name: 'get_school_types_v4', description: `Hämta alla tillgängliga skoltyper (referensdata). ANVÄNDNINGSFALL: - Se vilka skoltyper som finns i systemet - Förstå Skolverkets kategorisering - Validera skoltypsparametrar innan sökning - Bygga dropdown-listor - Utforska skolsystemets struktur RETURNERAR: - Komplett lista över skoltyper - Kod och namn för varje skoltyp - Inklusive alla skolformer EXEMPEL: - Inga parametrar behövs VÄRDEN INKLUDERAR: - FSK (Förskola) - GR (Grundskola) - GRAN (Grundsärskola) - GY (Gymnasium) - GYAN (Gymnasiesärskola) - KOMVUX (Kommunal vuxenutbildning) - YH (Yrkeshögskola) - och fler... RELATERADE VERKTYG: - search_school_units_v4: Använd skoltyp för filtrering - get_school_unit_details_v4: Se vilka skoltyper en enhet har TIPS: Hämta detta först för att se alla möjliga värden för schoolType-filter.`, inputSchema: { type: 'object', properties: getSchoolTypesV4Schema }, }, { name: 'get_geographical_areas_v4', description: `Hämta alla geografiska områden (län och kommuner). ANVÄNDNINGSFALL: - Se alla tillgängliga län och kommuner - Validera geografiska filter - Bygga ortsväljare - Utforska Sveriges geografi i skolsammanhang - Hitta korrekta kommun/länskoder RETURNERAR: - Lista över alla län - Lista över alla kommuner - Namn och koder för varje område - Hierarkisk struktur (län innehåller kommuner) EXEMPEL: - Inga parametrar behövs RETURNERAR VÄRDEN SOM: - Stockholms län (kod: 01) - Stockholms kommun (kod: 0180) - Södertälje kommun (kod: 0181) - etc. - Västra Götalands län (kod: 14) - Göteborg kommun (kod: 1480) - etc. RELATERADE VERKTYG: - search_school_units_v4: Filtrera efter kommun/län - search_education_events_v4: Geografiska filter TIPS: Använd detta för att hitta korrekta koder för county och municipality parametrar.`, inputSchema: { type: 'object', properties: getGeographicalAreasV4Schema }, }, { name: 'get_principal_organizer_types_v4', description: `Hämta alla huvudmanstyper (skolägarkategorier). ANVÄNDNINGSFALL: - Se vilka typer av skolhuvudmän som finns - Förstå skillnaden mellan kommunal och enskild drift - Filtrera efter ägartyp - Analysera skolsystemets struktur RETURNERAR: - Lista över alla huvudmanstyper - Kod och namn för varje typ EXEMPEL: - Inga parametrar behövs VÄRDEN INKLUDERAR: - Kommunal (kommunala skolor) - Enskild (fristående/privata skolor) - Landsting/Region - Statlig - och fler... RELATERADE VERKTYG: - search_school_units_v4: Filtrera efter principalOrganizerType - get_school_unit_details_v4: Se skolans huvudman TIPS: Använd för att jämföra kommunala mot fristående skolor.`, inputSchema: { type: 'object', properties: getPrincipalOrganizerTypesV4Schema }, }, { name: 'get_programs_v4', description: `Hämta alla gymnasieprogram med inriktningar. ANVÄNDNINGSFALL: - Se alla tillgängliga gymnasieprogram - Hitta programkoder för filtrering - Utforska programstruktur och inriktningar - Studie- och yrkesvägledning - Bygga programväljare RETURNERAR: - Komplett lista över alla gymnasieprogram - Programkod och namn - Inriktningar per program - Yrkesutgång och studieinriktning EXEMPEL: - Inga parametrar behövs VÄRDEN INKLUDERAR: - NA (Naturvetenskapsprogrammet) - TE (Teknikprogrammet) - SA (Samhällsvetenskapsprogrammet) - EK (Ekonomiprogrammet) - och alla 18 nationella program + lokala program RELATERADE VERKTYG: - get_orientations_v4: Se alla inriktningar separat - search_education_events_v4: Filtrera på programCode - get_program_statistics_gy: Statistik per program VIKTIGT: Detta är en nyckelresurs för att förstå gymnasieutbudet!`, inputSchema: { type: 'object', properties: getProgramsV4Schema }, }, { name: 'get_orientations_v4', description: `Hämta alla programinriktningar. ANVÄNDNINGSFALL: - Se alla specialiseringar inom program - Hitta inriktningskoder - Förstå programdifferentiering - Detaljerad programfiltrering RETURNERAR: - Lista över alla inriktningar - Inriktningskod och namn - Koppling till program EXEMPEL: - Inga parametrar behövs VÄRDEN INKLUDERAR: - Teknikprogrammet: Design och produktutveckling, Informations- och medieteknik, Samhällsbyggande och miljö - Naturvetenskapsprogrammet: Naturvetenskap, Naturvetenskap och samhälle - och många fler... RELATERADE VERKTYG: - get_programs_v4: Se fullständig programstruktur - search_education_events_v4: Filtrera på orientationCode - get_program_statistics_gy: Statistik per inriktning`, inputSchema: { type: 'object', properties: getOrientationsV4Schema }, }, { name: 'get_instruction_languages_v4', description: `Hämta alla tillgängliga undervisningsspråk. ANVÄNDNINGSFALL: - Se vilka språk utbildningar erbjuds på - Hitta engelskspråkiga program - Filtrera efter undervisningsspråk - Internationell skolanalys RETURNERAR: - Lista över alla undervisningsspråk - Språkkod och namn EXEMPEL: - Inga parametrar behövs VÄRDEN INKLUDERAR: - Svenska - Engelska - Finska - Samiska - Teckenspråk - och fler... RELATERADE VERKTYG: - search_education_events_v4: Filtrera på instructionLanguages - get_school_unit_education_events: Se språk per skola TIPS: Använd för att hitta internationella program eller språkimmersion.`, inputSchema: { type: 'object', properties: getInstructionLanguagesV4Schema }, }, { name: 'get_distance_study_types_v4', description: `Hämta alla typer av distansstudier. ANVÄNDNINGSFALL: - Förstå olika distansalternativ - Klassificera distansutbildningar - Filtrera efter distanstyp - Analysera flexibla studiealternativ RETURNERAR: - Lista över distansstudietyper - Kod och beskrivning EXEMPEL: - Inga parametrar behövs VÄRDEN INKLUDERAR: - Heldistans (100% distans) - Delvis distans (blandad form) - Flexibel studieform - och fler... RELATERADE VERKTYG: - search_education_events_v4: Filtrera på distance - filter_adult_education_by_distance: Distansvuxenutbildningar TIPS: Kombinera med distance-filter för mer specifik filtrering.`, inputSchema: { type: 'object', properties: getDistanceStudyTypesV4Schema }, }, { name: 'get_adult_type_of_schooling_v4', description: `Hämta alla typer av vuxenutbildning. ANVÄNDNINGSFALL: - Se tillgängliga vuxenutbildningsformer - Förstå vuxenutbildningssystemet - Klassificera vuxenutbildningar - Filtrera efter utbildningstyp RETURNERAR: - Lista över vuxenutbildningstyper - Kod och namn EXEMPEL: - Inga parametrar behövs VÄRDEN INKLUDERAR: - YH (Yrkeshögskola) - SFI (Svenska för invandrare) - KOMVUX (Kommunal vuxenutbildning) - SÄRVUX (Särskild vuxenutbildning) - Folkhögskola - och fler... RELATERADE VERKTYG: - search_adult_education: Filtrera på typeOfSchool - count_adult_education_events_v4: Räkna per typ TIPS: Använd för att förstå skillnaden mellan YH, SFI och Komvux.`, inputSchema: { type: 'object', properties: getAdultTypeOfSchoolingV4Schema }, }, { name: 'get_municipality_school_units_v4', description: `Hämta mappning mellan kommuner och deras skolenheter. ANVÄNDNINGSFALL: - Se alla skolor per kommun - Analysera kommuns skolstruktur - Kvantifiera skolenheter geografiskt - Bygga kommunöversikter RETURNERAR: - Kommun-skolenhet-mappningar - Antal skolenheter per kommun - Fullständig geografisk struktur EXEMPEL: - Inga parametrar behövs RETURNERAR: - Stockholm kommun: [lista med skolenhetskoder] - Göteborg kommun: [lista med skolenhetskoder] - etc. för alla Sveriges kommuner RELATERADE VERKTYG: - search_school_units_v4: Sök skolor i specifik kommun - get_geographical_areas_v4: Se alla kommuner - get_school_unit_details_v4: Hämta detaljer om funna enheter TIPS: Använd för att få en komplett bild av en kommuns skollandskap.`, inputSchema: { type: 'object', properties: getMunicipalitySchoolUnitsV4Schema }, }, // ============================================== // NYA V4 ENDPOINTS (Gap-analys implementation) // ============================================== { name: 'get_adult_education_areas_v4', description: `Hämta alla utbildningsområden och inriktningar för vuxenutbildning.`, inputSchema: { type: 'object', properties: getAdultEducationAreasV4Schema }, }, { name: 'get_api_info_v4', description: `Hämta metadata om Planned Educations API v4.`, inputSchema: { type: 'object', properties: getApiInfoV4Schema }, }, { name: 'search_compact_school_units_v4', description: `Sök efter skolenheter i kompakt format med koordinater.`, inputSchema: { type: 'object', properties: searchCompactSchoolUnitsV4Schema }, }, { name: 'get_secondary_school_units_v4', description: `Hämta sekundära skolenheter (filialer).`, inputSchema: { type: 'object', properties: getSecondarySchoolUnitsV4Schema }, }, { name: 'get_all_schools_salsa_statistics', description: `SALSA-statistik för alla skolor i Sverige.`, inputSchema: { type: 'object', properties: getAllSchoolsSALSAStatisticsSchema }, }, { name: 'get_school_unit_salsa_statistics', description: `SALSA-statistik för specifik skolenhet.`, inputSchema: { type: 'object', properties: getSchoolUnitSALSAStatisticsSchema }, }, { name: 'get_school_unit_documents_by_type', description: `Dokument filtrerat på skolform.`, inputSchema: { type: 'object', properties: getSchoolUnitDocumentsByTypeSchema }, }, { name: 'get_school_unit_education_events_by_study_path', description: `Utbildningstillfällen för specifik studieväg.`, inputSchema: { type: 'object', properties: getSchoolUnitEducationEventsByStudyPathSchema }, }, { name: 'get_school_unit_nested_survey_custodians_fsk', description: `Vårdnadshavares enkätdata FSK (nested).`, inputSchema: { type: 'object', properties: getSchoolUnitNestedSurveyCustodiansFSKSchema }, }, { name: 'get_school_unit_nested_survey_custodians_gr', description: `Vårdnadshavares enkätdata GR (nested).`, inputSchema: { type: 'object', properties: getSchoolUnitNestedSurveyCustodiansGRSchema }, }, { name: 'get_school_unit_nested_survey_custodians_gran', description: `Vårdnadshavares enkätdata GRAN (nested).`, inputSchema: { type: 'object', properties: getSchoolUnitNestedSurveyCustodiansGRANSchema }, }, { name: 'get_school_unit_nested_survey_pupils_gy', description: `Elevers enkätdata GY (nested).`, inputSchema: { type: 'object', properties: getSchoolUnitNestedSurveyPupilsGYSchema }, }, { name: 'get_school_unit_flat_survey_custodians_fsk', description: `Vårdnadshavares enkätdata FSK (flat).`, inputSchema: { type: 'object', properties: getSchoolUnitFlatSurveyCustodiansFSKSchema }, }, { name: 'get_school_unit_flat_survey_custodians_gr', description: `Vårdnadshavares enkätdata GR (flat).`, inputSchema: { type: 'object', properties: getSchoolUnitFlatSurveyCustodiansGRSchema }, }, { name: 'get_school_unit_flat_survey_custodians_gran', description: `Vårdnadshavares enkätdata GRAN (flat).`, inputSchema: { type: 'object', properties: getSchoolUnitFlatSurveyCustodiansGRANSchema }, }, { name: 'get_school_unit_flat_survey_pupils_gr', description: `Elevers enkätdata GR (flat).`, inputSchema: { type: 'object', properties: getSchoolUnitFlatSurveyPupilsGRSchema }, }, { name: 'get_school_unit_flat_survey_pupils_gy', description: `Elevers enkätdata GY (flat).`, inputSchema: { type: 'object', properties: getSchoolUnitFlatSurveyPupilsGYSchema }, }, // ============================================== // META-VERKTYG (Konsoliderade verktyg) // ============================================== { name: 'get_national_statistics', description: `Hämta nationell statistik för valfri skoltyp. META-VERKTYG som konsoliderar: get_national_statistics_fsk, get_national_statistics_gr, get_national_statistics_gran, get_national_statistics_gy, get_national_statistics_gyan. ANVÄNDNINGSFALL: - Jämföra nationella värden mellan olika skoltyper - Analysera trender över tid per skoltyp - Hämta indikatorer för alla skolformer på ett ställe - Förstå kvalitetsmått nationellt SKOLTYPER: - fsk: Förskoleklass - gr: Grundskola - gran: Grundsärskola - gy: Gymnasium - gyan: Gymnasiesärskola EXEMPEL: - schoolType: "gr", schoolYear: "2023/2024" - schoolType: "gy", indicator: "genomströmning" RETURNERAR: - Nationella statistikvärden - Indikatorer per skoltyp - Historiska data om läsår anges TIPS: Använd schoolType-parametern för att välja rätt skolform istället för att söka efter rätt verktyg.`, inputSchema: { type: 'object', properties: getNationalStatisticsSchema, required: ['schoolType'] }, }, { name: 'get_salsa_statistics', description: `Hämta SALSA-statistik (ämnesvärden) för grundskola eller grundsärskola. META-VERKTYG som konsoliderar: get_salsa_statistics_gr, get_salsa_statistics_gran. ANVÄNDNINGSFALL: - Analysera ämnesprestationer i Matematik, Svenska, etc. - Jämföra resultat mellan årskurser - Följa resultatutveckling över tid - Få nationella ämnesnivåer SKOLTYPER: - gr: Grundskola - gran: Grundsärskola EXEMPEL: - schoolType: "gr", subject: "Matematik", grade: "9" - schoolType: "gran", schoolYear: "2023/2024" RETURNERAR: - Ämnesprestationer per årskurs - Medelvärden och fördelningar - SALSA-indikatorer TIPS: SALSA-statistik finns bara för grundskola (gr) och grundsärskola (gran).`, inputSchema: { type: 'object', properties: getSALSAStatisticsSchema, required: ['schoolType'] }, }, { name: 'get_program_statistics', description: `Hämta programstatistik för gymnasium eller gymnasiesärskola. META-VERKTYG som konsoliderar: get_program_statistics_gy, get_program_statistics_gyan. ANVÄNDNINGSFALL: - Analysera genomströmning per program - Jämföra olika programinriktningar - Följa programspecifika resultat - Få statistik för NA, EK, SA, etc. SKOLTYPER: - gy: Gymnasium - gyan: Gymnasiesärskola EXEMPEL: - schoolType: "gy", programCode: "NA" - schoolType: "gy", programCode: "EK", orientation: "Ekonomi" RETURNERAR: - Programspecifik statistik - Genomströmning per program - Inriktningsstatistik TIPS: Använd get_programs_v4 för att se tillgängliga programkoder först.`, inputSchema: { type: 'object', properties: getProgramStatisticsSchema, required: ['schoolType'] }, }, { name: 'get_school_unit_statistics', description: `Hämta statistik för en specifik skolenhet, för valfri skoltyp. META-VERKTYG som konsoliderar: get_school_unit_statistics_fsk, get_school_unit_statistics_gr, get_school_unit_statistics_gran, get_school_unit_statistics_gy, get_school_unit_statistics_gyan. ANVÄNDNINGSFALL: - Se statistik för en specifik skola - Jämföra skolenheter över tid - Analysera skolans kvalitetsindikatorer - Få skolspecifika värden per skoltyp SKOLTYPER: - fsk: Förskoleklass - gr: Grundskola - gran: Grundsärskola - gy: Gymnasium - gyan: Gymnasiesärskola EXEMPEL: - code: "29824923", schoolType: "gr", schoolYear: "2023/2024" - code: "12345678", schoolType: "gy" RETURNERAR: - Skolenhetsspecifik statistik - Kvalitetsindikatorer per skoltyp - Resultat över tid RELATERADE VERKTYG: - get_school_unit_statistics_links: Se tillgängliga statistiklänkar först - get_school_unit_details_v4: Hämta skolenhetsinformation TIPS: Använd get_school_unit_statistics_links först för att se vilka skoltyper som har statistik.`, inputSchema: { type: 'object', properties: getSchoolUnitStatisticsSchema, required: ['code', 'schoolType'] }, }, { name: 'get_school_unit_survey', description: `Hämta enkätresultat för en skolenhet i valfritt format. META-VERKTYG som konsoliderar: get_school_unit_survey_nested, get_school_unit_survey_flat. ANVÄNDNINGSFALL: - Hämta elevenkäter för en skola - Analysera enkätdata i hierarkisk eller platt struktur - Följa enkätresultat över tid - Jämföra enkätsvar mellan år FORMAT: - nested: Hierarkisk struktur med kategori → fråga → svar - flat: Platt struktur med "kategori.fråga" notation (lättare att processa) EXEMPEL: - code: "29824923", format: "nested", surveyYear: "2023" - code: "12345678", format: "flat" RETURNERAR: - Enkätresultat i valt format - Elevenkäter, lärarenkäter, vårdnadshavarenkäter - Historiska data om surveyYear anges RELATERADE VERKTYG: - get_school_unit_details_v4: Hämta skolenhetsinformation TIPS: Använd "flat" för enkel databearbetning, "nested" för att förstå enkätens struktur.`, inputSchema: { type: 'object', properties: getSchoolUnitSurveySchema, required: ['code', 'format'] }, }, { name: 'search_education_events', description: `Sök utbildningstillfällen i valfritt format (full eller kompakt). META-VERKTYG som konsoliderar: search_education_events_v4, search_compact_education_events_v4. ANVÄNDNINGSFALL: - Hitta utbildningstillfällen för program, komvux, YH - Filtrera på kommun, län, språk, distans - Få kompakt översikt eller full information - Analysera utbildningsutbudet FORMAT: - full: Fullständig information om varje utbildningstillfälle - compact: Kompakt format med de viktigaste uppgifterna FILTER: - name: Utbildningens namn - schoolUnitCode: Skolenhetskod - municipality/municipalityCode: Kommun - county/countyCode: Län - programCode: Programkod - orientationCode: Inriktningskod - instructionLanguage: Undervisningsspråk - distanceStudyType: Distansstudietyp - adultTypeOfSchooling: Vuxenutbildningstyp EXEMPEL: - format: "compact", municipality: "Stockholm", programCode: "NA" - format: "full", county: "Uppsala", distanceStudyType: "Distance" RETURNERAR: - Lista över utbildningstillfällen - Paginerad data - Full eller kompakt information beroende på format RELATERADE VERKTYG: - count_education_events_v4: Räkna antal tillfällen - get_programs_v4: Se tillgängliga program - get_instruction_languages_v4: Se undervisningsspråk TIPS: Använd "compact" för översikter och "full" när du behöver all information.`, inputSchema: { type: 'object', properties: searchEducationEventsSchema, required: ['format'] }, }, // ============================================== // DIAGNOSTIK OCH HEALTH CHECK // ============================================== { name: 'health_check', description: `Kör en health check för att testa API-anslutningar och systemstatus. ANVÄNDNINGSFALL: - Diagnosticera anslutningsproblem - Verifiera att alla API:er är tillgängliga - Mäta response-tider - Få rekommendationer för förbättringar RETURNERAR: - Overall status (healthy/degraded/unhealthy) - Status för varje API (Syllabus, School Units, Planned Education) - Latency för varje API - Konfigurationsinformation - Rekommendationer vid problem EXEMPEL: Kör health_check(includeApiTests=true) för att testa alla API:er.`, inputSchema: { type: 'object', properties: healthCheckSchema, }, }, ], }; }); // ============================================== // TOOL EXECUTION - Med progress reporting // ============================================== server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; log.info('Tool called', { name, args }); try { switch (name) { // Läroplan API (Syllabus) case 'search_subjects': return await searchSubjects(args as any); case 'get_subject_details': return await getSubjectDetails(args as any); case 'get_subject_versions': return await getSubjectVersions(args as any); case 'search_courses': return await searchCourses(args as any); case 'get_course_details': return await getCourseDetails(args as any); case 'get_course_versions': return await getCourseVersions(args as any); case 'search_programs': return await searchPrograms(args as any); case 'get_program_details': return await getProgramDetails(args as any); case 'get_program_versions': return await getProgramVersions(args as any); case 'search_curriculums': return await searchCurriculums(args as any); case 'get_curriculum_details': return await getCurriculumDetails(args as any); case 'get_curriculum_versions': return await getCurriculumVersions(args as any); case 'get_school_types': return await getSchoolTypes(args as any); case 'get_types_of_syllabus': return await getTypesOfSyllabus(); case 'get_subject_and_course_codes': return await getSubjectAndCourseCodes(); case 'get_study_path_codes': return await getStudyPathCodes(args as any); case 'get_api_info': return await getApiInfo(); // Skolenhetsregistret API case 'search_school_units': return await searchSchoolUnits(args as any); case 'get_school_unit_details': return await getSchoolUnitDetails(args as any); case 'get_school_units_by_status': return await getSchoolUnitsByStatus(args as any); case 'search_school_units_by_name': return await searchSchoolUnitsByName(args as any); // Planned Educations API case 'search_adult_education': return await searchAdultEducation(args as any); case 'get_adult_education_details': return await getAdultEducationDetails(args as any); case 'filter_adult_education_by_distance': return await filterAdultEducationByDistance(args as any); case 'filter_adult_education_by_pace': return await filterAdultEducationByPace(args as any); case 'get_education_areas': return await getEducationAreas(); case 'get_directions': return await getDirections(); // V4 School Units case 'search_school_units_v4': return await searchSchoolUnitsV4(args as any); case 'get_school_unit_details_v4': return await getSchoolUnitDetailsV4(args as any); case 'get_school_unit_education_events': return await getSchoolUnitEducationEvents(args as any); case 'get_school_unit_compact_education_events': return await getSchoolUnitCompactEducationEvents(args as any); case 'calculate_distance_from_school_unit': return await calculateDistanceFromSchoolUnit(args as any); case 'get_school_unit_documents': return await getSchoolUnitDocuments(args as any); case 'get_school_unit_statistics_links': return await getSchoolUnitStatisticsLinks(args as any); case 'get_school_unit_statistics_fsk': return await getSchoolUnitStatisticsFSK(args as any); case 'get_school_unit_statistics_gr': return await getSchoolUnitStatisticsGR(args as any); case 'get_school_unit_statistics_gran': return await getSchoolUnitStatisticsGRAN(args as any); case 'get_school_unit_statistics_gy': return await getSchoolUnitStatisticsGY(args as any); case 'get_school_unit_statistics_gyan': return await getSchoolUnitStatisticsGYAN(args as any); case 'get_school_unit_survey_nested': return await getSchoolUnitSurveyNested(args as any); case 'get_school_unit_survey_flat': return await getSchoolUnitSurveyFlat(args as any); // V4 Education Events case 'search_education_events_v4': return await searchEducationEventsV4(args as any); case 'search_compact_education_events_v4': return await searchCompactEducationEventsV4(args as any); case 'count_education_events_v4': return await countEducationEventsV4(args as any); case 'count_adult_education_events_v4': return await countAdultEducationEventsV4(args as any); // V4 Statistics case 'get_national_statistics_fsk': return await getNationalStatisticsFSK(args as any); case 'get_national_statistics_gr': return await getNationalStatisticsGR(args as any); case 'get_national_statistics_gran': return await getNationalStatisticsGRAN(args as any); case 'get_national_statistics_gy': return await getNationalStatisticsGY(args as any); case 'get_national_statistics_gyan': return await getNationalStatisticsGYAN(args as any); case 'get_salsa_statistics_gr': return await getSALSAStatisticsGR(args as any); case 'get_salsa_statistics_gran': return await getSALSAStatisticsGRAN(args as any); case 'get_program_statistics_gy': return await getProgramStatisticsGY(args as any); case 'get_program_statistics_gyan': return await getProgramStatisticsGYAN(args as any); // V4 Support Data case 'get_school_types_v4': return await getSchoolTypesV4(); case 'get_geographical_areas_v4': return await getGeographicalAreasV4(); case 'get_principal_organizer_types_v4': return await getPrincipalOrganizerTypesV4(); case 'get_programs_v4': return await getProgramsV4(); case 'get_orientations_v4': return await getOrientationsV4(); case 'get_instruction_languages_v4': return await getInstructionLanguagesV4(); case 'get_distance_study_types_v4': return await getDistanceStudyTypesV4(); case 'get_adult_type_of_schooling_v4': return await getAdultTypeOfSchoolingV4(); case 'get_municipality_school_units_v4': return await getMunicipalitySchoolUnitsV4(); // NYA V4 ENDPOINTS case 'get_adult_education_areas_v4': return await getAdultEducationAreasV4(); case 'get_api_info_v4': return await getApiInfoV4(); case 'search_compact_school_units_v4': return await searchCompactSchoolUnitsV4(args as any); case 'get_secondary_school_units_v4': return await getSecondarySchoolUnitsV4(args as any); case 'get_all_schools_salsa_statistics': return await getAllSchoolsSALSAStatistics(args as any); case 'get_school_unit_salsa_statistics': return await getSchoolUnitSALSAStatistics(args as any); case 'get_school_unit_documents_by_type': return await getSchoolUnitDocumentsByType(args as any); case 'get_school_unit_education_events_by_study_path': return await getSchoolUnitEducationEventsByStudyPath(args as any); case 'get_school_unit_nested_survey_custodians_fsk': return await getSchoolUnitNestedSurveyCustodiansFSK(args as any); case 'get_school_unit_nested_survey_custodians_gr': return await getSchoolUnitNestedSurveyCustodiansGR(args as any); case 'get_school_unit_nested_survey_custodians_gran': return await getSchoolUnitNestedSurveyCustodiansGRAN(args as any); case 'get_school_unit_nested_survey_pupils_gy': return await getSchoolUnitNestedSurveyPupilsGY(args as any); case 'get_school_unit_flat_survey_custodians_fsk': return await getSchoolUnitFlatSurveyCustodiansFSK(args as any); case 'get_school_unit_flat_survey_custodians_gr': return await getSchoolUnitFlatSurveyCustodiansGR(args as any); case 'get_school_unit_flat_survey_custodians_gran': return await getSchoolUnitFlatSurveyCustodiansGRAN(args as any); case 'get_school_unit_flat_survey_pupils_gr': return await getSchoolUnitFlatSurveyPupilsGR(args as any); case 'get_school_unit_flat_survey_pupils_gy': return await getSchoolUnitFlatSurveyPupilsGY(args as any); // Meta-verktyg case 'get_national_statistics': return await getNationalStatistics(args as any); case 'get_salsa_statistics': return await getSALSAStatistics(args as any); case 'get_program_statistics': return await getProgramStatistics(args as any); case 'get_school_unit_statistics': return await getSchoolUnitStatistics(args as any); case 'get_school_unit_survey': return await getSchoolUnitSurvey(args as any); case 'search_education_events': return await searchEducationEvents(args as any); // Diagnostik case 'health_check': return await healthCheck(args || {}); default: throw new Error(`Okänt verktyg: ${name}`); } } catch (error) { log.error('Tool execution failed', { name, error }); return { content: [ { type: 'text' as const, text: `Fel vid körning av verktyg ${name}: ${error instanceof Error ? error.message : String(error)}`, }, ], isError: true, }; } }); // ============================================== // START SERVER // ============================================== async function main() { const transport = new StdioServerTransport(); await server.connect(transport); log.info('Skolverket MCP Server v2.5.0 startad', { capabilities: ['tools', 'resources', 'prompts', 'logging'], apis: ['Läroplan API', 'Skolenhetsregistret API', 'Planned Educations API'] }); } main().catch((error) => { log.error('Fatal error', { error }); process.exit(1); });

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