.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@.Search GBIF for Panthera leo occurrences in Kenya"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GBIF MCP Server
A Model Context Protocol server that gives AI assistants programmatic access to the Global Biodiversity Information Facility (GBIF) API: species taxonomy, 2+ billion occurrence records, datasets and publishers, map tiles, literature citing GBIF data, controlled vocabularies and data validation.
Works with Claude Code, Claude Desktop, OpenAI Codex CLI, Gemini CLI, Goose, OpenCode and any other MCP client that can launch a stdio server.
Quick start
git clone https://github.com/idss-mesa/gbif-mcp.git
cd gbif-mcp
npm install
npm run build
# Register the server with every supported agent found on this machine
npm run install:agentsThen ask your assistant something like "Search GBIF for Panthera leo occurrences in Kenya".
Requires Node.js 20 or newer. GBIF credentials are optional and only needed for occurrence download requests (see Configuration).
Related MCP server: gbif-mcp
Contents
Protocol support
The server implements MCP protocol revision 2026-07-28 through the v2 TypeScript SDK
(@modelcontextprotocol/server). Each connection is served in whichever era the client speaks:
Client | Handshake | Served |
2026-07-28 | per-request | yes |
2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 | classic | yes (default) |
Current Claude Desktop and Claude Code builds still use the initialize handshake and work
without any configuration change. Set MCP_LEGACY_CLIENTS=reject to accept 2026-07-28 clients
only; older clients then receive error -32022 (unsupported protocol version).
Other 2026-07-28 details:
tools/listis advertised as cacheable (ttlMs1 hour,cacheScope: public).Every tool carries
annotations(readOnlyHint,idempotentHint,openWorldHint). Only the download and validator tools, which create jobs on GBIF, are marked non-read-only.Tool arguments are validated against the advertised JSON Schema before execution. Invalid arguments and unknown tools return JSON-RPC error
-32602.Failed GBIF calls come back as tool results with
isError: trueand a JSON error envelope, never as a crashed connection.ping,logging/setLevel, sampling, roots and elicitation are not used. Logs go to stderr.The process exits when the client closes stdin, so no orphaned servers are left behind.
Installation
Install script
scripts/install.sh registers the server with every supported agent it finds. It builds the
server if build/index.js is missing, prefers each agent's own CLI when one is installed
(claude mcp add, codex mcp add, gemini mcp add) and otherwise merges an entry into the
agent's config file, keeping everything else in the file and leaving a .bak copy.
npm run install:agents # every agent detected on this machine
scripts/install.sh --agents all --dry-run # preview the change for every agent
scripts/install.sh --agents claude,goose # just Claude Code and Goose
scripts/install.sh --scope project # project-level config (claude, codex, gemini, opencode)
scripts/install.sh --username you --password … # store GBIF credentials for download requests
scripts/install.sh --env LOG_LEVEL=debug # any extra environment variable
scripts/install.sh --uninstall # remove the registration everywhereAgent | What the script does |
|
|
| adds |
|
|
|
|
| adds a |
| adds |
The script writes absolute paths for node and build/index.js, because desktop apps do not
inherit your shell PATH. It needs bash and Node.js 20+. On Windows run it from WSL or Git Bash,
or follow the manual steps below. Restart desktop apps (Claude Desktop, Goose Desktop) after
installing.
Claude Code
cd /path/to/gbif-mcp
claude mcp add gbif -- node "$(pwd)/build/index.js"
# with GBIF credentials for download requests
claude mcp add gbif -e GBIF_USERNAME=you -e GBIF_PASSWORD=secret -- node "$(pwd)/build/index.js"
claude mcp list # shows gbif with a health check
claude mcp get gbif # details and connection status
claude mcp remove gbifUse --scope project to write the entry to .mcp.json in the current repository instead of
your user config.
Claude Desktop
Add the server to the configuration file and restart Claude Desktop:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"gbif": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/gbif-mcp/build/index.js"],
"env": {
"GBIF_USERNAME": "optional-username",
"GBIF_PASSWORD": "optional-password"
}
}
}
}Use absolute paths (not ~/ or ./). On Windows escape backslashes:
"C:\\Users\\You\\gbif-mcp\\build\\index.js". If node is not found, replace "command": "node"
with the full path printed by which node (or where node on Windows).
Codex CLI, Gemini CLI, Goose, OpenCode
The install script handles all four. The equivalent manual entries are:
# ~/.codex/config.toml
[mcp_servers.gbif]
command = "node"
args = ["/ABSOLUTE/PATH/TO/gbif-mcp/build/index.js"]// ~/.gemini/settings.json
{ "mcpServers": { "gbif": { "command": "node", "args": ["/ABSOLUTE/PATH/TO/gbif-mcp/build/index.js"] } } }# ~/.config/goose/config.yaml
extensions:
gbif:
enabled: true
type: stdio
name: gbif
cmd: node
args: ["/ABSOLUTE/PATH/TO/gbif-mcp/build/index.js"]
envs: {}
timeout: 300// ~/.config/opencode/opencode.json (OpenCode v2; v1 uses "mcp": { "gbif": … })
{ "mcp": { "servers": { "gbif": { "type": "local", "command": ["node", "/ABSOLUTE/PATH/TO/gbif-mcp/build/index.js"], "enabled": true } } } }Any other MCP client that can launch a stdio command works the same way:
node /ABSOLUTE/PATH/TO/gbif-mcp/build/index.js.
Docker
docker build -t gbif-mcp:latest .
docker run -i --rm gbif-mcp:latest # stdio: keep -i, never -dClaude Desktop / any JSON-configured client:
{
"mcpServers": {
"gbif": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "GBIF_USERNAME=you", "-e", "GBIF_PASSWORD=secret", "gbif-mcp:latest"]
}
}
}Claude Code:
claude mcp add gbif -- docker run -i --rm gbif-mcp:latestWith Docker Compose, build with docker compose build and point the client at
docker compose run --rm gbif-mcp. The image is a multi-stage Node 20 Alpine build
(about 150 MB) that runs as a non-root user on a read-only root filesystem.
Configuration
All settings are environment variables. Defaults are shown; nothing is required.
# GBIF credentials (only for occurrence download requests)
GBIF_USERNAME=
GBIF_PASSWORD=
# GBIF API
GBIF_BASE_URL=https://api.gbif.org/v1
GBIF_USER_AGENT=GBIF-MCP-Server/1.1.0
GBIF_TIMEOUT=30000
# Rate limiting and caching
RATE_LIMIT_MAX_REQUESTS=100
RATE_LIMIT_CONCURRENT=10
CACHE_ENABLED=true
CACHE_MAX_SIZE=100
CACHE_TTL=3600000
# Response size limits (see below)
RESPONSE_MAX_SIZE_KB=250
RESPONSE_WARN_SIZE_KB=200
RESPONSE_ENABLE_TRUNCATION=true
RESPONSE_ENABLE_SIZE_LOGGING=true
# Logging (stderr; stdout is reserved for the protocol)
LOG_LEVEL=info # error | warn | info | debug
LOG_FORMAT=json
# MCP protocol: serve (also accept 2025-era `initialize` clients) or reject
MCP_LEGACY_CLIENTS=serveA .env file in the project root is read during local development.
Available tools
58 tools across seven GBIF API sections. Every parameter carries a description, valid values
and a real example value (for instance taxonKey: 212 for family Felidae), so assistants can
build correct queries without guessing. Results are paginated with offset/limit and an
endOfRecords flag.
Species (14)
Tool | Purpose |
| Full-text search of the taxonomic backbone with rank, status, habitat, threat and dataset filters |
| Full record for a taxon key |
| Fuzzy-match a scientific name to the backbone |
| Autocomplete name suggestions |
| Parse scientific names into their components |
| Direct taxonomic children |
| Full classification path |
| Sibling and related taxa under the same parent |
| Synonyms of a taxon |
| Common names by language |
| Textual descriptions |
| Geographic distributions |
| Images, sounds and videos |
| Occurrence statistics for a species: record, dataset and country counts, basis-of-record breakdown |
Occurrence (14)
Tool | Purpose |
| Search records with 40+ filters (taxon, country, coordinates, dates, basis of record, media, issues…) |
| A single interpreted record |
| The original, uninterpreted record |
| Count records matching a filter |
| Breakdown by basis of record |
| Breakdown by year |
| Breakdown by country |
| Breakdown by publishing country |
| Breakdown by dataset |
| Breakdown by species within a higher taxon |
| Breakdown by publishing organization |
| Build a download predicate from search filters |
| Request a download (needs credentials) |
| Check a download's status |
The "counts by" tools use GBIF faceted search, so every filter of gbif_occurrence_search
applies to them.
Registry (18)
Tool | Purpose |
| Datasets |
| Occurrence/quality metrics and the EML metadata document |
| Publishing organizations |
| Networks |
| Technical installations (IPTs etc.) |
| GBIF participant nodes |
| GRSciColl collections |
| GRSciColl institutions |
Maps (4)
gbif_maps_get_tile_url, gbif_maps_get_raster_tile_url, gbif_maps_get_vector_tile_url,
gbif_maps_list_styles. These build GBIF map tile URLs (density maps of occurrences for any
search filter) rather than returning image bytes.
Literature (2)
gbif_literature_search (papers citing GBIF-mediated data, with topic, year, dataset,
peer-review and open-access filters) and gbif_literature_get (one paper by DOI).
Vocabularies (3)
gbif_vocabularies_list, gbif_vocabularies_get, gbif_vocabularies_get_concept for GBIF's
controlled vocabularies (LifeStage, Sex, BasisOfRecord, …).
Validator (3)
gbif_validator_validate_dwca, gbif_validator_validate_tabular (submit a Darwin Core archive
or a CSV/TSV file for validation) and gbif_validator_get_status.
The full reference with every parameter is in TOOLS.md and under docs/api-reference.
Usage examples
Once a client is connected, ask in plain language:
"Search for occurrence records of Panthera tigris in India since 2020."
"What is the GBIF backbone key for Quercus robur, and what are its common names in German?"
"How many bird observations were recorded in California in 2023, broken down by month?"
"Find preserved orchid specimens collected before 1900 that have images."
"Which datasets does the Natural History Museum publish, and which is the largest?"
"Show me recent papers that used GBIF data on pollinators."
"Give me a map tile URL for all Apis mellifera records in Europe."
Response size limits
To fit AI context windows the server limits every tool result to 250 KB by default
(RESPONSE_MAX_SIZE_KB). For paginated GBIF responses it keeps as many results as fit and
adds pagination guidance; for other responses it returns metadata only. A truncated result
looks like:
{
"truncated": true,
"originalSize": "1.2MB",
"returnedSize": "248KB",
"metadata": { "totalCount": 1000, "returnedCount": 23 },
"pagination": {
"suggestion": "Use limit=20 with offset=0, then offset=20, offset=40...",
"example": { "taxonKey": 212, "limit": 20, "offset": 0 }
},
"data": { "...": "..." }
}Set RESPONSE_ENABLE_TRUNCATION=false to disable it.
Verifying the server
From Claude Code, claude mcp list runs a health check and should show gbif as connected.
To exercise the stdio surface directly:
npm run build
# 2026-07-28 client: every request carries the protocol envelope in _meta
echo '{"jsonrpc":"2.0","id":1,"method":"server/discover","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{},"io.modelcontextprotocol/clientInfo":{"name":"manual","version":"0"}}}}' \
| node build/index.js
# 2025-era client: classic initialize handshake, then tools/list
printf '%s\n%s\n%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"manual","version":"0"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
| node build/index.jsBoth commands print JSON-RPC responses on stdout and exit once stdin closes.
Troubleshooting
Server does not connect. Check that build/index.js exists, that the config uses absolute
paths, and that node --version reports 20 or newer. Claude Desktop logs live in
~/Library/Logs/Claude/ (macOS) or %APPDATA%\Claude\logs\ (Windows). In Claude Code,
claude mcp get gbif shows the connection status and claude mcp remove gbif followed by
claude mcp add re-registers it.
node: command not found from a desktop app. Desktop apps do not read your shell profile.
Use the full path to node as the command, which is what the install script does.
401 on download requests. Downloads need a GBIF account. Set GBIF_USERNAME and
GBIF_PASSWORD in the server's env; everything else works anonymously.
Rate limiting or slow responses. Use the count and "counts by" tools before large searches,
keep limit small, and use an occurrence download for anything beyond a few thousand records.
The client retries 5xx and 429 answers with backoff and opens a circuit breaker after repeated
service failures; 404s for unknown keys do not count.
Docker. Always run with -i (and usually --rm); never -d, since MCP needs the stdio
connection. Pass credentials with -e or --env-file.
Build errors. rm -rf build node_modules && npm install && npm run build, then
npm run typecheck to see TypeScript diagnostics.
Development
npm run dev # run from source with tsx, watch mode
npm run build # compile to build/
npm run typecheck # tsc --noEmit
npm run test:unit # unit tests (GBIF API mocked with MSW)
npm run test:integration:protocol # stdio conformance: 2026-07-28 + legacy clients, official v2 client
npm run test:integration:api # adversarial matrix: every tool against the live GBIF API
npm run test:coverage # coverage report
npm run format # PrettierProject layout:
src/
index.ts GBIFMCPServer: McpServer factory, serveStdio, tool dispatch, shutdown
core/gbif-client.ts HTTP client: queue, rate limit, LRU cache, retries, circuit breaker
services/ one service per GBIF API section
tools/ 58 tools, one class each, Zod input schemas → JSON Schema
protocol/ error formatting, correlation IDs
utils/ response truncation, logging
tests/
unit/ mirrors src/
integration/mcp/ protocol tests (stdio-protocol.test.ts spawns the real server)
integration/api/ live GBIF tests, including all-tools.integration.test.ts
scripts/install.sh agent registration scriptAdding a GBIF endpoint: write the service method, add a BaseTool subclass under
src/tools/<section>/, export it from that folder's index.ts, register it in
initializeServices() in src/index.ts, and add a case to the adversarial matrix.
See CLAUDE.md for conventions.
Resources
Contributing
Issues and pull requests are welcome. Fork the repository, create a branch, add tests for service or tool changes (unit plus a line in the adversarial matrix), and open a pull request.
License
Creative Commons Attribution 4.0 International (CC BY 4.0).
GBIF data accessed through this server is subject to the licence of each dataset; see GBIF's data use terms.
Available Tools
58 toolsgbif_literature_getARead-onlyIdempotent
Get complete metadata for a scientific publication by its DOI. Returns title, authors, abstract, journal, citation info, and GBIF usage details. Use to get full details about a specific paper that used GBIF data.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes | DOI (Digital Object Identifier) of the publication. Standard format: "10.1234/example". Example: "10.1038/nature12345" or "10.1371/journal.pone.0123456". Get DOIs from gbif_literature_search results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive). The description goes beyond that by disclosing the return payload (title, authors, abstract, journal, citation info, GBIF usage details), which matters since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with purpose, then return contents, then usage. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-param read tool with full annotations and a rich param description, the entry is essentially complete; it explains the return payload in the absence of an output schema. Only edge cases like invalid-DOI behavior are unaddressed, which is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description already details DOI format, examples, and where to source DOIs, so the schema does all the work. The description adds no param-level syntax beyond it, matching the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get complete metadata for a scientific publication by its DOI') and distinguishes itself from gbif_literature_search via the by-DOI lookup nature. Names the concrete fields returned, so an agent knows exactly what it fetches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use to get full details about a specific paper that used GBIF data' gives clear context for invocation and implicitly contrasts with search-style siblings. It stops short of explicitly naming the search tool or stating exclusions, but the usage condition is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_literature_searchARead-onlyIdempotent
Search scientific literature that cites GBIF data. Find peer-reviewed publications, reports, and papers that used GBIF-mediated data. Useful for understanding data impact, finding research examples, and tracking biodiversity research trends.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free text search across titles, abstracts, and keywords. Example: "climate change", "species distribution modeling", "conservation", "invasive species". | |
| year | No | Publication year or range. Format: "2024" (single year) or "2020,2024" (range 2020-2024). Filters by the year the article was published. | |
| limit | No | Maximum articles to return per page. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Default: 0. | |
| topics | No | Filter by research topic. Select one or more topics. Common: BIODIVERSITY_SCIENCE, CONSERVATION, CLIMATE_CHANGE, ECOLOGY, TAXONOMY. | |
| openAccess | No | Filter by open access status. Set true for open access articles only. Default: no filter. | |
| peerReview | No | Filter by peer review status. Set true for peer-reviewed articles only, false for non-peer-reviewed. Default: no filter. | |
| gbifDatasetKey | No | Filter to literature citing a specific dataset. Dataset UUID. Shows papers that used data from a particular dataset. | |
| publishingOrganizationKey | No | Filter to literature citing data from a specific publisher. Organization UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds no further behavioral context such as result ordering, pagination behavior, or result-size limits, so it neither exceeds nor contradicts 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main purpose is front-loaded in the first sentence. The second sentence ('peer-reviewed publications, reports, and papers') is somewhat redundant with the first and could be tightened, but overall it is short and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter read-only search tool with fully documented schema and no output schema, the description covers the essentials of what the tool does and why it is useful. It omits any hint of return shape or default pagination behavior, but those are largely inferable from the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all nine parameters (q, year, limit, offset, topics, openAccess, peerReview, gbifDatasetKey, publishingOrganizationKey) in detail. The description adds no parameter-level meaning beyond that, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search scientific literature that cites GBIF data', elaborated with 'peer-reviewed publications, reports, and papers that used GBIF-mediated data'. This distinguishes it well from the occurrence/registry siblings, though it never explicitly contrasts with its closest sibling gbif_literature_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The third sentence gives usage motivation ('understanding data impact, finding research examples, tracking research trends'), which implies relevance context. However, there is no explicit when-to-use vs. when-not, no mention of gbif_literature_get as the single-record alternative, and no noted prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_maps_get_raster_tile_urlARead-onlyIdempotent
Generate URL for pre-rendered PNG density map tiles. Raster tiles show occurrence density with various color schemes. Fast rendering, ideal for simple map displays. Use for quick visualization without client-side rendering overhead.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | Tile column. Valid: 0 to (2^z - 1). | |
| y | Yes | Tile row. Valid: 0 to (2^z - 1). | |
| z | Yes | Zoom level (0-20). Standard web Mercator zoom. | |
| year | No | Filter by year/range. Example: "2020,2024". | |
| scale | No | Pixel density. 1=standard (256x256), 2=retina (512x512). Default: 1. | |
| style | No | Color scheme for density visualization. Common: "purpleHeat.point" (purple heatmap), "fire.point" (red/yellow), "glacier.point" (blue), "classic.poly" (traditional). Affects how occurrence density is visualized. | |
| country | No | Filter to country. Example: "KE" (Kenya). | |
| taxonKey | No | Filter to specific taxon. Example: 5231190 (lions). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description usefully adds that tiles are pre-rendered and fast to serve, but says nothing about authentication, rate limits, or caching.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with what is produced, then characteristics. No filler, though the 'fast rendering' and 'quick visualization' points overlap slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool returns a URL, which the description explicitly names as the output, so no output schema is needed. Combined with full schema coverage and rich annotations, an agent has enough to call it correctly; only sibling routing remains thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (x/y/z, style, scale, year, country, taxonKey) is already documented in the schema. The description's mention of 'various color schemes' duplicates the style parameter docs without adding syntax or constraints. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Generate URL for pre-rendered PNG density map tiles.' The PNG/raster nature clearly separates it in kind from the vector-tile sibling, even though that sibling is never named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Fast rendering, ideal for simple map displays. Use for quick visualization without client-side rendering overhead' implies the usage context but never states when to prefer this over gbif_maps_get_tile_url or gbif_maps_get_vector_tile_url, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_maps_get_tile_urlBRead-onlyIdempotent
Generate a URL for occurrence map tiles with customizable styling and filters. Returns tile URLs in standard web Mercator projection (EPSG:3857) for use in web mapping applications, GIS software, or direct visualization.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | Tile column number (X coordinate). Horizontal position in the tile grid at the given zoom level. Valid range: 0 to (2^z - 1). Example: at zoom 0, only x=0 is valid; at zoom 1, x can be 0 or 1. | |
| y | Yes | Tile row number (Y coordinate). Vertical position in the tile grid at the given zoom level. Valid range: 0 to (2^z - 1). Uses standard TMS (Tile Map Service) row numbering. | |
| z | Yes | Zoom level (0-20). 0 shows the entire world, 20 shows street-level detail. Common values: 0-2 (world), 3-5 (continental), 6-10 (country/regional), 11-15 (city), 16-20 (neighborhood/street). Standard web Mercator zoom levels. | |
| srs | No | Spatial Reference System. Default: EPSG:3857 (Web Mercator). Alternative: EPSG:4326 (WGS84 lat/long). Most web mapping libraries expect EPSG:3857. | |
| year | No | Filter by observation year or year range. Format: "2024" (single year) or "2020,2024" (range from 2020-2024). Only occurrences from specified year(s) will appear. | |
| scale | No | Pixel density scale for retina displays. 1 = standard (256x256px), 2 = retina/2x (512x512px), 4 = ultra-high DPI. Higher values produce sharper images on high-DPI screens but larger file sizes. Default: 1. | |
| style | No | Map style name. Controls color scheme and visualization type. Common values: "classic.poly" (polygons), "purpleHeat.point" (heatmap), "green.poly", "fire.point", "glacier.point". Get available styles from gbif_maps_list_styles. | |
| format | No | Tile format. PNG (raster image, best for visualization) or MVT (Mapbox Vector Tiles, best for interactive maps with client-side styling). Default: png. | png |
| country | No | Filter to specific country. 2-letter ISO country code. Example: "US", "BR", "KE". Only occurrences from this country will be mapped. | |
| taxonKey | No | Filter to specific taxon and all its children. GBIF taxon key. Example: 212 (all birds), 5231190 (Panthera leo - African lion). Only occurrences of this taxon will be shown on the map. | |
| datasetKey | No | Filter to specific dataset. Dataset UUID. Only occurrences from this dataset will be mapped. Get dataset UUIDs from gbif_registry_search_datasets. | |
| basisOfRecord | No | Filter by observation type. Values: HUMAN_OBSERVATION, MACHINE_OBSERVATION, PRESERVED_SPECIMEN, FOSSIL_SPECIMEN, LIVING_SPECIMEN, MATERIAL_SAMPLE, OCCURRENCE. Controls which types of records appear on map. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive, openWorld), so the bar is lower. The description usefully discloses the return artifact (tile URL strings) and the projection (EPSG:3857 Web Mercator), but says nothing about behavior at out-of-range coordinates, rate limits, or why a generic tool exists alongside the raster/vector variants.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, no filler. The second sentence partially restates what the srs parameter already documents, which is minor redundancy but keeps the size appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the right minimum of explaining that a tile URL is returned, which is adequate for a 12-parameter URL-builder. What is missing is the context an agent most needs: how this tool relates to its vector/raster siblings and the style-listing tool, leaving a real disambiguation hole.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries the semantics for all 12 parameters; baseline 3 applies. The description only gestures at 'customizable styling and filters' and otherwise adds nothing, and its blanket claim that tiles come back in EPSG:3857 sits slightly awkwardly against the srs parameter that permits EPSG:4326.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Generate a URL for occurrence map tiles,' scoped by styling and filters. That is clear on its own, but the sibling list contains gbif_maps_get_vector_tile_url and gbif_maps_get_raster_tile_url, and the description makes no attempt to distinguish this generic tool from those two near-identical siblings, which is the main ambiguity an agent faces here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is a downstream-consumer list ('web mapping applications, GIS software, or direct visualization'), which describes what the URL is for rather than when to call this tool instead of the raster/vector tile siblings. With three overlapping tile-URL tools available, the absence of an explicit when-to-use and when-not-to-use rule is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_maps_get_vector_tile_urlARead-onlyIdempotent
Generate URL for occurrence vector tiles in Mapbox Vector Tile (MVT) format. Vector tiles enable client-side styling, interactivity, and dynamic rendering. Ideal for web mapping libraries like Mapbox GL JS, Leaflet with vector tile plugins, or OpenLayers.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | Tile column number. Horizontal position in tile grid. Valid range: 0 to (2^z - 1). | |
| y | Yes | Tile row number. Vertical position in tile grid. Valid range: 0 to (2^z - 1). | |
| z | Yes | Zoom level (0-20). Controls detail level and tile grid size. Standard web Mercator zoom levels. | |
| year | No | Filter by year or year range. Format: "2024" or "2020,2024". | |
| style | No | Style name for vector tiles. Common: "classic.poly", "green.poly". Get available styles from gbif_maps_list_styles. | |
| country | No | Filter to specific country. 2-letter ISO code. Example: "US". | |
| taxonKey | No | Filter to specific taxon. GBIF taxon key. Example: 212 (birds). | |
| datasetKey | No | Filter to specific dataset. Dataset UUID. | |
| basisOfRecord | No | Filter by record type. Example: HUMAN_OBSERVATION, PRESERVED_SPECIMEN. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds useful context about what vector tiles enable (client-side styling, interactivity, dynamic rendering), but it does not add behavioral details beyond annotations, such as authentication requirements, rate limits, or what exactly the generated URL returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and uses three sentences without excessive length. The second and third sentences are somewhat promotional but still useful for understanding intended use, so it is concise overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately conveys that the tool generates a URL and describes its format and intended use. The annotations cover safety and idempotency, and the schema fully documents parameters, leaving only minor gaps such as how the returned URL should be used or whether any authentication is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters are already documented in the input schema, including tile coordinates, year filtering, style names, country codes, taxon keys, dataset keys, and basis of record. The description adds no parameter-level meaning 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Generate) and resource (URL for occurrence vector tiles) and specifies the format (Mapbox Vector Tile / MVT). It clearly distinguishes this from a raster tile tool by naming the vector format, though it does not explicitly contrast itself with the sibling gbif_maps_get_raster_tile_url or gbif_maps_get_tile_url.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives implied usage context by naming ideal client libraries (Mapbox GL JS, Leaflet with vector tile plugins, OpenLayers), which helps an agent understand when this tool is appropriate. However, it does not provide explicit when-to-use versus when-not-to-use guidance, nor does it route the agent between this, the raster tile tool, or the generic tile URL tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_maps_list_stylesARead-onlyIdempotent
List all available map visualization styles for occurrence tiles. Returns style names, descriptions, and types (density/point/poly). Use to discover visualization options before generating tile URLs with gbif_maps_get_tile_url.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/openWorldHint and non-destructiveness, so the safety profile is covered. The description usefully adds the shape of the response (style names, descriptions, and types density/point/poly), which matters since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action and then the return contents and routing hint. Every clause earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter enumeration tool with no output schema, the description supplies everything needed: what it lists, what fields come back, and how it feeds into the tile-URL siblings. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The schema itself already states 'No input parameters required' at 100% coverage, and the description adds nothing misleading about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (map visualization styles for occurrence tiles), and immediately distinguishes itself from the tile-URL siblings as a discovery/enumeration tool. An agent can tell what it does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to use it ('discover visualization options before generating tile URLs') and names the specific sibling (gbif_maps_get_tile_url) as the follow-up. No when-not guidance is given, but the usage context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_occurrence_countARead-onlyIdempotent
Fast endpoint for counting occurrences matching filters without retrieving full records. Useful for statistics, dashboards, and filter validation before running full searches.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search query | |
| year | No | Year or year range (e.g., "2020,2024") | |
| issue | No | Data quality issues | |
| month | No | Month (1-12) | |
| country | No | ISO country code | |
| classKey | No | Class taxon key | |
| genusKey | No | Genus taxon key | |
| geometry | No | WKT geometry | |
| orderKey | No | Order taxon key | |
| taxonKey | No | GBIF taxon key | |
| continent | No | Continent filter | |
| familyKey | No | Family taxon key | |
| phylumKey | No | Phylum taxon key | |
| datasetKey | No | Dataset UUID | |
| kingdomKey | No | Kingdom taxon key | |
| basisOfRecord | No | Basis of record types | |
| hasCoordinate | No | Filter to records with coordinates | |
| publishingOrg | No | Publishing organization UUID | |
| scientificName | No | Scientific name to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world behavior; the description adds the 'fast' performance trait and that no full records are returned, but says nothing about return shape (single total vs. breakdown) or throttling limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the fast/no-records distinction, and every phrase (statistics, dashboards, filter validation) adds real usage signal with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only count endpoint with fully documented params, the description is largely sufficient; the main missing piece is whether the result is a single number and how multiple filters combine (AND semantics).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with every one of the 19 filter params documented inline, so the schema carries the parameter burden. The description only characterizes the filters collectively, adding no syntax or semantics beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (counting) and resource (occurrences) with the key differentiator 'without retrieving full records,' which cleanly separates it from gbif_occurrence_search and the counts_by_* breakdown siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage contexts (statistics, dashboards, filter validation before full searches) and implicitly positions it ahead of full searches, but does not explicitly name the sibling to use when breakdowns by dimension are wanted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_occurrence_counts_by_basis_of_recordARead-onlyIdempotent
Get occurrence counts broken down by basis of record type (observations, specimens, etc.). Returns a breakdown showing how many occurrences of each type match your filters. Essential for understanding dataset composition and data quality. Very fast - use for dashboards and quick statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Filter by year or range. Example: "2020,2024" | |
| country | No | Filter to country. Example: "KE" (Kenya) | |
| taxonKey | No | Filter to specific taxon. Example: 5231190 (Panthera leo) | |
| datasetKey | No | Filter to specific dataset UUID | |
| hasCoordinate | No | Filter to georeferenced records |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so safety is covered. The description adds genuinely new behavioral context: the output shape (a breakdown of counts per type matching the filters) and a performance claim ("Very fast"), which helps an agent decide between this and slower search/count tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, correctly front-loaded with what the tool does and what it returns. The final sentence is slightly promotional ("Very fast") but still carries usable signal about latency; no significant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully explains the return shape (per-type counts matching filters). All parameters are documented in the schema, and annotations cover the safety profile. It does not mention that all filters are optional (global aggregate) or how large result sets behave, which is a minor gap for a 0-required-param facet tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five filter parameters (year, country, taxonKey, datasetKey, hasCoordinate) are already documented with examples in the schema. The description only says results "match your filters" and adds no format or semantics beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get counts), resource (occurrences), and facet (basis of record type), with concrete examples ("observations, specimens") that clarify what the grouping means. This implicitly distinguishes it from the plain gbif_occurrence_count and from other facet tools, but it never explicitly names a sibling or states how it differs from e.g. counts_by_dataset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use context: "Essential for understanding dataset composition and data quality" and "use for dashboards and quick statistics." However, it offers no when-not guidance and does not route the agent to alternative facet tools when a different breakdown is actually wanted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_occurrence_counts_by_countryARead-onlyIdempotent
Get occurrence counts broken down by country for geographic distribution analysis. Returns counts per country showing global distribution patterns. Essential for understanding species ranges, identifying data gaps by region, and prioritizing conservation efforts. Fast statistics endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Filter by year or range. Example: "2020,2024" for recent records only | |
| taxonKey | No | Filter to specific taxon. Example: 5231190 (Panthera leo) to see lion distribution across countries | |
| datasetKey | No | Filter to specific dataset to see its geographic coverage | |
| basisOfRecord | No | Filter by record types | |
| hasCoordinate | No | Filter to georeferenced records only |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds one genuinely useful trait, 'Fast statistics endpoint,' signaling lower cost/latency than a full search, plus a brief note on the return shape. It omits pagination/limits, but for a stats endpoint this is a modest gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and result, followed by scope, then rationale. Four short sentences, mostly earning their place. The 'Essential for...' clause leans slightly promotional but still conveys legitimate analysis use cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Five optional filters, full schema coverage, and a complete safety annotation set; no output schema is present, so the description's one-line note on the return shape ('counts per country') is sufficient. Only pagination/size limits and the publishing-country distinction are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five filters are documented in the schema with examples (year range, taxonKey example, dataset, basisOfRecord, hasCoordinate). The description adds no parameter-level meaning, which is appropriate given the schema does the work — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get occurrence counts broken down by country.' The geographic-distribution framing makes clear this is country-of-occurrence, not publishing country. However, it never names or contrasts with the very close sibling gbif_occurrence_counts_by_publishing_country, so disambiguation is left to the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives use cases ('understanding species ranges, identifying data gaps by region, prioritizing conservation efforts') but these are motivations rather than when-to-use/when-not-to-use guidance. No alternatives are named, and the near-identical publishing-country sibling is not addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_occurrence_counts_by_datasetARead-onlyIdempotent
Get occurrence counts broken down by contributing dataset. Identifies which datasets contribute most records for a given query. Essential for data attribution, understanding data sources, finding primary datasets for a taxon/region, and acknowledging data providers. Returns dataset UUIDs with counts.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Filter by year or range. Example: "2020,2024" | |
| country | No | Filter by occurrence country. Example: "KE" to see datasets with Kenyan data | |
| taxonKey | No | Filter to specific taxon. Example: 5231190 (lions) to see which datasets have lion records | |
| basisOfRecord | No | Filter by record types | |
| hasCoordinate | No | Filter to georeferenced records |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructiveness, so safety is covered. The description adds the return shape ('dataset UUIDs with counts'), which is genuine value, but omits any result-set limits, ranking behavior, or pagination, which matter for a faceted count endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and closed with the return type. The middle sentence is a list of use cases that earns its place for routing, though it is slightly longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does supply the return shape and the tool has no required parameters, so an agent can call it correctly. It stops short of describing result volume, ordering, or truncation behavior, which is the remaining gap for a count/facet tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (year, country, taxonKey, basisOfRecord, hasCoordinate) are already documented with examples in the schema. The description adds no parameter syntax or filter-interaction detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get occurrence counts broken down by contributing dataset.' The 'by dataset' dimension clearly distinguishes it from siblings like gbif_occurrence_counts_by_year, by_country, and by_basis_of_record without needing to read any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage contexts: 'data attribution, understanding data sources, finding primary datasets for a taxon/region, and acknowledging data providers.' However, it never names an alternative tool or states when NOT to use this one (e.g., when you only need a total count).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_occurrence_counts_by_publishing_countryARead-onlyIdempotent
Get occurrence counts broken down by the country of the publishing organization. Shows which countries are contributing data, useful for understanding data provider distribution, identifying data collaboration opportunities, and analyzing global participation in GBIF. Different from occurrence country (where specimen was collected).
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Filter by year or range | |
| country | No | Filter by occurrence country (where collected) | |
| taxonKey | No | Filter to specific taxon. Example: 212 (birds) to see which countries publish bird data | |
| datasetKey | No | Filter to specific dataset | |
| hasCoordinate | No | Filter to georeferenced records |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered by structured data. The description adds no behavioral context beyond that: no note on response size, whether counts are exact or approximate, or any rate/caching behavior for a potentially large aggregation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the operation and dimension, followed by usage and then the critical disambiguation. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotation of return shape, yet the description never states what the result looks like (an array/pairs of publishing country and count). For a counts endpoint this is largely inferable, but explicitly naming the return shape would close the only real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns an increment because the 'different from occurrence country' sentence disambiguates the meaning of the country filter relative to the grouping dimension, which is the single most error-prone aspect of this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific aggregation (occurrence counts) grouped by a precisely defined dimension (country of the publishing organization). The final sentence explicitly distinguishes it from occurrence country, which is the most likely confusion with the sibling gbif_occurrence_counts_by_country.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives three concrete use cases (provider distribution, collaboration opportunities, global participation) and an explicit contrast with the collection-country alternative. It stops short of stating when an agent should prefer this over gbif_occurrence_counts_by_publishing_org or gbif_occurrence_counts_by_dataset, so it is clear but not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_occurrence_counts_by_publishing_orgBRead-onlyIdempotent
Get occurrence counts broken down by publishing organization UUID. Identifies which institutions are contributing the most data for a query. Essential for data attribution, understanding institutional contributions, acknowledging data providers, and analyzing organizational participation. Returns organization UUIDs with occurrence counts.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Filter by year or range | |
| country | No | Filter by occurrence country | |
| taxonKey | No | Filter to specific taxon. Example: 212 (birds) to see which organizations publish bird data | |
| basisOfRecord | No | Filter by record types | |
| hasCoordinate | No | Filter to georeferenced records |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds one genuinely useful behavioral fact — the return shape (organization UUIDs with occurrence counts), valuable since there is no output schema — but the remaining sentences are promotional rather than disclosing ordering, ranking, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and return shape are correctly front-loaded in the first and last sentences. The middle sentence is a four-item promotional list ('data attribution, understanding institutional contributions, acknowledging data providers, analyzing organizational participation') that mostly restates the same idea and does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety, a 100%-covered schema, and the description supplying the return shape, an agent has enough to call the tool. The missing piece is sibling disambiguation within the large counts_by_* family, which leaves a real risk of selecting the wrong breakdown dimension.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five filters (year, country, taxonKey, basisOfRecord, hasCoordinate) are already documented, including a concrete taxonKey example. The description adds no parameter-level meaning beyond noting that results are 'for a query', so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: occurrence counts broken down by publishing organization UUID. It is clear what the tool produces, but it never differentiates itself from the many sibling aggregation tools, notably gbif_occurrence_counts_by_publishing_country and gbif_occurrence_counts_by_dataset, which an agent could easily confuse with this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives implied use contexts (data attribution, acknowledging data providers, analyzing organizational participation), which signals when the tool is relevant. However, it offers no explicit when-to-use vs. when-not, and never names an alternative sibling such as counts_by_dataset or counts_by_country when a different breakdown is wanted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_occurrence_counts_by_taxonARead-onlyIdempotent
Get occurrence counts broken down by species (GBIF backbone speciesKey) for taxonomic composition analysis. Returns counts per species within the filtered taxon, most frequent first (top 100). Useful for understanding biodiversity patterns, identifying dominant species, and analyzing taxonomic coverage within a higher taxon. Fast statistics for ecological analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Filter by year or range | |
| country | No | Filter by country | |
| taxonKey | No | Parent taxon to analyze. Example: 2877951 (genus Quercus) returns counts for each oak species | |
| datasetKey | No | Filter to specific dataset | |
| hasCoordinate | No | Filter to georeferenced records |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description nevertheless adds real behavior: results are sorted most-frequent-first and truncated to the top 100, plus a note that it is a fast statistics endpoint. That ordering/cap disclosure is exactly the kind of context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and result shape, which is good, but the second and third sentences restate the same idea three ways ('taxonomic composition analysis', 'biodiversity patterns', 'identifying dominant species', 'taxonomic coverage') and 'Fast statistics for ecological analysis' is filler. It could lose a third of its length with no information loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so adequately (per-species counts, sorted, capped at 100). Filters are fully documented in the schema. What is missing is whether the endpoint applies implicit defaults or how a very large higher taxon is handled, but nothing critical to a correct call is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with 5 parameters, so the schema already documents year, country, datasetKey, hasCoordinate, and gives a taxonKey example. The description adds only the framing that counts are broken down by the species under the supplied taxon; no format, range, or default 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get counts), resource (occurrences), and the breakdown dimension (species / speciesKey) that separates it from sibling count tools like gbif_occurrence_count and gbif_occurrence_counts_by_country. The scoping phrase 'within the filtered taxon' makes the aggregation level unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives implied analytical contexts ('biodiversity patterns', 'dominant species') but never states when to choose this over gbif_occurrence_count or the other counts_by_* siblings, nor any prerequisite for taxonKey. Usage is inferable from the name and description but not directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_occurrence_counts_by_yearARead-onlyIdempotent
Get occurrence counts broken down by year for temporal trend analysis. Returns year-by-year counts showing how observations have accumulated over time. Perfect for time series visualization, identifying data collection patterns, and understanding temporal coverage. Fast endpoint for dashboards.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Filter to specific country. Example: "US", "BR", "KE" | |
| taxonKey | No | Filter to specific taxon and descendants. Example: 212 (all birds), 5231190 (lions only) | |
| datasetKey | No | Filter to specific dataset UUID | |
| basisOfRecord | No | Filter by record types. Example: ["HUMAN_OBSERVATION", "PRESERVED_SPECIMEN"] | |
| hasCoordinate | No | Filter to records with coordinates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the description isn't burdened with that. It adds real context beyond annotations by disclosing the return shape ('year-by-year counts') and the performance trait 'Fast endpoint for dashboards'. It omits auth, pagination, and rate-limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core operation and reasonably sized. There is mild redundancy across 'temporal trend analysis', 'accumulated over time', and 'temporal coverage', but every sentence still contributes angle or return-shape information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by describing the return (year-by-year counts). Five optional filters are fully documented in-schema, and annotations carry the safety profile, so an agent has enough to invoke it correctly; only pagination/limits are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all five filters documented in-schema, so the structured data carries the semantics. The description mentions temporal filtering implicitly but adds no format, syntax, or defaulting detail beyond what the schema already supplies. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get occurrence counts broken down by year') and the distinguishing dimension (year) is front-loaded. This separates it from sibling tools like gbif_occurrence_counts_by_country or _by_dataset. It stops short of naming those siblings explicitly, so the agent must infer the contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It lists use cases ('time series visualization', 'identifying data collection patterns', 'dashboards'), which implies when the tool is appropriate, but never states when to prefer it over the other counts_by_* siblings or any exclusions. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_occurrence_download_predicate_builderBRead-onlyIdempotent
Helper tool to build a download predicate from simple search parameters. Converts occurrence search filters into the complex predicate format required by the download API.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Year or year range for occurrence date. Example: "2020" (single year), "2015,2020" (range from 2015 to 2020). | |
| country | No | 2-letter ISO country code where occurrence was recorded. Example: "US", "BR", "KE". | |
| geometry | No | WKT geometry polygon to limit download to geographic area. Polygons must be anticlockwise. Example: "POLYGON ((30.1 10.1, 40 40, 20 40, 10 20, 30.1 10.1))". | |
| taxonKey | No | GBIF taxon key. A taxon key from the GBIF backbone. All child taxa are included in the download. Example: 212 (for Aves - all birds). | |
| datasetKey | No | Dataset UUID to limit download to specific dataset. Example: "13b70480-bd69-11dd-b15f-b8a03c50a862". | |
| basisOfRecord | No | Basis of record types to include. Example: ["PRESERVED_SPECIMEN", "FOSSIL_SPECIMEN"] for museum specimens only. Values: OBSERVATION (general), HUMAN_OBSERVATION, MACHINE_OBSERVATION, MATERIAL_SAMPLE, PRESERVED_SPECIMEN, FOSSIL_SPECIMEN, LIVING_SPECIMEN, MATERIAL_CITATION, OCCURRENCE. | |
| hasCoordinate | No | Filter to records with (true) or without (false) geographic coordinates. Example: true for georeferenced records only. | |
| scientificName | No | Scientific name from the GBIF backbone. Example: "Panthera leo". All synonyms and child taxa included. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds that the output is a predicate consumed by the download API, which is useful context, but says nothing about return format, whether the output must be passed through unchanged, or error behavior for invalid filters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the core purpose is front-loaded. However, the second sentence largely restates the first ('build a download predicate from simple search parameters' vs 'converts occurrence search filters into the complex predicate format'), so there is mild redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter helper with no output schema, the description should at least characterize the return value (the predicate shape/format) and how it feeds the download tool. It explains the role but leaves the agent uncertain about what it actually produces and how to use it next, which is a real gap for a tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 8 parameters with examples (year ranges, ISO country codes, WKT winding order, taxonKey semantics). The description contributes no additional parameter meaning beyond what the schema provides, which is the expected baseline here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it builds a download predicate from simple search parameters and converts occurrence search filters into the predicate format required by the download API. This is clearly distinguishable from listing/searching siblings, though it never names the specific download tool whose input it produces (e.g. gbif_occurrence_download_request).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'required by the download API', suggesting this runs before a download request, but the description never says when to use this versus other occurrence tools or explicitly names the alternative. No exclusions or prerequisites are given, so the agent must infer the workflow position.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_occurrence_download_requestA
Request an asynchronous download for large occurrence datasets beyond pagination limits (100,000+ records). Returns a download key for checking status. REQUIRES AUTHENTICATION: Set GBIF_USERNAME and GBIF_PASSWORD environment variables.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Download format. DWCA (Darwin Core Archive) = Full format with metadata and extensions, most comprehensive. SIMPLE_CSV = Simplified CSV format, easier to work with in spreadsheets. SPECIES_LIST = List of unique species only, no occurrence records. Default: SIMPLE_CSV. | SIMPLE_CSV |
| creator | Yes | GBIF username (creator of the download). This is your GBIF.org username. Example: "john.smith". Required for download attribution and access control. | |
| predicate | No | Download predicate defining filters (REQUIRED). Complex JSON structure specifying which records to include. Use gbif_occurrence_download_predicate_builder tool to construct this from simple search parameters, or build manually following GBIF download API predicate format. Example: {type: "equals", key: "TAXON_KEY", value: "212"} for all bird records. | |
| sendNotification | No | Send email notification on completion. Set to true (default) to receive email when download is ready, false to skip notifications. Recommended: true for downloads that take more than a few minutes. | |
| notificationAddresses | No | Email addresses to notify when download completes. Receives notification with download link when processing is finished. Example: ["user@example.com"]. Optional, but highly recommended for large downloads that may take hours to process. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-idempotent, open-world operation, but the description adds real value beyond them: it is asynchronous, it returns a download key, and it REQUIRES authentication via GBIF_USERNAME/GBIF_PASSWORD environment variables. Auth and async behavior are exactly the kind of operational context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero waste: purpose and scope first, return behavior second, authentication requirement last. The most decision-relevant constraint (large datasets / async) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async job-creating tool with no output schema, the description covers the essential gaps: async execution, the returned download key, and the auth prerequisite. It could go slightly further by stating what to do next (poll gbif_occurrence_download_status), but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter (format, creator, predicate, sendNotification, notificationAddresses) is fully documented in the schema, so the schema carries the parameter burden. The description only alludes to the predicate indirectly via the status/predicate-builder mention, adding no new parameter syntax or semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Request an asynchronous download') and scopes it precisely: 'for large occurrence datasets beyond pagination limits (100,000+ records)'. The pagination threshold implicitly distinguishes it from gbif_occurrence_search without the agent opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for use (datasets beyond pagination limits, 100,000+ records) and hints at follow-up via 'checking status', implying gbif_occurrence_download_status. It does not explicitly name the alternative for smaller queries or state exclusions, so it falls 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_occurrence_download_statusARead-onlyIdempotent
Check the status and retrieve metadata for an occurrence download request. Returns status, download link when ready, record count, and file size.
| Name | Required | Description | Default |
|---|---|---|---|
| downloadKey | Yes | Download key returned from gbif_occurrence_download_request |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds useful non-annotation detail about the readiness lifecycle and return payload (status, link, record count, file size).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and followed by the return payload; no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the return fields, filling that gap. It stops short of describing non-ready states (e.g., pending/failed) or retry guidance, which would complete the polling picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with 100% schema description coverage, which already states it is the key returned from gbif_occurrence_download_request. The description repeats rather than extends this, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb ('Check the status and retrieve metadata') and resource ('occurrence download request'), and clearly contrasts with the sibling gbif_occurrence_download_request by focusing on status retrieval rather than initiating a download.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'when ready' phrasing implies this is polled after a download request, and the downloadKey param references gbif_occurrence_download_request, so the workflow context is inferable. However, there is no explicit statement of when to call this versus alternatives or how often to poll.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_occurrence_getARead-onlyIdempotent
Get complete details for a single occurrence record including verbatim fields, interpretation history, media, and data quality issues.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | GBIF occurrence key (unique identifier). This is a numeric key that uniquely identifies an occurrence record in GBIF. Example: 1258202889 (a specific specimen record). You can find occurrence keys from search results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is low. Because there is no output schema, the enumeration of returned content (verbatim fields, interpretation history, media, quality issues) is genuinely useful behavioral context that tells the agent what data it will receive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, with zero filler. Every clause earns its place by expanding what 'complete details' includes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with full annotation coverage, the description plus schema is nearly complete; the content enumeration compensates for the missing output schema. Only the routing against sibling lookup tools (search vs. verbatim vs. this) is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'key' parameter is fully documented in the schema, including format, example and provenance ('found from search results'). The description adds no parameter-level detail beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (a single occurrence record) and enumerates the payload categories: verbatim fields, interpretation history, media, data quality issues. This clearly separates it from gbif_occurrence_search/count (bulk) and gbif_occurrence_verbatim, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to call this versus gbif_occurrence_search or gbif_occurrence_verbatim, nor any prerequisite such as needing a key obtained from a prior search (that hint lives only in the schema). Usage is only inferable from the word 'single'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_occurrence_searchARead-onlyIdempotent
Search GBIF occurrence records (species observations and specimens) with comprehensive filtering by taxonomy, geography, time, data quality, and more. Returns paginated results with optional facets for aggregations.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Simple full-text search parameter. The value for this parameter can be a simple word or a phrase. Wildcards are not supported. | |
| year | No | The 4 digit year. A year of 98 will be interpreted as AD 98. Supports range queries. Example: 1998 (single year), "2015,2020" (range from 2015 to 2020). Parameter may be repeated or a range. | |
| depth | No | Depth in metres relative to altitude. For example 10 metres below a lake surface with given altitude. Supports range queries. Example: "10,20" (between 10 and 20 meters depth). Parameter may be repeated or a range. | |
| facet | No | A facet name used to retrieve the most frequent values for a field. Facets are allowed for all search parameters except geometry and geoDistance. This parameter may be repeated to request multiple facets. Example: ["datasetKey", "basisOfRecord"] to get counts by dataset and basis of record. Note: terms not available for searching are not available for faceting. | |
| issue | No | A specific interpretation issue as defined in GBIF OccurrenceIssue enumeration. Common values: COUNTRY_COORDINATE_MISMATCH, ZERO_COORDINATE, TAXON_MATCH_FUZZY, RECORDED_DATE_INVALID, COORDINATE_OUT_OF_RANGE, etc. Use to filter by data quality issues or to exclude problematic records. Example: "COUNTRY_COORDINATE_MISMATCH". Parameter may be repeated. | |
| limit | No | Controls the number of results in the page. Using too high a value will be overwritten with the maximum threshold, which is 300 for this service. Sensible defaults are used so this may be omitted. Example: limit=100 to get 100 results per page. | |
| month | No | The month of the year, starting with 1 for January. Supports range queries. Example: 5 (May), can also use range like "3,6" (March through June). Parameter may be repeated or a range. | |
| decade | No | Decade, calculated as year/10. For example, 199 represents the 1990s (1990-1999). Example: 199 (1990s), 200 (2000s). Parameter may be repeated. | |
| offset | No | Determines the offset for the search results. A limit of 20 and offset of 40 will get the third page of 20 results. This service has a maximum offset of 100,000. Example: offset=300 to start at the 301st result. | |
| country | No | The 2-letter country code (as per ISO-3166-1) of the country in which the occurrence was recorded. Example: "US" (United States), "BR" (Brazil), "GB" (United Kingdom), "AF" (Afghanistan). Parameter may be repeated. | |
| classKey | No | Class taxon key from the GBIF backbone. All child taxa are included in the search. Example: 212 (for Aves - birds). Parameter may be repeated. | |
| genusKey | No | Genus taxon key from the GBIF backbone. All child taxa are included in the search. Example: 2435194 (for Panthera). Parameter may be repeated. | |
| geometry | No | Searches for occurrences inside a polygon described in Well Known Text (WKT) format. Only POLYGON and MULTIPOLYGON are accepted. Polygons must have anticlockwise ordering of points. Example: "POLYGON ((30.1 10.1, 40 40, 20 40, 10 20, 30.1 10.1))". Parameter may be repeated. | |
| orderKey | No | Order taxon key from the GBIF backbone. All child taxa are included in the search. Example: 729 (for Carnivora). Parameter may be repeated. | |
| taxonKey | No | A taxon key from the GBIF backbone or the specified checklist. All included (child) and synonym taxa are included in the search, so a search for Aves with taxonKey=212 will match all birds, no matter which species. Example: 2476674. Parameter may be repeated. | |
| continent | No | Continent, as defined in GBIF Continent vocabulary. Values: AFRICA, ANTARCTICA, ASIA, EUROPE, NORTH_AMERICA, OCEANIA, SOUTH_AMERICA. Example: "EUROPE". Parameter may be repeated. | |
| elevation | No | Elevation (altitude) in metres above sea level. Supports range queries. Example: "1000,1250" (between 1000 and 1250 meters). Parameter may be repeated or a range. | |
| familyKey | No | Family taxon key from the GBIF backbone. All child taxa are included in the search. Example: 9703 (for Felidae - cats). Parameter may be repeated. | |
| mediaType | No | The kind of multimedia associated with an occurrence. Values: STILL_IMAGE (photos/illustrations), MOVING_IMAGE (videos), SOUND (audio recordings). Example: "STILL_IMAGE" to find occurrences with photographs. Parameter may be repeated. | |
| phylumKey | No | Phylum taxon key from the GBIF backbone. All child taxa are included in the search. Example: 44 (for Chordata). Parameter may be repeated. | |
| waterBody | No | The name of the water body in which the Location occurs. Example: "Baltic Sea", "Pacific Ocean", "Lake Victoria". Parameter may be repeated. | |
| datasetKey | No | The occurrence dataset key (a UUID). Example: "13b70480-bd69-11dd-b15f-b8a03c50a862". Parameter may be repeated. | |
| kingdomKey | No | Kingdom taxon key from the GBIF backbone. All child taxa are included in the search. Example: 1 (for Animalia). Parameter may be repeated. | |
| recordedBy | No | The person who recorded the occurrence. Example: "Charles Darwin", "MiljoStyrelsen". Parameter may be repeated. | |
| typeStatus | No | Nomenclatural type (type status, typified scientific name, publication) applied to the subject. Filters for type specimens. Example: "HOLOTYPE" (single specimen designated as the type), "PARATYPE" (additional specimens cited in the description), "SYNTYPE", "LECTOTYPE", etc. Parameter may be repeated. | |
| repatriated | No | Filters for records whose publishing country is different from the country where the record was recorded. Example: true to find specimens collected in one country but held in another. | |
| subgenusKey | No | Subgenus taxon key from the GBIF backbone. All child taxa are included in the search. Parameter may be repeated. | |
| recordNumber | No | An identifier given to the occurrence at the time it was recorded. Often serves as a link between field notes and an occurrence record. Example: "OPP 7101". Parameter may be repeated. | |
| basisOfRecord | No | Basis of record, as defined in GBIF BasisOfRecord vocabulary. Values: OBSERVATION (general observation), HUMAN_OBSERVATION (visual/aural observation by human), MACHINE_OBSERVATION (automated sensor), MATERIAL_SAMPLE (physical sample), PRESERVED_SPECIMEN (museum specimen), FOSSIL_SPECIMEN (fossilized specimen), LIVING_SPECIMEN (zoo/botanical garden), MATERIAL_CITATION (specimen cited in publication), OCCURRENCE (generic type). Example: "PRESERVED_SPECIMEN". Parameter may be repeated. | |
| catalogNumber | No | An identifier assigned by the source within a physical collection or digital dataset for the record which may not be unique, but should be fairly unique in combination with the institution and collection code. Example: "K001275042". Parameter may be repeated. | |
| facetMincount | No | Used in combination with the facet parameter. Set facetMincount={#} to exclude facets with a count less than {#}. Example: facetMincount=10000 to only show facet values appearing 10,000+ times. | |
| hasCoordinate | No | Limits searches to occurrence records which contain a value in both latitude and longitude. Set to true to limit to records with coordinate values, false to limit to records without coordinate values. Example: true. | |
| publishingOrg | No | The publishing organization's GBIF key (a UUID). Example: "e2e717bf-551a-4917-bdc9-4fa0f342c530". Parameter may be repeated. | |
| stateProvince | No | The name of the next smaller administrative region than country (state, province, canton, department, region, etc.) in which the Location occurs. This term does not have data quality checks. Example: "Leicestershire", "California", "Queensland". Parameter may be repeated. | |
| collectionCode | No | An identifier assigned by the source to identify the physical collection or digital dataset uniquely within the context of an institution. Example: "F" (Flora collection). Parameter may be repeated. | |
| scientificName | No | A scientific name from the GBIF backbone or the specified checklist. All included and synonym taxa are included in the search. Under the hood a call to the species match service is done first to retrieve a taxonKey. Only unique scientific names will return results, homonyms return nothing! Consider using the taxonKey parameter instead. Example: "Quercus robur". Parameter may be repeated. | |
| decimalLatitude | No | Latitude in decimal degrees between -90° and 90° based on WGS 84. Supports range queries. Example: "40.5,45" (between 40.5 and 45 degrees). | |
| institutionCode | No | An identifier assigned by the source to identify the institution the record belongs to. Not guaranteed to be unique. Example: "K" (Royal Botanic Gardens, Kew). Parameter may be repeated. | |
| decimalLongitude | No | Longitude in decimals between -180 and 180 based on WGS 84. Supports range queries. Example: "-120,-95.5" (between -120 and -95.5 degrees). | |
| facetMultiselect | No | Used in combination with the facet parameter. Set facetMultiselect=true to still return counts for values that are not currently filtered. Useful for implementing multi-select faceted search interfaces. | |
| publishingCountry | No | The 2-letter country code (as per ISO-3166-1) of the country where the publishing organization is based. Example: "DK" (Denmark). Parameter may be repeated. | |
| hasGeospatialIssue | No | Limits searches to occurrence records which have spatial issues flagged (e.g., coordinates are invalid, out of range, country mismatch). Set to false to exclude records with geospatial issues, true to only include records with issues. Example: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered without description help. The description adds that results are paginated and that facets can return aggregations, which is mild extra context, but it says nothing about rate limits, the 100k offset ceiling interaction, or result ordering — gaps the schema covers only partially.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both earning their place: the first front-loads what is searched and over what dimensions, the second immediately follows with the return shape. No filler, no restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 42-parameter tool with no output schema, the description should carry more of the return-value burden than 'paginated results with optional facets' — it never indicates what fields come back per record or how facets are structured in the response. Annotations cover safety, but the read-result contract is left thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage the baseline is 3, but the description earns a bump by giving a categorical map of the 42 parameters ('taxonomy, geography, time, data quality'), which orients an agent to the filter surface faster than scanning the schema. It still adds no per-parameter syntax or format detail beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search GBIF occurrence records') and elaborates the record types (species observations and specimens) plus the filter dimensions. It is clear what the tool does, but it never distinguishes itself from sibling tools that also read occurrence data (gbif_occurrence_count, the numerous gbif_occurrence_counts_by_* tools, or the download family), so an agent gets no routing help.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'comprehensive filtering ... and more' suggests this is the general-purpose query entry point, but there is no explicit when-to-use guidance, no statement of when to prefer gbif_occurrence_count or the counts_by_* aggregators, and no prerequisites or exclusions. Adequate but leaves the alternative-selection decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_occurrence_verbatimARead-onlyIdempotent
Get the original, unprocessed occurrence record as provided by the publisher, before GBIF interpretation. Includes all original Darwin Core fields with full URIs.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | GBIF occurrence key (unique identifier). This is a numeric key that uniquely identifies an occurrence record. Example: 1258202889. Use this to retrieve the original record exactly as submitted by the data publisher, before GBIF processing and interpretation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint). The description adds genuinely useful context beyond that: the record is the publisher's raw submission and contains full Darwin Core fields with URIs. It does not cover auth or rate limits, but the annotation coverage lowers the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler, front-loading what the record is before the detail about containing original Darwin Core fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-value burden, and it does so reasonably by stating the record is the unprocessed publisher submission with all original Darwin Core fields and full URIs. It could say more about the exact payload shape, but it is sufficient for a single-key read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage and a single parameter, the schema already documents 'key' thoroughly (type, uniqueness, example, and purpose). The description adds nothing about the parameter, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (get) and resource (the original, unprocessed occurrence record as provided by the publisher) and adds a distinguishing scope qualifier: 'before GBIF interpretation.' This lets an agent separate it conceptually from the interpreted-record sibling, though it never names gbif_occurrence_get explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent can infer this is for retrieving publisher-original data instead of interpreted data, but there is no explicit when-to-use, when-not-to-use, or named alternative. The contrast with GBIF interpretation is the only routing signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_dataset_documentARead-onlyIdempotent
Get the EML (Ecological Metadata Language) metadata document for a dataset. Returns structured XML metadata including dataset description, contacts, geographic/taxonomic/temporal coverage, methods, and project information. Essential for proper dataset citation, understanding data collection methods, and accessing complete metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Dataset UUID. The unique identifier of the dataset whose EML document you want. EML is the standard metadata format for ecological datasets. Example: "50c9509d-22c7-4a22-a47d-8c48425ef4a7". Returns XML document. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive and open-world, so the safety profile is covered. The description adds behavior annotations do not: it enumerates the content of the returned document (description, contacts, coverage, methods, project info) and states the format is structured XML, which matters given there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action before the return description and use case. Each sentence carries information, though the final 'Essential for...' clause leans slightly promotional rather than operational.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by describing what the returned XML contains. Safety is covered by annotations and the single parameter is schema-documented, leaving little an agent needs that is missing; a note on document size or that XML parsing is required would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'key' parameter is fully documented in the schema, including format, example, and return type. The description adds no new parameter meaning (no format hints, no alternative identifier types like DOI), so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get the EML (Ecological Metadata Language) metadata document for a dataset,' which is sharply distinct from the plain metadata returned by gbif_registry_get_dataset. It does not explicitly name that sibling or contrast the two, so an agent must infer the difference from the 'EML document' phrasing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage contexts ('proper dataset citation,' 'understanding data collection methods,' 'accessing complete metadata'), which tells the agent when this tool is the right one. It stops short of naming alternatives or exclusions, so there is no explicit 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_registry_dataset_metricsARead-onlyIdempotent
Get occurrence statistics and quality metrics for a dataset. Returns counts by basis of record, country, year, and data quality indicators. Useful for understanding dataset composition and coverage.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Dataset UUID. The unique identifier of the dataset whose metrics you want to retrieve. Example: "50c9509d-22c7-4a22-a47d-8c48425ef4a7". Get from gbif_registry_search_datasets or gbif_registry_get_dataset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description adds the shape of the output (counts by basis of record, country, year, quality indicators) but says nothing about auth needs, caching, latency, or stability of the metrics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb+resource and followed by the return shape and a use case. No filler, though the final sentence is somewhat redundant with the second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates what is returned, and the lone parameter is fully specified in the schema. Safety is covered by annotations. Only the absence of guidance on when to prefer this over related dataset/occurrence tools keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'key' parameter is thoroughly documented in the schema itself (UUID format, example value, and where to obtain it). The description adds nothing about the parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get occurrence statistics and quality metrics for a dataset.' An agent can tell it apart from gbif_registry_get_dataset (metadata) and gbif_species_metrics (taxon-level). It does not, however, explicitly name or contrast any sibling, so it stays at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Useful for understanding dataset composition and coverage' implies a use case but gives no when-to-use vs when-not, no prerequisites, and no alternative tools (e.g. get_dataset for metadata, occurrence counts tools for live queries). Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_get_collectionARead-onlyIdempotent
Get complete details for a specific scientific collection from GRSciColl. Returns collection metadata, institutional affiliation, specimen holdings, contacts, and preservation methods. Essential for understanding physical specimen repositories.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Collection UUID from GRSciColl. The unique identifier for the collection. Example: UUID for USNM Entomology Collection or Kew Herbarium. Get from gbif_registry_search_collections. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the bar is lower. The description adds genuine value by enumerating the returned content categories, which partially compensates for the missing output schema. It stops short of describing completeness, size, or error behavior for an unknown key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and resource, and the payload list is efficient. The final 'Essential for...' sentence is mild promotional filler that could be cut without losing selection signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read with no output schema, the description does the necessary work by telling the agent what fields come back. Combined with full annotation coverage and a fully documented key, an agent has enough to call it correctly; only the absence of failure-mode detail keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'key' parameter is fully documented in the schema, including its source ('Get from gbif_registry_search_collections'). The description adds nothing about the key beyond what the schema states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get complete details for a specific scientific collection'), names the source registry (GRSciColl), and enumerates the payload (metadata, affiliation, holdings, contacts, preservation methods). This clearly separates it from the sibling gbif_registry_search_collections, which lists rather than retrieves a single record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing line ('Essential for understanding physical specimen repositories') gestures at when the tool is useful but names no alternative and no exclusion. It never says to obtain the key via gbif_registry_search_collections, nor how it relates to gbif_registry_get_institution. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_get_datasetARead-onlyIdempotent
Get complete metadata for a specific GBIF dataset by its UUID. Returns full dataset details including title, description, contacts, endpoints, geographic/taxonomic coverage, and citation information.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Dataset UUID (universally unique identifier). A unique identifier for the dataset in GBIF registry. Example: "50c9509d-22c7-4a22-a47d-8c48425ef4a7" (GBIF Backbone Taxonomy). Get UUIDs from gbif_registry_search_datasets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this read-only, idempotent, open-world and non-destructive, so the safety profile is covered. The description adds useful payload context by enumerating what comes back (title, contacts, endpoints, coverage, citation), which matters since there is no output schema, but it says nothing about auth needs, rate limits, or errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the operation and its key qualifier front-loaded and the return contents following. Nothing here would be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with annotations covering safety, the description is complete: it names what is fetched and enumerates the returned fields, compensating for the absent output schema. Only minor operational details (failure behavior on unknown UUIDs, rate limits) are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the schema already fully documents 'key' (UUID format, example value, and how to obtain UUIDs from gbif_registry_search_datasets). The description only restates 'by its UUID' and therefore earns the baseline 3 rather than adding new parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (complete metadata for a GBIF dataset) qualified by the lookup key (by its UUID), so the agent can immediately tell this is a point-fetch rather than the listing tool gbif_registry_search_datasets. It does not explicitly distinguish itself from the other per-dataset siblings (dataset_metrics, dataset_document), which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: fetching 'by its UUID' signals it is only appropriate when the UUID is already known, and the schema points to gbif_registry_search_datasets for discovery. There is no explicit when-not or named alternative (metrics/document) to route the agent among the per-dataset siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_get_installationARead-onlyIdempotent
Get complete details for a specific IPT or data server installation. Returns technical endpoint information, hosting organization, and datasets served by this installation.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Installation UUID. The unique identifier for the installation server. Get from gbif_registry_search_installations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds real value on top by disclosing what the response contains (technical endpoint information, hosting organization, datasets served), which matters because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero filler, front-loaded with the action and resource before the return-value detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read with full schema coverage and rich annotations, the description supplies enough; the return-content summary compensates for the absent output schema. It is only slightly thin on how the result differs from a search hit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents the key as a UUID with its source tool, so the baseline is 3. The description adds nothing about the parameter itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('a specific IPT or data server installation') and even names the returned content. The word 'specific' implicitly separates it from gbif_registry_search_installations, but no sibling is named explicitly, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the word 'specific' suggests this is the detail-fetch to follow a search, and the schema's key description points to gbif_registry_search_installations. The description itself gives no explicit when-to-use or 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_registry_get_institutionARead-onlyIdempotent
Get complete details for a specific scientific institution from GRSciColl. Returns institutional metadata, collections housed, contacts, addresses, and identifiers. Use to understand institution profiles and their collection holdings.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Institution UUID from GRSciColl. The unique identifier for the institution. Example: UUID for Smithsonian Institution or Natural History Museum London. Get from gbif_registry_search_institutions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description goes beyond them by naming the return payload (metadata, collections, contacts, addresses, identifiers), which matters since there is no output schema. It does not mention auth, rate limits, or error behavior for unknown keys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and resource, followed by the payload and a use case. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers action, returns, and intent adequately. Minor gaps remain around absent-key behavior and the relationship to the search tool, but nothing essential to invoking it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'key' parameter is fully documented, including format (uuid), an example, and the source sibling (gbif_registry_search_institutions). The description adds nothing beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get complete details for a specific scientific institution from GRSciColl') and enumerates the returned content. The singular 'specific institution' implicitly contrasts with the sibling search tool, but no sibling is named explicitly in the description itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use to understand institution profiles and their collection holdings' gives a purpose-driven context, but there is no explicit when-to-use versus gbif_registry_search_institutions, nor any exclusion or prerequisite (e.g. needing a key from search first). Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_get_networkARead-onlyIdempotent
Get complete details for a specific dataset network. Returns network metadata, constituent datasets, contacts, and description. Use to understand collaborative data initiatives and their scope.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Network UUID. The unique identifier for the network. Example: UUID for eBird network or iNaturalist network. Get from gbif_registry_search_networks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds that the response includes constituent datasets, contacts, and description text, which is useful given there is no output schema, but it says nothing about invalid-key behavior or pagination of the constituent datasets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and resource, followed by return contents and intended use. No filler, though the final 'Use to...' sentence is the weakest and could be more directive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description compensates reasonably by naming the return payload (metadata, constituent datasets, contacts, description). Errors and response shape details are absent but minor for a simple lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the key parameter is fully described (UUID format, examples, and where to obtain it). The description adds nothing beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get complete details for a specific dataset network') and enumerates what it returns (metadata, datasets, contacts, description). It reads as the by-id counterpart to gbif_registry_search_networks, but it never names that sibling explicitly, so differentiation relies on the sibling's own name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use to understand collaborative data initiatives and their scope' gives a purpose but not a when-to-use rule or an alternative. The routing hint (get the key from gbif_registry_search_networks) lives in the schema, not the description, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_get_nodeARead-onlyIdempotent
Get complete details for a GBIF participant node. Returns node metadata, contacts, participation type, country information, and endorsement details. Use to understand national GBIF participation, governance structure, and institutional membership.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Node UUID. The unique identifier for the GBIF node. Get from gbif_registry_list_nodes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world behavior. The description adds the shape of returned fields, which is useful, but doesn't disclose error behavior (e.g., invalid UUID, not found) or anything beyond the annotation profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose, return contents, usage context. Front-loaded and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single required-param read tool with full schema coverage and comprehensive annotations, the description covers purpose, return shape, and usage context adequately. No output schema exists, but the description enumerates the main returned fields, which is sufficient; arguably could mention key sourcing but the schema already does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the key is a node UUID obtained from gbif_registry_list_nodes. The description adds no parameter-level detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (GBIF participant node), and enumerates what the response contains (metadata, contacts, participation type, country, endorsement). Clearly distinguishable from siblings like gbif_registry_list_nodes or gbif_registry_get_organization.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear purpose context ('Use to understand national GBIF participation, governance structure, and institutional membership') implying when to reach for it. Does not explicitly name an alternative tool or exclusion criteria, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_get_organizationARead-onlyIdempotent
Get complete details for a specific data-publishing organization. Returns contacts, addresses, datasets published, endorsement status, and institutional information.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Organization UUID. The unique identifier for the organization in GBIF registry. Example: "07f617d0-c688-11d8-bf62-b8a03c50a862" (GBIF Secretariat). Get from gbif_registry_search_organizations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description still adds value by disclosing the payload contents (contacts, addresses, datasets published, endorsement status, institutional information), which matters because no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler: purpose first, returned fields second. Every clause earns its place and the core action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple idempotent read with full schema coverage and annotations carrying the safety profile. The description compensates for the missing output schema by listing key returned fields; only richer detail on the returned structure would push it higher.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema coverage, the schema already documents 'key' fully, including its UUID format, an example, and the sibling tool to obtain it. The description adds no further parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Get' plus a precise resource ('a specific data-publishing organization') and an enumeration of what comes back. The resource noun cleanly separates it from sibling lookups like get_network, get_installation, get_collection and get_institution without the agent needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: it is a fetch-by-key operation for one known organization. There is no statement of when to prefer it over gbif_registry_search_organizations or gbif_registry_organization_datasets, and no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_list_nodesARead-onlyIdempotent
List GBIF participant nodes (national/organizational participants). Nodes represent countries or organizations that participate in GBIF governance and data sharing. Essential for understanding GBIF network structure, national participation, and institutional membership.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum nodes to return. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Default: 0. | |
| country | No | Filter to specific country node. 2-letter ISO code. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, non-destructive, so safety profile is covered. The description adds conceptual context about what nodes represent but discloses nothing about pagination behavior, result size, or return shape beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the core action, followed by definitional context. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with full schema coverage and annotations, the description supplies adequate conceptual grounding. Only a note on when to prefer sibling search tools is missing, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (limit, offset, country) are fully documented in the schema. The description adds no parameter detail beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'List' plus resource 'GBIF participant nodes' with a clarifying gloss that nodes are national/organizational participants. Clearly distinguished from siblings like gbif_registry_get_node (single node fetch) and search_organizations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States it is 'essential for understanding GBIF network structure...' which implies context of use, but never says when to use this versus search_organizations, search_networks, or get_node, and gives no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_network_datasetsARead-onlyIdempotent
List all constituent datasets within a specific network. Shows which datasets are part of a collaborative network. Useful for exploring thematic data collections like eBird observations or marine biodiversity networks.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of datasets to return per page. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Number of datasets to skip. Default: 0. | |
| networkKey | Yes | Network UUID. The unique identifier of the network whose constituent datasets you want to list. Get from gbif_registry_search_networks or gbif_registry_get_network. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered. The description adds domain context about what a network represents but says nothing about pagination behavior, result size, or rate limits beyond what the schema already documents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action before the explanatory context. No filler, though the second sentence ('Shows which datasets are part of a collaborative network') largely restates the first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple paginated read-only list with 100% schema coverage and annotations carrying the safety profile, the definition covers what an agent needs. It omits any note on the returned list shape, which is a minor gap given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including how to obtain networkKey and the limit/offset semantics, so the baseline is 3. The description adds no parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('List') plus a precisely scoped resource ('constituent datasets within a specific network'). The 'within a network' qualifier implicitly separates it from siblings like gbif_registry_organization_datasets and gbif_registry_search_datasets, but no sibling is named, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence hints at usage ('useful for exploring thematic data collections like eBird...'), which is implied guidance rather than an explicit when-to-use rule. It never states when NOT to use this tool or which alternative to pick (e.g., search_datasets for non-network scoping).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_organization_datasetsBRead-onlyIdempotent
List all datasets published by a specific organization. Shows the complete catalog of datasets contributed by an institution. Useful for understanding an organization's data contributions and portfolio.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter datasets by type. OCCURRENCE (specimen/observation records), CHECKLIST (species lists), SAMPLING_EVENT (survey data), METADATA (descriptions only). Omit to get all types. | |
| limit | No | Maximum number of datasets to return per page. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Number of datasets to skip. Default: 0. | |
| organizationKey | Yes | Organization UUID. The unique identifier of the publishing organization. Example: "07f617d0-c688-11d8-bf62-b8a03c50a862". Get from gbif_registry_search_organizations or gbif_registry_get_organization. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds only a mild scope claim ('complete catalog') but says nothing about pagination behavior, result volume, or what happens with very large publishers, so it does not meaningfully extend 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, which is good, but the second and third sentences restate the same idea twice ('complete catalog of datasets contributed by an institution' / 'useful for understanding an organization's data contributions and portfolio'), so two of three sentences are largely redundant padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description does not indicate what a returned dataset entry contains, and parameter behavior is left entirely to the schema. For a simple read/list tool with full schema coverage this is adequate but leaves the agent with no picture of the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the enum values for type, the range/default for limit and offset, and the UUID format plus source tools for organizationKey are all documented inline. The description adds no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (datasets) with a clear scope qualifier (published by a specific organization), so an agent can distinguish it from the generic gbif_registry_search_datasets. However, it never names or routes against siblings like gbif_registry_search_datasets, gbif_registry_get_organization, or gbif_registry_network_datasets, which is the classic 'clear but no sibling differentiation' case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Useful for understanding an organization's data contributions and portfolio' gestures at a use case but gives no when-to-use condition, no exclusions, and no alternative tools (e.g., use search_datasets instead when organization is unknown). Nothing tells an agent when this tool is the wrong choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_search_collectionsARead-onlyIdempotent
Search the Global Registry of Scientific Collections (GRSciColl) for natural history collections. Find museum collections, herbaria, tissue collections, and other scientific collections worldwide. Use to discover physical specimen holdings and their metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free text search across collection names, codes, and descriptions. Example: "herbarium", "mammal collection", "Smithsonian", "entomology". | |
| city | No | Filter by city name where the collection is located. Example: "London", "Washington", "Paris", "Sydney". | |
| code | No | Collection code filter. The institutional code or acronym for the collection. Example: "USNM" (US National Museum), "K" (Kew Herbarium), "AMNH" (American Museum of Natural History). | |
| limit | No | Maximum collections to return per page. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Default: 0. | |
| country | No | Filter by collection country. 2-letter ISO country code where the collection is physically located. Example: "US", "GB", "FR", "AU". | |
| institution | No | Filter by parent institution UUID. Returns all collections belonging to a specific institution. Get institution UUIDs from gbif_registry_search_institutions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and openWorld, so the agent knows this is a safe, repeatable read against an open registry. The description adds no behavioral context beyond that - no pagination semantics, result ordering, or registry coverage limits - so it neither contradicts nor enriches the annotation profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the resource name and scope, with no filler. The last sentence is somewhat thin ("and their metadata") but still earns its place as a usage cue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description shoulders the return-value burden; "discover physical specimen holdings and their metadata" only loosely signals the return shape, and pagination via limit/offset is left to the schema. For a 7-param, optional-only search tool with full annotation coverage, this is nearly complete but not fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters (q, city, code, limit, offset, country, institution) already carry examples and constraints in the schema. The description adds no additional filter semantics, which makes the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (GRSciColl natural history collections) and enumerates the collection types covered (museum, herbarium, tissue). It is clearly distinct from siblings like gbif_registry_search_datasets or gbif_registry_search_occurrences, but it never names the nearest-neighbor alternative (gbif_registry_search_institutions), leaving that differentiation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use to discover physical specimen holdings and their metadata" gives a usage context, so it is more than nothing. However, it offers no when-not guidance, no mention of when to prefer search_institutions or get_collection, and no prerequisites (e.g., obtain institution UUIDs first, which the schema mentions but the description does not reinforce).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_search_datasetsBRead-onlyIdempotent
Search for datasets in the GBIF registry. Find published datasets by type, keyword, publisher, geographic coverage, and taxonomic scope. Essential for discovering data sources and understanding dataset metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free text search query across dataset title, description, and metadata. Searches in dataset titles, descriptions, keywords, and publishing organization names. Example: "birds", "reef fish", "herbarium specimens". | |
| type | No | Dataset type filter. OCCURRENCE (observation/specimen records with coordinates and dates), CHECKLIST (species lists without occurrences), SAMPLING_EVENT (structured surveys with effort data), METADATA (dataset descriptions only). Most common: OCCURRENCE. | |
| limit | No | Maximum number of datasets to return per page. Range: 1-1000, default: 20. Use with offset for pagination through large result sets. | |
| decade | No | Filter by decade of temporal coverage. Format: "1980,1990" for data from the 1980s and 1990s. Filters datasets by the decade their occurrence records cover, not publication date. | |
| offset | No | Pagination offset. Number of results to skip. A limit of 20 and offset of 40 will get the third page. Default: 0. Maximum offset varies by endpoint. | |
| keyword | No | Filter by dataset keyword. Keywords are controlled vocabulary terms assigned to datasets. Example: "bird", "invasive species", "endangered species". Case-insensitive. | |
| hostingOrg | No | Filter by hosting organization UUID. The organization that hosts the data infrastructure (may differ from publisher). Example: UUID of a data center or aggregator. | |
| publishingOrg | No | Filter by publishing organization UUID. Returns datasets published by a specific organization. Get organization UUIDs from gbif_registry_search_organizations. Example: "07f617d0-c688-11d8-bf62-b8a03c50a862" (GBIF Secretariat). | |
| publishingCountry | No | Filter by publishing organization country. 2-letter ISO country code. Example: "US" (United States), "GB" (United Kingdom), "BR" (Brazil). Returns datasets published by organizations in that country. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior, so the safety profile is covered. The description adds one useful behavioral detail — that only *published* datasets are returned — but says nothing about result caps, pagination limits, or response shape. A 3 is appropriate against a strong annotation set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the core action front-loaded and zero filler. The final sentence is somewhat soft ('Essential for...') but not wasteful enough to drop below 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Nine parameters are fully documented in the schema, but with no output schema the description carries some burden for explaining returns and it stays silent on result structure, total counts, and pagination behavior beyond what the limit/offset schema params imply. Adequate but with a visible gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all nine parameters in detail; baseline 3 applies. The description's filter list adds no syntax or format detail beyond the schema, and its mention of 'taxonomic scope' corresponds to no actual parameter, which is mildly imprecise.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Search for datasets in the GBIF registry,' and names the filtering dimensions. It is clearly distinguishable from gbif_registry_get_dataset (single fetch) and gbif_registry_dataset_metrics, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Essential for discovering data sources' implies a discovery use case but gives no explicit when-to-use/when-not guidance, no mention of the alternative get_dataset for full metadata, and no prerequisites. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_search_installationsARead-onlyIdempotent
Search for IPT (Integrated Publishing Toolkit) installations in the GBIF network. IPTs are servers that host and publish biodiversity datasets. Use to find technical infrastructure and data hosting platforms.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free text search query. Searches installation names and descriptions. Example: "herbarium IPT", "museum server". | |
| type | No | Installation type filter. Common values: IPT_INSTALLATION, DIGIR_INSTALLATION, TAPIR_INSTALLATION, BIOCASE_INSTALLATION. Most common: IPT_INSTALLATION. | |
| limit | No | Maximum installations to return per page. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Default: 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds conceptual context about what IPTs are but says nothing about result volume, pagination behavior, or return shape, so it adds only modest value beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the core verb-resource pairing front-loaded and zero filler; every sentence (including the IPT definition) earns its place by aiding selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search with full schema coverage and no output schema, the definition covers purpose and domain context adequately. It stops short of describing result structure or paging semantics, but nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with q, type, limit, and offset each fully documented in the schema. The description adds no parameter-level meaning, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ("Search") and resource ("IPT installations") and explicitly disambiguates from siblings searching organizations, networks, datasets, and collections. It even defines what an IPT is, so an agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use to find technical infrastructure and data hosting platforms" gives a use context, but no when-not guidance and no reference to the sibling gbif_registry_get_installation (lookup by key) that would let an agent distinguish search from retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_search_institutionsCRead-onlyIdempotent
Search for scientific institutions in the Global Registry of Scientific Collections (GRSciColl). Find museums, herbaria, universities, and research institutions that house natural history collections worldwide.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free text search across institution names and descriptions. Searches in institution name, alternative names, and descriptions. Example: "Natural History Museum", "Smithsonian", "Botanischer Garten", "herbarium". | |
| city | No | Filter by city name where the institution is based. Example: "Washington", "London", "Paris", "Berlin", "Tokyo". | |
| code | No | Institution code filter. The institutional code or acronym. Example: "NMNH" (National Museum of Natural History), "NYBG" (New York Botanical Garden), "AMNH". | |
| limit | No | Maximum institutions to return per page. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Number of results to skip. Default: 0. | |
| country | No | Filter by institution country. 2-letter ISO country code where the institution is located. Example: "US" (United States), "GB" (United Kingdom), "BR" (Brazil), "AU" (Australia). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that — no mention of pagination behavior (limit/offset), result volume, or what a result record contains — so it earns no extra credit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the purpose front-loaded and no filler; the second sentence usefully enumerates the institution types returned. It is well-sized, though the second sentence does not add routing or behavioral value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations carry the safety profile and the schema fully documents all parameters, so the core need is met. Still, with no output schema, the description could reasonably say what a result contains (name, code, city, country) or note pagination via limit/offset; that gap keeps it merely adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of the six filters (q, city, code, limit, offset, country) documented with examples and constraints. The description contributes no additional parameter semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (Search) and resource (scientific institutions in GRSciColl) and enumerates the kinds of entities returned (museums, herbaria, universities). However, it does not distinguish 'institutions' from the closely related sibling tools gbif_registry_search_organizations and gbif_registry_search_collections, so an agent must infer which registry entity type it needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus gbif_registry_search_organizations, gbif_registry_search_collections, gbif_registry_get_institution, or gbif_registry_list_nodes. The description describes the content available but gives no routing guidance or prerequisites, leaving selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_search_networksARead-onlyIdempotent
Search for dataset networks in GBIF. Networks are collaborative groups that organize related datasets (e.g., eBird, iNaturalist, Ocean Biodiversity Information System). Use to discover thematic data collections and partnerships.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free text search query across network names and descriptions. Example: "eBird", "iNaturalist", "ocean", "herbarium network". | |
| limit | No | Maximum number of networks to return per page. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Number of results to skip. Default: 0. | |
| identifier | No | Filter by network identifier. A unique identifier for the network. Example: network DOI or other persistent identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety and repeatability are fully covered structurally. The description contributes domain context (what networks are) but says nothing extra about result format or pagination semantics beyond what the schema's limit/offset descriptions give. Adequate, not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences: purpose first, domain explanation second. No wasted clauses. The parenthetical example list is slightly long but earns its place by disambiguating the term 'network'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only, open-world search tool with 100% schema coverage and full annotations, the definition supplies what the structured fields cannot: the meaning of 'network'. No output schema exists, but for a list endpoint the return shape is predictable. Minor gap: no note on pagination behavior when results exceed limit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (q, limit, offset, identifier) are documented in the schema with examples and ranges. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Search for dataset networks in GBIF', and defines what a network is with concrete examples (eBird, iNaturalist, OBIS). It does not explicitly distinguish itself from siblings like gbif_registry_get_network or gbif_registry_search_organizations, but the resource noun 'networks' is clear enough to route by.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use to discover thematic data collections and partnerships' implies the browse/discovery use case but names no alternatives and gives no when-not condition. An agent can infer it should use get_network for a single known network, but the description never says so.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_registry_search_organizationsBRead-onlyIdempotent
Search for data-publishing organizations in the GBIF network. Find museums, herbaria, research institutions, and other biodiversity data publishers. Use to discover data providers and understand institutional participation.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free text search across organization names and descriptions. Searches in organization title, description, and abbreviations. Example: "Natural History Museum", "Smithsonian", "herbarium". | |
| limit | No | Maximum number of organizations to return per page. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Number of results to skip before returning results. Default: 0. | |
| country | No | Filter by organization country. 2-letter ISO country code where the organization is based. Example: "US" (United States), "GB" (United Kingdom), "AU" (Australia). | |
| isEndorsed | No | Filter by GBIF endorsement status. Set to true for GBIF-endorsed organizations (officially recognized data publishers), false for non-endorsed. Most data publishers are endorsed. Default: no filter (both endorsed and non-endorsed). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint, destructiveHint=false), so the bar is lowered. The description adds no behavioral context beyond this—nothing about pagination interaction between limit/offset, rate limits, or the shape/volume of results—so it earns little credit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences: purpose, concrete examples, then use case. All sentences contribute; no filler or repetition. Slightly more verbose than strictly necessary but well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param read-only search with full schema coverage and no output schema, the description covers purpose, examples, and intended use. Annotations carry the safety profile. It is essentially complete, though return-value expectations are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters (q, limit, offset, country, isEndorsed) with examples and ranges. The description adds no parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (data-publishing organizations in the GBIF network), and names concrete examples (museums, herbaria, research institutions). It does not explicitly distinguish itself from sibling search tools like gbif_registry_search_networks or gbif_registry_get_organization, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use to discover data providers and understand institutional participation" gives an implied use case, but there is no when-not guidance and no routing to alternatives such as get_organization (for a single org) or organization_datasets. Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_species_childrenBRead-onlyIdempotent
Get direct taxonomic children of a taxon (e.g., species under a genus, subspecies under a species). Useful for exploring taxonomy hierarchically.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Parent taxon GBIF key. The unique identifier of the parent taxon whose direct children you want to retrieve. Example: 5219173 (genus Panthera) returns species like P. leo, P. tigris, P. pardus, etc. | |
| limit | No | Maximum number of children to return per page. Controls pagination. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Determines the starting point for results. A limit of 20 and offset of 40 will get the third page of 20 results. Default: 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral fact — that only direct children are returned, not the full descendant subtree — but says nothing about result format or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and scope qualifier; the parenthetical example earns its place by making the hierarchy direction unambiguous. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with full schema coverage, the essentials are present, and pagination is handled by the schema's limit/offset docs. However, with no output schema, the description does not indicate what a returned child entry contains (key, name, rank), leaving a modest gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents key, limit, and offset thoroughly, including an example parent key. The description's parenthetical examples echo that without adding syntax or semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get direct taxonomic children of a taxon', with concrete examples (species under a genus). The word 'direct' contrasts implicitly with the sibling gbif_species_parents and with recursive descendants, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Useful for exploring taxonomy hierarchically' implies a use case but gives no explicit when-to-use/when-not guidance against alternatives such as gbif_species_parents, gbif_species_related, or gbif_species_get. The agent must infer which taxonomy-navigation tool fits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_species_descriptionsARead-onlyIdempotent
Get textual descriptions for a species from various sources. Includes morphological descriptions, habitat information, behavior, and other narrative content.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | GBIF species key. The unique identifier of the species whose textual descriptions you want to retrieve. Example: 5219404 (Panthera leo) returns descriptions about lion morphology, behavior, habitat preferences, and life history from various authoritative sources. | |
| limit | No | Maximum number of description records to return per page. A species may have multiple descriptions from different sources. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Determines the starting point for results. A limit of 20 and offset of 40 will get the third page of 20 results. Default: 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds useful context beyond that: descriptions come 'from various sources' (implying variable provenance and possibly multiple records per species) and the content is narrative, not structured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and resource, followed by the content scope. No redundant or padding language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with full schema coverage and no output schema, the description tells the agent what kind of content comes back and that sources vary. It is nearly complete, missing only an explicit pointer to sibling species tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; key, limit and offset are fully documented in the schema, including a Panthera leo example and pagination semantics. The description adds no parameter-level information, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get textual descriptions for a species') and enumerates the content types (morphology, habitat, behavior). It is clearly distinguishable from functional siblings like gbif_species_media or gbif_species_distributions, though it does not explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: fetch narrative text for a species. There is no explicit when-to-use, no exclusions, and no mention of the related species siblings (media, vernacular_names, distributions) that an agent might confuse it with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_species_distributionsBRead-onlyIdempotent
Get known geographic distribution records for a species. Includes information about occurrence status, establishment means, and locality details.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | GBIF species key. The unique identifier of the species whose geographic distribution you want to retrieve. Example: 5219404 (Panthera leo) returns distribution records showing where lions occur (e.g., sub-Saharan Africa), their establishment status (native/introduced), and occurrence status (present/absent/extinct). Includes both native and introduced ranges. | |
| limit | No | Maximum number of distribution records to return per page. A species may have distribution records for multiple regions/countries. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Determines the starting point for results. A limit of 20 and offset of 40 will get the third page of 20 results. Default: 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description adds useful content context by naming the record fields (occurrence status, establishment means, locality details), but it does not mention pagination behavior, rate limits, or authentication requirements. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, and the core purpose is front-loaded. The second sentence efficiently lists the record contents without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with a fully described schema and safety annotations, the description is nearly complete. It conveys the return-content categories, though it stops short of noting that results are paginated or describing the record shape, which would help since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents key, limit, and offset. The description adds no parameter-level meaning, syntax, or format details beyond what the schema provides. A baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get known geographic distribution records for a species.' It clarifies the kind of data returned (occurrence status, establishment means, locality details), which separates it from generic species lookup tools. It does not explicitly name sibling alternatives like gbif_species_get or gbif_occurrence_search, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of alternative tools. An agent must infer that this is for distribution data specifically and cannot tell from the description alone how it differs in use case from gbif_species_get, gbif_maps_get_tile_url, or gbif_occurrence_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_species_getBRead-onlyIdempotent
Get detailed information about a specific species by its GBIF key.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The GBIF unique identifier for a species (usageKey). This is a numeric key that uniquely identifies a taxon in the GBIF backbone taxonomy. Example: 5219404 (Panthera leo - African lion). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safe-read profile is fully covered and the bar is low. The description adds no behavioral context beyond the annotations (no note on what the record contains, caching, or missing-key behavior), so it is merely adequate rather than enriching.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb, resource, and input are all in one clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with comprehensive annotations and no output schema, the definition is nearly sufficient. The remaining gap is that it never characterizes what 'detailed information' comprises, which matters given how many sibling tools carve up species data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the 'key' property is documented in rich detail (usageKey, backbone taxonomy, worked example 5219404 for Panthera leo). The description adds nothing beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('detailed information about a specific species') keyed by GBIF key. However, 'detailed information' is vague against a large sibling family (gbif_species_descriptions, gbif_species_media, gbif_species_metrics, gbif_species_synonyms, gbif_species_vernacular_names) that each return a specific slice; the description does not clarify that this returns the core species record as opposed to those specialized subsets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative is mentioned. It gives the input form ('by its GBIF key') but nothing that helps an agent choose between this and the many other species tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_species_matchBRead-onlyIdempotent
Fuzzy match a species name against the GBIF backbone taxonomy.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Species scientific name to match against the GBIF backbone taxonomy. Can be a full or partial scientific name. Example: "Panthera leo" or "Puma concolor". The matching algorithm is fuzzy and will try to find the best match even with misspellings. | |
| strict | No | Use strict matching mode. When false (default), allows fuzzy matching with typo tolerance. When true, only exact matches are returned. Recommended: false for most use cases to handle name variations and historical synonyms. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the behavioral notion that matching is fuzzy, but says nothing about result confidence, no-match behavior, or what happens with ambiguous names. With annotations doing the heavy lifting, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the core action front-loaded and no filler. It is efficient, though it is arguably too sparse for a tool whose output shape and disambiguation behavior matter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, fully-schema-documented tool this is nearly adequate, but with no output schema the agent has no idea what a 'match' returns (accepted name, taxon key, confidence, alternatives). That gap matters for deciding whether to call this versus sibling species tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: both 'name' and 'strict' are fully documented in the input schema, including the fuzzy/strict distinction and an example. The description adds no syntax or format detail beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fuzzy match) and resource (species name) plus the target authority (GBIF backbone taxonomy), so the agent knows exactly what the tool does. However, it does not distinguish itself from near-neighbors like gbif_species_parse_names, gbif_species_suggest, or gbif_species_search, leaving the agent to guess which matching tool fits a given case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, prerequisites, or named alternatives, despite several similar species tools in the sibling list. The only usage-like hint (fuzzy vs strict) lives in the schema, not the description, so the agent gets no routing help here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_species_mediaARead-onlyIdempotent
Get associated multimedia records for a species including images, sounds, and videos. Returns URLs and metadata for media resources from various sources.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | GBIF species key. The unique identifier of the species whose multimedia you want to retrieve. Example: 5219404 (Panthera leo) returns images, videos, and sound recordings of lions from sources like Wikimedia Commons, Encyclopedia of Life, iNaturalist, and other providers. Each media record includes URLs, license information, and attribution. | |
| limit | No | Maximum number of media records to return per page. A species can have many photos, videos, and sounds from various sources. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Determines the starting point for results. A limit of 20 and offset of 40 will get the third page of 20 results. Default: 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description reinforces openWorld by noting media come 'from various sources' and that it returns URLs plus metadata, but adds no auth, rate-limit, or pagination-behavior detail beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and content types, with the return-shape note second. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully states that it returns URLs and metadata, and all three parameters are fully specified in the schema. Missing only minor context such as typical volume of results or attribution/licensing caveats hinted at in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the key, limit, and offset parameters are all thoroughly documented in the schema, including an example species key and pagination semantics. The description adds no parameter-level meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get associated multimedia records for a species') and enumerates the content types (images, sounds, videos), so the agent can tell it apart from gbif_species_get or gbif_species_descriptions conceptually. It does not, however, explicitly name or contrast with any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose: call it when you want media for a known species key. There is no explicit when-to-use, when-not-to-use, or alternative routing (e.g., when to prefer occurrence media or how it relates to gbif_species_descriptions).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_species_metricsARead-onlyIdempotent
Get quick occurrence statistics for a species without running full searches. Returns total occurrence count, dataset count, country count, and basis of record breakdown. Fast endpoint perfect for species profile pages, dashboards, and quick data availability checks.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | GBIF species key. The unique identifier of the species whose metrics you want. Example: 5231190 (Panthera leo) returns occurrence count, geographic spread, and data quality metrics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by disclosing exactly which aggregates come back and that the endpoint is fast/lightweight, though it says nothing about rate limits or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and output list, followed by usage context. The 'perfect for...' phrasing is slightly promotional but still earns its place as routing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only aggregate tool with no output schema, the definition is largely complete: it explains what is returned and when to use it, and annotations cover safety. Only minor gaps remain (no mention of what happens with an invalid key or any caching/limits).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'key' parameter is already fully documented in the schema, including an example. The description adds nothing about the parameter itself, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get occurrence statistics for a species) and enumerates the exact metrics returned, which helps distinguish it from the many search/count siblings. It contrasts with 'full searches' but never names the specific alternative tools (e.g. gbif_occurrence_count or gbif_occurrence_search), so differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context ('perfect for species profile pages, dashboards, and quick data availability checks') and implicitly routes away from heavyweight searches. However it never states when NOT to use it or names a concrete alternative endpoint, so it stops short of explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_species_parentsARead-onlyIdempotent
Get the complete taxonomic classification path from kingdom down to the specified taxon. Returns the full hierarchy including all parent taxa. Useful for breadcrumb navigation and understanding taxonomic position.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | GBIF species/taxon key. The unique identifier of the taxon whose complete classification path you want to retrieve. Example: 5219404 (Panthera leo) returns the full hierarchy: Kingdom Animalia → Phylum Chordata → Class Mammalia → Order Carnivora → Family Felidae → Genus Panthera → Species Panthera leo. Useful for displaying breadcrumb navigation and understanding where a taxon fits in the tree of life. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is fully covered. The description adds that the response is the full hierarchy of parent taxa, which is useful given there is no output schema, but says nothing about behavior for root taxa or invalid keys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action. Minor redundancy between 'complete taxonomic classification path' and 'full hierarchy including all parent taxa,' but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with full annotation coverage, a 100%-documented schema, and no output schema, the description supplies the response shape (kingdom-to-taxon lineage). Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'key' parameter is documented in the schema with an example (5219404 Panthera leo) showing the exact return lineage. The description adds no meaning beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get the complete taxonomic classification path from kingdom down to the specified taxon.' The upward direction of traversal is clear, which implicitly separates it from descendant-oriented siblings, but no sibling is named explicitly (e.g., gbif_species_children, gbif_species_get).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Useful for breadcrumb navigation and understanding taxonomic position' gives an implied usage context, but there is no explicit when-to-use guidance or when-to-prefer-an-alternative statement among the many species_* siblings. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_species_parse_namesARead-onlyIdempotent
Parse and standardize scientific names in batch using GBIF's name parser. Extracts genus, species, authorship, rank, and more from scientific name strings. Essential for data cleaning, quality checking, and standardizing names from spreadsheets or databases. Handles up to 1000 names per request.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | Array of scientific names to parse. Each name is a string that may include authorship, year, and infraspecific epithets. Examples: ["Panthera leo (Linnaeus, 1758)", "Puma concolor", "Quercus robur L."]. Maximum: 1000 names per request. Returns parsed components for each name including: genus, specificEpithet, scientificName, authorship, year, rank, and parsing quality indicators. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, open-world, and non-destructive, so the safety profile is covered. The description's only behavioral addition is the 1000-name batch cap, which is duplicated in the schema, and it says nothing about how unparseable names are reported or what the quality indicators mean. Modest added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences: what it does, what it extracts, why it matters, and the size limit. Front-loaded and free of redundancy, though 'Essential for...' is mildly promotional rather than informational.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only parser with no output schema, the description supplies the batch limit, the extracted components, and the use context; the schema's parameter text also enumerates returned fields. Missing only failure/quality behavior for unparseable names, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, including format examples and a list of returned components, so the schema carries the load. The description only restates the batch limit and extracted fields rather than adding new semantics. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Parse and standardize scientific names') and adds scope ('in batch') plus output fields (genus, species, authorship, rank). However, it never distinguishes itself from close siblings like gbif_species_match, gbif_species_suggest, or gbif_species_search, which an agent could plausibly confuse with name parsing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete contexts for use: data cleaning, quality checking, and standardizing names from spreadsheets or databases. It stops short of naming alternatives or stating when NOT to use it (e.g., single-name lookups should go to gbif_species_match), so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_species_searchBRead-onlyIdempotent
Search for species in the GBIF taxonomic backbone. Supports filtering by rank, status, habitat, threat level, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Simple full text search parameter. The value for this parameter can be a simple word or a phrase. Wildcards are not supported. | |
| hl | No | Set hl=true to highlight terms matching the query in fulltext search fields. The highlight will be an emphasis tag of class "gbifHl". | |
| rank | No | Filters by taxonomic rank. See https://api.gbif.org/v1/enumeration/basic/Rank for full list. Common values: KINGDOM, PHYLUM, CLASS, ORDER, FAMILY, GENUS, SPECIES, SUBSPECIES. | |
| facet | No | A facet name used to retrieve the most frequent values for a field. This parameter may be repeated to request multiple facets. Example: ["rank", "status", "habitat"] to get counts by rank, status, and habitat. | |
| issue | No | A specific indexing issue. Values include: BACKBONE_MATCH_NONE, BACKBONE_MATCH_FUZZY, RANK_INVALID, SCIENTIFIC_NAME_ASSEMBLED, CLASSIFICATION_NOT_APPLIED, etc. See https://api.gbif.org/v1/enumeration/basic/NameUsageIssue for full list. | |
| limit | No | Controls the number of results in the page. Using too high a value will be overwritten with the default maximum threshold. Sensible defaults are used so this may be omitted. Maximum: 1000. | |
| offset | No | Determines the offset for the search results. A limit of 20 and offset of 40 will get the third page of 20 results. Some services have a maximum offset. | |
| status | No | Filters by the taxonomic status. Values: ACCEPTED (valid taxon name), DOUBTFUL (uncertain status), SYNONYM (alternative name), HETEROTYPIC_SYNONYM (different type specimens), HOMOTYPIC_SYNONYM (same type specimen). See https://api.gbif.org/v1/enumeration/basic/TaxonomicStatus | |
| threat | No | Filters by IUCN threat status. Values: EX (Extinct), EW (Extinct in Wild), CR (Critically Endangered), EN (Endangered), VU (Vulnerable), NT (Near Threatened), LC (Least Concern), DD (Data Deficient), NE (Not Evaluated). See https://api.gbif.org/v1/enumeration/basic/ThreatStatus | |
| habitat | No | Filters by the habitat. Currently only 3 major biomes are accepted: MARINE (ocean/sea habitats), FRESHWATER (rivers/lakes), TERRESTRIAL (land habitats). See https://api.gbif.org/v1/enumeration/basic/Habitat | |
| nameType | No | Filters by name type. Values: SCIENTIFIC (proper scientific names), VIRUS (virus names), HYBRID (hybrid names), INFORMAL (informal names), CULTIVAR (cultivated varieties), CANDIDATUS (proposed bacterial names), DOUBTFUL (uncertain names), PLACEHOLDER (temporary names), NO_NAME (unnamed taxa). See https://api.gbif.org/v1/enumeration/basic/NameType | |
| isExtinct | No | Filters by extinction status. Set to true to find only extinct species, false for extant species only. | |
| datasetKey | No | A UUID of a checklist dataset. Example: "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c" (GBIF Backbone Taxonomy). Can be repeated to query multiple datasets. | |
| facetMincount | No | Used in combination with the facet parameter. Set facetMincount={#} to exclude facets with a count less than {#}. Example: facetMincount=10 to only show facet values appearing 10+ times. | |
| higherTaxonKey | No | Filters by any of the higher Linnean rank keys. Note this is within the respective checklist and not searching NUB keys across all checklists. Example: 212 (for family Felidae). | |
| facetMultiselect | No | Used in combination with the facet parameter. Set facetMultiselect=true to still return counts for values that are not currently filtered. Useful for multi-select faceted search interfaces. | |
| nomenclaturalStatus | No | Filters by nomenclatural status. Values include: LEGITIMATE, VALIDLY_PUBLISHED, NEW_COMBINATION, REPLACEMENT, CONSERVED, REJECTED, INVALID, etc. See https://api.gbif.org/v1/enumeration/basic/NomenclaturalStatus for complete list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is fully covered. The description adds essentially nothing beyond that – no note on pagination behavior, result volume, or performance – so it sits at the minimum viable level given rich annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, with no repetition. The trailing 'and more' is mild filler that could have been replaced with a routing hint, keeping it short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter, zero-required search tool with no output schema, the description is thin: it doesn't describe the result shape, pagination expectations, or how the large optional filter set is meant to be combined. Annotations and schema carry most of the load, but an agent still lacks selection context versus sibling species tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every one of the 17 parameters carries its own description with enum values and examples. The phrase 'rank, status, habitat, threat level, and more' just echoes a subset of the schema, adding no new meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (species in the GBIF taxonomic backbone), which is clear on its own. However, it does nothing to distinguish itself from close siblings like gbif_species_suggest or gbif_species_match, which also take name-like queries, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists filter categories but gives no when-to-use guidance and no exclusions relative to the many sibling species tools. It never says when to prefer this over gbif_species_suggest (autocomplete) or gbif_species_match (name resolution), which is the main routing decision an agent faces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_species_suggestARead-onlyIdempotent
Get species name suggestions for autocomplete functionality.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Partial species name for autocomplete suggestions. Minimum 2 characters required. Example: "Pant" to get suggestions like "Panthera", "Panthera leo", etc. | |
| limit | No | Maximum number of suggestions to return. Controls the number of autocomplete results. Range: 1-100, default: 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description's only added behavioral signal is the autocomplete framing (partial-match, suggestion-style output); it says nothing about ranking, whether vernacular names are included, or result ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single eight-word sentence with the verb and purpose front-loaded; nothing is wasted or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter lookup with full schema coverage and annotations carrying the safety profile, the definition is minimally viable. It is still thin on the one thing that matters here: how suggestions differ from gbif_species_search results, which is not covered by any structured field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the q/limit parameters are fully documented in the schema (min length, range, defaults, example). The description adds no syntax or format detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Get species name suggestions") and the "autocomplete" framing signals partial/prefix lookup rather than full search. However, it never names or contrasts with close siblings like gbif_species_search, gbif_species_match, or gbif_species_parse_names, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by "for autocomplete functionality," which tells the agent this is a typeahead-style lookup rather than a full search. There is no explicit when-to-use/when-not guidance and no alternative tool named, leaving the routing decision against gbif_species_search to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_species_synonymsARead-onlyIdempotent
Get all synonyms and alternative scientific names for a species. Useful for name resolution and historical name tracking.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | GBIF species key. The unique identifier of the accepted species whose synonyms you want to retrieve. Example: 2435099 (Felis leo) shows that this is a synonym of Panthera leo, along with other historical names. Synonyms include both homotypic (same type specimen) and heterotypic (different type specimen) synonyms. | |
| limit | No | Maximum number of synonyms to return per page. Controls pagination. A species can have many historical synonyms. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Determines the starting point for results. A limit of 20 and offset of 40 will get the third page of 20 results. Default: 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds no behavioral context beyond that, such as whether results are paginated or how synonyms are ordered. With annotations carrying the safety burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no redundancy. The second sentence is slightly soft ('useful for...') but does earn its place as the only usage signal present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with fully documented parameters and annotations covering safety and idempotency, the description is nearly sufficient. Since there is no output schema, it could say more about the shape of the returned synonym records, but nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the 'key', 'limit', and 'offset' descriptions are unusually rich (they even explain homotypic vs heterotypic synonyms and give an example key). The description adds no parameter meaning of its own, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get all synonyms and alternative scientific names for a species.' This clearly separates it from gbif_species_get (accepted taxon) and hints at the scientific-name domain versus gbif_species_vernacular_names, but it never explicitly names those siblings or draws the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Useful for name resolution and historical name tracking' implies when the tool is relevant but gives no conditions, prerequisites, or alternatives (e.g., when to use this versus gbif_species_match or gbif_species_parse_names). Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_species_vernacular_namesBRead-onlyIdempotent
Get vernacular (common) names for a species in multiple languages. Returns preferred names when available.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | GBIF species key. The unique identifier of the species whose common names you want to retrieve. Example: 5219404 (Panthera leo) returns "African Lion", "Lion", "León", etc. | |
| limit | No | Maximum number of vernacular names to return per page. Controls pagination. Range: 1-1000, default: 20. | |
| offset | No | Pagination offset. Determines the starting point for results. A limit of 20 and offset of 40 will get the third page of 20 results. Default: 0. | |
| language | No | ISO 639-1 language code filter to retrieve names in a specific language. 2-letter code. Example: "en" (English), "es" (Spanish), "fr" (French), "de" (German), "pt" (Portuguese), "zh" (Chinese), "ja" (Japanese). Omit to get names in all available languages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and non-destructive behavior, so the safety profile is covered. The description adds one behavioral note—that preferred names are returned when available—but says nothing about empty results, per-language coverage, or pagination behavior beyond what the schema states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core purpose front-loaded and no filler. The second sentence ('Returns preferred names when available') is mildly vague but does add a distinct point rather than restating the first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter tool with full schema coverage and rich annotations, the description is adequate but thin on the output side: there is no output schema, yet the shape of a vernacular-name result (name, language, preferred flag) is never described. Inputs and safety are well covered; returns are not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: key, limit, offset, and language are each documented with examples and defaults in the schema itself. The description mentions multi-language support but adds no syntax, defaults, or format detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Get vernacular (common) names for a species' clearly distinguishes it from siblings like gbif_species_synonyms, gbif_species_descriptions, and gbif_species_distributions. It does not name any sibling explicitly, but the resource is unambiguous enough that an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, and no alternative is named (e.g., would an agent use this or gbif_species_get for common names?). The phrase 'in multiple languages' implies a use case for language filtering, but that is inference, not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_validator_get_statusARead-onlyIdempotent
Check the status of an asynchronous Darwin Core Archive validation job. Validation is processed asynchronously, so use this tool to poll for completion and retrieve results. Returns validation status, progress, and results when complete.
| Name | Required | Description | Default |
|---|---|---|---|
| validationKey | Yes | Validation job key/ID returned by gbif_validator_validate_dwca. Unique identifier for the validation task. Use to check progress and retrieve results. Example: validation key from previous validation request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavior beyond the annotations: validation runs asynchronously, so this is a polling operation that returns status, progress, and results only once complete. Annotations already cover safety (readOnly, idempotent, non-destructive), so this added polling/return context is the right kind of contribution; it omits only error/retry behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose followed by the polling rationale and return contents; every sentence is relevant. Minor redundancy in restating 'asynchronous' across the first two sentences keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by naming what is returned (status, progress, results). Missing details about polling cadence or behavior on an invalid/expired key are minor gaps for a single-key read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter (validationKey) with 100% schema coverage, so the schema already explains it as the ID returned by gbif_validator_validate_dwca. The description adds nothing about the parameter, which is the expected baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Check the status of an asynchronous Darwin Core Archive validation job' — and frames the scope as polling an existing job rather than creating one. This cleanly separates it from the sibling gbif_validator_validate_dwca, which starts validation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to use it 'to poll for completion and retrieve results' after an async job exists, which implies the correct point in the workflow. It stops short of naming the alternative tool or stating what to do if the key is unknown/expired, so it is strong but not fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_validator_validate_dwcaA
Validate a Darwin Core Archive (DwC-A) file against GBIF standards. Checks data structure, required fields, data quality, and format compliance. Returns validation report with issues, warnings, and recommendations. Essential before publishing datasets to GBIF.
| Name | Required | Description | Default |
|---|---|---|---|
| fileUrl | Yes | Public URL of the Darwin Core Archive (.zip file). Must be publicly accessible via HTTP/HTTPS. The archive should contain meta.xml, occurrence.txt or equivalent core file, and optional extension files. Example: "https://example.com/dataset.zip". File will be downloaded and validated asynchronously. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, and the description adds useful scope about what is checked (structure, required fields, quality, format) and that a report is returned. However, it omits the asynchronous download/validation behavior that the schema mentions, which is the most consequential trait 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and followed by scope, output, and usage. Each sentence contributes, though "checks data structure, required fields, data quality, and format compliance" partially restates "validate against GBIF standards."
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does supply the return shape (issues, warnings, recommendations) and the validation scope. The main gap is the asynchronous execution model, which is left only to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, so the schema fully documents fileUrl's format, accessibility requirement, and contents. The description adds only the general notion of a DwC-A file, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (validate a Darwin Core Archive file) plus the standard it validates against (GBIF), which cleanly separates it from gbif_validator_validate_tabular and gbif_validator_get_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Essential before publishing datasets to GBIF" gives one when-to-use cue, but there is no explicit contrast with the sibling gbif_validator_validate_tabular or gbif_validator_get_status, so the agent must infer which validator applies to which input.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_validator_validate_tabularB
Validate tabular data files (CSV, TSV) against Darwin Core standards before creating archives. Checks column headers, data types, required fields, and format compliance. Useful for data preparation workflows, pre-publication validation, and quality assurance before creating Darwin Core Archives. Returns validation report with field-level issues.
| Name | Required | Description | Default |
|---|---|---|---|
| fileUrl | Yes | Public URL of the tabular file (.csv or .tsv). Must be publicly accessible. The file should have Darwin Core term headers (scientificName, decimalLatitude, etc.). Example: "https://example.com/occurrences.csv". Will be validated against DwC standards. | |
| fileType | No | File format. CSV (comma-separated) or TSV (tab-separated). Default: CSV. Determines delimiter used for parsing. | CSV |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, so the agent knows this is a non-idempotent open-world operation. The description adds that a validation report with field-level issues is returned, but it does not explain the non-read-only/non-idempotent behavior (likely job creation) or that the URL must be publicly fetchable – a key operational constraint left to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and resource, then checks, then use cases, then return value – a sensible order. Slight redundancy between 'before creating archives' and 'before creating Darwin Core Archives', which costs a bit of tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does carry some return-value burden and addresses it briefly ('validation report with field-level issues'). But for an open-world, non-idempotent tool that fetches a remote URL, it omits whether validation is synchronous or job-based (the existence of gbif_validator_get_status hints at the latter) and any URL accessibility failure behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both fileUrl (file format expectations, DwC headers, public accessibility) and fileType (enum, delimiter) are fully documented by the schema. The description adds no parameter detail beyond naming CSV/TSV, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (validate) and resource (tabular CSV/TSV files) plus what is checked (headers, types, required fields, format compliance). It implicitly separates itself from gbif_validator_validate_dwca by scoping to raw tabular files, but never names that sibling, so the differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives usage context ('data preparation workflows, pre-publication validation, quality assurance before creating Darwin Core Archives'), which implies when to reach for it. However, it never states when NOT to use it or which sibling to pick instead – notably when to use this versus gbif_validator_validate_dwca (whole archive) or gbif_validator_get_status (job results).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_vocabularies_getARead-onlyIdempotent
Get a specific controlled vocabulary with all its concepts and definitions. Returns the complete vocabulary including all valid values, descriptions, and usage notes. Use to understand valid values for specific GBIF fields.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Vocabulary name. The identifier of the vocabulary to retrieve. Common vocabularies: "BasisOfRecord" (observation types), "EstablishmentMeans" (native/introduced status), "DegreeOfEstablishment" (invasion stages), "Pathway" (introduction routes), "OccurrenceStatus" (present/absent). Get names from gbif_vocabularies_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and open-world, so the safety profile is covered. The description adds useful return-content disclosure (all valid values, descriptions, usage notes), which matters because no output schema exists, though it says nothing about size or pagination for large vocabularies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action before the return detail and the use case. The second sentence largely restates the first's 'all its concepts and definitions' clause, which is minor duplication rather than a structural flaw.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with full schema coverage and complete annotations, the definition supplies what is missing: a plain-language statement of what comes back. No output schema exists, so the return summary is genuinely additive; only pagination/size behavior remains unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself lists example vocabulary names and points to gbif_vocabularies_list. The description contributes no parameter-level detail beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a specific controlled vocabulary') and clarifies scope by saying it returns the complete vocabulary with all concepts and definitions, which separates it from the list and single-concept siblings. It never names those siblings explicitly, so the differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use to understand valid values for specific GBIF fields" gives a positive use case, so usage is implied rather than absent. There is no when-not guidance and no reference to gbif_vocabularies_list or gbif_vocabularies_get_concept as alternatives, even though those are the obvious near-neighbors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_vocabularies_get_conceptARead-onlyIdempotent
Get detailed information about a specific concept within a controlled vocabulary. Returns the concept definition, usage notes, related terms, and examples. Use to understand the precise meaning and usage of specific vocabulary terms.
| Name | Required | Description | Default |
|---|---|---|---|
| concept | Yes | Concept name within the vocabulary. The specific term to look up. Examples: For BasisOfRecord: "HUMAN_OBSERVATION", "PRESERVED_SPECIMEN". For EstablishmentMeans: "NATIVE", "INTRODUCED", "NATURALISED". Case-sensitive. | |
| vocabulary | Yes | Vocabulary name. The controlled vocabulary containing the concept. Example: "BasisOfRecord", "EstablishmentMeans", "DegreeOfEstablishment". Get from gbif_vocabularies_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, covering the safety profile. The description adds genuine behavioral value by disclosing the return contents (definition, usage notes, related terms, examples), which annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action, and no filler. The third sentence overlaps somewhat with the opening purpose statement, a minor redundancy that keeps it from a top score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by naming the returned fields, and the read-only annotations cover the rest of the safety profile. For a simple two-parameter lookup, this is nearly complete; only the relationship to sibling vocabulary tools is unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the schema already documents that vocabulary comes from gbif_vocabularies_list and gives case-sensitive examples per vocabulary. The description adds no parameter-level detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (get) and resource (a concept within a controlled vocabulary) and enumerates what comes back: definition, usage notes, related terms, examples. However, it does not distinguish itself from the sibling gbif_vocabularies_get, which presumably retrieves the vocabulary itself, leaving the agent to infer the boundary between the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use to understand the precise meaning and usage of specific vocabulary terms" gives a clear context for invocation. It stops short of naming when NOT to use it or pointing to the sibling vocabulary-level tool, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gbif_vocabularies_listARead-onlyIdempotent
List all controlled vocabularies used in GBIF. Vocabularies define valid values for fields like basisOfRecord, establishmentMeans, occurrenceStatus, etc. Essential for understanding valid filter values and data standardization.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true, openWorld=true, so the safety profile is covered. The description adds that vocabularies enumerate valid field values (basisOfRecord, occurrenceStatus, etc.), which is useful context, but says nothing about return size or response shape beyond the schema note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action and scope, each adding a distinct piece of information. The closing 'Essential for...' sentence is mildly promotional but still justifies the tool's relevance to filter-value discovery.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only list tool with no output schema, the description supplies enough conceptual context (what vocabularies are, which fields they govern) for an agent to use it correctly. Return-value details are absent but reasonably unnecessary here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero input parameters, so parameter semantics carry no burden; the baseline of 4 applies. The schema description and the prose agree that no filtering is offered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'List all controlled vocabularies used in GBIF.' The 'all' scope implicitly distinguishes it from the gbif_vocabularies_get_concept sibling, though it never names that alternative explicitly, keeping it just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: 'Essential for understanding valid filter values and data standardization,' telling the agent why it would call this. It stops short of stating when NOT to use it or pointing to the get_concept sibling for single-concept lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
58 tool updates
v1.1.0- First observed
gbif_literature_get - First observed
gbif_literature_search - First observed
gbif_maps_get_raster_tile_url - First observed
gbif_maps_get_tile_url - First observed
gbif_maps_get_vector_tile_url - First observed
gbif_maps_list_styles - First observed
gbif_occurrence_count - First observed
gbif_occurrence_counts_by_basis_of_record - First observed
gbif_occurrence_counts_by_country - First observed
gbif_occurrence_counts_by_dataset - First observed
gbif_occurrence_counts_by_publishing_country - First observed
gbif_occurrence_counts_by_publishing_org - First observed
gbif_occurrence_counts_by_taxon - First observed
gbif_occurrence_counts_by_year - First observed
gbif_occurrence_download_predicate_builder - First observed
gbif_occurrence_download_request - First observed
gbif_occurrence_download_status - First observed
gbif_occurrence_get - First observed
gbif_occurrence_search - First observed
gbif_occurrence_verbatim - First observed
gbif_registry_dataset_document - First observed
gbif_registry_dataset_metrics - First observed
gbif_registry_get_collection - First observed
gbif_registry_get_dataset - First observed
gbif_registry_get_installation - First observed
gbif_registry_get_institution - First observed
gbif_registry_get_network - First observed
gbif_registry_get_node - First observed
gbif_registry_get_organization - First observed
gbif_registry_list_nodes - First observed
gbif_registry_network_datasets - First observed
gbif_registry_organization_datasets - First observed
gbif_registry_search_collections - First observed
gbif_registry_search_datasets - First observed
gbif_registry_search_installations - First observed
gbif_registry_search_institutions - First observed
gbif_registry_search_networks - First observed
gbif_registry_search_organizations - First observed
gbif_species_children - First observed
gbif_species_descriptions - First observed
gbif_species_distributions - First observed
gbif_species_get - First observed
gbif_species_match - First observed
gbif_species_media - First observed
gbif_species_metrics - First observed
gbif_species_parents - First observed
gbif_species_parse_names - First observed
gbif_species_related - First observed
gbif_species_search - First observed
gbif_species_suggest - First observed
gbif_species_synonyms - First observed
gbif_species_vernacular_names - First observed
gbif_validator_get_status - First observed
gbif_validator_validate_dwca - First observed
gbif_validator_validate_tabular - First observed
gbif_vocabularies_get - First observed
gbif_vocabularies_get_concept - First observed
gbif_vocabularies_list
TDQS
Scored across 58 tools
Most tools have distinct purposes, but several families overlap: seven occurrence counts_by_* tools, three map tile URL generators, and species search/suggest/match could cause misselection. Descriptions help, but boundaries are not always crisply distinct.
All tools follow a consistent gbif_{domain}_{action} snake_case convention. There is no mixing of camelCase or vague verb styles, making the naming predictable and readable.
58 tools is an extreme mismatch for a single server; many could be consolidated (e.g., facet counts, tile URL types). This bloats the surface and increases the selection burden on agents.
The surface covers all major GBIF domains: species taxonomy, occurrence search/download/counts, registry (datasets, organizations, networks, installations, collections, institutions, nodes), maps, literature, vocabularies, and validation. The read-only scope is appropriate for a data access API.
Maintenance
Related MCP Connectors
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Access Pollinations models and API capabilities through agent tools.
Connect AI clients to biomedical data and tools.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables interaction with the Atlas of Living Australia API to search and access 152+ million biodiversity records. Supports occurrence searches, spatial queries, bulk data downloads, and taxonomic data retrieval through natural language.MIT
- AlicenseBqualityBmaintenanceEnables AI assistants to query and retrieve biodiversity data from the Global Biodiversity Information Facility (GBIF), including species, occurrences, datasets, and literature.5851 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables querying biodiversity data from the Global Biodiversity Information Facility (GBIF) API v1, supporting species occurrence searches and other GBIF endpoints through natural language.11 npmMIT
- FlicenseNot gradedqualityBmaintenanceEnables AI clients to access virome datasets and external bioinformatics APIs through MCP tools, including Wikipedia, PubMed, NCBI Taxonomy, read-only SQL over S3 Parquet, pandas/Plotly analyses, and map visualizations, while keeping the client decoupled from data and business logic.-