Skip to main content
Glama

gbif-biodiversity-mcp-server

Bulk Match Species Names

gbif_bulk_match_species
Read-onlyIdempotent

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 processed name. By default, an oversized batch processes the first 50 and returns the remainder in unprocessedNames. A name GBIF matched at a higher rank yields matchType HIGHERRANK with a note naming the taxon matched and what its taxonKey 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 backbone match yields matchType NONE (no taxonKey) 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. 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. Common names are not supported — use gbif_search_species for vernacular searches. Below confidence 80, review the match.

Input Schema

NameRequiredDescriptionDefault
namesYesScientific names to match against the GBIF backbone. Up to 50 are matched in parallel; additional names are returned in unprocessedNames when read-limit clamping is enabled (default). Every submitted name must be valid.
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

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
noticeNoRequested and applied batch size when names exceed the 50-name workload cap.
resultsNoOne result per processed input name, in input order (at most 50).
unprocessedNamesNoNames beyond the first 50, in original order including duplicates. Submit these names in another call. Absent when every name was processed.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedOutput schema / properties / results / items / properties / confidence / description
      Previous value: -"Match confidence 0–100. Below 80 warrants review. Absent on ERROR."New value: +"Match confidence 0–100. Below 80 warrants review; a HIGHERRANK match can score above 90, so read matchType too. Absent on ERROR."
    • changedOutput schema / properties / results / items / properties / matchType / description
      Previous value: -"EXACT, FUZZY, or HIGHERRANK for a match; NONE when GBIF found no usable match; ERROR when the lookup itself failed for this name (see error)."New value: +"EXACT or FUZZY for a match; HIGHERRANK when GBIF matched at a higher rank — a misspelled species falls back to its genus or kingdom, and a bare genus name carries it too — so taxonKey covers that whole taxon, or its accepted taxon when it is a synonym (see note); NONE when GBIF found no usable match; ERROR when the lookup itself failed for this name (see error)."
    • addedOutput schema / properties / results / items / properties / note
      Added value: +{
      +  "description": "On HIGHERRANK, names the taxon and rank GBIF matched and what taxonKey covers: that whole taxon, or its accepted taxon when it is a synonym. On NONE, GBIF's own explanation when it gave one — for a name shared across kingdoms, its report of several equal matches, with a pointer to retry that name through gbif_match_species with kingdom. Absent on EXACT, FUZZY, and ERROR entries, and on a NONE GBIF did not explain.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / results / items / properties / reason / description
      Previous value: -"Machine-readable failure identifier when matchType is ERROR — e.g. invalid_filter when GBIF rejected a supplied value. Absent when the failure carried no classification, and absent on every non-ERROR entry."New value: +"Machine-readable failure identifier when matchType is ERROR and the failure was classified. Absent when the failure carried no classification, and absent on every non-ERROR entry."
    • changedOutput schema / properties / results / items / properties / taxonKey / description
      Previous value: -"GBIF backbone taxon key to pass to gbif_search_occurrences, gbif_count_occurrences, and gbif_occurrence_facets — the accepted taxon's key when this name is a synonym, otherwise the matched taxon's own key. Absent when matchType is NONE or ERROR."New value: +"GBIF backbone taxon key to pass to gbif_search_occurrences, gbif_count_occurrences, and gbif_occurrence_facets — the accepted taxon's key when the name GBIF matched is a synonym, otherwise the matched taxon's own key. Absent when matchType is NONE or ERROR."
  2. Changed5 schema fields changed
    • changedInput schema / properties / names / description
      Previous value: -"Scientific names to match against the GBIF backbone. 1–50 per call, matched in parallel."New value: +"Scientific names to match against the GBIF backbone. Up to 50 are matched in parallel; additional names are returned in unprocessedNames when read-limit clamping is enabled (default). Every submitted name must be valid."
    • removedInput schema / properties / names / maxItems
      Removed value: -50
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Requested and applied batch size when names exceed the 50-name workload cap.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / results / description
      Previous value: -"One result per input name, in input order."New value: +"One result per processed input name, in input order (at most 50)."
    • addedOutput schema / properties / unprocessedNames
      Added value: +{
      +  "description": "Names beyond the first 50, in original order including duplicates. Submit these names in another call. Absent when every name was processed.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  3. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "results"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode.",
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "results"
      -]
  4. Changed4 schema fields changed
    • changedOutput schema / properties / results / items / properties / error / description
      Previous value: -"Failure reason when matchType is ERROR. Absent otherwise."New value: +"Failure message when matchType is ERROR. Absent otherwise."
    • addedOutput schema / properties / results / items / properties / matchedTaxonKey
      Added value: +{
      +  "description": "Backbone 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.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / results / items / properties / reason
      Added value: +{
      +  "description": "Machine-readable failure identifier when matchType is ERROR — e.g. invalid_filter when GBIF rejected a supplied value. Absent when the failure carried no classification, and absent on every non-ERROR entry.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / results / items / properties / taxonKey / description
      Previous value: -"Matched GBIF backbone taxon key — use in gbif_search_occurrences, gbif_count_occurrences, and gbif_occurrence_facets. Absent when matchType is NONE or ERROR."New value: +"GBIF backbone taxon key to pass to gbif_search_occurrences, gbif_count_occurrences, and gbif_occurrence_facets — the accepted taxon's key when this name is a synonym, otherwise the matched taxon's own key. Absent when matchType is NONE or ERROR."
  5. Added

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnly/openWorld/idempotent annotations, it discloses per-name independence, input-order results, oversized-batch handling, unprocessedNames behavior, HIGHERRANK/NONE/ERROR semantics, and that per-name failures do not fail the batch. These are substantive behavioral details an agent needs for correct use.

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 key purpose and batch rationale are front-loaded, and most sentences carry useful edge-case behavior. However, it is a dense single paragraph, and some match-type details make it longer than necessary for a first read.

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, annotations, full schema coverage, and output schema, the description provides enough operational context for correct selection and invocation. It also explains the important match outcomes even though the output schema exists.

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 both parameters are already documented. The description reinforces batch-size and remainder behavior for names, but does not add meaning for the strict parameter beyond what the schema says.

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: resolve up to 50 scientific names to GBIF backbone taxon keys. It explicitly identifies itself as the batch counterpart to gbif_match_species, making the distinction from that sibling immediate.

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 names suitable workflows (checklist, inventory, species-list) and explains why the batch form is preferable to one round trip per name. It also gives an explicit exclusion: common names are not supported and vernacular searches should use gbif_search_species.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.