Biodiversity MCP Server
Pricing
from $3.00 / 1,000 read operations
Biodiversity MCP Server
Biodiversity MCP server for Claude, ChatGPT, Cursor and other AI clients: 10 read-only tools over openly licensed GBIF occurrence records and citizen-science observations. Match scientific names, count records by country, list species seen in an area and cite datasets by DOI.
Pricing
from $3.00 / 1,000 read operations
Rating
0.0
(0)
Developer
MrBridge
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
Biodiversity MCP Server
This MCP server gives Claude, ChatGPT, Cursor and any other MCP client 10 read-only tools over two open biodiversity data sources. GBIF gathers occurrence records from museum collections and citizen science worldwide, plus a reference taxonomy for scientific names. iNaturalist adds observations by the public, with photo links. Your Apify token is the only credential you need.
Ask Claude which birds are observed most in the Camargue in May. It calls bio_species_in_area with the place name, the bird group and the month. The server resolves "Camargue" to an iNaturalist place, tells you which one it picked, and returns the species ranked by number of openly licensed observations, each with a link and an attribution block to keep. One follow-up question to bio_observation_seasonality shows in which months a given species peaks.
What this server exposes
Ten read-only tools over two open biodiversity sources, with no key or login needed. Seven call GBIF, the Global Biodiversity Information Facility: they match scientific names against the GBIF Backbone Taxonomy, search species by scientific or common name, return a taxon profile, search and fetch occurrence records (museum specimens, surveys, citizen science), count records by country, year, month, kind or dataset, and return the citation of a dataset. Three call the iNaturalist API: observations of a taxon or an area, the species observed in an area ranked by number of observations, and the month or week profile of a species. The iNaturalist tools accept plain taxon and place names and report the ids they used. Only openly licensed data comes back, and every answer carries an attribution block.
Tools
| Tool | What it answers | Billed event |
|---|---|---|
bio_match_name | Match a scientific name to the GBIF taxonomy | tool-read |
bio_search_species | Search species by scientific or common name | tool-read |
bio_get_species | Get a species profile from the GBIF taxonomy | tool-read |
bio_search_occurrences | Search GBIF occurrence records | tool-read |
bio_get_occurrence | Get one GBIF occurrence record with its citation | tool-read |
bio_occurrence_breakdown | Count GBIF records by country, year, month, kind or dataset | tool-read |
bio_get_dataset | Get a GBIF dataset with its citation and licence | tool-read |
bio_search_observations | Search iNaturalist observations | tool-read |
bio_species_in_area | List the species observed in an area | tool-read |
bio_observation_seasonality | Show when in the year a species is observed | tool-read |
bio_match_name: Match a scientific name to the GBIF taxonomy
Use this when you have a scientific name (possibly misspelt, with or without author) and need its accepted name, GBIF taxon key, rank, status (accepted or synonym) and classification, for example "Vitis vinifera L." or "Parus caeruleus". The key feeds bio_get_species, bio_search_occurrences and bio_occurrence_breakdown. Do not use for common names (bio_search_species) or for citizen-science observations (bio_search_observations). Parameters: name (required), kingdom (e.g. "Plantae", helps with homonyms), rank (e.g. "species"), strict (true matches the name only, never a higher rank), response_format ("detailed" adds the alternative candidates). Matches against the GBIF Backbone Taxonomy (CC BY 4.0). An unmatched name answers NOT_FOUND.
| Parameter | Type | Required | Example |
|---|---|---|---|
name | string | yes | "Vitis vinifera L." |
kingdom | string | no | "Plantae" |
rank | "kingdom" or "phylum" or "class" or "order" or "family" or "genus" or "species" or "subspecies" or "variety" or "form" | no | "species" |
strict | boolean | no | false |
response_format | "concise" or "detailed" | no | "concise" |
Returns { query, match, alternatives[], attribution }. Upstream: GBIF. Cache: reference (30 days). Read-only.
bio_search_species: Search species by scientific or common name
Use this when you need taxa whose scientific or common name matches a word, for example "grapevine", "oak" or "Quercus", with their GBIF taxon keys, ranks and status. Do not use for resolving one exact scientific name (bio_match_name is more precise) or for records of where a species was seen (bio_search_occurrences). Parameters: query (required), rank (e.g. "species"), status ("accepted", "synonym" or "doubtful"), limit (1 to 50, default 10), offset, response_format ("detailed" adds higher ranks, authorship, publication, descendants, habitats and up to 10 common names). Searches the GBIF Backbone Taxonomy (CC BY 4.0). No match answers NOT_FOUND.
| Parameter | Type | Required | Example |
|---|---|---|---|
query | string | yes | "grapevine" |
rank | "kingdom" or "phylum" or "class" or "order" or "family" or "genus" or "species" or "subspecies" or "variety" or "form" | no | "species" |
status | "accepted" or "synonym" or "doubtful" | no | "accepted" |
limit | integer | no | 10 |
offset | integer | no | 0 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { query, species[], pagination, attribution }. Upstream: GBIF. Cache: daily (1 day). Read-only.
bio_get_species: Get a species profile from the GBIF taxonomy
Use this when you have a GBIF taxon key and need the taxon profile: accepted name, authorship, rank, status, common name, full classification, parent, number of child taxa and how many openly licensed GBIF records exist, optionally with its synonyms. Do not use for finding the key from a name (bio_match_name, bio_search_species) or for the records themselves (bio_search_occurrences). Parameters: taxon_key (required, e.g. 5372392 for Vitis vinifera), include_synonyms (default false, true adds up to 20 synonyms), response_format ("detailed" adds remarks, publication and source). GBIF Backbone keys only: a key of another checklist is refused with the backbone key to use.
| Parameter | Type | Required | Example |
|---|---|---|---|
taxon_key | integer | yes | 5372392 |
include_synonyms | boolean | no | false |
response_format | "concise" or "detailed" | no | "concise" |
Returns { species, open_occurrence_count, synonyms[], synonyms_total, attribution }. Upstream: GBIF. Cache: daily (1 day). Read-only.
bio_search_occurrences: Search GBIF occurrence records
Use this when you need records of where and when a species (or any taxon) was observed or collected, with coordinates, dates, dataset and licence, for example the European bee-eater in France since 2020, or records within 10 km of a point. Do not use for counts per country, year or month (bio_occurrence_breakdown), one record with its citation (bio_get_occurrence), or recent citizen-science photos (bio_search_observations). Parameters: taxon_key or scientific_name, country (ISO codes, "FR" or "FR,BE"), year_from, year_to, month, latitude + longitude + radius_km, dataset_key, basis_of_record, with_coordinates_only (default true). At least one of taxon_key, scientific_name, country, the circle or dataset_key is required. limit (1 to 100, default 20, at most 30 in detailed mode), offset (offset + limit at most 100,000), response_format ("detailed" adds locality, identifiers, issues and open-licence media links). Only records under CC0 1.0 or CC BY 4.0 are returned. Each row keeps its dataset key and licence for citation.
| Parameter | Type | Required | Example |
|---|---|---|---|
taxon_key | integer | no | 5372392 |
scientific_name | string | no | "Merops apiaster" |
country | string | no | "FR" |
year_from | integer | no | 2020 |
year_to | integer | no | 2020 |
month | integer | no | 5 |
latitude | number | no | 43.53 |
longitude | number | no | 4.63 |
radius_km | number | no | 10 |
dataset_key | string | no | "4fa7b334-ce0d-4e88-aaae-2e0c138d049e" |
basis_of_record | "human_observation" or "machine_observation" or "observation" or "preserved_specimen" or "fossil_specimen" or "living_specimen" or "material_sample" or "material_citation" or "occurrence" | no | "human_observation" |
with_coordinates_only | boolean | no | true |
limit | integer | no | 20 |
offset | integer | no | 0 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { filters, total_open_records, occurrences[], datasets_on_page[], pagination, attribution }. Upstream: GBIF. Cache: daily (1 day). Read-only.
bio_get_occurrence: Get one GBIF occurrence record with its citation
Use this when you have a GBIF occurrence key (from bio_search_occurrences or a https://www.gbif.org/occurrence/ URL) and need the full record with its dataset, licence, DOI and a ready-made citation. Do not use for finding records (bio_search_occurrences) or iNaturalist observation ids (bio_search_observations). Parameters: occurrence_key (required, e.g. 1258202889), response_format ("detailed" adds locality, elevation, depth, catalogue codes, issues and open-licence media links). A record under CC BY-NC 4.0 or without a stated licence is refused, since this is a commercial service.
| Parameter | Type | Required | Example |
|---|---|---|---|
occurrence_key | integer | yes | 1258202889 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { occurrence, dataset, citation, note, attribution }. Upstream: GBIF. Cache: daily (1 day). Read-only.
bio_occurrence_breakdown: Count GBIF records by country, year, month, kind or dataset
Use this when you need counts rather than records: in which countries, years or months a taxon is recorded most, which kinds of record (observation, specimen) or which datasets hold the records, for example Vitis vinifera records per country. Do not use for the records themselves (bio_search_occurrences) or for species lists of an area (bio_species_in_area). Parameters: by (required: country, publishing_country, year, month, basis_of_record or dataset), the filters of bio_search_occurrences (taxon_key or scientific_name, country, year_from, year_to, month, latitude + longitude + radius_km, dataset_key, basis_of_record, with_coordinates_only, default false), top (1 to 100, default 20). Buckets come busiest first, except year and month which are listed in calendar order. Counts cover records under CC0 1.0 or CC BY 4.0 only.
| Parameter | Type | Required | Example |
|---|---|---|---|
by | "country" or "publishing_country" or "year" or "month" or "basis_of_record" or "dataset" | yes | "country" |
taxon_key | integer | no | 5372392 |
scientific_name | string | no | "Merops apiaster" |
country | string | no | "FR" |
year_from | integer | no | 2020 |
year_to | integer | no | 2020 |
month | integer | no | 5 |
latitude | number | no | 43.53 |
longitude | number | no | 4.63 |
radius_km | number | no | 10 |
dataset_key | string | no | "4fa7b334-ce0d-4e88-aaae-2e0c138d049e" |
basis_of_record | "human_observation" or "machine_observation" or "observation" or "preserved_specimen" or "fossil_specimen" or "living_specimen" or "material_sample" or "material_citation" or "occurrence" | no | "human_observation" |
with_coordinates_only | boolean | no | false |
top | integer | no | 20 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { by, filters, total_open_records, buckets[], other_count, note, attribution }. Upstream: GBIF. Cache: daily (1 day). Read-only.
bio_get_dataset: Get a GBIF dataset with its citation and licence
Use this when you need to cite a GBIF dataset or check its licence: title, DOI, licence, publisher, type, recommended citation text and a short description, from its key (the dataset_key of a record) or its DOI. Do not use for the records of the dataset (bio_search_occurrences with dataset_key) or for record counts per dataset (bio_occurrence_breakdown with by "dataset"). Parameters: dataset_key (UUID, e.g. "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c") or doi (e.g. "10.15468/39omei"), exactly one, response_format ("detailed" adds the full description, homepage and dates). For a dataset under CC BY-NC 4.0 or without a stated licence, only the citation is returned (records_served false), since its openly licensed records still need it.
| Parameter | Type | Required | Example |
|---|---|---|---|
dataset_key | string | no | "d7dddbf4-2cf0-4f39-9b2a-bb099caae36c" |
doi | string | no | "10.15468/39omei" |
response_format | "concise" or "detailed" | no | "concise" |
Returns { dataset, records_served, note, attribution }. Upstream: GBIF. Cache: daily (1 day). Read-only.
bio_search_observations: Search iNaturalist observations
Use this when you need citizen-science observations from iNaturalist: what was seen where and when, with coordinates, quality grade, observer credit and photo links, for example monarch butterflies around Yosemite this year, or to look up observations by id. Do not use for species lists of an area (bio_species_in_area), seasonality (bio_observation_seasonality) or museum and survey records (bio_search_occurrences). Parameters: taxon (name) or taxon_id, place (name) or place_id or latitude + longitude + radius_km (at most 200), observed_from, observed_to (YYYY-MM-DD), quality (default research), with_photos, sort (newest_observed default, oldest_observed, newest_added). At least a taxon or an area is required. observation_ids ("12345,67890", up to 30) looks up given observations and takes no other filter. limit (1 to 50, default 10, at most 20 in detailed mode), offset (offset + limit at most 10,000), response_format ("detailed" adds time, identification counts, status flags and up to 3 photo links). Only observations under CC0, CC BY or CC BY-SA are returned. Obscured observations show a blurred point and a month-only date.
| Parameter | Type | Required | Example |
|---|---|---|---|
taxon | string | no | "Danaus plexippus" |
taxon_id | integer | no | 48662 |
place | string | no | "Yosemite National Park" |
place_id | integer | no | 1 |
latitude | number | no | 43.53 |
longitude | number | no | 4.63 |
radius_km | number | no | 10 |
observed_from | string | no | "2024-05-01" |
observed_to | string | no | "2024-05-01" |
quality | "research" or "needs_id" or "casual" or "verifiable" or "any" | no | "research" |
with_photos | boolean | no | true |
sort | "newest_observed" or "oldest_observed" or "newest_added" | no | "newest_observed" |
observation_ids | string | no | "150000000" |
limit | integer | no | 10 |
offset | integer | no | 0 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { resolved, total_open_observations, observations[], withheld[], not_found_ids[], pagination, attribution }. Upstream: iNaturalist. Cache: hourly (1 hour). Read-only.
bio_species_in_area: List the species observed in an area
Use this when you need which species have been observed in a place or around a point, ranked by number of iNaturalist observations, optionally for one group, month or period, for example the birds of the Camargue or the plants seen near given coordinates in May. Do not use for the observations themselves (bio_search_observations), for one species' seasonality (bio_observation_seasonality) or for GBIF record counts by country (bio_occurrence_breakdown). Parameters: place (name) or place_id or latitude + longitude + radius_km (one required, radius at most 200), taxon or taxon_id (restricts to a group such as "Lepidoptera"), iconic_group (Aves, Mammalia, Reptilia, Amphibia, Actinopterygii, Insecta, Arachnida, Mollusca, Plantae, Fungi, Chromista, Protozoa or Animalia), month (1 to 12), observed_from, observed_to (YYYY-MM-DD), quality (default research), limit (1 to 100, default 25, at most 50 in detailed mode), offset, response_format ("detailed" adds establishment and an open-licence photo link). Counts cover observations under CC0, CC BY or CC BY-SA only.
| Parameter | Type | Required | Example |
|---|---|---|---|
place | string | no | "Yosemite National Park" |
place_id | integer | no | 1 |
latitude | number | no | 43.53 |
longitude | number | no | 4.63 |
radius_km | number | no | 10 |
taxon | string | no | "Danaus plexippus" |
taxon_id | integer | no | 48662 |
iconic_group | "Aves" or "Mammalia" or "Reptilia" or "Amphibia" or "Actinopterygii" or "Insecta" or "Arachnida" or "Mollusca" or "Plantae" or "Fungi" or "Chromista" or "Protozoa" or "Animalia" | no | "Aves" |
month | integer | no | 5 |
observed_from | string | no | "2024-05-01" |
observed_to | string | no | "2024-05-01" |
quality | "research" or "needs_id" or "casual" or "verifiable" or "any" | no | "research" |
limit | integer | no | 25 |
offset | integer | no | 0 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { resolved, total_species, species[], pagination, attribution }. Upstream: iNaturalist. Cache: daily (1 day). Read-only.
bio_observation_seasonality: Show when in the year a species is observed
Use this when you need the seasonality of a species or group: how its iNaturalist observations spread over the months or weeks of the year, and its peak, optionally in one area and over given years, for example when common swifts are seen in Portugal. Do not use for the list of observations (bio_search_observations) or for which species occur in an area (bio_species_in_area). Parameters: taxon (name) or taxon_id (one required), place (name) or place_id or latitude + longitude + radius_km (optional, radius at most 200), interval ("month" default or "week"), year_from, year_to, quality (default research), response_format ("detailed" adds cache information). Counts cover observations under CC0, CC BY or CC BY-SA only, by observation date.
| Parameter | Type | Required | Example |
|---|---|---|---|
taxon | string | no | "Danaus plexippus" |
taxon_id | integer | no | 48662 |
place | string | no | "Yosemite National Park" |
place_id | integer | no | 1 |
latitude | number | no | 43.53 |
longitude | number | no | 4.63 |
radius_km | number | no | 10 |
interval | "month" or "week" | no | "month" |
year_from | integer | no | 2020 |
year_to | integer | no | 2020 |
quality | "research" or "needs_id" or "casual" or "verifiable" or "any" | no | "research" |
response_format | "concise" or "detailed" | no | "concise" |
Returns { resolved, interval, total_open_observations, buckets[], peaks[], attribution }. Upstream: iNaturalist. Cache: daily (1 day). Read-only.
Connect
Endpoint (Streamable HTTP): https://mrbridge--biodiversity-mcp.apify.actor/mcp
Every client authenticates with your Apify API token, found in Apify Console > Settings > API & Integrations. Clients that support custom headers send it as Authorization: Bearer <token>. The others use the ?token= URL variant, which must be treated as a secret: keep it out of commits, screenshots and shared logs.
Claude Code
$claude mcp add --transport http biodiversity "https://mrbridge--biodiversity-mcp.apify.actor/mcp" --header "Authorization: Bearer ${APIFY_TOKEN}"
Cursor, VS Code and other JSON configurations
{"mcpServers": {"biodiversity": {"type": "http","url": "https://mrbridge--biodiversity-mcp.apify.actor/mcp","headers": {"Authorization": "Bearer ${APIFY_TOKEN}"}}}}
claude.ai and Claude Desktop
Add a custom connector with the URL https://mrbridge--biodiversity-mcp.apify.actor/mcp?token=YOUR_APIFY_TOKEN and no authentication. Prefilled link (replace the token placeholder before saving): add Biodiversity MCP Server to Claude.
ChatGPT (developer mode)
Settings > Apps > Create, URL https://mrbridge--biodiversity-mcp.apify.actor/mcp?token=YOUR_APIFY_TOKEN, authentication "No authentication". ChatGPT snapshots the tool list: after a server update, an admin has to click Refresh on the app.
OpenAI Responses API
{"type": "mcp","server_label": "biodiversity","server_url": "https://mrbridge--biodiversity-mcp.apify.actor/mcp","headers": {"Authorization": "Bearer YOUR_APIFY_TOKEN"},"require_approval": "never"}
Add allowed_tools to restrict the tool list. Tool calls must finish within about 60 seconds on this API, and every tool of this server answers in under 50 seconds.
Anthropic Messages API
{"mcp_servers": [{"type": "url","url": "https://mrbridge--biodiversity-mcp.apify.actor/mcp","name": "biodiversity","authorization_token": "YOUR_APIFY_TOKEN"}],"tools": [{"type": "mcp_toolset","mcp_server_name": "biodiversity"}]}
Send the beta header anthropic-beta: mcp-client-2025-11-20.
One-click OAuth alternative
https://mcp.apify.com/?tools=mrbridge/biodiversity-mcp connects through Apify OAuth without a token. It exposes the Actor as a single tool rather than the granular tools listed above.
Cost control
Each Standby run has a spending limit (maxTotalChargeUsd). When a call uses the last of it, the result is still returned, and later calls in that run answer CHARGE_LIMIT_REACHED until the limit is raised.
Why use this server
The two APIs behind it are open, but their records carry different licences, and a paid service may only pass some of them on. This server does that sorting before the answer reaches your assistant.
- Two sources, one connection. GBIF for occurrence records and the reference taxonomy, iNaturalist for recent observations by the public.
- Open licences only, filtered before the cache. GBIF records under CC0 1.0 or CC BY 4.0, iNaturalist observations and photos under CC0, CC BY or CC BY-SA. The trade-off is real: iNaturalist defaults to CC BY-NC, so many observations are left out and every count covers open records only.
- Citations you can paste. Dataset DOIs from
bio_get_dataset, a built citation for a single record frombio_get_occurrence. - Counts without a download. Records per country, year, month, kind of record or dataset, in one call.
- Names as plain text. The iNaturalist tools take "Camargue" or "Danaus plexippus" and report the place and taxon they matched, with up to four alternatives when the match is unsure.
- Nobody to track. No tool filters by observer, and obscured locations stay blurred with a month-only date.
Pricing (Pay-per-Event)
| Event | Charged when | Price |
|---|---|---|
apify-actor-start | run start (platform default) | see the Store page |
tool-read (primary event) | each successful read tool call | see the Store page |
Never charged: initialize, tools/list, pings, readiness probes, and any call that ends in an error (invalid input, not found, upstream failure, timeout, spending limit).
Platform usage comes on top of these events. This server runs in Apify Standby mode, and you also pay the platform usage of your own Standby run, billed to your Apify account like any other run: the memory set for the Standby run, for as long as the server is up, idle time included, until the run stops at its idle timeout. The Apify pay-per-event documentation says so: "For runs in Standby mode, users always pay the platform usage costs in addition to the event charges."
Limits, caveats and attribution
- Attribution. Every answer has an
attributionblock with the provider, a source line with the access date, the terms URL and the notices below. Keep it when you reuse the data. - Open licences only. GBIF records and datasets are served when they are under CC0 1.0 or CC BY 4.0. Records under CC BY-NC 4.0 or without a stated licence are left out, and asking for one by key returns an explanation instead. A dataset under CC BY-NC 4.0 gives its citation only, since its records that carry their own open licence still need it. iNaturalist observations and photos are served under CC0, CC BY or CC BY-SA only. The default iNaturalist licence is CC BY-NC, so many observations are missing, and every count covers open records only.
- Citing GBIF data. Each record keeps its
dataset_key, licence and rights holder.bio_get_datasetgives the recommended citation with its DOI, andbio_get_occurrencebuilds the citation of one record. For a set of records gathered through search, GBIF recommends a derived dataset (https://www.gbif.org/derived-dataset/about) to get a single DOI. - Taxonomy. Names, keys and classifications come from the GBIF Backbone Taxonomy (CC BY 4.0, https://doi.org/10.15468/39omei). Keys of other checklists are refused with the backbone key to use. IUCN Red List categories are not included, since the IUCN does not allow their commercial reuse without permission.
- Location privacy. Private iNaturalist locations are never returned. Obscured observations (by the observer or because the species is sensitive) show a random point inside a 0.2 by 0.2 degree cell with its uncertainty, a date to the month and no place text or image link, and they are left out of searches whose date range is not made of whole months. GBIF publishers may generalise the coordinates of sensitive species, which the
generalization_notefield reports, and such records keep their date to the month only. Observers appear under their iNaturalist login only, and no tool filters by person. - Photos. Photo links point to iNaturalist and to the open-data bucket it uses for openly licensed photos. This server never stores or re-hosts an image.
- Rate limits. iNaturalist asks for at most 60 requests per minute and 10,000 per day. This server keeps to half of that per instance and caches answers (observations one hour, counts and seasonality one day, name and place lookups 30 days), so heavy use can still meet
UPSTREAM_RATE_LIMITED. A name or a place given as text costs one extra request the first time. GBIF sets no fixed limit and may slow down under load. Its answers are cached for a day, taxonomy for 30 days. - Paging. GBIF pages through the first 100,000 records of a search and iNaturalist through the first 10,000. Narrow the filters to see more. A page of unusually long records can be shortened, and the answer then says so and gives the next offset.
- Accuracy. Neither source guarantees the accuracy of its data. Identifications on iNaturalist are community opinions, and
qualitydefaults to research grade.
Data terms
By using this server you agree to use the data it returns in line with the terms of each source, and to pass the same obligations on to anyone you share it with.
- GBIF: Data user agreement and citation guidelines. Keep the dataset key of each record, cite the data publishers (with the DOI of the dataset where there is one) and respect the licence of each dataset.
- iNaturalist: Terms of Use. Credit each observer and photographer as the licence of the record asks, share adaptations of CC BY-SA records under the same licence, and do not use iNaturalist data to train AI or machine-learning models for commercial purposes (section 7).
This server is not affiliated with or endorsed by GBIF or iNaturalist. The fee pays for the service (hosting, caching, normalisation), not for a licence on the data.
Use cases
- Check a name before you write. A student gives "Parus caeruleus" to
bio_match_nameand learns whether the name is accepted or a synonym, with the accepted name, its GBIF key and the full classification. - Plan a field outing. Which birds turn up in the Camargue in May, and when do common swifts reach Portugal?
bio_species_in_areaandbio_observation_seasonalityanswer both, one with a ranked list, the other with a month-by-month profile and its peak. - Summarize where a species is recorded. For a report on the grapevine,
bio_occurrence_breakdowncounts Vitis vinifera records per country or per year.bio_get_datasetthen gives the citation of the datasets behind the biggest buckets. - Back a local news story with records. A journalist asks for records within 10 km of a point. Each one comes back dated and located, with its licence and dataset key so it can be credited.
- Prepare a desk study. A consultant lists the species observed around a site before fieldwork. Treat it as a starting point drawn from open records, not as a survey: a species missing from the list may still be there.
- Teach seasonality. A teacher shows a class when monarch butterflies are observed around Yosemite, month by month or week by week.
FAQ
How much does a call cost?
You pay per successful call. Each tool answer that succeeds is one tool-read event at $0.005, and Apify charges its apify-actor-start event when your Standby run starts, at the platform default price. For 100 successful calls, the events come to $0.50 plus that start event. These are the FREE plan prices: Apify plan discounts lower them, and the Pricing tab shows the price on your plan.
On top of the events, Apify bills the platform usage of your own Standby run at your plan's rate, as it does for every pay-per-event Actor in Standby mode (see the Pricing section above). That is the memory set for the run, 256 MB by default, for as long as the server is up, idle time included, until it stops after about 5 minutes without a call. An hour with the server up at 256 MB uses 0.25 compute units.
Calls that end in an error are never charged, and neither are protocol messages such as tools/list or pings. Set maxTotalChargeUsd to cap what the events of one run can cost. Current prices by Apify plan are on the Pricing tab.
Why are some records or observations missing?
Only openly licensed data comes back: GBIF records under CC0 1.0 or CC BY 4.0, and iNaturalist observations under CC0, CC BY or CC BY-SA. iNaturalist's default licence is CC BY-NC, so many of its observations are left out, and every count covers open records only. IUCN Red List categories are not included either, because the IUCN does not allow their commercial reuse without written permission.
Can I search by common name?
Partly. bio_search_species does match common names, but the taxonomy search ranks scientific-name hits first: "grapevine" returns virus names such as "Grapevine fabavirus" before Vitis vinifera. For a reliable answer, give the scientific name to bio_match_name. The iNaturalist tools take a taxon name as text and say which taxon they matched, so read that line before trusting the result.
What must I credit when I reuse the data?
Keep the attribution block that comes with every answer. For GBIF data, cite the data publishers with the dataset DOI. A GBIF derived dataset (https://www.gbif.org/derived-dataset/about) gives you one DOI for a whole set of search results. For iNaturalist data, credit each observer and photographer as the licence of the record asks, and share adaptations of CC BY-SA records under the same licence. The iNaturalist terms also forbid using its data to train AI or machine-learning models for commercial purposes. The full rules sit in the Data terms section above.
Does it show who observed what, or exact locations?
No tool filters by person, so the server cannot follow one observer. Observers appear under their iNaturalist login, which their credit requires, and photo credits stay as the photographer wrote them. Private iNaturalist locations are never returned. An obscured observation shows a random point inside a cell of about 0.2 by 0.2 degrees and a date to the month only. GBIF records whose publisher generalized the location also keep their date to the month.
Can it identify a species from a photo, or tell me whether a plant is safe?
No. The server reads names, records and observations. It identifies nothing from an image, and it never tells you whether a plant is edible or an animal dangerous. Identifications on iNaturalist are community opinions, and neither source guarantees its data, so treat each answer as a lead to check.
Why is the first call slow?
That is the cold start of your Standby run: the first request of the platform test took 9.7 seconds, most of it spent starting the run. GBIF calls then answered in 0.7 to 1.8 seconds with an empty cache. iNaturalist calls that resolve a taxon and a place by name took 3 to 6 seconds, about 2 of them being the server's own pacing, which keeps it under the iNaturalist rate limit. A repeated question is served from the cache and comes back faster.
Is this server affiliated with GBIF or iNaturalist?
No. Both are cited as data sources only, and neither endorses this server. The fee pays for running the service, not for a licence on the data.
Your feedback
Found a bug, or a question the tools cannot answer yet? Open an issue on the Issues tab. More MCP servers and data studies from the same team: mr-bridge.com.
Changelog
- 0.1.3: Output, dataset and key-value store schemas, as Apify asks for publication: the Output tab of a run started from the Console shows the connection details and one row per tool.
- 0.1.2: the Input tab shows the endpoint and how to connect an AI client, and a run started from the Console outputs the connection details and the tool list
- 0.1.1: pricing events tool-read and tool-action
- 0.1.0: initial build (private, unpublished)