Skip to main content
Glama

gbif-mcp — BE-biodiversiteit (beta)

WARNING

Betaversie — geen product, geen garantie, geen aansprakelijkheid. Deze software is een experimenteel hulpmiddel in ontwikkeling, geen commercieel product of dienst. De software en de rapporten die ze maakt, worden kosteloos aangeboden zoals ze zijn, zonder enige uitdrukkelijke of stilzwijgende garantie, onder meer over juistheid, volledigheid, actualiteit of geschiktheid voor een bepaald doel. De resultaten zijn een geautomatiseerde bronnenscan van publieke databanken; ze vervangen geen terreininventarisatie, deskundige beoordeling of juridisch advies. De gebruiker is zelf volledig verantwoordelijk voor het controleren van de resultaten en voor elk gebruik dat ervan wordt gemaakt. De auteur is niet aansprakelijk voor schade die voortvloeit uit het gebruik van de software of de resultaten.

MCP-server die Claude toegang geeft tot Belgische biodiversiteitsdata: GBIF-waarnemingen, Vlaamse Rode Lijsten, het Soortenbesluit, Habitat- en Vogelrichtlijnbijlagen, de Unielijst invasieve soorten, beschermde gebieden (Natura 2000, VEN/IVON, BWK …) en de overige gezaghebbende lijsten van het Vlaams Biodiversiteitsportaal (INBO). Typisch gebruik: soortenstatus opzoeken, welke soorten en welke beschermde gebieden rond een perceel liggen, voor m.e.r.-dossiers, passende beoordelingen en omgevingsvergunningen.

Anti-hallucinatie: elke tool geeft uitsluitend terug wat de bron effectief oplevert, met een controleerbare URL. Nul treffers betekent "niet gevonden in deze bron", niet "afwezig". Zie Harde regels hieronder.

De dertien tools

Tool

Doel

Belangrijkste parameters

Geeft terug

zoek_soort

Naam (wetenschappelijk of Nederlands) → GBIF-taxonsleutel(s)

naam, max_resultaten

lijst Soort

soort_status

Beschermings-, Rode-Lijst- en exotenstatus van één soort

soort (naam of taxonKey)

SoortStatus: vermeldingen per lijst, samenvatting per lijstcode, exoot, koppeling_twijfel

waarnemingen

GBIF-waarnemingen van één soort in een gebied/periode

soort, gebied (zie onder), jaar_van, jaar_tot, max_resultaten, offset, dataset_key

WaarnemingenRespons: totaal, steekproef, verdeling per dataset/jaar, per_verificatiestatus, zoek_url

soorten_in_gebied

Alle soorten waargenomen in een gebied, gekoppeld aan hun status

gebied, filter, alleen_bedreigd, per_dataset_per_soort, formaat, max_soorten, offset, tijdsbudget_s

SoortenInGebiedRespons: compacte soortenlijst (of tabel), legende, dekking, reproduceerbaarheid

telling_in_gebied

Alleen aantallen: hoeveel beschermde/Rode-Lijst-/invasieve soorten in een gebied

gebied, filter, soorten_per_dataset

TellingRespons: aantal per lijst/categorie, per_dataset, kern, exoten

gebieden_rond

Beschermde gebieden en gebiedsstatuten rond een punt/polygoon

adres/lat+lon/wkt, straal_m, lagen

GebiedenRespons: per laag de overlappende of dichtstbijzijnde gebieden

datarapport_natuur

Het vaste rapportsjabloon: telling, kernsoorten, gebieden, kaarten en onderliggende records in één PDF

adres of lat/lon, pad, straal_soorten_m, straal_gebieden_m, jaar_van, kaarten, bwk_kaart

pad, aantal pagina's, kaarten, samenvatting, waarschuwingen

kaart_gebieden

Situeringskaart (PNG of JPEG): de locatie met de beschermde gebieden eromheen

pad, gebied, straal_m, lagen, breedte_px, met_legende, per_groep

bestandspad, legende per laag met kleur, bbox, schaal

exporteer_bevraging

Volledige gebiedsbevraging wegschrijven als CSV of JSON (alle soorten, optioneel alle records) met metadata voor een datarapport

pad (.csv/.json), zelfde gebied- en filterparameters, met_records

bestandspaden, aantallen, metadata

lijst

Inhoud van één gezaghebbende soortenlijst

code, zoek, categorie, max_resultaten

LijstRespons: items (soort + vermelding)

geocodeer_adres

Adres/plaatsnaam → WGS84-coördinaten en gemeente

adres

Locatie

dataset_info

Herkomst, licentie, DOI en citatie van een GBIF-dataset

dataset_key

DatasetInfo

bronnen

Overzicht van alle geraadpleegde bronnen en lijst-/groepscodes

—

lijst Bron

Related MCP server: Belgian Law MCP Server

Gebiedsparameters

waarnemingen, soorten_in_gebied en telling_in_gebied aanvaarden een gebied op één van vier manieren (volgorde bij meerdere: wkt > lat/lon > adres > gemeente):

  • adres + straal_m (standaard 500 m) — geocodering via Digitaal Vlaanderen, cirkel als WKT.

  • lat/lon + straal_m — cirkel rond het punt, geen geocodering nodig.

  • wkt — een POLYGON of MULTIPOLYGON in WGS84 (lon lat, tegenwijzerzin).

  • gemeente — naam van een Belgische gemeente. In Vlaanderen wordt de echte gemeentegrens gebruikt (VRBG). Buiten Vlaanderen kent GBIF voor België geen gemeentegrenzen; de tool valt dan terug op het GADM-arrondissement (niveau 3), met een expliciete melding.

Zonder gebiedsparameter zoekt waarnemingen in heel België; soorten_in_gebied, telling_in_gebied en gebieden_rond vereisen een gebied (gebieden_rond: punt of polygoon, geen gemeente-optie).

soorten_in_gebied: compact, tabel, en de kern-groep

De engine (gebiedsanalyse.py) haalt in één GBIF-facetbevraging alle soorten met aantal op, koppelt ze parallel aan de gevraagde lijsten (schijfgecachet), filtert en sorteert op juridische relevantie, en verrijkt pas voor de overblijvende pagina de records (laatste jaar, coördinaatonzekerheid, broedindicatie) — nooit voor de volledige, ongefilterde soortenlijst.

  • Standaard krijg je per soort een compacte regel (SoortInGebied): naam, aantal, laatste jaar, samenvatting per lijstcode, exoot, onzekerheid_max_m, zeker_binnen_straal, records_met_broedindicatie, koppeling_twijfel. detail=True voegt de volledige vermeldingen toe. Categorie-toelichtingen staan één keer in legende, niet per soort.

  • formaat='tabel' geeft dezelfde inhoud als een markdown-tabel in het veld tabel (≈4x compacter dan JSON-objecten; aanbevolen bij meer dan een 50-tal soorten). soorten blijft dan leeg.

  • filter='kern' beperkt tot wat in een natuurtoets/m.e.r. telt: bijlage IV (Vlaanderen, Soortenbesluit cat. 3), bijlage II HRL, VRL bijlage I, en Rode Lijst RE/CR/EN/VU (incl. de broedvogel-Rode-Lijst 2016). Andere groepscodes: beschermd, europees, rodelijst, invasief, prioritair, provinciaal.

  • max_onzekerheid_m sluit vervaagde records uit (aantallen worden dan herteld op de overblijvende records). alleen_broedindicatie houdt alleen soorten met minstens één record met een broed-/voortplantingsaanwijzing over.

  • exoot: True/False/None (niet gecontroleerd, bv. bij een bronfout) — uitheems volgens GRIIS België, de Unielijst of de uitgebreide INBO-exotenlijst.

telling_in_gebied

Zelfde gebiedsparameters, alleen aantallen: per lijstcode en per categorie het aantal soorten, het aantal kernsoorten en het aantal soorten met status dat tegelijk exoot is — geen per-soort-records nodig, dus snel. Gebruik daarna soorten_in_gebied (bv. filter='kern') voor de namen.

Herkomst van de waarnemingen: uitsplitsing per brondataset

In een vergunningsdossier telt de herkomst van een determinatie. soorten_in_gebied met per_dataset_per_soort=True geeft daarom per soort het veld datasets: uit welke GBIF-datasets haar waarnemingen komen, met aantal en laatste_jaar, aflopend gesorteerd. De som van aantal is gelijk aan aantal_waarnemingen van die soort. Het kost geen extra GBIF-oproepen: de records zijn al opgehaald voor het laatste jaar en de coördinaatonzekerheid.

Bij formaat='tabel' komt er een kolom datasets met een compacte notatie, bijvoorbeeld wnm.be-gewervelden 5 / eBird 2. De afkortingen staan in gbif_mcp/datasets.py; onbekende datasets vallen terug op de eerste dertig tekens van hun titel. exporteer_bevraging schrijft de uitsplitsing altijd weg: in CSV als de kolommen datasets en n_datasets, in JSON als de volledige lijst per soort.

Doorklikken naar de onderliggende records kan met waarnemingen(..., dataset_key=...). telling_in_gebied geeft een per_dataset-blok met het aantal records per dataset; met soorten_per_dataset=True komt daar het aantal soorten met status bij (tien parallelle extra GBIF-oproepen, in de praktijk ±2 s; daarom standaard uit).

Elke waarneming draagt ook verificatiestatus (het GBIF-veld identificationVerificationStatus, letterlijk overgenomen), en waarnemingen telt die in per_verificatiestatus. Waarnemingen.be en Florabank vullen dat veld, eBird, iNaturalist en Pl@ntNet niet; dan staat er (leeg).

kaart_gebieden: situeringskaart

Tekent de gebieden van gebieden_rond op de GRB-basiskaart van Digitaal Vlaanderen (WMS), in Lambert 72, met legende, schaalbalk, noordpijl en de zoekcirkel. Het resultaat is een PNG plus de legende als gegevens (per laag: kleur, aantal getekende vlakken, status).

Komt de kaart verkleind in een document, zet dan met_legende=False en maak de legende in het document zelf op met het veld legende: een ingebakken legende wordt onleesbaar bij verkleining. voorbeeld/maak_rapport.py doet dat zo.

De Biologische Waarderingskaart krijgt een kleur per karteringseenheid: elk habitattype is een eigen legenderegel (BWK 4030 — droge heide), zodat de kaart toont wélke habitats er liggen. Omdat die laag het hele beeld dekt, is per_groep=True daar aan te raden: dan komt er één kaart per thema (natura2000, natuur, beheer, erfgoed, bwk) met dezelfde uitsnede en schaal, dus over elkaar te leggen. De bestandsnamen krijgen de groep als achtervoegsel.

Leesbaar zonder kleur. Kleur is nooit de enige drager van betekenis: elk vlak krijgt het nummer van zijn legenderegel op de kaart, elke laag een eigen arcering, en het palet is dat van Okabe en Ito (onderscheidbaar bij deuteranopie, protanopie en tritanopie). De kaart blijft daardoor bruikbaar in grijswaarden en bij kleurenblindheid. Labels van grote gebieden worden in het zichtbare deel van het vlak geplaatst en wijken uit bij overlap, zodat ook geneste aanduidingen hun nummer houden.

Grote vlakken worden eerst getekend, zodat kleine percelen zichtbaar blijven. De kaartversieringen schalen mee met breedte_px, dus een kaart van 1800 px blijft leesbaar op een halve A4. Valt de WMS uit, dan wordt de kaart zonder ondergrond getekend en staat dat in melding; een WFS-laag die faalt, staat in de legende als niet_geraadpleegd.

gebieden_rond: beschermde gebieden en gebiedsstatuten

Bevraagt de WFS-diensten van het Departement Omgeving (Mercator) en Digitaal Vlaanderen (BWK) rond een punt of polygoon, intern in Lambert 72 (metrische afstanden). Per laag: de gebieden die het punt bevatten of de polygoon overlappen (overlapt, afstand 0), anders de dichtstbijzijnde binnen straal_m (standaard 1000 m).

Lagen (gebieden.LAGEN) en groepen voor lagen:

Groep

Lagen

natura2000

Habitatrichtlijngebied + deelgebied (SBZ-H), Vogelrichtlijngebied (SBZ-V), Ramsar

natuur

VEN/IVON, nationaal park, natuurreservaat-uitbreidingszone, HPG/beschermd grasland, poldergrasland, Duinendecreet

beheer

Natuurbeheerplan, natuurrichtplan, Sigma-natuurdoel, ANB-domein

erfgoed

Beschermd landschap, dorpsgezicht, monument

bwk

BWK-habitat (incl. Natura 2000-habitattype), BWK-fauna, BWK-habitattype 3260 (waterlopen)

Leeg lagen = alle lagen bevragen. Een laag met status='niet_geraadpleegd' gaf een fout bij de WFS-dienst: dat is geen "geen gebied", niet stilzwijgend weglaten. melding waarschuwt ook als de count-limiet van een laag is bereikt (verre treffers kunnen dan ontbreken).

Beperkingen (zie ook docs/gebieden-lagen.md, peildatum 17 september 2026):

  • Alleen Vlaanderen; de twee gebruikte diensten dekken Wallonië/Brussel niet.

  • Erkende/Vlaamse natuurreservaten zelf (de kernzones) en specifieke bosreservaten zitten niet in deze diensten — enkel de uitbreidingszones (natuurreservaat_uitbreiding) en de brede laag openbare bossen/natuurdomeinen ANB. Verifieer op Geopunt.

  • BWK-habitatcodes zijn karteringseenheden, geen juridisch statuut. Een niet-overlappende BWK-habitatvlek zonder habitat ("gh") wordt niet als "dichtstbijzijnde" gerapporteerd.

Rode-Lijstdekking en de broedvogel-Rode-Lijst 2016

De "meest recente gevalideerde Rode Lijsten van Vlaanderen" (rodelijst_vl, dr606) dekt geen vogels (macro-nachtvlinders, wilde bijen, zweefvliegen, dagvlinders, libellen, pissebedden, amfibieën, reptielen — zie rodelijst_dekking in de respons). De enige beschikbare Rode Lijst voor broedvogels is die van Devos et al. (2016), die op het portaal verstopt zit in de verzamellijst "Validated red lists 2015" (dr552, gefilterd op KVP source=Devos_etal_2016, naast een oudere 2004-beoordeling in dezelfde lijst). Deze zit als aparte lijstcode rodelijst_broedvogels_2016 in de rodelijst- en kern-groep. Zie docs/onderzoek-rodelijst-hrl.md voor het volledige brononderzoek.

Kruiscontrole Habitatrichtlijn-bijlagen

Voor HRL-vermeldingen (bijlage II, IV, V) uit het INBO-portaal wordt de soort ook opgezocht in de bijbehorende EU-brede GBIF-checklist van die bijlage (HRL_EU_CHECKLISTS, uitgever Ukrainian Nature Conservation Group, wel de volledige EU-soortenlijst). Wijkt het portaal af van die checklist, dan verschijnt koppeling_twijfel met de reden — bedoeld als signaal, geen bewijs van fout in één van beide bronnen.

Exotenvlag

exoot (in soort_status, soorten_in_gebied, telling_in_gebied) is True als de soort voorkomt op de Unielijst invasieve uitheemse soorten, de uitgebreide INBO-exotenlijst, of GRIIS België (GBIF); None als één van die bronnen niet geraadpleegd kon worden (zie melding/ ontbrekend) — dan is er dus geen uitspraak, geen "nee".

Schijfcache en reproduceerbaarheid

Lijsten en checklists die zelden wijzigen (INBO-lijstitems, GBIF-checklist-sleutels) worden naast de geheugencache ook op schijf gecachet onder ~/.cache/gbif-mcp (te overschrijven via de omgevingsvariabele GBIF_MCP_CACHE), zodat een herstart van de server geen nieuwe download vergt. lijstversies in de respons geeft per lijstcode het ISO-tijdstip waarop die versie effectief is opgehaald.

Voor herleidbaarheid geeft soorten_in_gebied ook geraadpleegd_op (tijdstip van deze bevraging), gbif_parameters (de exacte GBIF-API-parameters van de facetbevraging) en zoek_url (dezelfde zoekopdracht op gbif.org).

Tijdsbudget en volledig

Stap 4 van de engine (records per overblijvende soort ophalen voor laatste jaar, onzekerheid en broedindicatie) loopt binnen tijdsbudget_s (standaard 40 s). Wat niet op tijd binnenkomt, wordt nooit stilzwijgend weggelaten: volledig=False en ontbrekend somt op voor welke soorten/lagen het niet lukte. Verhoog tijdsbudget_s bij grote gebieden met veel soorten.

Bronnen

  • GBIF occurrence API (api.gbif.org) — waarnemingen, landsfilter België. Dezelfde data als gbif.biodiversity.be (hosted portal van Belspo/BBPF). Licentie per onderliggende dataset (meestal CC0 of CC BY; zie dataset_info).

  • Vlaams Biodiversiteitsportaal (natuurdata.inbo.be, INBO, Atlas of Living Australia-stack) — naamzoeken (Nederlandse namen) en de gezaghebbende lijsten hieronder. Licentie: CC0.

  • GBIF-checklists — als aanvulling/controle op de INBO-lijsten: Validated Red Lists of Flanders (gbif_rodelijst_vl), GRIIS België (gbif_griis_be), Unielijst (gbif_unielijst), Belgian Species List (gbif_belgian_species_list), en de EU-brede HRL-bijlagechecklists (kruiscontrole, zie hierboven).

  • Digitaal Vlaanderen geolocation v4 (geo.api.vlaanderen.be) — adres → coördinaten. Modellicentie gratis hergebruik van overheidsinformatie.

  • VRBG-gemeentegrenzen (Voorlopig Referentiebestand Gemeentegrenzen, Digitaal Vlaanderen, WFS) — gemeentegeometrie voor gemeente. Modellicentie gratis hergebruik.

  • WFS Departement Omgeving (Mercator) en WFS Digitaal Vlaanderen (BWK) — beschermde gebieden en BWK voor gebieden_rond (zie hierboven). Modellicentie gratis hergebruik.

Lijsten op het Vlaams Biodiversiteitsportaal (lijst, soorten_in_gebied)

Code

Naam

Groep

soortenbesluit

Soortenbesluit (bijlage 1, categorieën 1-3)

bescherming

jachtdecreet

Jachtdecreet — jachtwild (checklist)

bescherming

hrl_ii

Habitatrichtlijn bijlage II

bescherming

hrl_iv_vl

Habitatrichtlijn bijlage IV — soorten die in het Vlaamse Gewest voorkomen of kunnen voorkomen (Soortenbesluit categorie 3)

bescherming

hrl_iv

Habitatrichtlijn bijlage IV (portaal-lijst, 83 soorten; onvolledig, gebruik hrl_iv_vl)

bescherming

hrl_v

Habitatrichtlijn bijlage V

bescherming

vrl

Vogelrichtlijn bijlagen I, II.1 en II.2 (gecombineerd)

bescherming

vrl_iii

Vogelrichtlijn bijlage III

bescherming

bern

Verdrag van Bern — bijlagen I, II en III

verdrag

bonn

Verdrag van Bonn (CMS) — trekkende soorten

verdrag

cites

EU CITES-verordening — bijlagen

verdrag

unielijst

Unielijst invasieve uitheemse soorten (Verordening (EU) nr. 1143/2014)

invasief

invasief_uitgebreid

Uitgebreide lijst invasieve uitheemse soorten (INBO)

invasief

rodelijst_vl

Meest recente gevalideerde Rode Lijsten van Vlaanderen (INBO); geen vogels

rodelijst

rodelijst_broedvogels_2016

Rode Lijst van de broedvogels in Vlaanderen 2016 (Devos et al. 2016)

rodelijst

rodelijst_vl_nietgevalideerd

Niet-gevalideerde Rode Lijsten van Vlaanderen

rodelijst

iucn

IUCN Red List (wereldwijd; niet de Vlaamse status)

rodelijst

prioritair_vl

Prioritaire soorten Vlaanderen

beleid

prov_antwerpen, prov_limburg, prov_oost_vlaanderen, prov_vlaams_brabant, prov_west_vlaanderen

Provinciaal belangrijke soorten (per provincie)

beleid

soortenmeetnetten

Checklist Soortenmeetnetten INBO

beleid

Groepscodes voor filter in soorten_in_gebied/telling_in_gebied: kern, beschermd, europees, rodelijst, invasief, prioritair, provinciaal. Volledig overzicht incl. URL's: tool bronnen. Laaginventaris gebieden_rond: docs/gebieden-lagen.md.

Voor gebruikers

Een handleiding zonder technische voorkennis, met installatie-instructies en voorbeeldvragen, staat in HANDLEIDING.md.

Rapportsjabloon

datarapport_natuur maakt in één oproep het vaste datarapport (gbif_mcp/rapport.py). De bevragingen lopen parallel; een rapport met twee kaarten duurt enkele seconden. Zonder pad belandt de PDF in ~/Documents (op Windows de map Documenten). Daarnaast biedt de server een MCP-prompt datarapport_natuur: een kant-en-klaar verzoek met adres en stralen als argumenten, dat Claude laat samenvatten volgens de vaste conventies (beide stralen expliciet, strikt en striktst beschermd, waarschuwingen letterlijk, niets toevoegen).

Het sjabloon houdt zich aan dezelfde conventies als de tools: beide zoekstralen worden overal genoemd, "ruimere" of "kleinere" straal alleen wanneer dat klopt, getallen met punt als duizendtalscheiding ongeacht de systeeminstelling, en laagnamen in plaats van interne codes.

Voorbeeldrapport

voorbeeld/datarapport-natuur.pdf is een datarapport natuur dat volledig uit de tool-uitvoer is opgebouwd (neutraal testadres, straal 500 m, vanaf 2020): samenvatting, statussen in cijfers, kernsoorten met herkomst per brondataset, gebiedslagen met afstand, onderliggende records met verificatiestatus, en een verantwoording met de versiedatum van elke lijst en de GBIF-zoek-URL. voorbeeld/datarapport-natuur-met-kaart.pdf is dezelfde opzet met een situeringskaart als hoofdstuk 2 (andere locatie, met beschermde gebieden in de buurt). voorbeeld/datarapport-kalmthout.pdf toont twee thematische kaarten naast elkaar: de beschermde gebieden en de Biologische Waarderingskaart, voor een locatie in de Kalmthoutse Heide. voorbeeld/datarapport-temse.pdf is rechtstreeks door de tool datarapport_natuur gemaakt. voorbeeld/maak_rapport.py maakt een bewaarde JSON-bevraging opnieuw op met hetzelfde sjabloon.

Disclaimer en privacy

WARNING

Betaversie — geen product, geen garantie, geen aansprakelijkheid. Deze software is een experimenteel hulpmiddel in ontwikkeling, geen commercieel product of dienst. De software en de rapporten die ze maakt, worden kosteloos aangeboden zoals ze zijn, zonder enige uitdrukkelijke of stilzwijgende garantie, onder meer over juistheid, volledigheid, actualiteit of geschiktheid voor een bepaald doel. De resultaten zijn een geautomatiseerde bronnenscan van publieke databanken; ze vervangen geen terreininventarisatie, deskundige beoordeling of juridisch advies. De gebruiker is zelf volledig verantwoordelijk voor het controleren van de resultaten en voor elk gebruik dat ervan wordt gemaakt. De auteur is niet aansprakelijk voor schade die voortvloeit uit het gebruik van de software of de resultaten.

Privacy. De connector verwerkt geen persoonsgegevens van waarnemers. GBIF levert bij een waarneming ook de naam van de waarnemer en van wie de soort determineerde; die gegevens worden bij ontvangst verwijderd, nog vóór ze worden bewaard, en komen niet in antwoorden, exports of rapporten terecht.

Licentie

Copyright © 2026 Jef Seghers. In licentie gegeven krachtens de EUPL.

De code valt onder de Openbare Licentie van de Europese Unie, versie 1.2 (EUPL-1.2). De officiële Nederlandse tekst staat in LICENSE; alle taalversies hebben gelijke rechtskracht (overzicht bij de Europese Commissie). U mag de code gebruiken, bestuderen, aanpassen en verspreiden. Wie een aangepaste versie verspreidt of online als dienst aanbiedt, doet dat onder dezelfde licentie.

De licentie geldt voor de code, niet voor de gegevens in de antwoorden en rapporten. Die gegevens vallen onder de licentie van hun bron; zie Datalicenties hieronder.

Datalicenties

Elke GBIF-dataset heeft één licentie: CC0 1.0 (vrij), CC BY 4.0 (naamsvermelding) of CC BY-NC 4.0 (alleen niet-commercieel). Onder de Belgische datasets vallen onder meer iNaturalist, Xeno-canto en de exotendatasets van waarnemingen.be onder CC BY-NC.

Standaard neemt de connector alle licenties mee, ook CC BY-NC: de antwoorden en rapporten zijn bedoeld als intern werkdocument. Een rapport met gegevens onder CC BY-NC zegt dat op het titelblad en vermeldt hoeveel records het betreft.

Wordt een resultaat gedeeld of gepubliceerd, zet dan ook_niet_commercieel=False (of vraag in Claude "alleen vrij bruikbare data"). De filter werkt dan aan de bron (GBIF-parameter license), zodat aantallen, soortenlijsten, kaarten en records onderling kloppen; records zonder bruikbare licentie vallen dan ook weg. Of een concreet gebruik commercieel is, blijft een beoordeling van de gebruiker.

Elk antwoord vermeldt de gebruikte keuze (licentiefilter), de verdeling van alle records per licentie (licenties) en, bij uitsluiting, hoeveel records zijn weggelaten (uitgesloten_niet_commercieel). Het rapport toont de licentie per dataset in de bronverantwoording.

De voorbeeldrapporten in voorbeeld/ zijn gemaakt met ook_niet_commercieel=False, omdat ze in deze repository gepubliceerd worden.

Voor datasets onder CC BY is naamsvermelding vereist: neem de datasettabel uit het rapport over wanneer u de gegevens hergebruikt.

Installatie

cd gbif-mcp
uv venv --python 3.12 && source .venv/bin/activate
uv pip install -e ".[test]"
pytest -q          # tests draaien zonder netwerk

Windows

Zie docs/installeren-windows.md: extensiebundel of git-kloon, met de PowerShell-stappen en de aandachtspunten. Dezelfde .mcpb werkt op macOS en Windows.

Aansluiten op Claude Desktop

Eenvoudigste weg: de extensiebundel. Bouw ze met zsh mcpb-src/bouw.sh (vereist uv en npx), en installeer dist/be-biodiversiteit.mcpb via Claude Desktop → Instellingen → Extensies → Geavanceerde instellingen → Extensie installeren. De eerste start maakt eenmalig een venv aan (±1 minuut, internet nodig). Alternatief, zonder bundel:

Voeg toe aan claude_desktop_config.json en herstart Claude Desktop:

{
  "mcpServers": {
    "be-biodiversiteit": {
      "command": "/pad/naar/gbif-mcp/.venv/bin/gbif-mcp"
    }
  }
}

Aansluiten op Claude Code

claude mcp add be-biodiversiteit /pad/naar/gbif-mcp/.venv/bin/gbif-mcp

Harde regels

  • Geen namen van waarnemers. Velden als recordedBy en identifiedBy worden bij ontvangst verwijderd (gbif.PERSOONSVELDEN); voeg ze nooit toe aan een antwoord, export of rapport.

  • Alleen wat een tool teruggeeft is gevonden. Vul nooit soorten, statussen, gebieden of waarnemingen aan die niet letterlijk uit een tool-respons komen.

  • Nul waarnemingen ≠ afwezig. GBIF-waarnemingen zijn opportunistische meldingen (vooral waarnemingen.be), geen systematische inventarisatie. Voor een dossier blijft een terreininventarisatie nodig.

  • Coördinaten van gevoelige soorten zijn vaak vervaagd. Zie onzekerheid_max_m/ onzekerheid_m op elke waarneming; waarden van 1-10 km wijzen op vervaging naar een hok. soorten_in_gebied waarschuwt expliciet (signaleer_vervaging) als een strikt beschermde soort geen enkel record heeft dat zeker binnen de straal ligt.

  • De brondataset zegt iets over de herkomst, niet over de validatiestatus. Een dataset- uitsplitsing toont wie de determinatie deed en via welk platform. Waarnemingen.be stuurt niet alle validatieklassen door naar GBIF, en verscheidene datasets vullen identificationVerificationStatus niet in. De connector leidt géén betrouwbaarheidsklasse af uit een datasetnaam; die weging is aan de gebruiker.

  • hrl_iv is onvolledig (afgeleid van een Britse NBN-lijst; mist o.m. wolf en bever). Gebruik voor Vlaamse dossiers hrl_iv_vl (Soortenbesluit categorie 3) als primaire bron.

  • Lege vermeldingen in soort_status betekent niet onbeschermd. Een soort kan basisbescherming genieten (bv. alle inheemse vogels via het Soortenbesluit) zonder als aparte regel op een lijst te staan. soort_status vermeldt dat expliciet in melding.

  • rodelijst_vl (dr606) bevat geen vogels. Gebruik rodelijst_broedvogels_2016 (of de groepen rodelijst/kern, die beide al bevatten) voor de Rode-Lijststatus van vogels.

  • Een laag met status='niet_geraadpleegd' in gebieden_rond is geen "geen gebied aanwezig" — de WFS-dienst gaf een fout. Zeg dat er expliciet bij.

  • volledig=False/ontbrekend in soorten_in_gebied betekent dat niet alle records binnen het tijdsbudget zijn opgehaald; neem dat over, doe geen uitspraak over aantallen voor de vermelde soorten alsof ze compleet zijn.

Lokaal draaien (stdio)

python -m gbif_mcp.server

Available Tools

13 tools
bronnenA

Overzicht van alle geraadpleegde bronnen en de lijst-/groepscodes voor soorten_in_gebied en lijst.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It describes the tool as an informational overview, implying a read-only, non-destructive operation, but it does not explicitly state side-effect-free behavior or data freshness. Since it is a reference tool, this is adequate but could be more explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, concise sentence that front-loads the core purpose and immediately references the relevant sibling tools. Every word adds value, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema exists (which defines return values), the description sufficiently explains what the tool provides. It names the two tools whose codes it covers, which is the key contextual information. The only minor gap is not stating whether the data is static or dynamic, but this is not critical for a reference tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema fully covers them (100% coverage). Per the rubric, the baseline for 0 params is 4, and the description adds no param-specific meaning, which is appropriate since there are none.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides an overview of consulted sources and the list/group codes used by two specific sibling tools (`soorten_in_gebied` and `lijst`). It identifies a specific resource and its purpose, distinguishing it from the query-focused siblings. The verb 'Overzicht' (overview) is explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: when you need codes for the named tools, consult this. However, it does not explicitly state when to use it vs. alternatives, nor does it provide exclusions or prerequisites. The context is clear but not prescriptive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

datarapport_natuurA

Maak in één stap het vaste DATARAPPORT NATUUR als PDF voor een projectlocatie.

Gebruik deze tool wanneer de gebruiker om een datarapport, natuurrapport, bronnenscan of "rapport zoals het vorige" vraagt. Het sjabloon ligt vast, zodat elk rapport dezelfde opbouw heeft: titelblad met coördinaten en beide zoekstralen, samenvatting, situering met kaart(en), statussen in cijfers, kernsoorten met hun herkomst per brondataset, beschermde gebieden en gebiedsstatuten met afstand, de onderliggende waarnemingen van de striktst beschermde soorten, verantwoording van de bronnen (lijstversies, GBIF-zoekopdracht) en beperkingen.

Soorten en gebieden hebben elk een eigen zoekstraal; dat is een bewuste keuze die afhangt van het project en het type natuur. Het rapport noemt beide stralen overal expliciet.

De kaarten zijn leesbaar zonder kleuronderscheid (nummers en arceringen). Met bwk_kaart komt er een tweede kaart met de habitattypes van de Biologische Waarderingskaart.

Na afloop: vat voor de gebruiker kort samen wat het rapport vond (aantal kernsoorten, de striktst beschermde soorten, gebieden waarin of nabij de locatie ligt, waarschuwingen letterlijk) en geef het pad. Voeg niets toe dat niet uit de respons komt. Spreek van strikt of striktst beschermd, nooit van zwaar of zwaarst beschermd.

Args: adres: adres in Vlaanderen (bij voorkeur met huisnummer); of lat/lon in WGS84. pad: doelbestand (.pdf). Zonder pad: Documenten/datarapport-natuur--.pdf. straal_soorten_m: zoekstraal voor soortwaarnemingen (standaard 500 m). straal_gebieden_m: zoekstraal voor gebiedsstatuten en kaarten (standaard 1000 m). jaar_van / jaar_tot: periode van de waarnemingen (standaard vanaf 2020). kaarten: situeringskaart met de beschermde gebieden opnemen. bwk_kaart: tweede kaart met de Biologische Waarderingskaart opnemen. detail_soorten: van hoeveel striktst beschermde soorten de individuele records worden getoond. bewaar_kaarten: de kaartafbeeldingen naast de PDF bewaren (handig om in een nota te gebruiken). ook_niet_commercieel: ook datasets onder CC BY-NC (alleen niet-commercieel gebruik) meenemen. Standaard aan: de uitvoer is bedoeld als intern werkdocument. Zet op False wanneer het resultaat gedeeld of gepubliceerd wordt; dan komen alleen datasets onder CC0 en CC BY mee.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lonNo
padNo
adresNo
kaartenNo
jaar_totNo
jaar_vanNo
bwk_kaartNo
bewaar_kaartenNo
detail_soortenNo
straal_soorten_mNo
straal_gebieden_mNo
ook_niet_commercieelNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden of behavioral disclosure. It reveals the fixed template structure, the two search radii and their rationale, the map behavior (including the bwk_kaart option), the licensing nuance (ook_niet_commercieel default and when to set False), and even linguistic constraints ('nooit van zwaar of zwaarst beschermd'). It also instructs to base the summary only on the response. This is thorough and transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although long, the description is well-structured and every sentence earns its place. It front-loads the core purpose and usage triggers, then explains the template, search radii, maps, post-action summary, and finally the parameters. There is no redundancy or filler; the Args list is clear and matches the schema properties.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 13 parameters and no output schema, the description covers all parameters, the full behavior (template, maps, licensing), and the post-action requirements. It even addresses edge cases like sharing vs. internal use (ook_niet_commercieel) and language precision. Nothing critical is missing for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate entirely. It does so with an Args section that explains every parameter: adres (with fallback to lat/lon), pad (with default path), straal_soorten_m and straal_gebieden_m (with defaults and rationale), jaar_van/jaar_tot, kaarten, bwk_kaart, detail_soorten, bewaar_kaarten, and ook_niet_commercieel (with licensing meaning). This adds meaning far beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Maak in één stap het vaste DATARAPPORT NATUUR als PDF voor een projectlocatie.' It also names the exact user triggers ('datarapport, natuurrapport, bronnenscan of "rapport zoals het vorige"'), which clearly differentiates it from sibling tools that handle individual queries like zoek_soort or waarnemingen. The purpose is unambiguous and distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: 'Gebruik deze tool wanneer de gebruiker om een datarapport, natuurrapport, bronnenscan of "rapport zoals het vorige" vraagt.' It also provides post-action guidance on how to summarize results and which terminology to use. However, it does not explicitly mention when NOT to use it or name alternative tools for other cases, so it's slightly short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dataset_infoA

Herkomst, uitgever, licentie, DOI en citatie van een GBIF-dataset (uit per_dataset of een waarneming).

Args: dataset_key: GBIF-dataset-UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataset_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
doiNo
keyYes
urlYes
typeNo
titelYes
citatieNo
licentieNo
uitgeverNo
beschrijvingNo

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It lists the output fields but does not state that this is a read-only operation, whether authentication is required, or whether any side effects occur.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded, with one sentence explaining the tool's purpose and one argument definition. There is no redundant wording or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter metadata lookup with an output schema present, the description covers the essential input semantics. It could be improved with an explicit read-only note or usage pointer, but the simplicity of the tool makes the current text largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by defining `dataset_key` as a GBIF-dataset UUID and indicating it can come from `per_dataset` or an observation. This adds format and provenance context beyond the schema's plain string type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool provides provenance metadata—origin, publisher, license, DOI, and citation—for a GBIF dataset. It lacks an explicit verb such as 'returns' or 'retrieves', but the resource and content are specific enough to distinguish it from observation, species, and area-related sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(uit `per_dataset` of een waarneming)' helps explain where the dataset key comes from, but the description does not explicitly say when to use this tool versus alternatives. Usage is implied through the clear purpose rather than stated directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

exporteer_bevragingA

Schrijf een volledige gebiedsbevraging weg als CSV of JSON (alle soorten, optioneel alle records), met metadata.

Bestemd voor datarapporten: pad eindigt op .csv (soortentabel; met met_records=True komt er een tweede bestand _records.csv) of .json (alles in één bestand, incl. metadata: geraadpleegd_op, gebied, GBIF-parameters, lijstversies, datasets, legende). Zelfde filters als soorten_in_gebied.

De soortentabel bevat altijd de uitsplitsing per brondataset: in CSV als de kolommen datasets (compacte notatie 'wnm.be-gewervelden 5 / eBird 2') en n_datasets, in JSON als de volledige lijst datasets per soort. De brondataset zegt iets over de herkomst van de determinatie, niet over de validatiestatus van het record.

Args: pad: doelbestand (.csv of .json), absoluut of relatief aan de werkmap van de server. met_records: ook alle individuele GBIF-records van de geselecteerde soorten wegschrijven. ook_niet_commercieel: ook datasets onder CC BY-NC (alleen niet-commercieel gebruik) meenemen. Standaard aan: de uitvoer is bedoeld als intern werkdocument. Zet op False wanneer het resultaat gedeeld of gepubliceerd wordt; dan komen alleen datasets onder CC0 en CC BY mee.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lonNo
padYes
wktNo
adresNo
filterNobeschermd,rodelijst
gemeenteNo
jaar_totNo
jaar_vanNo
straal_mNo
met_recordsNo
tijdsbudget_sNo
alleen_bedreigdNo
ook_niet_commercieelNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It thoroughly discloses file naming conventions, the second records file when met_records=True, JSON metadata contents, dataset-column notation, licensing defaults, and the distinction between source dataset and validation status.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well organized: purpose and output behavior come first, followed by dataset-split details and an Args section. Each section adds necessary information for a complex export tool, and the most decision-relevant facts are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for output format, metadata, licensing, and dataset splitting, but it does not explain return values despite having no output schema. It also delegates the full filter semantics to soorten_in_gebied and leaves several parameters undocumented, which creates gaps for an agent without access to that sibling's description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only three parameters (pad, met_records, ook_niet_commercieel) are explained in the Args section. With 14 parameters and 0% schema description coverage, the remaining geospatial and filter parameters are left to their schema titles and the generic reference 'Zelfde filters als soorten_in_gebied', which is insufficient compensation for such a large parameter set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Schrijf een volledige gebiedsbevraging weg als CSV of JSON'. It clearly identifies the output formats, optional records, metadata, and the report-oriented purpose, which distinguishes it from sibling query tools like soorten_in_gebied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states the intended use ('Bestemd voor datarapporten') and ties the filters to the sibling tool soorten_in_gebied. It also gives conditional guidance for met_records and ook_niet_commercieel, but it does not explicitly say when not to use this tool or compare it directly with alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gebieden_rondA

Beschermde gebieden en gebiedsstatuten rond een punt of polygoon: Natura 2000 (SBZ-H/SBZ-V, Ramsar), VEN/IVON, nationale parken, natuurreservaat-uitbreidingszones, natuurbeheerplannen, natuurrichtplannen, Sigma-natuurdoelen, ANB-domeinen, HPG/beschermde graslanden, Duinendecreet, beschermd erfgoed (landschap, dorpsgezicht, monument) en BWK (habitat, fauna, 3260).

Per laag: de gebieden die het punt bevatten of de polygoon overlappen (overlapt, afstand 0), anders de dichtstbijzijnde binnen straal_m met de afstand in meter (Lambert 72). Een laag met status niet_geraadpleegd gaf een fout: dat is geen 'geen gebied'. Bronnen: WFS Departement Omgeving (Mercator) en Digitaal Vlaanderen (BWK); alleen Vlaanderen.

Args: adres: adres of plaatsnaam (Digitaal Vlaanderen); of lat/lon (WGS84); of wkt (POLYGON, WGS84 lon lat). straal_m: zoekstraal (standaard 1000 m). lagen: kommagescheiden laag- of groepscodes: natura2000, natuur, beheer, erfgoed, bwk, of losse codes (hrl_gebied, vrl_gebied, ven_ivon, natuurbeheerplan, hpg, bwk_habitat, …). Leeg = alle lagen. max_treffers_per_laag: hoeveel treffers per laag worden teruggegeven (gesorteerd: overlap eerst, dan afstand).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lonNo
wktNo
adresNo
lagenNo
straal_mNo
max_treffers_per_laagNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
doelYes
lagenYes
straal_mYes
kanttekeningYes
samenvattingNoPer laag met treffers: 'in <naam>' of 'dichtstbij <naam> op N m'.
waarschuwingenNo
geraadpleegd_opYes
niet_geraadpleegdNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well: it explains the selection logic (overlap first, then nearest within radius), distance in Lambert 72, error handling via 'niet_geraadpleegd', and that a layer with an error is not 'geen gebied'. It also discloses data sources and geographic limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy but information-dense and well-structured: it opens with a clear purpose, then explains behavior, sources, and parameters in logical sections. It front-loads the core functionality and avoids redundancy, though some sentences could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 parameters, multiple layers, error states, geographic restrictions) and the presence of an output schema, the description is highly complete. It covers purpose, behavior, parameter semantics, and edge cases (error status, only Flanders), leaving little ambiguity for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain parameters—and it does thoroughly. It clarifies 'adres' can be an address, lat/lon, or WKT (with coordinate system), defines 'straal_m', lists valid 'lagen' codes with examples, and explains 'max_treffers_per_laag' sorting. All seven parameters are covered with added meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool returns protected areas and area statutes around a point or polygon, enumerating a detailed list of layer types (Natura 2000, VEN/IVON, etc.). It clearly defines the query behavior (overlap vs. nearest within radius) and geographic scope, making it distinct from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides contextual constraints (only Flanders) and input flexibility, but does not explicitly compare with sibling tools or state when this tool is preferred over alternatives like 'kaart_gebieden' or 'soorten_in_gebied'. Usage guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

geocodeer_adresA

Adres of plaatsnaam in Vlaanderen/Brussel -> WGS84-coördinaten en gemeente (Digitaal Vlaanderen, geolocation v4).

Args: adres: bv. 'Kortrijksesteenweg 100, 9000 Gent' of 'Bourgoyen, Gent'.

ParametersJSON Schema
NameRequiredDescriptionDefault
adresYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
latYes
lonYes
bronNo
typeNo
adresNo
invoerYes
gemeenteNo
postcodeNo
x_lambert72No
y_lambert72No
waarschuwingNobv. geen huisnummer: het resultaat is het straatmidden.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the burden of behavioral disclosure. It does reveal that an external Digitaal Vlaanderen geolocation service is used and that output includes coordinates and municipality, but it does not mention potential failure modes, coverage limits, or whether network/auth requirements exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core purpose and source are in the first line, followed by a minimal parameter example block. No unnecessary filler is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description does not need to document return fields in detail. It covers input scope, accepted input forms, and output type well enough for a simple one-parameter geocoding tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must clarify the 'adres' parameter. It does so with two concrete examples covering both a full address and a place name, which is sufficient for a single free-form string parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines a geocoding transformation from an address or place name in Flanders/Brussels to WGS84 coordinates and municipality, and it names the underlying service (Digitaal Vlaanderen, geolocation v4). This is specific enough to distinguish it from all listed sibling tools, which are biodiversity-data related.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is clear: provide an address or place name in Flanders/Brussels. It does not explicitly list when-not-to-use or alternatives, but the scope is well delimited and the siblings are unrelated, so the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kaart_gebiedenA

Situeringskaart: de projectlocatie met de beschermde gebieden eromheen.

Tekent de gebieden uit gebieden_rond op de GRB-basiskaart van Digitaal Vlaanderen, in Lambert 72, met legende, schaalbalk, noordpijl en de zoekcirkel. Bedoeld als situeringsfiguur in een datarapport of nota. Alleen Vlaanderen.

Geeft het bestandspad terug plus de legende (per laag: kleur, aantal getekende vlakken, status). Een laag met status niet_geraadpleegd gaf een fout: daaruit volgt niet dat er geen gebied ligt. Lagen zonder vlak binnen de straal komen niet in de legende.

Args: pad: doelbestand; .png of .jpg. Voor een rapport met meerdere kaarten is .jpg aan te raden: de GRB-ondergrond is rasterbeeld, waardoor JPEG tot tienmaal kleiner uitvalt. adres: adres of plaatsnaam; of lat/lon (WGS84); of wkt (POLYGON in WGS84, lon lat). straal_m: zoekstraal én maat voor de kaartuitsnede (de kaart toont ±25 % meer). lagen: laag- of groepscodes zoals bij gebieden_rond; standaard natura2000, natuur en beheer. Voeg 'erfgoed' of 'bwk' toe voor beschermd erfgoed of de Biologische Waarderingskaart. breedte_px: beeldbreedte in pixels (600 tot 2400). met_legende: legende onder de kaart inbakken. Zet op False wanneer de kaart verkleind in een document komt: gebruik dan het veld legende uit de respons om ze in het document zelf op te maken, anders is de ingebakken tekst onleesbaar. per_groep: één kaart per thema in plaats van alles op elkaar. Aan te raden zodra de Biologische Waarderingskaart meedoet: die dekt het hele beeld en maakt de beschermingsgebieden onleesbaar. De bestandsnamen krijgen de groep als achtervoegsel (bv. situering-bwk.jpg) en de respons bevat dan een lijst kaarten.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lonNo
padYes
wktNo
adresNo
lagenNonatura2000,natuur,beheer
straal_mNo
per_groepNo
breedte_pxNo
met_legendeNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so strongly: it discloses the return value (file path plus legend with color, count, status), the meaning of `niet_geraadpleegd`, the fact that empty layers are omitted, the ±25% map-extent margin, and that `per_groep` returns a `kaarten` list. This goes well beyond what the schema tells the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but each sentence earns its place: purpose and output semantics are front-loaded, followed by per-parameter guidance and practical recommendations. There is no filler, and the structure mirrors the invocation workflow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 10 parameters, no annotations, and no output schema, this definition is exceptionally complete. It explains return fields, edge-case status values, file naming behavior, and when to change embedded options, giving the agent enough context to invoke it correctly in realistic report-generation scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: every parameter is explained, including coordinate systems (WGS84 for adres/lat/lon/wkt, Lambert 72 for the map), file format constraints (.png/.jpg), pixel bounds (600-2400), and the dual role of `straal_m` as search radius and map cutoff. This fully compensates for the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Tekent de gebieden uit `gebieden_rond` op de GRB-basiskaart van Digitaal Vlaanderen', producing a situational map with protected areas, legend, scale bar, north arrow, and search circle. It is clearly distinguished from data-returning siblings like `gebieden_rond` by framing itself as a situeringsfiguur for reports and notes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly gives intended use ('Bedoeld als situeringsfiguur in een datarapport of nota'), restricts use to Flanders, and gives concrete conditional recommendations: use .jpg for multi-map reports, disable the embedded legend for small reproductions, and use `per_groep` when the Biologische Waarderingskaart is included. It does not explicitly name exclusions among siblings, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lijstA

Inhoud van één gezaghebbende soortenlijst (Soortenbesluit, HRL-bijlagen, Rode Lijst, Unielijst …).

Args: code: lijstcode uit bronnen (bv. 'soortenbesluit', 'hrl_iv', 'rodelijst_vl', 'unielijst'). zoek: optionele tekstfilter op naam, Nederlandse naam of taxongroep (hoofdletterongevoelig). categorie: optionele filter op categorie (bv. 'cat3', 'EN', 'Amfibieen'). max_resultaten: bovengrens.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes
zoekNo
categorieNo
max_resultatenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
itemsYes
totaalYes
meldingNo
lijst_codeYes
lijst_naamYes
teruggegevenYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the burden of behavioral disclosure. It documents filtering semantics such as case-insensitive text search, category filtering, and a max-results upper bound, which is useful. However, it does not mention error handling, filter combination behavior, or pagination, leaving moderate gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single purpose sentence followed by a compact Args block, with no filler or repetition. It front-loads the main purpose and keeps each parameter explanation short and directly useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple four-parameter retrieval tool with an output schema and no annotations, the description provides enough operational context: required code source, optional filters, and result cap. The main gap is the lack of when-to-use guidance, already penalized under usage guidelines, and the list of valid codes is only illustrative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description fully compensates by documenting all four parameters with concrete meaning and examples. `code` is linked to `bronnen`, `zoek` specifies searchable fields and case-insensitivity, `categorie` gives value examples, and `max_resultaten` is defined as an upper bound.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence clearly states the tool returns the contents of one authoritative species list and names concrete lists (Soortenbesluit, HRL-bijlagen, Rode Lijst, Unielijst). This makes resource and scope clear, but it does not explicitly contrast with sibling tools such as zoek_soort or soort_status, so differentiation is mostly inferred.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells the agent that `code` comes from `bronnen` and gives example codes, but it never states when to prefer this tool over siblings or when not to use it. There is no mention of alternatives for searching species or checking statuses, so selection guidance is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

soorten_in_gebiedA

Welke soorten zijn in een gebied waargenomen, gekoppeld aan hun beschermings- en Rode-Lijststatus.

Typische vraag in m.e.r./passende beoordeling: "welke bijlage IV-soorten en Rode-Lijstsoorten zijn binnen 750 m van dit perceel gemeld sinds 2020?". Compacte regel per soort (namen, aantal, laatste jaar, samenvatting van statussen, exotenvlag, coördinaatonzekerheid, broedindicaties); detail=True geeft ook de volledige lijstvermeldingen. Categorie-toelichtingen staan één keer in legende. Gesorteerd van strikt naar minder strikt beschermd (bijlage IV / cat. 3 > bijlage II, VRL bijlage I, RL RE/CR/EN > cat. 2, VU, Unielijst > …), daarna op aantal. Voor enkel aantallen: telling_in_gebied.

filter: kommagescheiden lijst- of groepscodes (zie bronnen). Groepen: kern (bijlage IV Vl., bijlage II, VRL bijlage I, Rode Lijst RE/CR/EN/VU — wat in een natuurtoets telt), beschermd (Soortenbesluit, HRL II/IV/V, VRL, Bern, Bonn), europees, rodelijst, invasief, prioritair, provinciaal. Leeg = alle soorten (max max_soorten). alleen_bedreigd beperkt Rode-Lijstsoorten tot RE/CR/EN/VU. max_onzekerheid_m sluit vervaagde records uit (aantallen worden dan herteld). alleen_broedindicatie houdt alleen soorten met minstens één record met broed-/voortplantingsaanwijzing.

per_dataset_per_soort=True geeft per soort het veld datasets: uit welke brondatasets haar waarnemingen komen (dataset_key, dataset, aantal, laatste_jaar), aflopend op aantal; de som is gelijk aan aantal_waarnemingen. Dat kost geen extra GBIF-oproepen (de records zijn er al). Bij formaat='tabel' komt er een kolom datasets met de compacte notatie 'wnm.be-gewervelden 5 / eBird 2'. Doorklikken naar de records kan met waarnemingen(..., dataset_key=...).

volledig=False betekent dat records voor sommige soorten niet binnen tijdsbudget_s konden worden opgehaald; zie ontbrekend. Lees waarschuwingen en kanttekening.

Args: adres: adres of plaatsnaam (Digitaal Vlaanderen). straal_m: standaard 500 m. wkt: POLYGON in WGS84 (lon lat), tegenwijzerzin. gemeente: Vlaamse gemeente (elders: arrondissement). filter: bv. 'kern', 'beschermd,rodelijst' (standaard), 'hrl_iv_vl', 'invasief', '' voor alles. per_dataset_per_soort: uitsplitsing van de waarnemingen per brondataset, per soort. formaat: 'json' (objecten in soorten) of 'tabel' (markdown-tabel in tabel, ±4x compacter; aanbevolen bij >50 soorten). max_soorten / offset: paginering; totaal_soorten_met_status zegt hoeveel er in totaal zijn. ook_niet_commercieel: ook datasets onder CC BY-NC (alleen niet-commercieel gebruik) meenemen. Standaard aan: de uitvoer is bedoeld als intern werkdocument. Zet op False wanneer het resultaat gedeeld of gepubliceerd wordt; dan komen alleen datasets onder CC0 en CC BY mee.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lonNo
wktNo
adresNo
detailNo
filterNobeschermd,rodelijst
offsetNo
formaatNojson
gemeenteNo
jaar_totNo
jaar_vanNo
straal_mNo
max_soortenNo
tijdsbudget_sNo
alleen_bedreigdNo
max_onzekerheid_mNo
ook_niet_commercieelNo
alleen_broedindicatieNo
per_dataset_per_soortNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
tabelNoMarkdown-tabel met dezelfde inhoud (formaat='tabel'), ±4x compacter.
filterNo
gebiedYes
offsetNo
legendeNoPer lijstcode: categorie -> toelichting uit de bron (één keer, niet per soort).
periodeNo
soortenNoLeeg bij formaat='tabel'; dan staat alles in `tabel`. Soort-URL = https://www.gbif.org/species/<taxon_key>.
volledigNo
zoek_urlYes
licentiesNoRecords per licentie in het gebied, vóór de filter.
ontbrekendNoWat binnen het tijdsbudget niet kon worden opgehaald.
per_datasetNoDatasets in het gebied (sleutel, naam, aantal records), voor citatie.
kanttekeningYes
lijstversiesNoPer lijstcode het tijdstip waarop de lijst bij het portaal is opgehaald.
licentiefilterNoWelke datalicenties zijn meegenomen; standaard alleen CC0 en CC BY.
waarschuwingenNo
gbif_parametersNoDe GBIF-API-parameters van de facetbevraging (reproduceerbaarheid).
geraadpleegd_opYes
rodelijst_dekkingNoPer Rode-Lijstcode de soortengroepen en publicatiejaren die de lijst dekt.
totaal_waarnemingenYesAlle GBIF-waarnemingen in het gebied en de periode (alle soorten).
aantal_soorten_in_gebiedYesAantal soorten met waarnemingen vóór filtering op lijsten.
totaal_soorten_met_statusYesAantal soorten dat aan de filter voldoet; `soorten` is daarvan de pagina offset..offset+max_soorten.
uitgesloten_niet_commercieelNoRecords onder CC BY-NC die door de filter zijn weggelaten.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden, and it delivers: the strict-to-less-strict protection sorting order, the completeness caveat ('volledig=False' when the time budget is exceeded, see 'ontbrekend'), the performance guarantee that per_dataset_per_soort costs no extra GBIF calls, and the licensing default behavior. It even warns to read 'waarschuwingen' and 'kanttekening', signaling failure modes upfront.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but the length is earned: 19 undocumented parameters and a complex domain leave little room for trimming. It is front-loaded with a concrete example query that makes the tool instantly scannable, and parameter names are code-formatted for navigation. The sorting-order and filter-group sentences are dense enough to require re-reading, which prevents a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the high complexity (19 params, zero annotations, 12 siblings), the description is remarkably complete: use case, output fields, caveats, pagination, licensing, and sibling routing are all covered. Two minor gaps remain: no statement of precedence between the four area selectors (adres/wkt/gemeente/lat/lon) when multiple are supplied, and jaar_van/jaar_tot are only implicitly explained via the 'sinds 2020' example.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate — and it covers nearly all 19 parameters with meaning beyond the schema titles: filter groups with their real-world semantics ('wat in een natuurtoets telt'), wkt orientation, straal_m's default, formaat's tradeoff with a concrete cutoff ('aanbevolen bij >50 soorten'), and behavioral consequences like max_onzekerheid_m triggering a recount. Only lat/lon lack explicit prose, but those are self-evident from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states the exact query and enrichment: which species were observed in an area, linked to their protection and Red List status. It also actively distinguishes itself from siblings — 'Voor enkel aantallen: telling_in_gebied' and 'Doorklikken naar de records kan met waarnemingen(...)' — so an agent can tell them apart without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description opens with the canonical M.E.R./passende beoordeling scenario ('welke bijlage IV-soorten... binnen 750 m van dit perceel sinds 2020?') and gives explicit routing to alternatives: telling_in_gebied for pure counts, waarnemingen for record-level drill-down. It also gives a conditional rule for ook_niet_commercieel: keep the default for internal working documents, set False when the result will be shared or published.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

soort_statusA

Beschermings-, Rode-Lijst- en exotenstatus van één soort in Vlaanderen/België, met bron per vermelding.

Raadpleegt de gezaghebbende lijsten op het Vlaams Biodiversiteitsportaal (Soortenbesluit met categorie 1-3, Habitatrichtlijn bijlagen II/IV/V, Vogelrichtlijn, Bern, Bonn, CITES, Unielijst invasieve soorten, gevalideerde en niet-gevalideerde Vlaamse Rode Lijsten, IUCN, prioritaire en provinciaal belangrijke soorten) én de GBIF-checklists (Rode Lijst Vlaanderen, GRIIS België). samenvatting geeft per lijstcode de categorie; vermeldingen de details en URL's.

Lege vermeldingen = op geen van deze lijsten aangetroffen; dat is geen uitspraak over het werkelijke beschermingsstatuut (bv. alle inheemse vogels genieten basisbescherming via het Soortenbesluit, ook al staan ze niet als aparte regel op de lijst). Zeg dat er dan bij.

Args: soort: Nederlandse of wetenschappelijke naam, of GBIF-taxonKey.

ParametersJSON Schema
NameRequiredDescriptionDefault
soortYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
exootNo
soortYes
meldingNo
kanttekeningNo
samenvattingNoPer lijst_code de categorie, als snelle samenvatting.
vermeldingenYesAlle gevonden lijstvermeldingen. Leeg = op geen enkele geraadpleegde lijst gevonden (≠ onbeschermd; zie melding).
geraadpleegd_opNo
koppeling_twijfelNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full behavioral burden. It discloses the consulted registers, the output fields 'samenvatting' and 'vermeldingen', and the crucial caveat that absence from the lists is not a statement about actual legal protection status. This goes well beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well structured: a lead summary, the authoritative sources, the output contract, and the usage caveat each earn their place. The parameter guidance is clearly separated and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter query tool, the description covers input formats, result semantics, source details, and the empty-result interpretation. An output schema exists)Skip, and the description explains return fields sufficiently for an agent to understand what will happen.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the 'Args' section specifies that 'soort' accepts a Dutch or scientific name, or a GBIF taxonKey. For a single string parameter, this gives the agent exactly the input alternatives it needs to invoke the tool correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Beschermings-, Rode-Lijst- en exotenstatus van één soort in Vlaanderen/België' – a precise, resource-scoped statement. It clearly narrows the operation to a single species and to legal/red-list/invasive statuses, distinguishing it from sibling tools like 'waarnemingen' and 'soorten_in_gebied'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context: use this tool for authoritative protection, Red List, and invasive-species status with per-entry sources. It also adds an interpretation rule for empty 'vermeldingen'. It does not explicitly name alternative sibling tools, so it falls just short of full exclusionary guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

telling_in_gebiedA

Hoeveel beschermde, Rode-Lijst- en invasieve soorten zijn in een gebied gemeld — alleen aantallen, snel.

Zelfde gebiedsparameters als soorten_in_gebied. Geeft per lijstcode en per categorie het aantal soorten, het aantal kernsoorten (bijlage IV Vl., bijlage II, VRL bijlage I, RL RE/CR/EN/VU), het aantal soorten met status dat tegelijk exoot is, en de totalen. Gebruik daarna soorten_in_gebied (bv. met filter='kern') voor de namen.

per_dataset toont de brondatasets met hun aantal records (komt gratis uit dezelfde facetbevraging). Het aantal soorten met status per dataset vergt één extra GBIF-oproep per dataset en staat daarom achter soorten_per_dataset=True (tien parallelle oproepen voor de tien grootste datasets, in de praktijk ±2 s extra); standaard uit, zodat de tool snel blijft.

Args: filter: lijst-/groepscodes (zie bronnen); standaard 'beschermd,rodelijst,invasief'. soorten_per_dataset: vul ook aantal_soorten_met_status per dataset in (trager, zie hierboven). ook_niet_commercieel: ook datasets onder CC BY-NC (alleen niet-commercieel gebruik) meenemen. Standaard aan: de uitvoer is bedoeld als intern werkdocument. Zet op False wanneer het resultaat gedeeld of gepubliceerd wordt; dan komen alleen datasets onder CC0 en CC BY mee.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lonNo
wktNo
adresNo
filterNobeschermd,rodelijst,invasief
gemeenteNo
jaar_totNo
jaar_vanNo
straal_mNo
soorten_per_datasetNo
ook_niet_commercieelNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
kernYesSoorten met kernstatus (bijlage IV Vl., bijlage II, VRL bijlage I, Rode Lijst RE/CR/EN/VU).
exotenYesSoorten met status die tegelijk als uitheems geregistreerd zijn.
gebiedYes
periodeNo
zoek_urlYes
licentiesNoRecords per licentie in het gebied, vóór de filter.
per_lijstYesAantal soorten per lijstcode.
per_datasetNoBrondatasets in het gebied: dataset_key, dataset, aantal_records, en (alleen met soorten_per_dataset=True) aantal_soorten_met_status.
kanttekeningYes
lijstversiesNo
per_categorieYesPer lijstcode: categorie -> aantal soorten.
licentiefilterNoWelke datalicenties zijn meegenomen; standaard alleen CC0 en CC BY.
totaal_soortenYes
waarschuwingenNo
geraadpleegd_opYes
rodelijst_dekkingNo
totaal_waarnemingenYes
totaal_soorten_met_statusYesSoorten met minstens één vermelding op de geraadpleegde lijsten.
uitgesloten_niet_commercieelNoRecords onder CC BY-NC die door de filter zijn weggelaten.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses performance behavior: `soorten_per_dataset=True` triggers ten parallel GBIF calls and adds ~2 seconds, and is off by default to keep the tool fast. It also discloses licensing behavior: `ook_niet_commercieel` defaults to True because output is an internal working document, and must be set to False for sharing/publishing. It also notes that `per_dataset` counts come 'gratis uit dezelfde facetbevraging'. These are meaningful behavioral traits beyond the schema. It doesn't mention error cases or rate limits, but the disclosed behaviors are substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a one-sentence summary, a short paragraph on the relationship to `soorten_in_gebied`, a paragraph on `per_dataset` and `soorten_per_dataset`, and a bulleted Args list. It is longer than the typical description, but every sentence earns its place by explaining behavior or usage. The front-loaded summary is excellent. It loses one point for being somewhat dense and for the Args section partially repeating parameter names that are already in the schema, but the added context justifies most of the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 11 parameters, no annotations, and an output schema. The description covers the tool-specific parameters and the key behavioral trade-offs (speed, licensing). It also tells the agent what to do next (`soorten_in_gebied` for names). It doesn't explain the area parameters, but those are likely shared with `soorten_in_gebied` and are named clearly in the schema. Given the complexity and the lack of annotations, the description is quite complete. A 5 would require explicit coverage of the area parameters or a pointer to where they are documented; a 4 is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains `filter` (list codes, default 'beschermd,rodelijst,invasief'), `soorten_per_dataset` (adds per-dataset counts, slower), and `ook_niet_commercieel` (license filtering, default True, set False for sharing). It also references `per_dataset` as a concept. However, the area parameters (lat, lon, wkt, adres, gemeente, straal_m, jaar_van, jaar_tot) are not explained in the description, though they are likely shared with `soorten_in_gebied` and the schema names are fairly self-explanatory. The description adds real meaning for the three tool-specific parameters, which is the most important part.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear, specific question: 'Hoeveel beschermde, Rode-Lijst- en invasieve soorten zijn in een gebied gemeld — alleen aantallen, snel.' This states the verb (count/report), resource (protected, Red List, invasive species in an area), and the key constraint (counts only, fast). It also explicitly distinguishes itself from the sibling `soorten_in_gebied` by saying it returns counts and that `soorten_in_gebied` should be used for names. This is a strong purpose statement that differentiates it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Gebruik daarna `soorten_in_gebied` (bv. met filter='kern') voor de namen.' This tells the agent when to use this tool versus the sibling. It also explains when to set `ook_niet_commercieel` to False (when sharing/publishing) and when to enable `soorten_per_dataset` (when per-dataset counts are needed, with a cost/benefit note). This is explicit when/when-not guidance with alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

waarnemingenA

Waarnemingen van één soort in een gebied en periode (GBIF, België), met datum, locatie, dataset en URL.

Gebied opgeven op één van vier manieren: adres (+ straal_m, standaard 500 m), lat/lon (+ straal_m), wkt (POLYGON in WGS84, lon lat) of gemeente. Zonder gebied: heel België. totaal is het aantal dat aan de filters voldoet; waarnemingen is een steekproef (max 300). Gebruik per_jaar en per_dataset voor het beeld; zoek_url toont dezelfde zoekopdracht op gbif.org. Met dataset_key worden alleen records van één brondataset getoond: zo klik je door vanuit de uitsplitsing per soort van soorten_in_gebied (veld datasets) naar de onderliggende records. per_verificatiestatus telt het veld identificationVerificationStatus over de teruggegeven records; waarnemingen.be en Florabank vullen dat, eBird, iNaturalist en Pl@ntNet niet ('(leeg)'). Lees kanttekening en neem ze over in het advies.

Args: soort: Nederlandse of wetenschappelijke naam, of GBIF-taxonKey. adres: bv. 'Kortrijksesteenweg 100, Gent'. straal_m: straal in meter rond adres of lat/lon (standaard 500). wkt: bv. 'POLYGON((3.70 51.03,3.75 51.03,3.75 51.07,3.70 51.07,3.70 51.03))'. gemeente: naam van een Belgische gemeente (GADM). jaar_van: eerste jaar (inclusief). jaar_tot: laatste jaar (inclusief). max_resultaten: aantal individuele waarnemingen dat wordt teruggegeven (max 300 per oproep). offset: startpositie voor paginering (bv. 300 voor de tweede pagina). dataset_key: beperk tot één GBIF-brondataset (UUID uit per_dataset of uit het veld datasets). ook_niet_commercieel: ook datasets onder CC BY-NC (alleen niet-commercieel gebruik) meenemen. Standaard aan: de uitvoer is bedoeld als intern werkdocument. Zet op False wanneer het resultaat gedeeld of gepubliceerd wordt; dan komen alleen datasets onder CC0 en CC BY mee.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lonNo
wktNo
adresNo
soortYes
offsetNo
gemeenteNo
jaar_totNo
jaar_vanNo
straal_mNo
dataset_keyNo
max_resultatenNo
ook_niet_commercieelNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
soortNo
gebiedYesOmschrijving van het gebruikte gebied (WKT, gemeente of adres+straal).
offsetNo
totaalYesTotaal aantal waarnemingen dat aan de filters voldoet (kan groter zijn dan wat is teruggegeven).
periodeNo
per_jaarNo
zoek_urlYesDezelfde zoekopdracht op gbif.org, ter controle.
per_datasetNoVerdeling over datasets (naam, sleutel, aantal).
kanttekeningYesVerplichte lezing: beperkingen van de data.
teruggegevenYes
waarnemingenYes
licentiefilterNo
waarschuwingenNo
geraadpleegd_opYes
per_verificatiestatusNoTelling van identificationVerificationStatus over de teruggegeven records; '(leeg)' = veld niet gevuld door de bron.
records_met_broedindicatieNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden and does so well: it reveals that waarnemingen is only a sample capped at 300 while totaal is the true count, explains pagination via offset, and warns that per_verificatiestatus counts only the returned records and that several sources don't fill identificationVerificationStatus ('(leeg)'). It also discloses the licensing default (output is an internal work document) and instructs the agent to read and carry over kanttekening into the advice. Minor gaps remain: no explicit read-only statement, rate limits, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a one-sentence purpose, then proceeds through area modes, output semantics, caveats, and a compact Args reference. It is long, but the length is justified for a 13-parameter tool with zero schema descriptions; the only real redundancy is that area modes are explained both in the prose and again per-parameter in Args.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (13 parameters, no annotations, 0% schema coverage), the description is remarkably complete: it covers filtering, area modes, pagination, sampling limits, data-quality caveats, licensing, and the sibling workflow. Since an output schema exists, the description rightly focuses on behavior and parameters rather than return-value fields; remaining gaps are minor (error conditions, no-result behavior, rate limits).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate, and it does: the Args block documents all 13 parameters with formats, examples, constraints, and defaults (e.g., soort accepts a Dutch/scientific name or GBIF taxonKey; wkt gives a POLYGON in WGS84 lon lat; max_resultaten caps at 300). It also conveys cross-parameter constraints the schema cannot express, such as the four alternative area-specification modes and that dataset_key takes a UUID from per_dataset or the datasets field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb+resource: 'Waarnemingen van één soort in een gebied en periode (GBIF, België)' — observations of one species in an area and period from GBIF Belgium. This immediately distinguishes it from sibling tools like soorten_in_gebied (species list per area) and zoek_soort (name resolution). The description even explains the click-through relationship to soorten_in_gebied's datasets field, further reinforcing the differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the four mutually exclusive area-specification modes (adres, lat/lon, wkt, gemeente) and the whole-Belgium default, telling the agent exactly how to form a query. It explicitly names a sibling workflow (dataset_key clicking through from soorten_in_gebied's datasets field) and gives license-usage guidance (set ook_niet_commercieel to False when sharing/publishing). However, it stops short of explicit 'use X instead of this tool' exclusions for the other siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zoek_soortA

Zoek een soort op wetenschappelijke of Nederlandse naam en geef de GBIF-taxonsleutel(s).

Zoekt eerst in het Vlaams Biodiversiteitsportaal (INBO; kent Nederlandse namen), daarna in de GBIF-backbone en de Belgian Species List. Gebruik de taxon_key uit het resultaat in de andere tools. Meerdere treffers = ambigu (bv. 'kamsalamander' geeft ook 'Italiaanse kamsalamander'); kies bewust.

Args: naam: bv. 'vroedmeesterpad', 'Alytes obstetricans', 'Triturus'. max_resultaten: hoogstens dit aantal kandidaten.

ParametersJSON Schema
NameRequiredDescriptionDefault
naamYes
max_resultatenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Zonder annotaties draagt de beschrijving de volledige last. Het deelt de zoekvolgorde, waarschuwt voor ambiguïteit bij meerdere treffers en geeft aan dat het meerdere kandidaten kan retourneren. Dit is relevante gedragsinformatie die verder gaat dan een simpele definitie. Het mist details zoals foutafhandeling of snelheid, maar voor een lookup-tool is dit voldoende.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

De beschrijving is compact en gestructureerd: eerst het doel, dan het zoekpad en ambiguïteit, dan de parameters. Het is informatief zonder overbodige tekst. De structuur is logisch en de belangrijkste info staat vooraan. Een kleine korting omdat de zin over zoekvolgorde iets uitweidt over de INBO, maar dit is relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Er is een output-schema aanwezig, dus de beschrijving hoeft retourwaarden niet te beschrijven. De parameters worden goed gedocumenteerd en de tool is simpel genoeg (2 parameters). De waarschuwing over ambiguïteit is nuttig. Het is compleet genoeg voor een agent om de tool correct aan te roepen.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

De schema-beschrijvingsdekking is 0%, maar de beschrijving geeft concrete voorbeelden voor 'naam' ('vroedmeesterpad', 'Alytes obstetricans', 'Triturus') en legt 'max_resultaten' uit als 'hoogstens dit aantal kandidaten'. Dit voegt aanzienlijke betekenis toe bovenop het schema en maakt beide parameters duidelijk.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

De beschrijving start met een specifiek werkwoord ('Zoek') en resource ('een soort op wetenschappelijke of Nederlandse naam') en geeft het concrete resultaat ('GBIF-taxonsleutel(s)'). Dit maakt het doel direct duidelijk en onderscheidt het van de sibling-tools die andere functies vervullen (zoals waarnemingen of soorten_in_gebied).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

De beschrijving legt het zoekpad uit (eerst INBO, dan GBIF/BSL) en geeft context dat meerdere treffers ambigu kunnen zijn. Het noemt expliciet dat de taxon_key uit het resultaat in andere tools gebruikt moet worden, wat impliceert dat dit de eerste stap is. Het geeft echter geen expliciete uitsluitingen of alternatieve tools aan, dus een 4 is passend.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv0.9.0
    • First observedbronnen
    • First observeddatarapport_natuur
    • First observeddataset_info
    • First observedexporteer_bevraging
    • First observedgebieden_rond
    • First observedgeocodeer_adres
    • First observedkaart_gebieden
    • First observedlijst
    • First observedsoort_status
    • First observedsoorten_in_gebied
    • First observedtelling_in_gebied
    • First observedwaarnemingen
    • First observedzoek_soort

TDQS

A4.1/5.0

Scored across 13 tools

Disambiguation4/5

Every tool has a distinct role: single-species status, area species lists, occurrence records, counts, mapping, and report generation are clearly separated. The only mild ambiguity is between `telling_in_gebied` and `soorten_in_gebied`, since both use the same area filters and one could be used instead of the other; the descriptions explicitly position one as a fast count-only path and the other as the detailed list.

Naming Consistency3/5

Names are readable and mostly follow a descriptive noun-phrase style (`soorten_in_gebied`, `gebieden_rond`, `datarapport_natuur`), but several tools use imperative verbs (`zoek_soort`, `exporteer_bevraging`, `geocodeer_adres`) and others are bare nouns (`lijst`, `bronnen`, `waarnemingen`). There is no consistent verb_noun convention, though the mixed style is still understandable.

Tool Count5/5

Thirteen tools is well within the ideal range and appropriate for a read-only biodiversity reporting domain. Each tool fills a clear workflow stage: species lookup, status, observations, area summaries, protected-area data, mapping, export, and final PDF report generation.

Completeness5/5

The toolset covers the full query-to-deliverable lifecycle: geocoding, taxon resolution, list/status lookups, occurrence queries, area-based aggregation, protected-area overlays, map generation, data export, and a generated datarapport. For a read-only nature-reporting service, there are no obvious dead ends or missing core operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to query and retrieve biodiversity data from the Global Biodiversity Information Facility (GBIF), including species, occurrences, datasets, and literature.
    111 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables retrieval of Belgian legislation metadata and full text by ELI coordinates from the official gazette (Moniteur Belge), supporting French, Dutch, and German languages.
    3
    46 PyPI
    Apache 2.0