Zwaailicht heeft nu een MCP-server

·
nieuwe-functie mcp api ai p2000

Een tijdje terug schreef ik dat Zwaailicht leesbaar werd voor AI-agenten: elke pagina kreeg een markdown-versie, er kwam een llms.txt en een API-catalogus. Dat was het voorwerk. De volgende stap staat er nu: een MCP-server, waarmee je AI-assistent rechtstreeks praat met de database achter Zwaailicht — alle hulpdienstmeldingen en de incidenten die we daaruit reconstrueren, verrijkt en doorzoekbaar. Je koppelt de server aan Claude, ChatGPT of Cursor en stelt je vragen daarna in gewone taal.

Wat je ermee kunt

Je hoeft geen API te leren of documentatie door te spitten. Je stelt een vraag, en de assistent kiest zelf welke tool erbij past: zoeken, losse meldingen of gereconstrueerde incidenten opsommen, één incident met heel z’n dossier ophalen, vergelijkbare incidenten erbij zoeken, of statistiek opvragen — per uur, per dag, per stad, per dienst of per incidenttype. De filters op weekdag en uur rekenen in Nederlandse tijd, dus “op zaterdagnacht” betekent hier ook echt zaterdagnacht.

Een paar voorbeelden — de cijfers komen overal echt van de server.

Een gesprek dat zich opbouwt

Dit gesprek voerde ik zelf; je kunt het volledig teruglezen. Het aardige is dat je doorvraagt op wat er terugkomt, en dat de assistent zelf schakelt tussen statistiek, een lijst en één volledig dossier.

Screenshot van een chatgesprek met een AI-assistent die de Zwaailicht-tools aanroept. Op de vraag "Vergelijk het aantal woningbranden met buitenbranden deze zomer" komt het antwoord: 4.699 woningbranden tegen 4.349 buitenbranden, zo'n 8% meer, met gebouwbrand (1.068) en containerbrand (986) als kleinere categorieën. Op de vervolgvraag naar grote recente buitenbranden volgt een lijst met onder meer Rheezerveen, Prinsenbeek en Wijchen.

Jij: Vergelijk het aantal woningbranden met buitenbranden deze zomer

Assistent: Deze zomer (juni–augustus 2026) waren er iets meer woningbranden dan buitenbranden: 4.699 tegen 4.349 meldingen, zo’n 8% meer. Gebouwbrand (1.068) en containerbrand (986) zijn veel kleinere categorieën.

Jij: Wat zijn grote recente incidenten met buitenbranden?

Assistent: Een paar die eruit sprongen: de duinbrand bij Camping De Lakens in Overveen (3 aug), met een GRIP 1-opschaling en een deels ontruimde camping; grote natuurbranden in Rheezerveen (13 aug), Prinsenbeek (12 aug) en Baarlo (6 aug); en een bermbrand langs de Oudelandsedijk bij Middelharnis (4 aug). De zwaarste gevallen vielen vooral in augustus. Wil je van één het volledige dossier — meldingen, ingezette eenheden, nieuws?

Jij: Ja, die camping brand

Assistent: Duinbrand bij Camping De Lakens aan de Zeeweg in Overveen, 3 augustus. Rond 18:39 brak de brand uit; de brandweer rukte met de hoogste prioriteit (P1) uit en schatte de uitbreidingskans als zeer hoog in. Om 18:52 werd GRIP 1 afgekondigd en kwamen er ambulances bij. In totaal 13 P2000-meldingen tot even na 19:00, met inzet vanuit meerdere Velsense kazernes (Velsen-Zuid, West, Oost, Midden), officieren van dienst en bijstand met watervoertuigen. Een deel van de camping werd uit voorzorg ontruimd; er waren geen gewonden. Zwaailicht pikte het incident 44 minuten op vóór het eerste nieuwsbericht — daarna volgden onder meer NH Nieuws, Haarlems Dagblad en 112 Nederland. Titel en samenvatting zijn door een taalmodel gemaakt, geen geverifieerd feit; zelf nalezen kan op de piek-pagina.

Andere voorbeelden

Andere vragen die de tools net zo makkelijk beantwoorden:

  • “Hoeveel meldingen waren er de afgelopen maand, per dienst?” — bijna 129.000, waarvan de ambulance ruim driekwart (±99.900), vóór de brandweer (±19.100) en de politie (±7.200). Goed om te onthouden: de meeste meldingen zijn losse ritten, geen groot incident.
  • “Wanneer op de dag zijn er in Amsterdam de meeste brandmeldingen?” — ‘s nachts (rond 4–6 uur) het rustigst, met de drukte rond het middaguur en de vroege avond.
  • “Wat gebeurde er binnen 5 km van deze coördinaten?” — meldingen en incidenten in een straal rond een punt, handig om een buurt of een specifieke locatie te volgen.

Bij elk antwoord zat trouwens een link terug naar de bijbehorende pagina, met de gebruiksvoorwaarden eronder. Dat is geen toeval: de tools geven letterlijk terug wat de API eronder levert.

Toevoegen aan je assistent

De server draait op https://zwaailicht.nl/mcp. Geen account, geen sleutel, geen inloggen — hij is openbaar en alleen-lezen.

Bij de meeste assistenten gaat het zo: open de instellingen voor connectors of MCP-servers, kies “eigen server toevoegen” (soms “custom connector”), en plak die URL erin. De tools verschijnen daarna vanzelf, en je assistent kan Zwaailicht raadplegen zonder dat jij nog iets hoeft te kopiëren of plakken.

Onder de motorkap zit een gewone API

De MCP-server verzint niks zelf. Elke tool is een dun laagje over een open, alleen-lezen API op /api/v1/ — dezelfde meldingen, dezelfde pieken, dezelfde cijfers die ook de site vullen. Wat de assistent terugkrijgt is letterlijk de markdown van die API, met een link terug naar de bijbehorende pagina en de licentie eronder.

Bouw je liever zelf iets, dan spreek je die API rechtstreeks aan, zonder MCP en zonder sleutel:

# zoek een incident...
curl -s 'https://zwaailicht.nl/api/v1/search?q=grote+brand&city=alkmaar' | jq '.results[]'

# ...en trek het hele dossier op als markdown
PIEK=$(curl -s 'https://zwaailicht.nl/api/v1/pieken?limit=1' | jq -r '.results[0].id')
curl -s -H 'Accept: text/markdown' "https://zwaailicht.nl/api/v1/pieken/$PIEK/context"

# incidenten per uur van de dag in Alkmaar
curl -s 'https://zwaailicht.nl/api/v1/stats/pieken?city=alkmaar&group_by=hour' | jq '.results'

Elk endpoint spreekt JSON (de standaard) of markdown, afhankelijk van je Accept-header. Die markdown-versie is er precies voor: platte tekst zonder navigatie of opmaak, klaar om in een context-venster te plakken. De MCP-server gebruikt intern niks anders. Bladeren gaat met cursors in plaats van offsets — de meldingenstroom groeit elke dertig seconden aan de kop — en de volgende pagina staat kant-en-klaar in pagination.next. Voor wie de boel automatisch wil laten ontdekken is er ook een OpenAPI-document en een llms.txt.

En in de browser: WebMCP

Er is ook een tweede manier, voor wie een browser gebruikt die het al ondersteunt (nu nog experimenteel, in Chrome). De site registreert namelijk óók tools rechtstreeks in de pagina, via WebMCP. Bezoek je zwaailicht.nl met zo’n browser, dan kan een agent die daarin meekijkt dezelfde vragen stellen zonder dat je een server hoeft toe te voegen — de tools zitten dan al in de pagina. Aardig, maar het werkt vandaag voor bijna niemand; voor nu is de gekoppelde server hierboven de manier om aan te sluiten.

Wat er bewust niet in zit

Dezelfde grenzen als op de rest van de site:

  • De ruwe pagertekst geven we niet door. Je krijgt onze eigen lezing ervan.
  • Huisnummers zitten nergens in. Een straat en een plaats, geen voordeur.
  • Pieken die als losse ruis werden afgedaan of door de nieuwswaarde-filter vielen, bestaan hier niet.
  • Niks op bezoekersniveau. Geen unieke bezoekers, geen verwijzers.

Gratis, maar wel begrensd

Alles hierboven is gratis en zonder account. Hergebruiken mag; het enige wat ik vraag is een linkje terug (voorwaarden) — en dat linkje zit al in elk antwoord dat de tools teruggeven.

De bandbreedte is wel bescheiden: ongeveer tien verzoeken per tien seconden per IP-adres. Ruim genoeg om een gesprek met je assistent te voeren of een piek helemaal na te lopen, en te weinig om er ongemerkt de hele database mee weg te trekken. De losse-meldingenstroom loopt bovendien negentig dagen terug; alles waar de site naar linkt blijft los opvraagbaar, hoe oud ook.

Meer nodig? Stuur even een mail

Die limiet is er om te voorkomen dat iemand er stiekem de hele boel mee leegtrekt. Ga je er serieus mee bouwen — onderzoek, journalistiek, onderwijs, of iets dat meer volume vraagt — doe dat dan niet met de publieke limiet, maar mail me even op [email protected]. Dan regelen we een export of een afgesproken selectie. Voor onderzoek, journalistiek en onderwijs is dat gratis; voor commercieel gebruik komen we er samen wel uit.


Aan de slag: koppel de MCP-server aan je assistent, of duik in de API. Liever meelezen? Dat kan op de voorpagina en de kaart. Vragen of ideeën? Laat het weten via Bluesky of mail [email protected].

reacties

Was jij erbij? Laat weten wat je zag.