Skip to main content
Glama

gbif-biodiversity-mcp-server

Server Details

Search GBIF species taxonomy, occurrence records, datasets, and publishers.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
cyanheads/gbif-biodiversity-mcp-server
GitHub Stars
1
Server Listing
GBIF Biodiversity MCP Server

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.6/5 across 13 of 13 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool targets a distinct action or resource: species matching (single/bulk), species search/get/children/classification, occurrence search/count/get/facets, and dataset/publisher search/get. The batch vs single matching tools are clearly differentiated, and the occurrence-related tools (search, count, facets) have distinct purposes. No two tools appear to do the same thing.

Naming Consistency4/5

Most tools follow the gbif_verb_noun pattern (e.g., gbif_search_occurrences, gbif_get_species). The exception is gbif_occurrence_facets, which uses a noun_noun structure instead of a verb, and gbif_bulk_match_species includes a modifier before the verb. Otherwise, naming is predictable and consistent.

Tool Count5/5

13 tools is well within the ideal 3-15 range and maps directly to the core GBIF API operations: taxonomy resolution, occurrence querying, and dataset/publisher discovery. Each tool covers a needed operation without excess or redundancy.

Completeness4/5

The set covers the full read/search lifecycle for species, occurrences, and datasets: match, search, get, children, classification, count, and facets. Minor gaps include no get_publisher by key and no bulk occurrence download (though the description notes that external APIs handle this). Overall, the surface is comprehensive for the stated GBIF biodiversity data access purpose.

Available Tools

13 tools
gbif_bulk_match_speciesBulk Match Species NamesA
Read-onlyIdempotent
Inspect

Resolve 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 name. A name with no backbone match yields matchType NONE (no taxonKey) instead of failing the batch; 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. When a queried name is a synonym, taxonKey is the accepted taxon it resolves to and matchedTaxonKey carries the synonym's own key. Common names are not supported — use gbif_search_species for vernacular searches. Below confidence 80, review the match.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesYesScientific names to match against the GBIF backbone. 1–50 per call, matched in parallel.
strictNoWhen true, require an exact match for every name (no fuzzy matching). When false (default), GBIF applies fuzzy matching to tolerate minor misspellings.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesOne result per input name, in input order.
Behavior5/5

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

Even with annotations declaring readOnlyHint, openWorldHint, and idempotentHint, the description goes far beyond them by explaining per-name independence, input-order preservation, matchType NONE/ERROR semantics, batch-wide success despite individual failures, and synonym handling. This rich behavioral detail is not present in the annotations.

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 concise but information-dense, with every sentence serving a distinct purpose: main action, batch context, failure/synonym behavior, exclusion, and confidence note. It is front-loaded with the primary action and contains zero wasted words.

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?

The description fully covers the tool's edge cases: no-match (NONE), per-name errors (ERROR), batch success despite failures, synonym resolution, and input ordering. It also mentions the confidence threshold. With an output schema present, no return-value explanation is needed, making this description complete for a tool of this complexity.

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

Parameters3/5

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

Schema coverage is 100%, and both parameters (names, strict) already have descriptions in the schema. The description adds the constraint that common names are not supported, which slightly clarifies the 'names' parameter, but it does not materially extend parameter semantics beyond the schema. Baseline 3 is appropriate.

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 'Resolve' and resource 'scientific names to GBIF backbone taxon keys', immediately clarifying the tool's function. It further distinguishes itself from the sibling gbif_match_species by explicitly labeling it as the 'batch counterpart', making the purpose unmistakable.

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 states exactly when to use the tool ('for checklist, inventory, and species-list workflows that would otherwise need one round trip per name'). It also provides a clear exclusion and alternative: 'Common names are not supported — use gbif_search_species for vernacular searches.' The confidence threshold adds further practical guidance.

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

gbif_count_occurrencesCount OccurrencesA
Read-onlyIdempotent
Inspect

Count 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, country (uppercase ISO 3166-1 alpha-2), publishingCountry, stateProvince, isGeoreferenced, datasetKey, year, 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoYear or year range (e.g., "2024" or "2020,2024"). Both endpoints inclusive. Omit the field to count across every year — a blank or whitespace-only value is rejected rather than dropped, because GBIF answers one with the unfiltered total.
countryNoISO 3166-1 alpha-2 code, uppercase, of where the occurrence was recorded (e.g., "GB", "US"). Not the publisher's country — that is publishingCountry, and the two disagree on most records. Lowercase and alpha-3 forms ("gb", "USA") match nothing upstream, which is why only the uppercase two-letter form is accepted here. Take a value from a COUNTRY facet on gbif_occurrence_facets; an uppercase pair GBIF does not know ("XX") is rejected upstream by name.
taxonKeyNoGBIF backbone taxon key from gbif_match_species. Matches the given taxon and all descendant taxa (subspecies, varieties, etc.).
datasetKeyNoFilter to a specific dataset UUID (8-4-4-4-12 hex) from gbif_search_datasets. Omit the field to count across every dataset — an empty string is rejected rather than read as no filter, because GBIF answers a blank datasetKey with the unfiltered total. The result is not the recordCount the dataset tools and the gbif://dataset/{datasetKey} resource report for the same key: that figure spans every occurrenceStatus, while this count applies occurrenceStatus below, PRESENT by default.
stateProvinceNoState, province, or first-level administrative division, matched as a verbatim string — exact and case-sensitive. GBIF stores what each dataset recorded without normalizing it, so there is no vocabulary to guess from: "England", "England - Greater London", and "Greater London" are three distinct values, and "england" is none of them. Take one from a STATE_PROVINCE facet on gbif_occurrence_facets scoped the same way and pass it back unchanged — an unmatched value counts zero rather than erroring. Omit the field to count across every state or province — a blank or whitespace-only value is rejected rather than dropped, because GBIF answers one with the unfiltered total.
isGeoreferencedNoWhen true, count only georeferenced records. When false, count only non-georeferenced records.
occurrenceStatusNoPresence/absence filter. Defaults to PRESENT: an ABSENT record documents a survey that looked for the taxon and did not find it, so counting one inflates the total with the opposite of a sighting. Use ANY for both (GBIF's own default), or ABSENT for non-observations alone. Matches the gbif_search_occurrences default, so the two tools agree.PRESENT
publishingCountryNoISO 3166-1 alpha-2 code, uppercase, of the organization that published the record — not where the occurrence was observed, which is country. The two differ constantly: of 60,290,950 records observed in GB, 1,548,928 were published by US organizations. Take a value from a PUBLISHING_COUNTRY facet on gbif_occurrence_facets. Lowercase and alpha-3 forms ("us", "USA") match nothing upstream, which is why only the uppercase two-letter form is accepted here.
iucnRedListCategoryNoCount only records whose taxon carries this IUCN Red List category: CR Critically Endangered, EN Endangered, VU Vulnerable, NT Near Threatened, LC Least Concern, DD Data Deficient, EX Extinct, EW Extinct in the Wild, CD Conservation Dependent. Records with no category are excluded when this is set.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesTotal occurrences matching the supplied filters.
noticeNoGuidance when the count is zero under a verbatim stateProvince filter, larger than gbif_search_occurrences can page to, or narrowed by a presence/absence filter. Absent when none applies.
occurrenceStatusYesThe presence/absence filter applied upstream — PRESENT, ABSENT, or ANY when no filter was sent. Says what the count covers.
Behavior5/5

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

Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint), the description discloses important behaviors: default occurrenceStatus is PRESENT, GBIF indexes absence records which can dominate some taxa, blank or whitespace-only values are rejected for year/country/stateProvince/datasetKey, and the count may differ from dataset recordCount. These details are crucial for accurate interpretation and go far beyond the structured metadata.

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 dense but every sentence earns its place. It starts with the core purpose, then explains usage context, lists parameters, and covers edge cases. No redundant or filler sentences; the length is justified by the tool's complexity and the need to communicate critical caveats.

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 has 9 optional parameters and an output schema, the description covers all essential aspects: purpose, use cases, alternative tools, parameter semantics, and behavioral quirks. The output schema handles return value details, so the description does not need to repeat them. It is fully complete for an agent to select and invoke this 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?

Even though schema coverage is 100%, the description adds substantial meaning. For example, it explains the difference between country and publishingCountry with a concrete statistic, warns that lowercase/alpha-3 forms match nothing, details exact case-sensitive matching for stateProvince, and clarifies the behavior of blank values vs. omission. Each parameter's pitfalls and correct usage are articulated well beyond the schema definitions.

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: 'Count occurrences matching a taxon + location filter without fetching records.' This clearly distinguishes it from gbif_search_occurrences, which fetches records, and from other sibling tools. The scope is explicit and the tool's purpose is unmistakable.

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 states when to use this tool: 'Use for quick totals' and 'or before deciding whether to paginate a full search.' It also names the alternative tool gbif_search_occurrences and explains the limitation at offset 100,001, directing the user to gbif_occurrence_facets for partitioned searches. This is clear when-to-use and when-not-to-use guidance.

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

gbif_get_datasetGet DatasetA
Read-onlyIdempotent
Inspect

Fetch full dataset metadata by UUID key — title, description, citation text, contacts, license, DOI, record count, numConstituents (sub-datasets), and temporal/geographic coverage. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
datasetKeyYesDataset UUID (8-4-4-4-12 hex) from gbif_search_datasets or an occurrence record.
contactLimitNoMaximum number of contacts to include (default 10, max 100). Set to 0 to omit contact detail while still reporting contactsTotal — useful when citation, license, and record count are all you need from a high-contact dataset like eBird.

Output Schema

ParametersJSON Schema
NameRequiredDescription
doiNoDOI for citation. May be absent.
keyNoDataset UUID.
typeNoDataset type (OCCURRENCE, CHECKLIST, etc.).
titleNoDataset title.
licenseNoLicense identifier. May be absent.
contactsNoDataset contacts, capped at contactLimit. Absent when the dataset has no contacts or contactLimit is 0.
descriptionNoFull dataset description. May be absent.
recordCountNoOccurrence records GBIF has indexed for this dataset, matching the figure gbif_search_datasets reports. Spans every occurrenceStatus: absence records — surveys that looked for a taxon and did not find it — are counted alongside sightings, and on some datasets they are the overwhelming majority. gbif_count_occurrences with this datasetKey answers the other question, defaulting to occurrenceStatus PRESENT, so the two figures are expected to differ rather than one being wrong. Fetched separately because the detail endpoint omits it; absent when that lookup does not return in time.
citationTextNoFull citation text for academic reference. May be absent.
contactsTotalNoTotal contacts on the dataset before applying contactLimit. Present when the dataset has any contacts.
numConstituentsNoNumber of constituent sub-datasets. May be absent.
contactsReturnedNoNumber of contacts included in this response (≤ contactLimit). Present when the dataset has any contacts.
publishingCountryNoCountry code of the publishing organization.
temporalCoveragesNoTemporal coverage ranges declared by the dataset. May be absent.
geographicCoveragesNoGeographic coverage descriptions declared by the dataset. May be absent.
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral details beyond annotations, such as the contactLimit cap, contactsTotal/contactsReturned counts, and the ability to set contactLimit to 0 to omit contact detail while still reporting totals. This provides transparency about output limits without contradicting annotations.

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 three sentences, each earning its place: the first states what the tool returns, the second provides usage context, and the third explains contact behavior. It is front-loaded and free of fluff.

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 moderate complexity, complete parameter schema, and presence of an output schema, the description covers purpose, usage, and key behavior (contact capping) sufficiently. It does not need to explain return values since the output schema exists, and the annotations cover safety aspects.

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 100% with both parameters documented, but the description adds valuable context: datasetKey is sourced from search or occurrence records, and contactLimit's use case (e.g., high-contact datasets like eBird) is explained in the description, enriching the schema's baseline.

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 fetches full dataset metadata by UUID key, listing the specific fields returned (title, description, citation, contacts, license, etc.). It differentiates from siblings by explicitly noting when to use it (after gbif_search_datasets or when an occurrence record's datasetKey needs provenance detail).

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 gives explicit usage context: 'Use after gbif_search_datasets or when an occurrence record's datasetKey needs provenance detail.' It does not enumerate exclusions or alternatives, but the context is clear and sufficient for a get-by-ID tool.

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

gbif_get_occurrenceGet Occurrence RecordA
Read-onlyIdempotent
Inspect

Fetch a single occurrence record by its GBIF occurrence key. Returns the complete Darwin Core record — all coordinates, administrative geography (GADM levels 0–3), dates, collections metadata, collector identifiers, conservation status, media links, and quality issue flags. Check occurrenceStatus before reading the record as a sighting: ABSENT means a survey looked for the taxon and did not find it. Use the occurrence key from gbif_search_occurrences results.

ParametersJSON Schema
NameRequiredDescriptionDefault
occurrenceKeyYesGBIF occurrence key from gbif_search_occurrences results.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dayNoObservation day. May be absent.
keyNoGBIF occurrence key.
sexNoSex of the individual(s). May be absent.
gadmNoGADM administrative geography — stable GIDs and names at levels 0–3. May be absent.
yearNoObservation year. May be absent.
classNoClass classification. May be absent.
genusNoGenus classification.
mediaNoAssociated media (images, audio, video). May be absent.
monthNoObservation month (1–12). May be absent.
orderNoOrder classification.
familyNoFamily classification.
issuesNoGBIF data quality issue flags.
phylumNoPhylum classification.
countryNoCountry name. May be absent.
kingdomNoKingdom classification.
speciesNoSpecies canonical name.
classKeyNoBackbone taxon key for the class. May be absent.
localityNoLocality description. May be absent.
taxonKeyNoBackbone taxon key.
continentNoContinent name. May be absent.
eventDateNoObservation date as ISO 8601 string. May be absent.
eventTimeNoTime of day of the observation, with seconds and UTC offset (e.g. 20:15:00+01:00) — the offset eventDate omits when it carries a local time. May be absent.
lifeStageNoLife stage of the individual(s). May be absent.
taxonRankNoTaxonomic rank of the identified taxon.
datasetKeyNoUUID of the source dataset.
recordedByNoCollector name(s). May be absent.
countryCodeNoISO 3166-1 alpha-2 country code. May be absent.
identifiersNoAlternative record identifiers from the source. May be absent.
identifiedByNoIdentifier name(s). May be absent.
occurrenceIDNoDarwin Core occurrenceID — the source record identifier, often a URL back to the origin record. May be absent.
basisOfRecordNoHow the occurrence was recorded.
canonicalNameNoCanonical name without authorship.
catalogNumberNoCatalog number within the collection. May be absent.
stateProvinceNoState or province. May be absent.
collectionCodeNoCollection code within the institution. May be absent.
scientificNameNoScientific name from occurrence record.
decimalLatitudeNoLatitude in decimal degrees (WGS84). May be absent.
individualCountNoNumber of individuals. May be absent.
institutionCodeNoCode of the contributing institution. May be absent.
taxonomicStatusNoStatus of the identification carried on this record — ACCEPTED, PROVISIONALLY_ACCEPTED, SYNONYM, DOUBTFUL, and so on. Says whether the occurrence was filed under an accepted name or a synonym. May be absent.
decimalLongitudeNoLongitude in decimal degrees (WGS84). May be absent.
occurrenceStatusNoPRESENT when the record asserts the taxon was there, ABSENT when it documents a survey that looked and did not find it. An ABSENT record is not a sighting — it carries coordinates, a date, and a recorder all the same. May be absent.
publishingCountryNoCountry code of the publishing organization.
iucnRedListCategoryNoIUCN Red List category of the taxon — CR Critically Endangered, EN Endangered, VU Vulnerable, NT Near Threatened, LC Least Concern, DD Data Deficient, EX Extinct, EW Extinct in the Wild, CD Conservation Dependent. May be absent.
coordinateUncertaintyInMetersNoCoordinate uncertainty radius in meters. May be absent.
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is known. The description adds behavioral context by enumerating the full returned payload and explaining that ABSENT means the taxon was not found, which goes beyond the annotations without contradicting them.

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 structured in three sentences: a clear first sentence stating purpose, a detailed enumeration of return contents, and a vital caution about ABSENT plus key sourcing. Every sentence earns its place, though the field list makes it slightly longer than strictly minimal.

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 tool with an output schema and strong annotations, the description provides comprehensive context: it specifies the complete return payload, highlights an important interpretation pitfall, and tells the agent where to obtain the key. This is more than sufficient for correct invocation.

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

Parameters3/5

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

The schema fully documents the single parameter and its description ('GBIF occurrence key from gbif_search_occurrences results') matches the tool description. The tool description adds no new parameter semantics beyond reinforcing the key source, so a baseline of 3 is appropriate.

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 action ('Fetch') and resource ('single occurrence record by its GBIF occurrence key'), and distinguishes it from sibling tools by emphasizing 'single record' and referencing gbif_search_occurrences for the key.

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 instructs to use the occurrence key from gbif_search_occurrences results, establishing a clear prerequisite. It also warns about ABSENT occurrenceStatus, which is a valuable interpretation guideline. It does not explicitly name alternatives, but the usage context is clear.

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

gbif_get_speciesGet Species RecordA
Read-onlyIdempotent
Inspect

Fetch 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
taxonKeyYesGBIF backbone taxon key from gbif_match_species or another taxonomy tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
keyNoGBIF backbone taxon key.
rankNoTaxonomic rank (SPECIES, GENUS, FAMILY, etc.).
classNoClass classification.
genusNoGenus classification.
orderNoOrder classification.
familyNoFamily classification.
parentNoName of the immediate parent taxon.
phylumNoPhylum classification.
extinctNoTrue when the taxon is explicitly flagged as extinct. Absent on most records.
kingdomNoKingdom classification.
speciesNoSpecies canonical name.
acceptedNoScientific name of the accepted taxon when this record is a synonym.
classKeyNoTaxon key for the class.
genusKeyNoTaxon key for the genus.
orderKeyNoTaxon key for the order.
familyKeyNoTaxon key for the family.
parentKeyNoTaxon key of the immediate parent.
phylumKeyNoTaxon key for the phylum.
authorshipNoTaxonomic authorship of the name.
kingdomKeyNoTaxon key for the kingdom.
speciesKeyNoTaxon key for the species.
acceptedKeyNoBackbone key of the accepted taxon when this record is a synonym.
publishedInNoOriginal description citation when available.
canonicalNameNoScientific name without authorship.
numDescendantsNoCount of child taxa in the backbone under this taxon.
numOccurrencesNoOccurrence record count in GBIF.
scientificNameNoFull scientific name with authorship.
vernacularNameNoEnglish common name when available.
taxonomicStatusNoACCEPTED, SYNONYM, DOUBTFUL, etc. SYNONYM means acceptedKey/accepted are populated.
Behavior5/5

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

Annotations already provide readOnlyHint, openWorldHint, and idempotentHint. The description adds meaningful context beyond these: specific return fields, synonym handling (acceptedKey/accepted), and the extinct field's optional presence, which are important behavioral traits for an agent to know.

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?

Four sentences, each earning its place: function, return content, usage recommendation, and edge-case behavior. No redundancy or fluff, and critical information is front-loaded in the first sentence.

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 a single parameter, an output schema, and strong annotations, the description covers all necessary aspects: what it returns, when to use it, and special cases (synonyms, extinct field). It is complete enough for an agent to invoke correctly without further clarification.

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

Parameters3/5

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

Schema coverage is 100% and the schema description already explains taxonKey as 'GBIF backbone taxon key from gbif_match_species or another taxonomy tool.' The tool description adds no new parameter detail beyond what the schema provides, so the baseline of 3 is appropriate.

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 fetches a single backbone taxon by GBIF taxon key, which is a specific verb+resource+scope. It distinguishes from siblings like gbif_get_species_children and gbif_match_species by explicitly mentioning the complete record vs match summary.

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?

Explicitly directs users to use this after gbif_match_species when the complete record is needed, providing a clear when-to-use vs alternative. It also gives guidance on interpreting taxonomicStatus and the extinct field, which helps correct usage.

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

gbif_get_species_childrenGet Species ChildrenA
Read-onlyIdempotent
Inspect

List 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of children to return (default 20, max 1000).
offsetNoPagination offset.
taxonKeyYesGBIF backbone taxon key from gbif_match_species or another taxonomy tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoLimit applied when the result was truncated. Re-call with offset to page on.
limitYesRecords returned in this page.
shownNoChildren returned in this page when the result was truncated.
noticeNoAgent guidance — a no-children note for a valid taxon, or a pagination note when the page was capped. Absent on a complete single page.
offsetYesCurrent pagination offset.
childrenYesDirect child taxa.
truncatedNoTrue when more children exist beyond this page. Absent on the final page.
endOfRecordsYesTrue when there are no more results after this page.
Behavior4/5

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

Annotations already cover read-only, open-world, and idempotent behavior. The description adds valuable behavioral details: results are paginated, children are direct (not all descendants), and the workflow depends on a prior matching step. No contradictions with annotations.

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 three sentences with no redundancy. The first sentence states the purpose, the second notes pagination, and the third gives a workflow tip. Every sentence earns its place and is easy to scan.

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, return value details are unnecessary. The description covers what the tool does, how to obtain the required taxonKey, and how to handle pagination. It does not discuss error cases, but for a simple listing tool this is acceptable and annotations compensate for safety-related gaps.

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

Parameters3/5

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

The input schema covers all three parameters with clear descriptions (100% coverage), so the description does not need to repeat them. It adds a small amount of context by mentioning the offset iteration, but the schema already documents the pagination parameters adequately. Baseline 3 is appropriate.

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 uses a specific verb ('List') with a clear resource ('direct children of a backbone taxon') and provides concrete examples of children ranks (genera, species, subspecies). This fully distinguishes it from sibling tools like gbif_get_species_classification (which lists ancestors) and gbif_match_species (which matches names).

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 gives clear contextual guidance: it identifies the prerequisite of obtaining a taxonKey via gbif_match_species and explains pagination with offset. It does not explicitly name alternatives to avoid, but the usage context is unambiguous and actionable.

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

gbif_get_species_classificationGet Species ClassificationA
Read-onlyIdempotent
Inspect

Return 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
taxonKeyYesGBIF backbone taxon key from gbif_match_species or another taxonomy tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noticeNoGuidance when the chain is empty because the taxon sits at the root of the backbone. Absent when the chain has entries.
classificationYesClassification chain ordered from root (kingdom) to the immediate parent of the queried taxon. The queried taxon itself is not included — call gbif_get_species for its own record.
Behavior5/5

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

Beyond the annotations (read-only, idempotent), the description discloses the root-first ordering, the exclusion of the queried taxon, and the per-entry fields (rank, canonical name, taxon key). This is valuable behavioral detail for an AI 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?

Two well-organized sentences convey purpose, specifics, and a use case with no wasted words.

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 a single parameter, complete schema coverage, and an output schema, the description effectively captures the ordering, exclusion, and content of the response, making the tool fully understandable.

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 schema fully describes taxonKey with 100% coverage, referencing gbif_match_species. The description adds the behavioral nuance that this key identifies the queried taxon whose own record is excluded, slightly enriching parameter understanding.

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 returns the parent chain for a taxon from kingdom/domain down to the immediate parent, as an ordered array. It distinguishes itself from sibling tools by explicitly noting the queried taxon is excluded and directing users to gbif_get_species for that record.

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?

It provides explicit usage context ('building taxonomic trees or understanding placement') and names gbif_get_species as the alternative when the queried taxon's own record is needed. This tells the agent when to choose this tool over related siblings.

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

gbif_match_speciesMatch Species NameA
Read-onlyIdempotent
Inspect

Match 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 queried name is a synonym, 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. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesScientific name to match. Examples: "Parus major", "Agaricus bisporus", "Homo sapiens". Fuzzy matching handles minor spelling variations. Common names are not supported — use gbif_search_species for vernacular name searches.
rankNoExpected taxonomic rank. Use to avoid matching a genus when you expect a species.
strictNoWhen true, only return an exact match. When false (default), GBIF applies fuzzy matching — useful for minor spelling variations and abbreviated names.
kingdomNoNarrow the match to a specific kingdom (e.g., "Animalia", "Plantae", "Fungi") to disambiguate names that appear in multiple kingdoms. Omit the field to match against the whole backbone — a blank or whitespace-only value is rejected rather than dropped, because GBIF answers one with the undisambiguated match, which is indistinguishable from a match that honored the kingdom.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rankNoTaxonomic rank of the matched taxon.
classNoClass of the matched taxon.
genusNoGenus of the matched taxon.
orderNoOrder of the matched taxon.
familyNoFamily of the matched taxon.
noticeNoGuidance when the queried name was a synonym and taxonKey was resolved to the accepted taxon. Absent when the matched name is already the accepted one.
phylumNoPhylum of the matched taxon.
statusNoTaxonomic status: ACCEPTED, SYNONYM, or DOUBTFUL.
kingdomNoKingdom of the matched taxon.
speciesNoSpecies canonical name of the matched taxon.
classKeyNoBackbone taxon key for the class.
genusKeyNoBackbone taxon key for the genus.
orderKeyNoBackbone taxon key for the order.
taxonKeyNoGBIF backbone taxon key to pass to downstream tools. The accepted taxon's key when the queried name is a synonym, otherwise the matched taxon's own key.
familyKeyNoBackbone taxon key for the family.
matchTypeNoEXACT, FUZZY, HIGHERRANK, or NONE. NONE means no usable match.
phylumKeyNoBackbone taxon key for the phylum.
confidenceNoMatch confidence score 0–100. Below 80 warrants review.
kingdomKeyNoBackbone taxon key for the kingdom.
speciesKeyNoBackbone taxon key for the species.
canonicalNameNoScientific name without authorship.
scientificNameNoFull scientific name with authorship.
matchedTaxonKeyNoBackbone key of the name that actually matched. Present only when it differs from taxonKey — that is, when a synonym was resolved to its accepted taxon.
Behavior5/5

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

Beyond the readOnly/idempotent/openWorld annotations, the description discloses key behaviors: synonym resolution (taxonKey vs matchedTaxonKey), the significance of confidence scores ('Below confidence 80, the match should be reviewed'), and the meaning of matchType NONE. This provides actionable context for interpreting results without contradicting annotations.

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 information-dense yet well-structured: it opens with the primary purpose, then covers return value, mandatory usage, synonym edge case, confidence threshold, and failure handling. Every sentence contributes meaningful guidance with no redundancy or filler.

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 an output schema present and rich annotations, the description still adds essential context: the role in the workflow, synonym key semantics, confidence interpretation, and fallback strategies. It covers both normal use and edge cases, making the tool's behavior fully understandable for an agent.

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

Parameters3/5

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

Schema description coverage is 100%, and the input schema already provides thorough descriptions for all four parameters. The tool description itself does not add parameter-specific semantics beyond what the schema offers, so the baseline of 3 is appropriate. The only param-related guidance ('pass taxonKey') concerns output fields, not input parameters.

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's function: 'Match a scientific name against the GBIF backbone taxonomy' and what it returns ('best-matching taxon with full classification and a confidence score'). It distinguishes itself from siblings by positioning itself as the 'mandatory first step' returning the taxonKey required by other GBIF tools, and contrasts with gbif_search_species for vernacular names.

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?

Explicit when-to-use: 'mandatory first step for any GBIF workflow' and names the dependent tools. It also gives exclusion guidance: 'Common names are not supported — use gbif_search_species for vernacular name searches.' Additionally, it advises remedial action when no match is found ('try removing the strict flag or broadening the name').

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

gbif_occurrence_facetsOccurrence Facet AggregationA
Read-onlyIdempotent
Inspect

Aggregate 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?". Scope the aggregation with taxonKey, country (uppercase ISO 3166-1 alpha-2), publishingCountry, stateProvince, year, geometry, basisOfRecord, datasetKey, 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoYear or year range (e.g., "2020,2024") to scope the aggregation. Both endpoints inclusive. Omit the field to aggregate across every year — a blank or whitespace-only value is rejected rather than dropped, because GBIF answers one with the unfiltered aggregation.
facetYesDimension to aggregate by (e.g., COUNTRY, YEAR, BASIS_OF_RECORD, SPECIES_KEY, OCCURRENCE_STATUS, IUCN_RED_LIST_CATEGORY). DATASET_KEY is the dimension to split on when a result set is too large to page: every occurrence carries exactly one datasetKey, so its buckets sum to totalOccurrences with no gap and no overlap, and it has the cardinality to cut a large scope into pageable pieces. BASIS_OF_RECORD and PUBLISHING_COUNTRY are gap-free too and both have a matching filter on the occurrence tools, so either can drive a further split of a bucket still too large — but on that same scope they return 9 and 41 buckets against DATASET_KEY's 550, so neither replaces it as the first cut. A dimension a record can lack silently drops that record: faceting one 60,290,950-record scope by YEAR returned 224 buckets summing to 59,407,400, leaving 883,550 undated records in no bucket at all, and MONTH, STATE_PROVINCE, and SPECIES_KEY lose records the same way — stateProvince included, even though the occurrence tools can now filter on it. Sums are comparable only across the same occurrenceStatus scope.
countryNoISO 3166-1 alpha-2 code, uppercase, of where the occurrence was recorded, to scope to one country. Not the publisher's country — that is publishingCountry, and the two disagree on most records. Scope to one country, or pass back a value this tool returned under facet COUNTRY to drill into that bucket. Lowercase and alpha-3 forms ("gb", "USA") match nothing upstream, which is why only the uppercase two-letter form is accepted here.
geometryNoWKT polygon to scope the aggregation to a geographic area (e.g., POLYGON((8 47, 9 47, 9 48, 8 48, 8 47))). Coordinates are longitude latitude. Omit the field to aggregate everywhere — a blank or whitespace-only value is rejected rather than dropped, because GBIF answers one with the unfiltered aggregation.
taxonKeyNoBackbone taxon key to scope the aggregation. Matches the given taxon and all descendant taxa (subspecies, varieties, etc.).
datasetKeyNoScope the aggregation to a single dataset by its GBIF dataset UUID (8-4-4-4-12 hex). Obtain one from gbif_search_datasets, gbif_get_dataset, a DATASET_KEY facet, or the datasetKey field on an occurrence record. Omit the field to aggregate across every dataset — an empty string is rejected rather than read as no scope, because GBIF answers a blank datasetKey with the unfiltered aggregation.
facetLimitNoMaximum number of facet values to return (default 10, max 100).
facetOffsetNoZero-based offset into the ranked facet values, for paging past the first facetLimit values on high-cardinality dimensions like DATASET_KEY. Advance by facetLimit to fetch the next page (0, then facetLimit, then 2×facetLimit, …).
basisOfRecordNoScope to a specific basis of record.
stateProvinceNoState, province, or first-level administrative division, matched as a verbatim string — exact and case-sensitive. Pass back a value this tool returned under facet STATE_PROVINCE rather than a guessed one: GBIF stores what each dataset recorded without normalizing it, so "England", "England - Greater London", and "Greater London" are three distinct values, "england" is none of them, and an unmatched value aggregates zero records rather than erroring. Omit the field to aggregate across every state or province — a blank or whitespace-only value is rejected rather than dropped, because GBIF answers one with the unfiltered aggregation.
occurrenceStatusNoPresence/absence scope. Defaults to PRESENT so the aggregation counts sightings, not the surveys that looked and found nothing, and agrees with gbif_count_occurrences on the same filters. Use ANY for both — required to see both buckets when facet is OCCURRENCE_STATUS — or ABSENT for non-observations alone.PRESENT
publishingCountryNoISO 3166-1 alpha-2 code, uppercase, of the organization that published the record — not where the occurrence was observed, which is country. Scope to one publisher country, or pass back a value this tool returned under facet PUBLISHING_COUNTRY to drill into that bucket. Lowercase and alpha-3 forms ("us", "USA") match nothing upstream, which is why only the uppercase two-letter form is accepted here.
iucnRedListCategoryNoScope to records whose taxon carries this IUCN Red List category: CR Critically Endangered, EN Endangered, VU Vulnerable, NT Near Threatened, LC Least Concern, DD Data Deficient, EX Extinct, EW Extinct in the Wild, CD Conservation Dependent. Leave unset and facet on IUCN_RED_LIST_CATEGORY to see the whole distribution instead.

Output Schema

ParametersJSON Schema
NameRequiredDescription
facetYesThe facet dimension aggregated.
countsYesFacet values ranked by count descending — one page of up to facetLimit entries starting at facetOffset, not necessarily the top ones.
noticeNoGuidance when no facet values were returned, a verbatim stateProvince filter matched nothing, or a presence/absence filter narrowed the aggregation. Absent only when none applies.
facetLimitYesMaximum facet values requested.
facetOffsetYesZero-based offset applied to the ranked facet values.
moreValuesLikelyYesHeuristic continuation flag: true when this page returned a full facetLimit of values, so more distinct values may exist past facetOffset + facetLimit (re-call with facetOffset advanced by facetLimit). GBIF exposes no total distinct-value count, so this is an estimate, not exact.
occurrenceStatusYesThe presence/absence filter applied upstream — PRESENT, ABSENT, or ANY when no filter was sent. Says what totalOccurrences and every bucket cover.
totalOccurrencesYesTotal matching occurrences across all facet values.
Behavior5/5

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

Annotations already declare readOnly/openWorld/idempotent. The description adds that it returns one page of ranked facet values, no record payloads, and that it aggregates sightings only by default (matching sibling tools). It also explains paging semantics and how to measure presence/absence splitting, adding behavioral context beyond annotations.

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 dense but every sentence earns its place, covering purpose, paging, use cases, scoping, sibling differentiation, and defaults. It is front-loaded with the core function and logically organized, though slightly long.

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 an output schema present and rich parameter schema, the description completes the picture by covering when to use the tool, how pagination works, default behavior, and relationship to siblings. It is fully adequate for an agent to select and invoke the tool correctly.

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 100% with detailed descriptions for all 13 parameters, including extensive guidance for facet. The main description adds high-level grouping of which parameters serve as filters, and the facet parameter's schema description explains gap-free vs lossy dimensions with a concrete example. This goes beyond the baseline.

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 aggregates occurrence counts across a dimension, names example dimensions, and differentiates from sibling tools like gbif_search_occurrences and gbif_count_occurrences by mentioning no record payloads and its role in splitting large result sets. This is a specific verb+resource with clear scope.

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?

It explicitly states the tool is core for distribution and trend queries with example questions, and gives a concrete alternative scenario: when a result set is too large for gbif_search_occurrences to page, facet by DATASET_KEY and search each datasetKey. It also clarifies the default occurrenceStatus matches other occurrence tools, guiding when to adjust.

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

gbif_search_datasetsSearch DatasetsA
Read-onlyIdempotent
Inspect

Search 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, and DOI. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-text search across dataset title and description. Omit the field to browse without a term — a blank or whitespace-only value is rejected rather than sent, because GBIF answers a blank one with all 123,527 indexed datasets and a whitespace-only one with none, and neither is the search a caller who filled the field was asking for.
typeNoFilter by dataset type. OCCURRENCE for observation records, CHECKLIST for species lists.
limitNoNumber of datasets to return (default 20, max 1000).
offsetNoPagination offset.
hostingOrgNoUUID (8-4-4-4-12 hex, lowercase — matched case-sensitively, as publishingOrg is) of the organization whose installation serves the dataset — not the organization that published it, which is publishingOrg. Most organizations publish through an installation someone else runs, so a key from gbif_search_publishers matches nothing here for them: of the first 25 GB organizations the registry lists, all 25 host no datasets while 13 publish one or two. Supplied together the two filters are intersected, not combined.
publishingOrgNoUUID (8-4-4-4-12 hex, lowercase — GBIF matches these two keys case-sensitively, so an upper-cased rendering of a real key matches nothing) of the organization that published the dataset — the organization whose data it is, and the question a key from gbif_search_publishers is usually asking. Not the organization that serves it, which is hostingOrg and matches a different set: Butterfly Conservation (0d72dd7f-6f05-46af-85c2-8b6e77ce5534) publishes 3 datasets and hosts none, while the National Biodiversity Network (07f617d0-c688-11d8-bf62-b8a03c50a862) hosts 984 — those 3 among them — and publishes 1. Supplied together the two filters are intersected, not combined, so the same key in both fields returns only what that organization both published and serves.
publishingCountryNoISO 3166-1 alpha-2 code, uppercase, of the organization that published the dataset (e.g., "GB", "US", "DE", "SE"). Lowercase and alpha-3 forms ("gb", "GBR") match nothing upstream, which is why only the uppercase two-letter form is accepted here — unlike the country filter on gbif_search_publishers, which resolves either form. Take a value from a PUBLISHING_COUNTRY facet on gbif_occurrence_facets; an uppercase pair GBIF does not assign ("XX") is rejected upstream by name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitYesDatasets returned in this page.
noticeNoGuidance when results are empty or paging overshot. Absent on successful result pages.
offsetYesCurrent pagination offset.
datasetsYesMatching datasets.
totalCountYesTotal matching datasets before pagination.
endOfRecordsYesTrue when there are no more results after this page.
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds meaningful behavioral context beyond that: it specifies the return payload ("title, description, license, record count, and DOI") and explains the distinct semantics of the two organization filters ("publishingOrg matches the organization whose data it is, hostingOrg the organization whose installation serves it"). This goes beyond the basic annotations without contradicting them.

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 four sentences, front-loaded with the core action, then provides org-filter clarification, return fields, and use cases. No sentence is wasted; every one adds semantic value. It is dense but not bloated, making it easy for an agent to parse quickly.

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 rich input schema (100% parameter coverage, enums, defaults), the strong annotations (read-only, open-world, idempotent), and the existence of an output schema, the description covers the essential contextual points: what the tool searches, what it returns, and when to use it. The only minor gap is not explicitly naming alternatives, but the use cases and filter guidance compensate. For a search tool of this complexity, it is complete.

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 100%, so the baseline is 3. The description adds value beyond the schema by guiding parameter choice: "an organization key from gbif_search_publishers usually wants publishingOrg" and by clarifying that publishing country must be uppercase ISO 3166-1 alpha-2. This is not redundant with the schema and helps disambiguate the two organization parameters.

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 opens with a specific verb+resource: "Search GBIF datasets by keyword, type, publishing country (uppercase ISO 3166-1 alpha-2), publishing organization, or hosting organization." It clearly states what the tool does and enumerates filter dimensions. It indirectly distinguishes from siblings by noting that an organization key from gbif_search_publishers usually wants publishingOrg, but it does not explicitly contrast with gbif_get_dataset or other search tools, so it misses the top score for explicit sibling 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 provides explicit use cases: "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." It also gives a concrete cross-tool guideline about when to use publishingOrg vs hostingOrg. However, it does not state when not to use the tool or name an alternative (e.g., gbif_get_dataset for a specific dataset), 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.

gbif_search_occurrencesSearch OccurrencesA
Read-onlyIdempotent
Inspect

Search 3.9B+ GBIF occurrence records with Darwin Core filters. Use taxonKey from gbif_match_species for reliable results — it resolves synonyms automatically. Accepts country (uppercase ISO 3166-1 alpha-2, where the record was observed), publishingCountry (the publishing organization's country — a different question), stateProvince, bounding box (decimalLatitude/decimalLongitude ranges), WKT polygon geometry, year range, month, basis of record, coordinate filter, and dataset key. 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. This server cannot download a result set in bulk; that needs the GBIF Download API with a GBIF.org account, or the GBIF snapshot on AWS Open Data.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoYear or year range. Single year: "2024". Range: "2020,2024". Filters by observation year. Both endpoints inclusive. Omit the field to search every year — a blank or whitespace-only value is rejected rather than dropped, because GBIF answers one with the unfiltered result set.
limitNoNumber of records to return (default 20, max 300).
monthNoCalendar month (1–12). Useful for seasonal distribution queries.
offsetNoPagination offset. GBIF serves offset+limit up to 100,001 and rejects anything past it, with no cursor or scroll to continue from. To reach a result set larger than that, split it into per-datasetKey searches using a DATASET_KEY facet from gbif_occurrence_facets — gap-free and high-cardinality, unlike YEAR, which leaves undated records in no bucket — rather than paging deeper.
countryNoISO 3166-1 alpha-2 code, uppercase, of where the occurrence was recorded (e.g., "GB", "US", "DE", "SE"). Not the publisher's country — that is publishingCountry, and the two disagree on most records. Lowercase and alpha-3 forms ("gb", "USA") match nothing upstream, which is why only the uppercase two-letter form is accepted here. Take a value from a COUNTRY facet on gbif_occurrence_facets; an uppercase pair GBIF does not know ("XX") is rejected upstream by name.
geometryNoWKT polygon for geographic filtering (e.g., POLYGON((8 47, 9 47, 9 48, 8 48, 8 47))). Coordinates are longitude latitude. Takes precedence over decimalLatitude/decimalLongitude. Omit the field to search everywhere — a blank or whitespace-only value is rejected rather than dropped, because GBIF answers one with the unfiltered result set.
taxonKeyNoGBIF backbone taxon key from gbif_match_species. Preferred over scientificName — matches all synonyms automatically. Matches the given taxon and all descendant taxa (subspecies, varieties, etc.).
datasetKeyNoRestrict results to a single dataset by its GBIF dataset UUID (8-4-4-4-12 hex). Obtain one from gbif_search_datasets, gbif_get_dataset, a DATASET_KEY facet (gbif_occurrence_facets), or the datasetKey field on an occurrence record. Omit the field to search every dataset — an empty string is rejected rather than read as no filter, because GBIF answers a blank datasetKey with the unfiltered result set.
isInClusterNoFilter to records flagged as likely duplicates (true) or exclude them (false). Omit to include all. Note: GBIF does not expose a cluster identifier — only the membership flag. To de-duplicate, set isInCluster: false to exclude all clustered records.
basisOfRecordNoFilter by how the occurrence was recorded. HUMAN_OBSERVATION covers citizen science. PRESERVED_SPECIMEN covers natural history collections.
hasCoordinateNoWhen true, return only georeferenced records (those with coordinates). When false, return ONLY records without coordinates. Omit the parameter entirely to include all records regardless of coordinate presence.
stateProvinceNoState, province, or first-level administrative division, matched as a verbatim string — exact and case-sensitive. GBIF stores what each dataset recorded without normalizing it, so there is no vocabulary to guess from: "England", "England - Greater London", and "Greater London" are three distinct values, and "england" is none of them. Take one from a STATE_PROVINCE facet on gbif_occurrence_facets scoped the same way and pass it back unchanged — an unmatched value returns zero records rather than an error. Omit the field to search every state or province — a blank or whitespace-only value is rejected rather than dropped, because GBIF answers one with the unfiltered result set. Records carrying no stateProvince match no value, so this cannot partition a scope.
scientificNameNoScientific name filter. Less precise than taxonKey — does not match synonyms. Use taxonKey from gbif_match_species for reliable results. Supplying both does not narrow the search: GBIF combines the two taxon filters with OR, so the result is the union of the two, not their intersection. Omit the field to search every name — a blank or whitespace-only value is rejected rather than dropped, because GBIF answers one with the unfiltered result set.
decimalLatitudeNoLatitude range as "min,max" (e.g., "47.0,48.5"). Decimal degrees, WGS84. Combine with decimalLongitude for a bounding box. Omit the field to leave latitude unbounded — a blank or whitespace-only value is rejected rather than dropped, because GBIF answers one with the unfiltered result set.
decimalLongitudeNoLongitude range as "min,max" (e.g., "8.0,9.5"). Decimal degrees, WGS84. Combine with decimalLatitude for a bounding box. Omit the field to leave longitude unbounded — a blank or whitespace-only value is rejected rather than dropped, because GBIF answers one with the unfiltered result set.
occurrenceStatusNoPresence/absence filter. Defaults to PRESENT: an ABSENT record documents a survey that looked for the taxon and did not find it, so including one would read as a sighting of the opposite. Use ANY for both (GBIF's own default), or ABSENT for non-observations alone.PRESENT
publishingCountryNoISO 3166-1 alpha-2 code, uppercase, of the organization that published the record — not where the occurrence was observed, which is country. The two differ constantly: of 60,290,950 records observed in GB, 1,548,928 were published by US organizations. Take a value from a PUBLISHING_COUNTRY facet on gbif_occurrence_facets. Lowercase and alpha-3 forms ("us", "USA") match nothing upstream, which is why only the uppercase two-letter form is accepted here.
iucnRedListCategoryNoRestrict to records whose taxon carries this IUCN Red List category: CR Critically Endangered, EN Endangered, VU Vulnerable, NT Near Threatened, LC Least Concern, DD Data Deficient, EX Extinct, EW Extinct in the Wild, CD Conservation Dependent. Records with no category are excluded when this is set.
coordinateUncertaintyInMetersNoFilter by coordinate uncertainty radius in meters. Range format: "min,max" (e.g., "0,1000" for sub-kilometer precision). Both endpoints inclusive. Omit the field to accept any uncertainty — a blank or whitespace-only value is rejected rather than dropped, because GBIF answers one with the unfiltered result set.

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitYesRecords returned in this page.
noticeNoGuidance when results are empty, paging overshot, the match is larger than the pagination cap can reach, or a presence/absence filter narrowed the result. Absent only when none applies.
offsetYesCurrent pagination offset.
totalCountYesTotal matching occurrences before pagination.
occurrencesYesOccurrence records matching the filters.
endOfRecordsYesTrue when there are no more results after this page.
occurrenceStatusYesThe presence/absence filter applied upstream — PRESENT, ABSENT, or ANY when no filter was sent. Says what totalCount and the returned records cover.
Behavior5/5

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

Despite annotations providing readOnly/openWorld/idempotent hints, the description adds substantial behavioral context: pagination capped at offset+limit=100,001, no cursor/scroll, blank values rejected (not dropped), occurrenceStatus defaults to PRESENT, stateProvince exact case-sensitive matching, scientificName OR semantics with taxonKey, and the inability to bulk-download from this server. No annotation contradiction.

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 information-dense yet well-organized, front-loaded with the core purpose, and every sentence adds value — including caveats and cross-references to sibling tools. It is appropriately sized for a complex tool with 19 parameters.

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 (19 parameters, output schema exists), the description covers all critical aspects: filtering options, default behavior, pagination constraints, large-result handling, and bulk download limitations. No gaps detected.

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 coverage is 100% but the description enriches parameters with non-obvious semantics: e.g., stateProvince is exact match, country/publishingCountry are distinct and frequently disagree, offset/limit reach a hard ceiling, scientificName ORs with taxonKey instead of AND, and blank/whitespace values rejected. This goes far beyond the schema's basic descriptions.

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 'Search 3.9B+ GBIF occurrence records with Darwin Core filters' — a specific verb, resource, and scope. It clearly differentiates from sibling tools like gbif_count_occurrences and gbif_facets by its focus on occurrence search/retrieval.

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?

Description provides explicit guidance: recommends using taxonKey from gbif_match_species, mentions using gbif_occurrence_facets for large result sets, and directs bulk download needs to the GBIF Download API or AWS Open Data. Also differentiates country vs publishingCountry and when to use facets for partitioning.

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

gbif_search_publishersSearch PublishersA
Read-onlyIdempotent
Inspect

Search 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoName fragment to search for. Matches organization names. Omit the field to browse without a term — a blank or whitespace-only value is rejected rather than sent, because the registry answers either with all 3,561 registered organizations.
limitNoNumber of organizations to return (default 20, max 1000).
offsetNoPagination offset.
countryNoISO 3166-1 country code to filter organizations by country. The alpha-2 form ("GB") is canonical; unlike the country codes on the occurrence tools and gbif_search_datasets, this one also resolves the alpha-3 form ("GBR") and is case-insensitive, because the registry endpoint matches the parsed country rather than the string. A value GBIF cannot parse as a country errors rather than returning an empty list. Omit the field to search every country — an empty string is rejected rather than read as no filter, because the registry answers a blank country with all 3,561 organizations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitYesOrganizations returned in this page.
noticeNoGuidance when results are empty or paging overshot. Absent on successful result pages.
offsetYesCurrent pagination offset.
publishersYesMatching organizations.
totalCountYesTotal matching organizations before pagination.
endOfRecordsYesTrue when there are no more results after this page.
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds behavioral context by specifying the return format ('organization key, title, and country') and explaining the data-availability nuance about hostingOrg, which is beyond the annotations. No contradiction.

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?

Three sentences, each with a distinct purpose: purpose statement, return value, and chaining guidance. No redundant phrasing.

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 read-only search tool with 4 optional parameters, full schema coverage, and an output schema, the description provides sufficient context for selecting and invoking it. It covers the core use and the most important pitfall (hostingOrg matching nothing).

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

Parameters3/5

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

Schema coverage is 100%, with detailed descriptions for q, limit, offset, and country. The description only mentions 'by name fragment or country' and does not add parameter syntax or edge cases beyond the schema, so it neither compensates nor repeats—the schema does the heavy lifting.

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 the tool's function clearly: 'Search organizations registered with GBIF by name fragment or country.' It also distinguishes it from siblings by mentioning the returned key/title/country and the chaining to gbif_search_datasets, making the purpose unambiguous.

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?

It explicitly explains when to use this tool and how to chain it: 'sufficient to chain into gbif_search_datasets as publishingOrg... or as hostingOrg.' It also clarifies the common pattern ('publishingOrg is the usual chain') and warns that 'hostingOrg matches nothing for them,' giving practical guidance.

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

gbif_search_speciesSearch Species TaxonomyA
Read-onlyIdempotent
Inspect

Search or browse the GBIF backbone taxonomy. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoName fragment to search for. Matches scientific and vernacular names. Omit the field to browse without a name term — a blank or whitespace-only value is rejected rather than sent, because GBIF answers a blank one with the whole 46,623,754-name index and a whitespace-only one with nothing, and neither is the search a caller who filled the field was asking for.
rankNoFilter to a specific taxonomic rank.
genusNoScope the search to a genus, by name — "Quercus", "Parus". Resolved to its backbone key before the search runs, and it is the narrowest of the three, so it is what scopes when kingdom or family is supplied too. Matched exactly and capitalized as GBIF writes it; a name shared across kingdoms ("Prunella", "Oenanthe") resolves only when kingdom is supplied with it. Omit the field to browse every genus; a blank or whitespace-only value is rejected rather than dropped.
limitNoNumber of records to return (default 20, max 1000).
familyNoScope the search to a family, by name — "Paridae", "Fagaceae". Resolved to its backbone key before the search runs, so an alternative family name lands on the taxon it is a synonym of ("Compositae" scopes to Asteraceae). Matched exactly and capitalized as GBIF writes it; a name that is not a backbone family fails rather than being ignored. Supplied with genus, it must be that genus's own family. Omit the field to browse every family; a blank or whitespace-only value is rejected rather than dropped.
offsetNoPagination offset.
kingdomNoScope the search to a kingdom, by name — "Animalia", "Plantae", "Fungi". Resolved to its backbone key before the search runs, and matched exactly: capitalize it as GBIF writes it, since "animalia" resolves to nothing. Supplied alongside family or genus it disambiguates that name rather than scoping on its own — "Prunella" alone names both a bird genus and a plant genus and resolves to neither. Omit the field to browse every kingdom; a blank or whitespace-only value is rejected rather than dropped.
isExtinctNoFilter to extinct (true) or extant (false) taxa.
datasetKeyNoScope to a specific checklist dataset UUID (8-4-4-4-12 hex). Omit the field to search the GBIF backbone — an empty string is rejected rather than read as no scope, because GBIF answers a blank datasetKey with the unfiltered backbone result.

Output Schema

ParametersJSON Schema
NameRequiredDescription
taxaYesMatching taxa.
limitYesRecords returned in this page.
noticeNoGuidance when results are empty or paging overshot. Absent on successful result pages.
offsetYesCurrent pagination offset.
taxonScopeNoThe higher-taxon scope actually applied — which of kingdom, family, or genus scoped the search, the backbone taxon its name resolved to, and that taxon key. Absent when none of the three was supplied.
totalCountYesTotal matches before pagination.
endOfRecordsYesTrue when there are no more results after this page.
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description adds substantial behavioral context beyond those: how kingdom/family/genus scoping resolves to backbone keys, synonym resolution, exact-capitalization matching, failure behavior for unmatched names, pagination, and rejection of blank values. This gives the agent a clear model of the tool's execution.

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 dense paragraph but is well-structured: purpose first, then usage scenarios, then key behavioral notes (scoping, capitalization, pagination). Every sentence contributes meaningful information without redundancy. It is appropriately sized for the tool's complexity.

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 9 parameters, no required fields, and a rich output schema, the description covers all critical operational aspects: pagination, scoping behavior, matching semantics, and blank-value handling. It does not need to explain return values because the output schema exists. The tool is fully contextualized within its sibling set.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The main description adds some context about the interplay of kingdom/family/genus (narrowest scope wins, disambiguation), but each parameter's schema description already contains detailed semantics. The description does not materially enrich what the schema already provides.

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+resource: 'Search or browse the GBIF backbone taxonomy.' It clearly distinguishes itself from the sibling gbif_match_species by explaining it is useful 'when gbif_match_species returns too narrow a result' and for exploring higher-taxon lists. This makes the tool's unique role unambiguous.

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 states when to use the tool: exploring species under a higher taxon, simple name-fragment searches, and as an alternative when gbif_match_species is too narrow. It also provides behavioral exclusions, such as name matching being exact and capitalized, and that blank values are rejected, guiding correct usage.

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

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • F
    license
    -
    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.
  • A
    license
    -
    quality
    C
    maintenance
    Enables querying biodiversity data from the Global Biodiversity Information Facility (GBIF) API v1, supporting species occurrence searches and other GBIF endpoints through natural language.
    5
    MIT

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.