Skip to main content
Glama

OpenTK Model Context Protocol Server

by r-huijts
analyze-tool-integration.test.ts11 kB
/** * Integration test for the analyze_document_relevance MCP tool * This test verifies the full flow of the tool with a real document */ import { extractTextFromPdf, extractTextFromDocx, analyzeDocumentContent } from '../utils/document-extractor'; describe('analyze_document_relevance Integration', () => { describe('Full analysis pipeline', () => { it('should analyze a realistic parliamentary document', async () => { // Simulate a realistic Dutch parliamentary document const realisticDocument = ` Tweede Kamer der Staten-Generaal Vergaderjaar 2024-2025 Kamerstuk 36.200 Vaststelling van de begrotingsstaten van het Ministerie van Klimaat en Energie (XII) voor het jaar 2025 Nr. 45 BRIEF VAN DE MINISTER VAN KLIMAAT EN ENERGIE Aan de Voorzitter van de Tweede Kamer der Staten-Generaal Den Haag, 15 oktober 2024 Geachte voorzitter, Hierbij bied ik u mijn visie aan op de energietransitie en de klimaatdoelstellingen voor de komende jaren. Nederland heeft zich gecommitteerd aan ambitieuze CO2-reductiedoelstellingen zoals vastgelegd in het Klimaatakkoord. De energietransitie vergt grote investeringen in duurzame energiebronnen zoals windenergie en zonne-energie. We zien dat de afhankelijkheid van fossiele brandstoffen moet worden verminderd om onze klimaatdoelstellingen te halen. Het kabinet stelt voor de komende jaren €5,5 miljard beschikbaar voor: - Uitbreiding van windparken op zee - Subsidieregelingen voor zonnepanelen op daken - Innovatie in waterstoftechnologie - Isolatie van woningen om energieverbruik te verminderen De Tweede Kamer heeft in eerdere debatten aandacht gevraagd voor de betaalbaarheid van de energietransitie. De VVD-fractie benadrukte het belang van een realistische planning. De GroenLinks-fractie drong aan op versnelling van de maatregelen. De PVV uitte kritiek op de kosten voor burgers. Voorzitter van de commissie voor Klimaat en Energie, mevrouw Van der Plas, heeft gevraagd om een gedetailleerde toelichting op de financiering. De heer Wilders stelde vragen over de gevolgen voor de koopkracht. Minister Jetten heeft toegezegd om in het najaarsdebat uitgebreid op deze punten in te gaan. Het ministerie werkt nauw samen met de Autoriteit Consument en Markt (ACM) en het Planbureau voor de Leefomgeving (PBL) om de voortgang te monitoren. Ook het Rijksinstituut voor Volksgezondheid en Milieu (RIVM) levert belangrijke analyses. De Europese klimaatdoelstellingen vereisen dat Nederland in 2030 55% minder CO2 uitstoot dan in 1990. Dit is een grote uitdaging die samenwerking vergt tussen overheid, bedrijfsleven en burgers. Ik verzoek uw Kamer om kennis te nemen van deze brief en deze te betrekken bij de behandeling van de begroting. Hoogachtend, De Minister van Klimaat en Energie, R. Jetten `.repeat(2); // Make it longer for more realistic analysis // Analyze the document without search terms const basicAnalysis = await analyzeDocumentContent(realisticDocument); // Verify all expected properties are present expect(basicAnalysis).toHaveProperty('keywords'); expect(basicAnalysis).toHaveProperty('entities'); expect(basicAnalysis).toHaveProperty('statistics'); expect(basicAnalysis).toHaveProperty('topics'); expect(basicAnalysis).toHaveProperty('preview'); expect(basicAnalysis.relevanceScore).toBeUndefined(); // Verify keywords extraction expect(basicAnalysis.keywords.length).toBeGreaterThan(5); const keywordTerms = basicAnalysis.keywords.map(k => k.term.toLowerCase()); // Should extract climate/energy related keywords const hasRelevantKeywords = keywordTerms.some(term => term.includes('energie') || term.includes('klimaat') || term.includes('co2') || term.includes('duurzaam') ); expect(hasRelevantKeywords).toBe(true); // Verify entity extraction expect(basicAnalysis.entities.persons.length).toBeGreaterThan(0); expect(basicAnalysis.entities.parties.length).toBeGreaterThan(0); expect(basicAnalysis.entities.organizations.length).toBeGreaterThan(0); // Should detect political parties mentioned expect(basicAnalysis.entities.parties).toContain('VVD'); expect(basicAnalysis.entities.parties).toContain('GroenLinks'); expect(basicAnalysis.entities.parties).toContain('PVV'); // Should detect persons mentioned const personNames = basicAnalysis.entities.persons.join(' '); expect(personNames).toMatch(/Wilders|Jetten|Van der Plas/); // Should detect organizations const orgNames = basicAnalysis.entities.organizations.join(' '); expect(orgNames.length).toBeGreaterThan(0); // Verify statistics expect(basicAnalysis.statistics.characterCount).toBeGreaterThan(1000); expect(basicAnalysis.statistics.wordCount).toBeGreaterThan(100); expect(basicAnalysis.statistics.estimatedReadingTime).toMatch(/\d+ minute/); expect(basicAnalysis.statistics.documentStructure).toBe('Formal letter or correspondence'); // Verify topics expect(basicAnalysis.topics.length).toBeGreaterThan(0); const topicString = basicAnalysis.topics.join(' '); expect(topicString).toMatch(/Climate|Environment|Energy|Economy|Finance/i); // Verify preview expect(basicAnalysis.preview.length).toBeGreaterThan(0); expect(basicAnalysis.preview.length).toBeLessThanOrEqual(500); }); it('should calculate high relevance for matching search terms', async () => { const climateDocument = ` Het klimaatbeleid van Nederland richt zich op de vermindering van CO2-uitstoot. De energietransitie is essentieel voor het behalen van onze klimaatdoelstellingen. Duurzame energie zoals windenergie en zonne-energie worden steeds belangrijker. Het kabinet investeert miljarden in klimaatmaatregelen en energiebesparende maatregelen. De minister van Klimaat en Energie benadrukt het urgente karakter van de klimaatcrisis. `.repeat(10); const analysis = await analyzeDocumentContent( climateDocument, ['klimaat', 'energie', 'CO2', 'duurzaam', 'climate'] ); expect(analysis.relevanceScore).toBeDefined(); // Relevance score should be moderate to high (algorithm is conservative) expect(analysis.relevanceScore).toBeGreaterThan(40); expect(analysis.relevanceScore).toBeLessThanOrEqual(100); // Keywords should align with search terms const keywordTerms = analysis.keywords.map(k => k.term.toLowerCase()).join(' '); expect(keywordTerms).toMatch(/klimaat|energie|co2|duurzaam/); }); it('should calculate low relevance for non-matching search terms', async () => { const educationDocument = ` Het onderwijsstelsel in Nederland heeft hervorming nodig. Scholen hebben te maken met lerarentekorten en budgetproblemen. Studenten ervaren te veel werkdruk en studieschulden lopen op. De minister van Onderwijs wil investeren in de kwaliteit van het onderwijs. Universiteiten en hogescholen vragen om meer middelen. `.repeat(10); const analysis = await analyzeDocumentContent( educationDocument, ['klimaat', 'energie', 'CO2', 'milieu'] ); expect(analysis.relevanceScore).toBeDefined(); expect(analysis.relevanceScore).toBeLessThan(30); }); it('should handle mixed language content', async () => { const mixedDocument = ` De European Green Deal sets ambitious climate targets for 2030 and 2050. Nederland werkt samen met andere EU-landen aan de energietransitie. The reduction of CO2 emissions is a priority voor het kabinet. Climate policy vereist investments in renewable energy sources. `.repeat(5); const analysis = await analyzeDocumentContent(mixedDocument); expect(analysis.keywords.length).toBeGreaterThan(0); expect(analysis.statistics.wordCount).toBeGreaterThan(0); // Should extract keywords from both languages const keywordTerms = analysis.keywords.map(k => k.term); expect(keywordTerms.length).toBeGreaterThan(5); }); it('should provide actionable nextSteps based on relevance', async () => { const highRelevanceDoc = ` Klimaatverandering is een urgent probleem. De CO2-uitstoot moet drastisch omlaag. Energie uit fossiele brandstoffen moet worden vervangen door duurzame energie. Windparken en zonnepanelen zijn essentieel voor de energietransitie. `.repeat(10); const analysis = await analyzeDocumentContent( highRelevanceDoc, ['klimaat', 'energie'] ); // With high relevance, we can simulate what the tool would return const nextSteps = analysis.relevanceScore && analysis.relevanceScore > 60 ? "This document appears highly relevant. Consider using get_document_content or find_person_in_document to read specific sections." : analysis.relevanceScore && analysis.relevanceScore > 30 ? "This document has moderate relevance. Review the keywords and entities to decide if it's worth reading in detail." : "This document has low relevance to your search terms. Consider analyzing other documents first."; expect(nextSteps).toContain('highly relevant'); }); it('should efficiently summarize a long document', async () => { // Create a very long document (simulating a full debate transcript) const longDebate = ` De voorzitter: We beginnen met het debat over klimaatbeleid. Minister Jetten: Dank u, voorzitter. Het klimaatbeleid van dit kabinet... De heer Wilders (PVV): Voorzitter, ik heb een vraag aan de minister... `.repeat(100); // Very long document const startTime = Date.now(); const analysis = await analyzeDocumentContent(longDebate); const endTime = Date.now(); const processingTime = endTime - startTime; // Should complete in reasonable time even for long documents expect(processingTime).toBeLessThan(5000); // Less than 5 seconds // Should still provide meaningful analysis expect(analysis.keywords.length).toBeGreaterThan(0); expect(analysis.entities.persons.length).toBeGreaterThan(0); expect(analysis.entities.parties.length).toBeGreaterThan(0); expect(analysis.statistics.wordCount).toBeGreaterThan(1000); }); }); });

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/r-huijts/opentk-mcp'

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