gbif-biodiversity-mcp-server
io.github.cyanheads/gbif-biodiversity-mcp-serverVersion 0.8.1Search GBIF species taxonomy, occurrence records, datasets, and publishers.
Status
Responds562 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 14:48 UTC
- Latency
- 562 ms
- Remotes responding
- 1 of 1
- Sign-in
- No sign-in
- Hosting
- Hosted outside the EU (detected)
- Registry data as of
- Nov 14, 2026, 22:14 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://gbif-biodiversity.caseyjhand.com/mcpResponds562 msNo sign-in
Claude Code
claude mcp add --transport http gbif-biodiversity-mcp-server https://gbif-biodiversity.caseyjhand.com/mcpClaude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: gbif-biodiversity-mcp-server
Remote MCP server URL: https://gbif-biodiversity.caseyjhand.com/mcpCursor
{
"mcpServers": {
"gbif-biodiversity-mcp-server": {
"url": "https://gbif-biodiversity.caseyjhand.com/mcp"
}
}
}VS Code
code --add-mcp '{"name":"gbif-biodiversity-mcp-server","type":"http","url":"https://gbif-biodiversity.caseyjhand.com/mcp"}'Streamable HTTP
npm: @cyanheads/gbif-biodiversity-mcp-server 0.8.1Package only
npm (npx)
claude mcp add gbif-biodiversity-mcp-server -- npx -y @cyanheads/gbif-biodiversity-mcp-server@0.8.1Streamable HTTP
npm: @cyanheads/gbif-biodiversity-mcp-server 0.8.1Package only
npm (npx)
claude mcp add gbif-biodiversity-mcp-server -- npx -y @cyanheads/gbif-biodiversity-mcp-server@0.8.1Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
13 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
gbif_bulk_match_speciesResolve up to 50 scientific names to GBIF backbone taxon keys in one call — the batch counterpart to gbif_match_species for checklist, inventory, and species-list workflows that would otherwise need one round trip per name. Each name is matched independently and results are returned in input order, one entry per processed name. An entry is a name string, or { name, kingdom } to narrow that one name to a kingdom: a name shared across kingdoms, such as Oenanthe (a bird genus and a plant genus), matches nothing until its entry names one, while a kingdom applied to every name would move the others (Parus major under Plantae matches the pear Pyrus major). By default, an oversized batch processes the first 50 and returns the remaining entries, as submitted, in unprocessedNames. A name GBIF matched at a higher rank yields matchType HIGHERRANK with a note naming the taxon matched and what its key covers: that whole taxon, or its accepted taxon when it is a synonym — a misspelled species can fall back to its genus or kingdom at a confidence above 90, and a bare genus name carries the label too, matched as that genus. A name with no match yields matchType NONE (no key) instead of failing the batch, with a note carrying GBIF's explanation when it gives one, such as several equal matches for a name shared across kingdoms; a per-name lookup failure yields matchType ERROR carrying that name's error message and, when the failure was classified, a machine-readable reason — the rest of the batch is unaffected, and the call as a whole still succeeds unless the deployment cannot reach the Catalogue of Life route checklistKey needs (a GBIF_BASE_URL not ending in /v1), which fails the call. When the name GBIF matched is a synonym — the queried name, or the higher taxon a HIGHERRANK match falls back to — taxonKey is the accepted taxon it resolves to, matchedTaxonKey carries the synonym's own key, and acceptedName names the accepted taxon whenever GBIF's answer does. checklistKey 7ddf754f | Not declared | Yes | Yes | Yes |
gbif_count_occurrencesCount occurrences matching a taxon + location filter without fetching records. Use for quick totals ("how many Aves records in Sweden?") or before deciding whether to paginate a full search. Accepts taxonKey (or checklistTaxonKey with checklistKey, for a Catalogue of Life key), country (uppercase ISO 3166-1 alpha-2), publishingCountry, stateProvince, gadmGid, scientificName, spatial ranges and geometry (intersected), month, basisOfRecord, hasCoordinate (alias isGeoreferenced), hasGeospatialIssue, isInCluster, coordinateUncertaintyInMeters, datasetKey, publishingOrg, year, catalogNumber, institutionCode, recordedBy, mediaType, typeStatus, establishmentMeans, license, occurrenceStatus, and iucnRedListCategory. Counts sightings only by default, matching gbif_search_occurrences — GBIF also indexes absence records, and for some taxa they are the overwhelming majority. A count above 100,001 is the signal to partition rather than page: gbif_search_occurrences cannot reach past that offset, so split the query by DATASET_KEY via gbif_occurrence_facets and search each dataset separately. | Not declared | Yes | Yes | Yes |
gbif_get_datasetFetch full dataset metadata by UUID key — title, description, citation text, contacts, license, DOI, record count, numConstituents (sub-datasets), temporal/geographic coverage, and the publishing organization key, which gbif_search_datasets takes as publishingOrg. Use after gbif_search_datasets or when an occurrence record's datasetKey needs provenance detail. Contacts are capped by contactLimit (default 10); contactsTotal and contactsReturned report the full count. | Not declared | Yes | Yes | Yes |
gbif_get_occurrenceFetch a single occurrence record by its GBIF occurrence key. Returns the complete Darwin Core record — all coordinates, elevation and depth, administrative geography (GADM levels 0–3), dates, collections metadata, collector identifiers and record number, type status, establishment means, the accepted taxon behind a synonym, conservation status, license, rights holder, publishing organization, media links with their rights holders, and quality issue flags. Check occurrenceStatus before reading the record as a sighting: NOT_DETECTED (ABSENT or NOT_DETECTED in the occurrenceStatus filter) means a survey looked for the taxon and did not find it. Use the occurrence key from gbif_search_occurrences results. | Not declared | Yes | Yes | Yes |
gbif_get_speciesFetch a single backbone taxon by its GBIF taxon key. Returns full classification, authorship, taxonomic status, vernacular name, descendant count, and publication reference. Use after gbif_match_species when you need the complete record rather than the match summary. When taxonomicStatus is SYNONYM, acceptedKey and accepted fields identify the accepted taxon. The extinct field is absent (not false) on most records — only present on explicitly flagged taxa. | Not declared | Yes | Yes | Yes |
gbif_get_species_childrenList direct children of a backbone taxon — genera within a family, species within a genus, subspecies within a species. Paginated. Use gbif_match_species to get the taxonKey first, then iterate with offset for large groups. | Not declared | Yes | Yes | Yes |
gbif_get_species_classificationReturn the parent chain for a taxon — from kingdom (or domain) down to the immediate parent of the queried taxon — as an ordered array. Each entry has its rank, canonical name, and taxon key. The array is returned root-first (kingdom → phylum → class → … → immediate parent of the queried taxon); the queried taxon itself is not included — call gbif_get_species for its own record. Useful for building taxonomic trees or understanding placement without navigating the backbone level-by-level. | Not declared | Yes | Yes | Yes |
gbif_match_speciesMatch a scientific name against the GBIF backbone taxonomy. Returns the best-matching taxon with full classification and a confidence score (0–100). This is the mandatory first step for any GBIF workflow — it returns the backbone taxonKey required by gbif_search_occurrences, gbif_count_occurrences, and gbif_occurrence_facets. When the name GBIF matched is a synonym — the queried name, or the higher taxon a HIGHERRANK match falls back to — taxonKey is the accepted taxon it resolves to and matchedTaxonKey carries the synonym's own key; occurrence counts differ sharply between the two, so pass taxonKey. acceptedName names that accepted taxon whenever GBIF's answer does. matchType HIGHERRANK is GBIF's label for a match made at a higher rank: a misspelled or unknown species falls back to its genus or even its kingdom, at a confidence that can exceed 90, and a bare genus name carries the label too, matched as that genus. taxonKey then covers that whole taxon, or its accepted taxon when it is a synonym, and a notice names it. Below confidence 80, the match should be reviewed. matchType NONE means no usable match was found — try removing the strict flag or broadening the name; when GBIF reports several equal matches, as for a genus name shared by an animal and a plant, set kingdom to pick one. GBIF no longer updates the backbone, so a name described or revised since its last build falls back to a higher taxon there; checklistKey 7ddf754f-d193-4cc9-b351-99906754a03b matches against the Catalogue of Life eXtended Release instead, GBIF's current taxonomy, and returns its keys as strings in checklistTaxonKey and checklistMatchedTaxonKey with no taxonKey or rank keys — they are not backbone keys, and no tool that takes a numeric taxonKey can use them, but gbif_search_occurrences, gbif_count_occurrences, and gbif_occurrence_facets take checklistTaxonKey under that name, with checklistKey 7ddf754f-d193-4cc9-b351-99906754a03b. | Not declared | Yes | Yes | Yes |
gbif_occurrence_facetsAggregate occurrence counts across a dimension (COUNTRY, STATE_PROVINCE, YEAR, BASIS_OF_RECORD, DATASET_KEY, KINGDOM_KEY, etc.). Returns one page of facet values ranked by count descending — the top facetLimit at facetOffset 0, a later slice of the same ranking past that. No record payloads returned. Core tool for distribution analysis and trend queries: "which countries have the most records for this species?", "how has observation volume changed since 2010?". Key and GADM dimensions (KINGDOM_KEY through SPECIES_KEY, DATASET_KEY, PUBLISHING_ORG, GADM_LEVEL_0_GID through GADM_LEVEL_3_GID) return bare keys; includeLabels names the taxon, dataset, publishing organization, or administrative area behind each one on the page. Scope the aggregation with taxonKey (or checklistTaxonKey with checklistKey, for a Catalogue of Life key), country (uppercase ISO 3166-1 alpha-2), publishingCountry, stateProvince, gadmGid, year, scientificName, latitude/longitude ranges, month, hasCoordinate, hasGeospatialIssue, isInCluster, coordinateUncertaintyInMeters, geometry (all spatial filters intersect), basisOfRecord, datasetKey, publishingOrg, catalogNumber, institutionCode, recordedBy, mediaType, typeStatus, establishmentMeans, license, occurrenceStatus, or iucnRedListCategory filters. Also the way to split a result set too large for gbif_search_occurrences to page (offset+limit caps at 100,001): facet by DATASET_KEY, then search each datasetKey on its own. Aggregates sightings only by default, matching gbif_search_occurrences and gbif_count_occurrences; to measure the presence/absence split itself, pass facet OCCURRENCE_STATUS with occurrenceStatus ANY. | Not declared | Yes | Yes | Yes |
gbif_search_datasetsSearch GBIF datasets by keyword, type, publishing country (uppercase ISO 3166-1 alpha-2), publishing organization, or hosting organization. The two organization filters answer different questions — publishingOrg matches the organization whose data it is, hostingOrg the organization whose installation serves it — and an organization key from gbif_search_publishers usually wants publishingOrg. Returns dataset title, description, license, record count, DOI, and the publishing organization's key and name; the key goes back in as publishingOrg. Use to find the source dataset behind a set of records, or to explore what data collections are available for a taxon, country, or organization. | Not declared | Yes | Yes | Yes |
gbif_search_occurrencesSearch GBIF occurrence records with Darwin Core filters. Use taxonKey from gbif_match_species for reliable results — a key names exactly one taxon, where a scientificName shared across kingdoms matches nothing; a Catalogue of Life key goes in checklistTaxonKey with checklistKey 7ddf754f-d193-4cc9-b351-99906754a03b. Accepts country (uppercase ISO 3166-1 alpha-2, where the record was observed), publishingCountry (the publishing organization's country — a different question), stateProvince, gadmGid (a GADM administrative-area code GBIF derives from coordinates), bounding box (decimalLatitude/decimalLongitude ranges), WKT polygon geometry, year range, month, basis of record, coordinate filter, hasGeospatialIssue, dataset key, publishingOrg (the publishing organization), catalogNumber, institutionCode, recordedBy (collector), mediaType, typeStatus, establishmentMeans, and license. Rows carry no media unless includeMedia is set. Returns sightings only by default — GBIF also indexes absence records (surveys that looked and found nothing), and occurrenceStatus controls whether they are included. Pagination is capped at offset+limit=100,001 and GBIF offers no cursor or scroll, so a larger result set is covered only by partitioning it — facet it by DATASET_KEY with gbif_occurrence_facets and search each datasetKey separately. BASIS_OF_RECORD and PUBLISHING_COUNTRY are gap-free second cuts for a dataset bucket still over the cap; YEAR, MONTH, STATE_PROVINCE, and SPECIES_KEY lose records lacking that dimension. Repeat every biological filter on the facet call and each partition search, including the same occurrenceStatus, and compare sub-split sums against the bucket total. Bulk retrieval is outside this server: use the asynchronous GBIF Download API with a GBIF.org account or the monthly GBIF Parquet snapshot on AWS Open Data. | Not declared | Yes | Yes | Yes |
gbif_search_publishersSearch organizations registered with GBIF by name fragment or country. Returns organization key, title, and country — sufficient to chain into gbif_search_datasets as publishingOrg for the datasets an organization published, or as hostingOrg for the ones its own installation serves, or to understand who publishes data for a region. publishingOrg is the usual chain: most organizations publish through an installation someone else runs, so hostingOrg matches nothing for them. | Not declared | Yes | Yes | Yes |
gbif_search_speciesSearch or browse the GBIF backbone taxonomy by default, or an explicit checklist datasetKey. Accepts scientific name fragments, rank filters, and higher-taxon constraints. Useful for exploring what species exist under a higher taxon (e.g., "list all families of Coleoptera"), for simple name-fragment searches, or when gbif_match_species returns too narrow a result. kingdom, family, and genus scope the browse to a higher taxon: each is resolved to its backbone key before the search runs, so the narrowest one supplied is what scopes, an alternative name resolves to the taxon it is a synonym of, and a name that matches no backbone taxon at that rank fails rather than returning the whole index. Names are capitalized as GBIF writes them ("Paridae", not "paridae") and are matched exactly, not fuzzily. Paginated — use limit and offset to walk through results, up to an offset + limit of 100,000. | Not declared | Yes | Yes | Yes |
Details
- Registry status
- Active
- Published
- Nov 12, 2026
- Updated
- Nov 12, 2026
- Website
- Not given
- Categories (suggested)
- Data and analyticsSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
- GDPR
- Not declared